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

📄 键盘及显示各功能模块.c

📁 这七个程序都是本人为51系列单片机开发的应用程序
💻 C
📖 第 1 页 / 共 3 页
字号:
	
		uni_gatevalue.pchar[0]=data10[1];
		uni_gatevalue.pchar[1]=data10[2];
		*gatevalue=uni_gatevalue.intdata;
	}  	  	





	/*==================================================================*/	
		/*  各功能函数  */
/*==================================================================*/	
/*   时间设置窗口  */
	unsigned char LCD_Time_Form()
	{
		 unsigned char i,j,key,cur_pst,hour,munite,second;
LCD_Time_Form_St:	
		EA=0;
		LCD_Wr_Cmd(0x01);	/*清屏*/
		LCD_Set_DispPositon(1,3);
		for(i=0;i<8;i++)
		{
			LCD_Wr_Data(Time_Lable[i]);  /*时间标题*/
		}
		Read_Time(&hour,&munite,&second);
		
		LCD_Set_DispPositon(3,2);		/*时*/
		LCD_Wr_Data(0x30+((hour>>4)&0x0F));
		LCD_Wr_Data(0x30+(hour&0x0F));
		
		LCD_Set_DispPositon(3,3);
		LCD_Wr_Data(Hour_Lable[0]);
		LCD_Wr_Data(Hour_Lable[1]);		/*时标签*/
		
		LCD_Set_DispPositon(3,4);		/*分*/
		LCD_Wr_Data(0x30+((munite>>4)&0x0F));
		LCD_Wr_Data(0x30+(munite&0x0F));

		LCD_Set_DispPositon(3,5);
		LCD_Wr_Data(Munite_Lable[0]);
		LCD_Wr_Data(Munite_Lable[1]);		/*分标签*/
		
		LCD_Set_DispPositon(3,6);		/*秒*/
		LCD_Wr_Data(0x30+((second>>4)&0x0F));
		LCD_Wr_Data(0x30+(second&0x0F));
		
		LCD_Set_DispPositon(3,7);
		LCD_Wr_Data(Second_Lable[0]);
		LCD_Wr_Data(Second_Lable[1]);		/*秒标签*/
		
		j=0;		/*0-还未改前半字符,1-改了前半字符,2-改了后半字符*/
		i=1;		/*按方向键的次数(循环)*/
		LCD_Wr_Cmd(0x0F);		/*游标显示*/
LCD_Time_Formkey_scan:		
		switch(i)
		{
			case 1:
				cur_pst=2;
				break;
			case 2:
				cur_pst=4;
				break;
			case 3:
				cur_pst=6;
				break;
			//default:
				//cur_pst=2;
				//break;
		}
		if(j==0)LCD_Set_DispPositon(3,cur_pst);		          
		
		while(!Key_Press_Ack());		/*扫描键盘*/
		key=Key_Value();
		while(Key_Press_Ack());		/*判断是否起键*/	
		switch(key)
		{
			case Key_Up:
				EA=1;
				return Key_Up;
				
			case Key_Down:
				EA=1;
				return Key_Down;
			
			case Key_Fuc:
				EA=1;
				return Key_Fuc;
			
			case Key_Ent:
				if(hour>0x23||munite>0x59||second>0x59)
				{
					LCD_Wr_Cmd(0x0C);
					goto LCD_Time_Form_St;
				}
				Set_Time(hour,munite,second);
				EA=1;
				return Key_Down;
			
			case Key_Left:
				j=0;
				i--;
				if(i==0) i=3;
				goto LCD_Time_Formkey_scan;
			case Key_Right:
				j=0;
				i++;
				if(i==4)i=1;
				goto LCD_Time_Formkey_scan;
					
			default:		/*数字*/
				LCD_Wr_Data(0x30+key);
				j++;
				switch(cur_pst)
				{
					case 2:
						if(j==1)hour=(hour&0x0F)+key*16;
						else if(j==2)hour=(hour&0x0F0)+key;
						break;
					case 4:
						if(j==1)munite=(munite&0x0F)+key*16;
						else if(j==2)munite=(munite&0x0F0)+key;
						break;
					case 6:
						if(j==1)second=(second&0x0F)+key*16;
						else if(j==2)second=(second&0x0F0)+key;
						break;
				}
				if(j==2)
				{
					j=0;
					i++;
					if(i==4) i=1;
				}
				goto LCD_Time_Formkey_scan;
		}
	}
	
	
