|
#include<reg51.h> //头文件
#define uchar unsigned char //预定义
#define uint unsigned int
#define lcd_dat P0
sbit lcdrs=P2^6; //1602的数据/指令选择控制线
sbit lcdrw=P2^5; //1602的读写控制线
sbit lcden=P2^4; //1602的使能控制线
sbit yihao=P2^0; //一号病房按键
sbit erhao=P2^1;
sbit sanhao=P2^2;
sbit sihao=P2^3;
uchar table1[]="Number";
uchar table2[]="1234";
void delay(uint z) //延时子程序
{
uint x,y;
for(x=z;x>0;x--) for(y=110;y>0;y--);
}
void write_com(uchar com) //写命令子程序
{
lcdrs=0;
lcdrw=0;
P0=com;
delay(5);
lcden=1;
delay(3);
lcden=0;
}
void write_data(uchar date) //写数据子程序
{
lcdrs=1;
lcdrw=0;
P0=date;
delay(5);
lcden=1;
delay(3);
lcden=0;
}
void init() //1602初始化子程序
{
write_com(0x38);//显示模式设置。
delay(5);
write_com(0x0c);//关光标,不闪烁
delay(5);
write_com(0x06); //显示地址递增,即写一个数据后,显示位置右移位
delay(5);
write_com(0x01); //清屏
delay(5); }
void Number() //显示Number子程序
{uchar m;
write_com(0x80);
for(m=0;m<6;m++) //将table[]中的数据依次写入1602显示
{
write_data(table1[m]);
delay(200);
}
}
void main() //主函数
{
unsigned char FLAG; //FLAG的值为P2口的值
init();
do
{
FLAG=P2;
switch(FLAG&0X0f) //屏蔽P2口高四位
{
case 0X0E:
Number();
write_com(0x80+10); //显示地址设为90H(即10H,)上排第十位
write_data(table2[0]);
delay(200);
break;
case 0X0D:
Number();
write_com(0x80+10); //显示地址设为90H(即10H,)上排第十位
write_data(table2[1]);
delay(200);
break;
case 0X0B:
Number();
write_com(0x80+10); //显示地址设为90H(即10H,)上排第十位
write_data(table2[2]);
delay(200);
break;
case 0X07:
Number();
write_com(0x80+10); //显示地址设为90H(即10H,)上排第十位
write_data(table2[3]);
delay(200);
break;
default:
break;
}
}
while(1);
}
|
|