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

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

📁 这七个程序都是本人为51系列单片机开发的应用程序
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <AT89X55.H>
#include <absacc.h>

#define LCD_Wr_Cmd_Add	XBYTE[0x0F000]
#define LCD_Rd_Cmd_Add	XBYTE[0x0F002]
#define LCD_Wr_Data_Add	XBYTE[0x0F001]
#define LCD_Rd_Data_Add	XBYTE[0x0F003]

#define AD8255_Ctl_Add	XBYTE[0x0C003]
#define AD8255_C_Add	XBYTE[0x0C002]


#define Key_Num0 0
#define Key_Num1 1
#define Key_Num2 2
#define Key_Num3 3
#define Key_Num4 4
#define Key_Num5 5
#define Key_Num6 6
#define Key_Num7 7
#define Key_Num8 8
#define Key_Num9 9
#define Key_Up 	 10
#define Key_Down 11
#define Key_Right 12
#define Key_Left  13
#define Key_Fuc   14
#define Key_Ent   15





code unsigned char m[]={0x0B0,0x0B0};
code unsigned char Time_Lable[]={0x0CA,0x0B1,0x0BC,0x0E4,0x0C9,0x0E8,0x0D6,0x0C3};  /*时间设置*/
code unsigned char Hour_Lable[]={0x0CA,0x0B1};		/*时标签*/
code unsigned char Munite_Lable[]={0xB7,0xD6};		/*分标签*/
code unsigned char Second_Lable[]={0xC3,0xEB};		/*秒标签*/

code unsigned char Date_Lable[]={0xC8,0xD5,0xC6,0xDA,0x0C9,0x0E8,0x0D6,0x0C3};  /*日期设置*/
code unsigned char Year_Lable[]={0xC4,0xEA};		/*年标签*/
code unsigned char Month_Lable[]={0xD4,0xC2};		/*月标签*/
code unsigned char Day_Lable[]={0xC8,0xD5};		/*日标签*/

code unsigned char Distance_Lable[]={0xBE,0xE0,0xC0,0xEB,0x0C9,0x0E8,0x0D6,0x0C3};  /*距离设置*/
code unsigned char CMeter_Lable[]={0x43,0x4D};		/*CM*/

code unsigned char Scal_Lable[]={0xC1,0xE9,0xC3,0xF4,0xB6,0xC8,0x0C9,0x0E8,0x0D6,0x0C3};  /*灵敏度设置*/
code unsigned char Scal_Unit_Lable[]={0xB9,0xAB,0xBD,0xEF,0xA3,0xAF,0xB5,0xA5,0xCE,0xBB};		/*公斤/单位*/

code unsigned char Offset_Lable[]={0xB2,0xB9,0xB3,0xA5,0xD6,0xB5,0x0C9,0x0E8,0x0D6,0x0C3};  /*补偿值设置*/
code unsigned char Offset_CLRzero_Lable[]={0xD7,0xD4,0xB6,0xAF,0xC7,0xE5,0xC1,0xE3,0xC2,0xF0,0xA3,0xBF};
code unsigned char Offset_Unit_Lable[]={0xB9,0xAB,0xBD,0xEF};					/*公斤*/

code unsigned char Upgate_Lable[]={0xC9,0xCF,0xBA,0xE2,0xE3,0xD0,0xD6,0xB5,0x0C9,0x0E8,0x0D6,0x0C3};  /*上衡阈值设置*/
code unsigned char Upgate_Unit_Lable[]={0xB9,0xAB,0xBD,0xEF};					/*公斤*/

code unsigned char Downgate_Lable[]={0xCF,0xC2,0xBA,0xE2,0xE3,0xD0,0xD6,0xB5,0x0C9,0x0E8,0x0D6,0x0C3};  /*下衡阈值设置*/
code unsigned char Downgate_Unit_Lable[]={0xB9,0xAB,0xBD,0xEF};					/*公斤*/

code unsigned char VhNum_Lable[]={0xB3,0xB5,0xBA,0xC5,0xA1,0xC3};  /*车号:*/
code unsigned char VhWght_Lable[]={0xB3,0xB5,0xD6,0xD8,0xA1,0xC3}; /*车重:*/
code unsigned char VhWght_Unit_Lable[]={0x4B,0x67};	  /*Kg*/
code unsigned char VhLmt_Lable[]={0xB3,0xB5,0xCF,0xDE,0xA1,0xC3};  /*车限:*/ 
code unsigned char VhLmt_Unit_Lable[]={0x4B,0x67};	  /*Kg*/
code unsigned char VhSpd_Lable[]={0xB3,0xB5,0xCB,0xD9,0xA1,0xC3};	/*车速:*/
code unsigned char VhSpd_Unit_Lable[]={0x4B,0x6D,0x2F,0x48};	/*Km/H*/

