⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 165lcd.c

📁 51单片机控制LCD 按键 已经在Proteus下仿真通过
💻 C
字号:
/************************************************************
********** 任 意 波 形 的 单 片 机 控 制 部 分***************
********** 制作: 董文岳   单位:汕头大学  03 通信 **********
************************************************************/

#include <reg51.h>
#include <absacc.h>
#include <intrins.h>
#include"LCD1602.h"
#include"jianpan.h"
void keytask1();
void keytask2();
void keytask3();
void task1();
void task2();
void task3();
void task4();
void pinmo();
//void scankey();
void IntToStr(unsigned char t, unsigned char *str, unsigned char n);
void Delay1ms(unsigned int count);
unsigned char TempBuffer[10]={0,1,2,3,4,5,6,7,8,9};
sbit p1_0=P1^0;
sbit p1_1=P1^1;
sbit p1_2=P1^2;
sbit p1_3=P1^3;
sbit p1_4=P1^4;
sbit p1_5=P1^5;
sbit p1_6=P1^6;
sbit p1_7=P1^7;
sbit P2_7=P2^7;
/************************************
*****  定  义  外  部  变  量  ******
************************************/
unsigned int zhengxian_flag=0;
unsigned int fan_flag=0;
unsigned int sanjiao_flag=0;
unsigned int any_flag=0;//scankey_flag=0,keytask_flag=0;
unsigned int t,n=0,m=0,b=0,p=0,f=0,x=0,count=0,key1,key2;//字的控制:p频率字,f幅度字,x相位字(显示用)
/***********************************************************
*******************     主  函  数     *********************
***********************************************************/
void main()
{do{
	pinmo();
	jian();
   }while(a[0]==1);

 p1_0=1;
 p1_5=0;
 p1_5=1;//164的初始化

 while(1)	
 {	jian();//键盘扫描

 }
}/*
 	Delay1ms(700);
	while(a[0]==0)//  p频率控制字的 输入控制	
	{			
		jian();	//键盘扫描  
		LCD_Initial();
		GotoXY(14,1);
		Print("Hz");
		task1();
	}
	while(a[1]==0)//相位字
	{	jian();	//键盘扫描
	   	LCD_Initial();
		GotoXY(7,1);
		Print("C");
		task2();
	}
	while(a[2]==0)
	{	jian();	//键盘扫描
    	LCD_Initial();
		GotoXY(14,0);
		Print("mV");
		task3();
	}
	task4();//波形选择
	if(a[9]==0)//a[9]存了键值,按下就变为0
    {	 
		keytask1();
	
	}
 	if(a[10]==0)//a[9]存了键值,按下就变为0
    {	 
		keytask2();
	
	}
	if(a[11]==0)//a[9]存了键值,按下就变为0
    {	 
		keytask3();
	
	}
 }
}


//频率字控制
void task1()
{		jian();
		if((a[3]==0)&&(p<257))
		{	IntToStr(p++,&TempBuffer[0],3);
			GotoXY(8,1);
			Print(&TempBuffer[0]);
			Delay1ms(700);
		}
		if((a[4]==0)&&(p<256))
		{  
			IntToStr(p--,&TempBuffer[0],3);
			GotoXY(8,1);
			Print(&TempBuffer[0]);
			Delay1ms(700);
		}
		if(a[5]==0)
		{ 	GotoXY(13,1);
			Print(" ");
			p=p;;
		}
		if(a[6]==0)
	 	{ 	GotoXY(13,1);
			Print("K");
	  		p=p<<10;
	 	}
	 	if(a[7]==0)
	  	{ 	GotoXY(13,1);
			Print("M");
			p=p<<20;
	  	}
		if(a[8]==0)
		{  LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);//复位 频率字全部清零
		   p=0;p1_5=0;
		   Delay1ms(7000);
		}n=p;
		
}
	//相位字的控制
void task2()
{	
		jian();
		if((a[3]==0)&&(x<257))
		{	IntToStr(x++,&TempBuffer[0],3);
			GotoXY(0,1);
			Print(&TempBuffer[0]);
			Delay1ms(700);
		}
		if((a[4]==0)&&(x<256))
		{	IntToStr(x--,&TempBuffer[0],3);
			GotoXY(0,1);
			Print(&TempBuffer[0]);
			Delay1ms(700);
		}
		if(a[8]==0)
		{  LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);//复位 相位字全部清零
		   Delay1ms(7000);p1_5=0;x=0;
		}m=x;
}
	 //幅度字的控制
void task3()
{	
		jian();	//键盘扫描
 		if(a[5]==0)
		{	GotoXY(15,0);
			Print("V");
			f=f<<10;
		}
		if((a[3]==0)&&(f<257))
		{	IntToStr(f++,&TempBuffer[0],3);
			GotoXY(9,0);
			Print(&TempBuffer[0]);
			Delay1ms(700);
		}
		if((a[4]==0)&&(f<256))
		{	IntToStr(f--,&TempBuffer[0],3);
			GotoXY(9,0);
			Print(&TempBuffer[0]);
			Delay1ms(700);
		}
		if(a[8]==0)
		{  LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);//复位 幅度字全部清零
		   Delay1ms(7000);
		   f=0;p1_5=0;
		}b=f;
}
//波形选择控制
void task4()
{
	  jian();	//键盘扫描
      LCD_Initial();
	  if(a[12]==0)
	  { GotoXY(0,0);
		Print("zhengxian");
		zhengxian_flag=1;
	  }
      if(a[13]==0)
	  { GotoXY(0,0);
		Print("sanjianbo");
		sanjiao_flag=1;
	  }
	  if(a[14]==0)
	  {
		GotoXY(0,0);
		Print("fangbo   ");
		fan_flag=1;
	  }
	  if(a[15]==0)
	  { 
		GotoXY(0,0);
		Print("renyibo   ");
		any_flag=1;
	  }
}

void keytask1()
{ 	//	P2_7=0;
		p1_0=1;
		p1_5=0;
		p1_5=1;
		p1_4=0;
		
		for(t=0;t<8;t++)
		{	
			if(n&0x01==1) 
			{	p1_4=0;
				p1_1=1;
				Delay1ms(800);
				p1_4=1;
			}
			else 
			{	p1_4=0;
				p1_1=0;Delay1ms(800);
				p1_4=1;
			}
			n=n>>1;
		}
		n=n<<8;
}
void keytask2()
{ 	//	P2_7=0;
		p1_0=1;
		p1_5=0;
		p1_5=1;
		p1_4=0;

		for(t=0;t<8;t++)
		{	
			if(m&0x01==1) 
			{	p1_4=0;
				p1_2=1;
				Delay1ms(800);
				p1_4=1;
			}
			else 
			{	p1_4=0;
				p1_2=0;Delay1ms(800);
				p1_4=1;
			}
			m=m>>1;
		}		
		m=m<<8;
}
void keytask3()
{ 	//	P2_7=0;
		p1_0=1;
		p1_5=0;
		p1_5=1;
		p1_4=0;

		for(t=0;t<8;t++)
		{	
			if(b&0x01==1) 
			{	p1_4=0;
				p1_3=1;
				Delay1ms(800);
				p1_4=1;
			}
			else 
			{	p1_4=0;
				p1_3=0;Delay1ms(800);
				p1_4=1;
			}
			b=b>>1;
		}
		b=b<<8;		
	//	p1_0=0;
}
void IntToStr(unsigned char t, unsigned char *str, unsigned char n) 
{
	unsigned char a[3]; char i, j;                                 	
	//a[0]=(t/10000)%10;         //取得整数值到数组         	
	//a[1]=(t/1000)%10;                                     	
	a[0]=(t/100)%10;                                      	
	a[1]=(t/10)%10;                                       	
	a[2]=(t/1)%10;                                        	
                                                      
	for(i=0; i<3; i++)         //转成ASCII码              	
		a[i]=a[i]+'0';                                    	
	for(i=0; a[i]=='0' && i<=2; i++);                     	
	for(j=3-n; j<i; j++)       //填充空格                 	
		{ *str=' ';  str++; }                             	
	for(; i<3; i++)                                       	
		{ *str=a[i]; str++; }  //加入有效的数字           	
	*str='\0'; 
} 

void Delay1ms(unsigned int count)
{
	unsigned int i,j;
	for(i=0;i<count;i++)
	for(j=0;j<120;j++);
}  */
void pinmo()
{	unsigned int i;
	for(i=0;i<16;i++)
	{	LCD_Initial();
		GotoXY(i+1,0);
		Print("Welcome ^_^");
		GotoXY(i+1,1);
		Print("Make by 03TE");
		GotoXY(i,0);
		Print(" ");
		GotoXY(i,1);
		Print(" ");
		Delay1ms(300);
	}
}


   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -