该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#define uchar unsigned char
#define uint unsigned int
sbit rs=P3^0;
sbit e=P3^1;
sbit cs1=P3^2;
sbit cs2=P3^3;
sbit rw=P3^4;
sbit rd=P1^0;
sbit cs=P1^1;
sbit a1=P1^2;
sbit a0=P1^3;
sbit rst=P1^4;
sbit wr=P1^5;
sbit led=P1^6;
uchar dat;
uchar code weizi[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code sz[]={0xC0,0xf9,0xa4,0x99,0x92,0x82,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar code zhi[4][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}};
uchar code gei[4]={0xfe,0xfd,0xfb,0xf7};
uchar code bijiao[4][4]={
{0xee,0xde,0xbe,0x7e},{0xed,0xdd,0xbd,0x7d},
{0xeb,0xdb,0xbb,0xb7},{0xe7,0xd7,0xb7,0x77}};
uchar code lcd_1a[]="Welcome to you !I Love this game";
uchar code lcd_1b[]=" TRAFFIC LIGHT parameter_Set ";
uchar code lcd_2a[]="Green_Time_SN: Time : : ";
uchar code lcd_2b[]="Green_Time_SN:23 HOUR:MIN:SEC";
uchar code lcd_2c[]="Green_Time_SN:23Time : : ";
uchar code lcd_2d[]="Green_Time_SN:23Time 09:54 :21 ";
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void IO_xz(uchar dk,uchar sj)
{
if(dk==0){a0=0;a1=0;}
else if(dk==1){a0=1;a1=0;}
else if(dk==2){a0=0;a1=1;}
rd=1;wr=1;cs=0;wr=0;
P0=sj;
wr=1;cs=1;
}
uchar IO_dq(uchar kou)
{
uchar temp;
if(kou==0){a0=0;a1=0;}
else if(kou==1){a0=1;a1=0;}
else if(kou==2){a0=0;a1=1;}
rd=1;wr=1;cs=0;rd=0;
temp=P0;
rd=1;cs=1;
return temp;
}
void xzl(uchar zl)
{
rs=0;
e=0;
P2=zl;
delay(2);
e=1;
delay(2);
e=0;
}
void xsj(uchar sj)
{
rs=1;
e=0;
P2=sj;
delay(2);
e=1;
delay(2);
e=0;
}
void init()
{
e=0;
xzl(0x38);
xzl(0x06);
xzl(0x0c);
xzl(0x01);
xzl(0x80);
rst=1;delay(2);rst=0;
cs=1;wr=1;rd=1;cs=0;
a0=1;a1=1;;
P0=0x80;
wr=0;wr=1;cs=1;
}
void time()
{
TMOD=0x01;
TH0=0;
TL0=0;
EA=1;
TR0=1;
ET0=1;
}
void smg()
{
cs2=0;
IO_xz(1,0xdf);
rw=0;rw=1;
cs2=1;
cs1=0;
IO_xz(1,0x8e);
rw=0;rw=1;
cs1=1;
}
void xt_init()
{
IO_xz(2,0x00);
cs2=0;
IO_xz(1,0x00);
rw=0;rw=1;
cs2=1;
cs1=0;
IO_xz(1,0x00);
rw=0;rw=1;
cs1=1;
delay(1000);
IO_xz(2,0xff);
cs2=0;
IO_xz(1,0xff);
rw=0;rw=1;
cs2=1;
cs1=0;
IO_xz(1,0xff);
rw=0;rw=1;
cs1=1;
}
void lcd_init()
{
uchar x;
delay(300);
xzl(0x80);
for(x=0;x<16;x++)
{
xsj(lcd_1a[x]);
}
xzl(0x80+0x40);
for(x=16;x<32;x++)
{
xsj(lcd_1a[x]);
}
delay(1000);
xzl(0x80);
for(x=0;x<16;x++)
{
xsj(lcd_1b[x]);
}
xzl(0x80+0x40);
for(x=16;x<32;x++)
{
xsj(lcd_1b[x]);
}
}
void KeyScan(void)//带返回值的子函数
{
uchar cord_l,cord_h;//声明列线和行线的值的储存变量
//P2 = 0x00;
P2 = 0x0f;//0000 1111
if( (P2 & 0x0f) != 0x0f)//判断是否有按键按下
{
delay(5);//软件消抖
if( (P2 & 0x0f) != 0x0f)//判断是否有按键按下
{
cord_h = P2 & 0x0f;// 储存行线值
P2 = cord_l | 0xf0;
cord_l = P2 & 0xf0;// 储存列线值
while( (P2 & 0xf0) != 0xf0 );//松手检测
cord_l |= cord_h;//返回键值码
switch(cord_l)
{
//第一行键值码
case 0xee: dat = 15; break;
case 0xde: dat = 11;break;
case 0xbe: dat = 7;break;
case 0x7e: dat = 3;break;
//第二行键值码
case 0xed: dat = 14;break;
case 0xdd: dat = 10;break;
case 0xbd: dat = 6;break;
case 0x7d: dat = 2;break;
//第三行键值码
case 0xeb: dat = 13;break;
case 0xdb: dat = 9;break;
case 0xbb: dat = 5;break;
case 0x7b: dat = 1;break;
//第四行键值码
case 0xe7: dat = 12;break;
case 0xd7: dat = 8;break;
case 0xb7: dat = 4;break;
case 0x77: dat = 0;break;
}
}
}
}
void main(void)
{
init();
time();
//xsj('1');
xt_init();
lcd_init();
while(1)
{
KeyScan();
}
}
void time1() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65536-50000)%256;
}