unsigned int Vheil_num;				/*终止车辆号*/


struct str_Vheil_Info					/*车辆信息*/
	{    
    	unsigned int Vheil_Weight;	/*车重*/
    	unsigned int Weight_Limit;	/*重限*/
		unsigned char Vheil_Speed;	/*车速*/
		unsigned char Axle_group;       /*轴组数*/
		unsigned char axle;		/*轴数*/
	}Vheil_Info;


/*延迟1ms*/
	void delay_Nms(unsigned char n)
	{
		unsigned char i,j; 
		for(j=0;j<n;j++)
		{
			for(i=0;i<250;i++);
			for(i=0;i<250;i++);
			for(i=0;i<100;i++);
			
		}
	}


	
/*==================================================*/
	/*GDM12864E LCD */
/*==================================================*/

	/*LCD read busy flag*/
	
	
 	void LCD_Rd_Busy()
	{	
		unsigned char temp;
		do
		{
			temp=LCD_Rd_Cmd_Add;
			temp=temp&0x80;
		}while(temp==0x80);
	}
	
	
	/*LCD write command*/
	void LCD_Wr_Cmd(unsigned char One_Byte)
	{
		LCD_Wr_Cmd_Add=One_Byte;
		LCD_Rd_Busy();
	}
	

	
	/*LCD write data*/
	void LCD_Wr_Data(unsigned char One_Byte)
	{
		LCD_Wr_Data_Add=One_Byte;
		LCD_Rd_Busy();
	}
	
	
	/*LCD read data*/
	//unsigned char LCD_Rd_Data()
	//{	
	//	unsigned char temp;
	//	temp=LCD_Rd_Data_Add;
	//	return(temp);
	//}
	
	/*LCD initiate*/
	void LCD_init()
	{	
		LCD_Wr_Cmd(0x30);	/*0x30 8bits , base function*/
		LCD_Wr_Cmd(0x06);	/* 0x06 cussor right move ,ACC+1*/
		LCD_Wr_Cmd(0x0C);	/*0x0F Display on,无游标,无反白 */
		LCD_Wr_Cmd(0x01);	/*0x01 clear display*/
		LCD_Wr_Cmd(0x80);	/*0x80 DDRAM in 1line 1st word*/
	}
	
	/*设置显示位置, row:1,2,3,4; position 1,2...8 */
	void LCD_Set_DispPositon(unsigned char row,unsigned char position)
	{
		switch(row)
		{
			case 1:
				LCD_Wr_Cmd(0x7F+position);
				break;
			case 2:
				LCD_Wr_Cmd(0x8F+position);
				break;
			case 3:
				LCD_Wr_Cmd(0x87+position);
				break;
			case 4:
				LCD_Wr_Cmd(0x97+position);
				break;
			default:
				LCD_Wr_Cmd(0x7F+position);
				break;
		}
	}
	 
	

/*==============================================================*/
	/* 8255 Program */
/*=============================================================*/
/*Initiate 8255*/
	void AD8255_Initiate()
	{
		AD8255_Ctl_Add=0x88;	/*方式0,C口高4位输入,低4位输出*/
		
	}


/*Read 8255*/
	unsigned char AD8255_Rd()
	{
		unsigned char temp;
		temp=AD8255_C_Add;
		temp=temp&0xF0;
		return temp;
	}
	
/*Write 8255*/
	void AD8255_Wr(unsigned char Cvalue)
	{	
		unsigned char i=0;
		AD8255_C_Add=Cvalue&0x0F;
	}


/*==============================================================*/
	/* Identy Key Program */
/*=============================================================*/

/*确认是否有键按下*/	
	unsigned char Key_Press_Ack()
	{
		unsigned char temp,temp2;
		AD8255_Wr(0);
		temp=AD8255_Rd();
		if(temp==0xF0) return 0;	/*无键按下*/
		else
		{	delay_Nms(10);	
			AD8255_Wr(0);
			temp2=AD8255_Rd();
			if(temp2==0x0F0) return 0;	/*无键按下*/
			else if(temp==temp2) return 1;	/*有键按下*/
			else return 0;	
		}			
	}
	

