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

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

📁 这七个程序都是本人为51系列单片机开发的应用程序
💻 C
📖 第 1 页 / 共 3 页
字号:
//LCD_Offset_Form_St:	
		EA=0;
		LCD_Wr_Cmd(0x01);	/*清屏*/		
		LCD_Set_DispPositon(1,2);
		for(i=0;i<10;i++)
		{
			LCD_Wr_Data(Offset_Lable[i]);  /*补偿值设置*/
		}
		Read_Offset(&offset);
		
		LCD_Set_DispPositon(2,3);	
		//LCD_Wr_Data(symble);		/*+ -*/
		offset_Bit[0]=offset/10000;
		offset=offset%10000;
		offset_Bit[1]=offset/1000;
		offset=offset%1000;
		offset_Bit[2]=offset/100;
		offset=offset%100;
		offset_Bit[3]=offset/10;
		offset=offset%10;
		offset_Bit[4]=offset;
		for(i=0;i<5;i++)LCD_Wr_Data(0x30+offset_Bit[i]);
		
		LCD_Set_DispPositon(3,2);
		for(i=0;i<12;i++)
		{
			LCD_Wr_Data(Offset_CLRzero_Lable[i]);	/*自动清零吗?*/
		}

LCD_Offset_Formkey_scan:		
				
		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:
				
				Set_Offset(); //自动清零
				delay_Nms(250);
				delay_Nms(250);
				EA=1;
				return Key_Down;
			
			
			default:		/*非功能、翻页、回车键*/
				
				goto LCD_Offset_Formkey_scan;
		}
	}
	
	
	
/*   上衡阈值设置窗口  最大值为9999*/
	unsigned char LCD_Upgate_Form()
	{
		 unsigned char i,j,gate_Bit[4],key,cur_pst;
		 unsigned int gatevalue;
		
LCD_Upgate_Form_St:	
		EA=0;		
		LCD_Wr_Cmd(0x01);	/*清屏*/
		LCD_Set_DispPositon(1,2);
		for(i=0;i<12;i++)
		{
			LCD_Wr_Data(Upgate_Lable[i]);  /*上衡阈值设置*/
		}
		Read_Upgate(&gatevalue);
		
		LCD_Set_DispPositon(3,3);
		gate_Bit[0]=gatevalue/1000;
		gatevalue=gatevalue%1000;
		gate_Bit[1]=gatevalue/100;
		gatevalue=gatevalue%100;
		gate_Bit[2]=gatevalue/10;
		gatevalue=gatevalue%10;
		gate_Bit[3]=gatevalue;
		for(i=0;i<4;i++)LCD_Wr_Data(0x30+gate_Bit[i]);
	
		LCD_Set_DispPositon(3,5);
		for(i=0;i<4;i++)
		{
			LCD_Wr_Data(Upgate_Unit_Lable[i]);	/*公斤*/
		}
		
		
		j=0;		/*0-还未改前半字符,1-改了前半字符,2-改了后半字符*/
		i=1;		/*按方向键的次数(循环)*/
		LCD_Wr_Cmd(0x0F);		/*游标显示*/
LCD_Upgate_Formkey_scan:		
		switch(i)
		{
			case 1:
				cur_pst=3;
				break;
			case 2:
				cur_pst=4;
				break;
			default:
				cur_pst=3;
				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:
				gatevalue=gate_Bit[0]*1000+gate_Bit[1]*100+gate_Bit[2]*10+gate_Bit[3];
				if(gatevalue>9999)
				{
					LCD_Wr_Cmd(0x0C);
					goto LCD_Upgate_Form_St;
				}
				Set_Upgate(gatevalue);
				EA=1;
				return Key_Down;
			
			case Key_Left:
				j=0;
				i--;
				if(i==0) i=2;
				goto LCD_Upgate_Formkey_scan;
			case Key_Right:
				j=0;
				i++;
				if(i==3)i=1;
				goto LCD_Upgate_Formkey_scan;
					
			default:		/*数字*/
				LCD_Wr_Data(0x30+key);
				j++;
				switch(cur_pst)
				{
					case 3:
						if(j==1)gate_Bit[0]=key;
						else if(j==2)gate_Bit[1]=key;
						break;
					case 4:
						if(j==1)gate_Bit[2]=key;
						else if(j==2)gate_Bit[3]=key;
						break;
				}
				if(j==2)
				{
					j=0;
					i++;
					if(i==3) i=1;
				}
				goto LCD_Upgate_Formkey_scan;
		}
	}	
	
	
/*   下衡阈值设置窗口  最大值为9999*/
	unsigned char LCD_Downgate_Form()
	{
		 unsigned char i,j,gate_Bit[4],key,cur_pst;
		 unsigned int gatevalue;
		
LCD_Downgate_Form_St:
		LCD_Wr_Cmd(0x01);	/*清屏*/	
		EA=0;		
		LCD_Set_DispPositon(1,2);
		for(i=0;i<12;i++)
		{
			LCD_Wr_Data(Downgate_Lable[i]);  /*下衡阈值设置*/
		}
		Read_Downgate(&gatevalue);
		
		LCD_Set_DispPositon(3,3);
		gate_Bit[0]=gatevalue/1000;
		gatevalue=gatevalue%1000;
		gate_Bit[1]=gatevalue/100;
		gatevalue=gatevalue%100;
		gate_Bit[2]=gatevalue/10;
		gatevalue=gatevalue%10;
		gate_Bit[3]=gatevalue;
		for(i=0;i<4;i++)LCD_Wr_Data(0x30+gate_Bit[i]);
		
		LCD_Set_DispPositon(3,5);
		for(i=0;i<4;i++)
		{
			LCD_Wr_Data(Downgate_Unit_Lable[i]);	/*公斤*/
		}
				
		j=0;		/*0-还未改前半字符,1-改了前半字符,2-改了后半字符*/
		i=1;		/*按方向键的次数(循环)*/
		LCD_Wr_Cmd(0x0F);		/*游标显示*/
LCD_Downgate_Formkey_scan:		
		switch(i)
		{
			case 1:
				cur_pst=3;
				break;
			case 2:
				cur_pst=4;
				break;
			default:
				cur_pst=3;
				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:
				gatevalue=gate_Bit[0]*1000+gate_Bit[1]*100+gate_Bit[2]*10+gate_Bit[3];
				if(gatevalue>9999)
				{
					LCD_Wr_Cmd(0x0C);
					goto LCD_Downgate_Form_St;
				}
				Set_Downgate(gatevalue);
				EA=1;
				return Key_Down;
			
			case Key_Left:
				j=0;
				i--;
				if(i==0) i=2;
				goto LCD_Downgate_Formkey_scan;
			case Key_Right:
				j=0;
				i++;
				if(i==3)i=1;
				goto LCD_Downgate_Formkey_scan;
					
			default:		/*数字*/
				LCD_Wr_Data(0x30+key);
				j++;
				switch(cur_pst)
				{
					case 3:
						if(j==1)gate_Bit[0]=key;
						else if(j==2)gate_Bit[1]=key;
						break;
					case 4:
						if(j==1)gate_Bit[2]=key;
						else if(j==2)gate_Bit[3]=key;
						break;
				}
				if(j==2)
				{
					j=0;
					i++;
					if(i==3) i=1;
				}
				goto LCD_Downgate_Formkey_scan;
		}
	}	
	
	