/*   日期设置窗口  */
	unsigned char LCD_Date_Form()
	{
		unsigned char i,j,key,cur_pst,century,year,month,date;
		
		EA=0;
LCD_Date_Form_St:	
		LCD_Wr_Cmd(0x01);	/*清屏*/	
		LCD_Set_DispPositon(1,3);
		for(i=0;i<8;i++)
		{
			LCD_Wr_Data(Date_Lable[i]);  /*日期标题*/
		}
		Read_Date(&century,&year,&month,&date);
		
		LCD_Set_DispPositon(3,1);		/*世纪 年*/
		LCD_Wr_Data(0x30+((century>>4)&0x0F));
		LCD_Wr_Data(0x30+(century&0x0F));
		LCD_Wr_Data(0x30+((year>>4)&0x0F));	
		LCD_Wr_Data(0x30+(year&0x0F));
		
		LCD_Set_DispPositon(3,3);
		LCD_Wr_Data(Year_Lable[0]);
		LCD_Wr_Data(Year_Lable[1]);		/*年标签*/
		
		LCD_Set_DispPositon(3,4);		/*月*/
		LCD_Wr_Data(0x30+((month>>4)&0x0F));
		LCD_Wr_Data(0x30+(month&0x0F));
		
		LCD_Set_DispPositon(3,5);
		LCD_Wr_Data(Month_Lable[0]);
		LCD_Wr_Data(Month_Lable[1]);		/*月标签*/
		
		LCD_Set_DispPositon(3,6);		/*日*/
		LCD_Wr_Data(0x30+((date>>4)&0x0F));
		LCD_Wr_Data(0x30+(date&0x0F));

		LCD_Set_DispPositon(3,7);
		LCD_Wr_Data(Day_Lable[0]);
		LCD_Wr_Data(Day_Lable[1]);		/*日标签*/
		
		j=0;		/*0-还未改前半字符,1-改了前半字符,2-改了后半字符*/
		i=1;		/*按方向键的次数(循环)*/
		LCD_Wr_Cmd(0x0F);		/*游标显示*/
LCD_Date_Formkey_scan:		
		switch(i)
		{
			case 1:
				cur_pst=1;
				break;
			case 2:
				cur_pst=2;
				break;
			case 3:
				cur_pst=4;
				break;
			case 4:
				cur_pst=6;
				break;	
			default:
				cur_pst=1;
				break;
		}
		if(j==0)LCD_Set_DispPositon(3,cur_pst);		          
		
		while(!Key_Press_Ack());		/*扫描键盘*/
		key=Key_Value();
		while(Key_Press_Ack());		/*判断是否起键*/	
		switch(key)
		{
			case Key_Up:
				EA=1;
				return Key_Up;
				
			case Key_Down:
				EA=1;
				return Key_Down;
			
			case Key_Fuc:
				EA=1;
				return Key_Fuc;
			
			case Key_Ent:
				if(century<0x20||month>0x12||date>0x31)
				{
					LCD_Wr_Cmd(0x0C);
				 	goto LCD_Date_Form_St;
				}
				Set_Date(century,year,month,date);
				EA=1;
				return Key_Down;
			
			case Key_Left:
				j=0;
				i--;
				if(i==0) i=4;
				goto LCD_Date_Formkey_scan;
			case Key_Right:
				j=0;
				i++;
				if(i==5)i=1;
				goto LCD_Date_Formkey_scan;
					
			default:		/*数字*/
				LCD_Wr_Data(0x30+key);
				j++;
				switch(cur_pst)
				{
					case 1:
						if(j==1)century=(century&0x0F)+key*16;
						else if(j==2)century=(century&0x0F0)+key;
						break;
					
					case 2:
						if(j==1)year=(year&0x0F)+key*16;
						else if(j==2)year=(year&0x0F0)+key;
						break;
					case 4:
						if(j==1)month=(month&0x0F)+key*16;
						else if(j==2)month=(month&0x0F0)+key;
						break;
					case 6:
						if(j==1)date=(date&0x0F)+key*16;
						else if(j==2)date=(date&0x0F0)+key;
						break;
				}
				if(j==2)
				{
					j=0;
					i++;
					if(i==5) i=1;
				}
				goto LCD_Date_Formkey_scan;
		}
	}
	
	
