📄 键盘及显示各功能模块.c
字号:
#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 + -