/*   车辆信息显示窗口  */
	void LCD_Vheil_Info_Form()
	{
		unsigned char i;
		unsigned int temp;
		
		LCD_Wr_Cmd(0x01);	/*清屏*/
		LCD_Set_DispPositon(1,1);
		for(i=0;i<6;i++)
		{
			LCD_Wr_Data(VhNum_Lable[i]);  /*车号:*/
		}
		temp=Vheil_num;
		LCD_Set_DispPositon(1,4);
		LCD_Wr_Data(0x30+temp/10000);
		temp=temp%10000;
		LCD_Wr_Data(0x30+temp/1000);
		temp=temp%1000;
		LCD_Wr_Data(0x30+temp/100);
		temp=temp%100;
		LCD_Wr_Data(0x30+temp/10);
		temp=temp%10;
		LCD_Wr_Data(0x30+temp);

	
		LCD_Set_DispPositon(2,1);
		for(i=0;i<6;i++)
		{
			LCD_Wr_Data(VhWght_Lable[i]);	/*车重:*/
		}
		temp=Vheil_Info.Vheil_Weight;
		LCD_Set_DispPositon(2,4);
		LCD_Wr_Data(0x30+temp/10000);
		temp=temp%10000;
		LCD_Wr_Data(0x30+temp/1000);
		temp=temp%1000;
		LCD_Wr_Data(0x30+temp/100);
		temp=temp%100;
		LCD_Wr_Data(0x30+temp/10);
		temp=temp%10;
		LCD_Wr_Data(0x30+temp);
		LCD_Set_DispPositon(2,7);
		for(i=0;i<2;i++)
		{
			LCD_Wr_Data(VhWght_Unit_Lable[i]);	/*Kg*/
		}
		
		LCD_Set_DispPositon(3,1);
		for(i=0;i<6;i++)
		{
			LCD_Wr_Data(VhLmt_Lable[i]);	/*车限:*/ 
		}
		temp=Vheil_Info.Weight_Limit;
		LCD_Set_DispPositon(3,4);
		LCD_Wr_Data(0x30+temp/10000);
		temp=temp%10000;
		LCD_Wr_Data(0x30+temp/1000);
		temp=temp%1000;
		LCD_Wr_Data(0x30+temp/100);
		temp=temp%100;
		LCD_Wr_Data(0x30+temp/10);
		temp=temp%10;
		LCD_Wr_Data(0x30+temp);
		LCD_Set_DispPositon(3,7);
		for(i=0;i<2;i++)
		{
			LCD_Wr_Data(VhLmt_Unit_Lable[i]);	/*Kg*/
		}
		
		LCD_Set_DispPositon(4,1);
		for(i=0;i<6;i++)
		{
			LCD_Wr_Data(VhSpd_Lable[i]);  /*车速:*/
		}
		temp=Vheil_Info.Vheil_Speed;
		LCD_Set_DispPositon(4,5);
		LCD_Wr_Data(0x30+temp/100);
		temp=temp%100;
		LCD_Wr_Data(0x30+temp/10);
		temp=temp%10;
		LCD_Wr_Data(0x30+temp);
		LCD_Set_DispPositon(4,7);
		for(i=0;i<4;i++)
		{
			LCD_Wr_Data(VhSpd_Unit_Lable[i]);	/*Km/H*/
		}
		LCD_Wr_Cmd(0x0C);
	}	
	





	 
 	main()
 	{
 		unsigned char key,i;
  		for(i=0;i<5;i++) delay_Nms(250);
 		
 		AD8255_Initiate();
 	
 		LCD_init();
		
 	//	LCD_Vheil_Info_Form();
 		while(1)
 		{	
	
				FUN_VHEIL_INFO:
				LCD_Vheil_Info_Form();
 			while(!Key_Press_Ack());
			key=Key_Value();
			while(Key_Press_Ack());				
			if(key==Key_Fuc)	/*首次按下功能键*/
			{
				FUN_TIME:	
				key=LCD_Time_Form();
			
				switch(key)
				{
					case Key_Up:
						goto FUN_DOWNGATE;
						break;
					case Key_Down:
						goto FUN_DATE;
						break;
					case Key_Fuc:
						goto FUN_VHEIL_INFO;
						break;
				
				}

				FUN_DATE:
				key=LCD_Date_Form();
				switch(key)
				{
					case Key_Up:
						goto FUN_TIME;
						break;
					case Key_Down:
						goto FUN_DISTANCE;
						break;
					case Key_Fuc:
						goto FUN_VHEIL_INFO;
						break;
				
				}

				FUN_DISTANCE:		
				key=LCD_Distance_Form();}
				switch(key)
				{
					case Key_Up:
						goto FUN_DATE;
						break;
					case Key_Down:
						goto FUN_SCAL;
						break;
					case Key_Fuc:
						goto FUN_VHEIL_INFO;
						break;
				
				}

				FUN_SCAL:		
				key=LCD_Scal_Form();
				switch(key)
				{
					case Key_Up:
						goto FUN_DISTANCE;
						break;
					case Key_Down:
						goto FUN_OFFSET;
						break;
					case Key_Fuc:
						goto FUN_VHEIL_INFO;
						break;
				
				}

				FUN_OFFSET:
				key=LCD_Offset_Form();
					switch(key)
				{
					case Key_Up:
						goto FUN_SCAL;
						break;
					case Key_Down:
						goto FUN_UPGATE;
						break;
					case Key_Fuc:
						goto FUN_VHEIL_INFO;
						break;
				
				}

				FUN_UPGATE:		
				key=LCD_Upgate_Form();
				switch(key)
				{
					case Key_Up:
						goto FUN_OFFSET;
						break;
					case Key_Down:
						goto FUN_DOWNGATE;
						break;
					case Key_Fuc:
						goto FUN_VHEIL_INFO;
						break;
				
				}

				FUN_DOWNGATE:
				key=LCD_Downgate_Form();
				switch(key)
				{
					case Key_Up:
						goto FUN_UPGATE;
						break;
					case Key_Down:
						goto FUN_TIME;
						break;
					case Key_Fuc:
						goto FUN_VHEIL_INFO;
						break;
				}

			
			}
 		
 		
 	}

⌨️ 快捷键说明

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