#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P2^5;
unsigned char KeyPro();
unsigned char num1;
unsigned char code mi[]={1,2,3,4};
bit Flag;
//?????,??????
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 main()
{
unsigned char num;
unsigned char i;
lcdinit();
Write_Cmd(0x80|0x00);
while(1)
{
num=KeyPro();
if(num!=0xff)
{
charter(i,0,'0'+num);
i++;
}
if(i==16)
{
i=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:num1=0;break;//0 ??????????????
case 0x7d:num1=1;break;//1
case 0x7b:num1=2;break;//2
case 0x77:num1=3;break;//3
case 0xbe:num1=4;break;//4
case 0xbd:num1=5;break;//5
case 0xbb:num1=6;break;//6
case 0xb7:num1=7;break;//7
case 0xde:num1=8;break;//8
case 0xdd:num1=9;break;//9
case 0xdb:num1=10;break;//a
case 0xd7:num1=11;break;//b
case 0xee:num1=12;break;//c
case 0xed:num1=13;break;//d
case 0xeb:num1=14;break;//e
case 0xe7:num1=15;break;//f
default:return 0xff;break;
}
}
*/
unsigned char KeyPro(void)
{
switch(KeyScan())
{
case 0x7e:return 0;break;//0 ??????????????
case 0x7d:return 1;break;//1
case 0x7b:return 2;break;//2
case 0x77:return 3;break;//3
case 0xbe:return 4;break;//4
case 0xbd:return 5;break;//5
case 0xbb:return 6;break;//6
case 0xb7:return 7;break;//7
case 0xde:return 8;break;//8
case 0xdd:return 9;break;//9
case 0xdb:return 10;break;//a
case 0xd7:return 11;break;//b
case 0xee:return 12;break;//c
case 0xed:return 13;break;//d
case 0xeb:return 14;break;//e
case 0xe7:return 15;break;//f
default:return 0xff;break;
}
}
|