/*   距离设置窗口  */
	unsigned char LCD_Distance_Form()
	{
		unsigned char i,j,disbit1,disbit2,disbit3,temp,key,cur_pst,distancevalue;
		EA=0;
LCD_Distance_Form_St:
		LCD_Wr_Cmd(0x01);	/*清屏*/		
		LCD_Set_DispPositon(1,3);
		for(i=0;i<8;i++)
		{
			LCD_Wr_Data(Distance_Lable[i]);  /*距离标题*/
		}
		Read_Distance(&distancevalue);
		
		LCD_Set_DispPositon(3,4);		/*距离*/
		disbit1=distancevalue/100;
		LCD_Wr_Data(0x30+disbit1);
		
		temp=distancevalue%100;	/*取余数*/
		disbit2=temp/10;
		LCD_Wr_Data(0x30+disbit2);
		
		disbit3=temp%10;	
		LCD_Wr_Data(0x30+disbit3);
		
		LCD_Set_DispPositon(3,6);
		LCD_Wr_Data(CMeter_Lable[0]);
		LCD_Wr_Data(CMeter_Lable[1]);		/*CM标签*/
		
		j=0;		/*0-还未改前半字符,1-改了前半字符,2-改了后半字符*/
		i=1;		/*按方向键的次数(循环)*/
		LCD_Wr_Cmd(0x0F);		/*游标显示*/
LCD_Distance_Formkey_scan:		
		switch(i)
		{
			case 1:
				cur_pst=4;
				break;
			case 2:
				cur_pst=5;
				break;
			default:
				cur_pst=4;
				break;
		}
		if(j==0)LCD_Set_DispPositon(3,cur_pst);		          
		
		while(!Key_Press_Ack());		/*扫描键盘*/
		key=Key_Value();
		while(Key_Press_Ack());		/*判断是否起键*/	
		switch(key)
		{
			case Key_Up:
				EA=1;
				return Key_Up;
				
			case Key_Down:
				EA=1;
				return Key_Down;
			
			case Key_Fuc:
				EA=1;
				return Key_Fuc;
			
			case Key_Ent:
				
				if((disbit1*100+disbit2*10+disbit3)>255) 
				{
					LCD_Wr_Cmd(0x0C);
					goto LCD_Distance_Form_St;
				}
				distancevalue=disbit1*100+disbit2*10+disbit3;
				Set_Distance(distancevalue);
				EA=1;
				return Key_Down;
			
			case Key_Left:
				j=0;
				i--;
				if(i==0) i=2;
				goto LCD_Distance_Formkey_scan;
			case Key_Right:
				j=0;
				i++;
				if(i==3)i=1;
				goto LCD_Distance_Formkey_scan;
					
			default:		/*数字*/
				LCD_Wr_Data(0x30+key);
				j++;
				if((j==1)&&(i==2))
				{
					LCD_Wr_Data(0x20);/*空写一个键*/
					j++;
				}	
				switch(cur_pst)
				{
					case 4:
						if(j==1)disbit1=key;
						else if(j==2)disbit2=key;
						break;
					case 5:
						if(j==2)disbit3=key;
						
						break;
				}
				if(j==2)
				{
					j=0;
					i++;
					if(i==3) i=1;
				}
				goto LCD_Distance_Formkey_scan;
		}

	}
	
	
	
