#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit key1=P3^5;
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P2^5;
sbit led=P1^5;
sbit led1=P1^6;
sbit led2=P1^4;
unsigned char KeyPro();
unsigned char num1,c,e;
unsigned char d=6;
unsigned char time,clock;
unsigned char temp,num;//???????
bit flag=0;
unsigned char num,a,b,d,e;
unsigned char i;
void delayms(unsigned int xms)
{
unsigned i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void Read_Busy()
{
uchar busy;
P0 = 0xff;
RS = 0;
RW = 1;
do
{
EN = 1;
busy = P0;
EN = 0;
}while(busy & 0x80);
}
//?LCD1602??????
void Write_Cmd(uchar cmd)
{
Read_Busy();//???
RS = 0;
RW = 0;
P0 = cmd;
EN = 1;
EN = 0;
}
//???????
void Write_Dat(uchar dat)
{
Read_Busy();
RS = 1;
RW = 0;
P0 = dat;
EN = 1;
EN = 0;
}
void charter(unsigned char x,unsigned char y,unsigned char dat)
{
if(y==0)
{
Write_Cmd(0x80+x);
}
else
{
Write_Cmd(0xc0+x);
}
Write_Dat( dat);
}
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
Write_Cmd(0x80 + x);
}
else
{
Write_Cmd(0xC0 + x);
}
while (*s)
{
Write_Dat( *s);
s ++;
}
}
void lcdinit()
{
Write_Cmd(0x38);
Write_Cmd(0x08); /*????*/
Write_Cmd(0x01); /*????*/
Write_Cmd(0x06); /*????????*/
Write_Cmd(0x0C); /*????????*/
}
void Timer0Init(void) //50??@11.0592MHz
{
TMOD = 0x01; //???????
TL0 = 0x00; //??????
TH0 = 0x4C; //??????
ET0=1;
EA=1;
TR0 = 0; //???0????
}
void main()
{
lcdinit();
Timer0Init();
LCD_Write_String(4,0,"welcome");
LCD_Write_String(0,1,"count:");
while(1)
{
KeyPro();
a=num1/10;
b=num1%10;
charter(6,1,'0'+a);
charter(7,1,'0'+b);
if(flag==1)
{
led1=~led1;
num1--;
d=num1/10;
e=num1%10;
charter(6,1,'0'+a);
charter(7,1,'0'+b);
flag=0;
if(num1==0)
{
TR0=0;
}
}
}
}
unsigned char KeyScan(void) //??????,?????????
{
unsigned char temp,num;//???????
P3=0x0f; //??????0
temp=P3&0x0f; //?????
if(temp!=0x0f) //?????????
{
delayms(10); //??
if((P3&0x0f)!=0x0f)
{
temp=P3&0x0f; //?????
P3=temp|0xf0; //???????
num=P3&0xf0; //?????
while((P3&0xf0)!=0xf0);//???????
return(temp+num);//????????
}
} //????
}
unsigned char KeyPro(void)
{
switch(KeyScan())
{
case 0x7e:TR0=1;break;//0 ??????????????
case 0x7d:num1=10;break;//1
case 0x7b:num1=15;break;//2
case 0x77:num1=20;break;//3
case 0xbe:num1++;break;//4
case 0xbd:num1--;break;//5
case 0xbb:d=6;break;//6
case 0xb7:d=7;break;//7
case 0xde:d=8;break;//8
case 0xdd:num1=9;break;//9
default:return 0xff;break;
}
}
void timer() interrupt 1
{
TL0 = 0x00; //??????
TH0 = 0x4C; //??????
time++;
if(time==20)
{
flag=1;
led=~led;
time=0;
}
}
|