/*查询键值*/
	unsigned char Key_Value()
	{
		unsigned char temp;
		AD8255_Wr(0x07);	/*第1列*/
		temp=AD8255_Rd();
		switch (temp)
		{	case  0x70: return Key_Num1 ; 	/*第1行*/
			case  0xB0: return Key_Num5 ; 	/*第2行*/
			case  0xD0: return Key_Fuc ; 	/*第3行*/
			case  0xE0: return Key_Left ; 	/*第4行*/
		}
		
		AD8255_Wr(0x0B);	/*第2列*/
		temp=AD8255_Rd();
		switch (temp)
		{
			case  0x70: return Key_Num2 ; 	/*第1行*/
			case  0xB0: return Key_Num6 ; 	/*第2行*/
			case  0xD0: return Key_Up ; 	/*第3行*/
			case  0xE0: return Key_Down ; 	/*第4行*/
		}
		
		AD8255_Wr(0x0D);	/*第3列*/
		temp=AD8255_Rd();
		switch (temp)
		{
			case  0x70: return Key_Num3 ; 	/*第1行*/
			case  0xB0: return Key_Num7 ; 	/*第2行*/
			case  0xD0: return Key_Num9 ; 	/*第3行*/
			case  0xE0: return Key_Right; 	/*第4行*/
		}
		
		AD8255_Wr(0x0E);	/*第4列*/
		temp=AD8255_Rd();
		switch (temp)
		{
			case  0x70: return Key_Num4 ; 	/*第1行*/
			case  0xB0: return Key_Num8 ; 	/*第2行*/
			case  0xD0: return Key_Num0 ; 	/*第3行*/
			case  0xE0: return Key_Ent; 	/*第4行*/
		}
	}

	
/*设置时间 BB*/
	void Set_Time(unsigned char hour,unsigned char munite,unsigned char second)
	{
		 unsigned char data10[5];
		
		data10[0]=0x7E;
		data10[1]=0x0BB;
		data10[2]=hour;
		data10[3]=munite;
		data10[4]=second;
		//SCI_send_nbyte(data10,5,4);
	//	SCI_recv_nbyte(data10,4,4);
	} 
		

	/*读取时间 BC*/
	void Read_Time(unsigned char *hour,unsigned char *munite,unsigned char *second)
	{
		 unsigned char data10[4]={0x7E,0X12,0x12,0x12};
		
		data10[0]=0x7E;
		data10[1]=0x12;
		//SCI_send_nbyte(data10,2,4);
		//SCI_recv_nbyte(data10,4,4);
	
		*hour=data10[1];
		*munite=data10[2];
		*second=data10[3];
	}  	 


	
/*设置日期 BD*/
	void Set_Date(unsigned char century,unsigned char year,unsigned char month,unsigned char date)
	{
		 unsigned char data10[6];
		
		data10[0]=0x7E;
		data10[1]=0x00;
		data10[2]=century;
		data10[3]=year;
		data10[4]=month;
		data10[5]=date;
	//	SCI_send_nbyte(data10,6,4);
	//	SCI_recv_nbyte(data10,5,4);
	} 
		
 	  	
/*读取日期 BE*/
	void Read_Date(unsigned char *century,unsigned char *year,unsigned char *month,unsigned char *date)
	{
		 unsigned char data10[5];
		
		data10[0]=0x7E;
		data10[1]=0x0BE;
	//	SCI_send_nbyte(data10,2,4);
	//	SCI_recv_nbyte(data10,5,4);
	
		*century=data10[1];
		*year=data10[2];
		*month=data10[3];
		*date=data10[4];
	}  	  

/*设置轮胎识别器与称台间的距离 C7*/
	void Set_Distance(unsigned char distancevalue)
	{
		 unsigned char data10[3];
		
		data10[0]=0x7E;
		data10[1]=0x0C7;
		data10[2]=distancevalue;  
		//SCI_send_nbyte(data10,3,4);
	} 
		
 	  	
/*读取轮胎识别器与称台间的距离 C8*/
	void Read_Distance(unsigned char *distancevalue)
	{
		 unsigned char data10[2];
	
		data10[0]=0x7E;
		data10[1]=0x0C8;
		//SCI_send_nbyte(data10,2,4);
		//SCI_recv_nbyte(data10,2,4);
		
		*distancevalue=data10[1];
	}  	



	/*设置灵敏度 C1*/
	void Set_Scal(unsigned int IntPart, unsigned int DeciPart)
	{
		 unsigned char data10[6];
		union union_df
		{
			unsigned int intdata;
			unsigned char pchar[2];
		};
		 union union_df uni_data[2];
		
		uni_data[0].intdata=IntPart;
		uni_data[1].intdata=DeciPart;
		
		data10[0]=0x7E;
		data10[1]=0x0C1;
		data10[2]=uni_data[0].pchar[0];		/*IntPart高8位*/
		data10[3]=uni_data[0].pchar[1];  	/*IntPart低8位*/
		data10[4]=uni_data[1].pchar[0];		/*DeciPart高8位*/
		data10[5]=uni_data[1].pchar[1];  	/*DeciPart低8位*/
	//	SCI_send_nbyte(data10,6,4);
	} 
		
 	  	
