|
#include<reg52.h>
#include<intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P3^5;
sbit rw=P3^6;
sbit lcden=P3^7;
void Delay100ms() //@11.0592MHz
{
unsigned char i, j;
i = 180;
j = 73;
do
{
while (--j);
} while (--i);
}
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 18;
j = 235;
do
{
while (--j);
} while (--i);
}
void write_com(uchar com) //寫命令
{
rs=0;
rw=0;
lcden=0;
P0=com;
Delay100ms();
lcden=1;
Delay100ms();
lcden=0;
}
void write_date(uchar date) //寫數(shù)據(jù)
{
rs=1;
rw=0;
lcden=0;
P0=date;
Delay100ms();
lcden=1;
Delay100ms();
lcden=0;
}
void init() //初始化函數(shù)
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
void keyscan()
{
uchar temp,key;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
Delay10ms();
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:key=0;break;
case 0xde:key=1;break;
case 0xbe:key=2;break;
case 0x7e:key=3;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
write_com(0x80+0x40+4);
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
Delay10ms();
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:key=4;break;
case 0xdd:key=5;break;
case 0xbd:key=6;break;
case 0x7d:key=7;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
write_com(0x80+0x40+4);
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
Delay10ms();
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:key=8;break;
case 0xdb:key=9;break;
case 0xbb:key=10;break;
case 0x7b:key=11;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
write_com(0x80+0x40+4);
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
Delay10ms();
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:key=12;break;
case 0xd7:key=13;break;
case 0xb7:key=14;break;
case 0x77:key=15;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
write_com(0x80+0x40+4);
}
}
}
void main() //主函數(shù)
{
init();
while(1)
{
keyscan();
}
}
|
|