/*   灵敏度设置窗口  */
	unsigned char LCD_Scal_Form()
	{
		 unsigned char i,j,Int_Bit[4],Deci_Bit[2],key,cur_pst;
		 unsigned int temp,IntPart,DeciPart;
		
		EA=0;
		LCD_Wr_Cmd(0x01);	/*清屏*/
		LCD_Set_DispPositon(1,3);
		for(i=0;i<10;i++)
		{
			LCD_Wr_Data(Scal_Lable[i]);  /*灵敏度标题*/
		}
		Read_Scal(&IntPart, &DeciPart);
		
		LCD_Set_DispPositon(3,3);		/*灵敏度*/
		LCD_Wr_Data(0x30);
		LCD_Wr_Data(0x2E);		/*0.*/
		
		
		Int_Bit[0]=IntPart/1000;
		temp=IntPart%1000;
		Int_Bit[1]=temp/100;
		temp=temp%100;
		Int_Bit[2]=temp/10;
		temp=temp%10;
		Int_Bit[3]=temp;
		for(i=0;i<4;i++)LCD_Wr_Data(0x30+Int_Bit[i]);
		
		Deci_Bit[0]=DeciPart/10;
		temp=DeciPart%10;
		Deci_Bit[1]=temp;
		for(i=0;i<2;i++)LCD_Wr_Data(0x30+Deci_Bit[i]);

		LCD_Set_DispPositon(4,3);
		for(i=0;i<10;i++)
		{
			LCD_Wr_Data(Scal_Unit_Lable[i]);	/*公斤/单位*/
		}
		
		j=0;		/*0-还未改前半字符,1-改了前半字符,2-改了后半字符*/
		i=1;		/*按方向键的次数(循环)*/
		LCD_Wr_Cmd(0x0F);		/*游标显示*/
LCD_Scal_Formkey_scan:		
		switch(i)
		{
			case 1:
				cur_pst=4;
				break;
			case 2:
				cur_pst=5;
				break;
			case 3:
				cur_pst=6;
				break;
			default:
				cur_pst=4;
				break;
		}
		if(j==0)LCD_Set_DispPositon(3,cur_pst);		          
		
		while(!Key_Press_Ack());		/*扫描键盘*/
		key=Key_Value();
		while(Key_Press_Ack());		/*判断是否起键*/	
		switch(key)
		{
			case Key_Up:
				EA=1;
				return Key_Up;
				
			case Key_Down:
				EA=1;
				return Key_Down;
			
			case Key_Fuc:
				EA=1;
				return Key_Fuc;
			
			case Key_Ent:
				IntPart=Int_Bit[0]*1000+Int_Bit[1]*100+Int_Bit[2]*10+Int_Bit[3];
				DeciPart=Deci_Bit[0]*10+Deci_Bit[1];
				Set_Scal(IntPart, DeciPart);
				EA=1;
				return Key_Down;
			
			case Key_Left:
				j=0;
				i--;
				if(i==0) i=3;
				goto LCD_Scal_Formkey_scan;
			case Key_Right:
				j=0;
				i++;
				if(i==4)i=1;
				goto LCD_Scal_Formkey_scan;
					
			default:		/*数字*/
				LCD_Wr_Data(0x30+key);
				j++;
				switch(cur_pst)
				{
					case 4:
						if(j==1)Int_Bit[0]=key;
						else if(j==2)Int_Bit[1]=key;
						break;
					case 5:
						if(j==1)Int_Bit[2]=key;
						else if(j==2)Int_Bit[3]=key;
						break;
					case 6:
						if(j==1)Deci_Bit[0]=key;
						else if(j==2)Deci_Bit[1]=key;
						break;
				}
				if(j==2)
				{
					j=0;
					i++;
					if(i==4) i=1;
				}
				goto LCD_Scal_Formkey_scan;
		}
	}	

	
/*   补偿值设置窗口  */
	unsigned char LCD_Offset_Form()
	{
		 unsigned char i,offset_Bit[5],key;
		 unsigned int offset;
		

⌨️ 快捷键说明

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