/*读取灵敏度 C2*/
	void Read_Scal(unsigned int *IntPart, unsigned int *DeciPart)
	{
		 unsigned char data10[5];
		union union_df
		{
			unsigned int intdata;
			unsigned char pchar[2];
		};
		 union union_df uni_data[2];

		
		data10[0]=0x7E;
		data10[1]=0x0C2;
	//	SCI_send_nbyte(data10,2,4);
	//	SCI_recv_nbyte(data10,5,4);
	
		uni_data[0].pchar[0]=data10[1];
		uni_data[0].pchar[1]=data10[2];
		*IntPart=uni_data[0].intdata;
		
		uni_data[1].pchar[0]=data10[3];
		uni_data[1].pchar[1]=data10[4];
		*DeciPart=uni_data[1].intdata;
	}  	  




	
/*设置偏移量自动清零 BF*/
	void Set_Offset()
	{
		 unsigned char data10[2];
		
		data10[0]=0x7E;
		data10[1]=0x0BF;
	//	SCI_send_nbyte(data10,2,4);
	} 
		
 	  	
/*读取偏移量 C0*/
	void Read_Offset(unsigned int *offset)
	{
		 unsigned char data10[4];
		union union_df
		{
			unsigned int intdata;
			unsigned char pchar[2];
		};
		 union union_df uni_offset;
		
		data10[0]=0x7E;
		data10[1]=0x0C0;
		//SCI_send_nbyte(data10,2,4);
		//SCI_recv_nbyte(data10,3,4);
		uni_offset.pchar[0]=data10[1];
		uni_offset.pchar[1]=data10[2];
		*offset=uni_offset.intdata;
	}  	 


/*设置上升沿阈值 C3*/
	void Set_Upgate(unsigned int gatevalue)
	{
		 unsigned char data10[4];
		union union_df
		{
			unsigned int intdata;
			unsigned char pchar[2];
		};
		 union union_df uni_gatevalue;
		
		uni_gatevalue.intdata=gatevalue;
		
		data10[0]=0x7E;
		data10[1]=0x0C3;
		data10[2]=uni_gatevalue.pchar[0];  /*高8位*/
		data10[3]=uni_gatevalue.pchar[1];	/*低8位*/
		//SCI_send_nbyte(data10,4,4);
	} 
		
 	  	
/*读取上升沿阈值 C4*/
	void Read_Upgate(unsigned int *gatevalue)
	{
		 unsigned char data10[3];
		union union_df
		{
			unsigned int intdata;
			unsigned char pchar[2];
		};
		 union union_df uni_gatevalue;
		
		data10[0]=0x7E;
		data10[1]=0x0C4;
		//SCI_send_nbyte(data10,2,4);
	//	SCI_recv_nbyte(data10,3,4);
	
		uni_gatevalue.pchar[0]=data10[1];
		uni_gatevalue.pchar[1]=data10[2];
		*gatevalue=uni_gatevalue.intdata;
	}  	



/*设置下降沿阈值 C5*/
	void Set_Downgate(unsigned int gatevalue)
	{
		 unsigned char data10[4];
		union union_df
		{
			unsigned int intdata;
			unsigned char pchar[2];
		};
		 union union_df uni_gatevalue;
		
		uni_gatevalue.intdata=gatevalue;
		
		data10[0]=0x7E;
		data10[1]=0x0C5;
		data10[2]=uni_gatevalue.pchar[0];  /*高8位*/
		data10[3]=uni_gatevalue.pchar[1];	/*低8位*/
		//SCI_send_nbyte(data10,4,4);
	} 
		
 	  	
/*读取下降沿阈值 C6*/
	void Read_Downgate(unsigned int *gatevalue)
	{
		unsigned char data10[3];
		union union_df
		{
			unsigned int intdata;
			unsigned char pchar[2];
		};
		 union union_df uni_gatevalue;
		
		data10[0]=0x7E;
		data10[1]=0x0C6;
		//SCI_send_nbyte(data10,2,4);
		//SCI_recv_nbyte(data10,3,4);

⌨️ 快捷键说明

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