#include<at89x52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define out0 P0
sbit RS_1602=P1^0;
sbit WR_1602=P1^1;
sbit E_1602=P1^2;
sbit feng=P1^7;
uchar code number[]={"0123456789"};
uchar jianzhi;
uchar code key[][4]={
0,1,2,3,
4,5,6,7,
8,9,10,11,
12,13,14,15,
};
void delayms(uint x)
{
uchar i;
while(x--)
for(i=0;i<123;i++);
}
void busy()
{
uchar mang;
E_1602=0;
RS_1602=0;
WR_1602=1;
do
{
out0=0xff;
E_1602=1;
_nop_();
mang=out0;
E_1602=0;
}while(mang & 0x80);
}
void writeData(uchar x)
{
busy();
out0=x;
_nop_();
RS_1602=1;
WR_1602=0;
E_1602=1;
_nop_();
E_1602=0;
WR_1602=1;
}
uchar key_get()
{
uchar j,k;
for(j=0;j<4;j++)
{
P1=_crol_(0xfe,j);
for(k=0;k<4;k++)
{
if((P1 & _crol_(0x10,k))==0)return key[j][k];
}
}
return 0xff;
}
void writeOrder(uchar x)
{
busy();
out0=x;
_nop_();
RS_1602=0;
WR_1602=0;
E_1602=1;
_nop_();
E_1602=0;
WR_1602=1;
}
void init1602()
{
writeOrder(0x38);
delayms(5);
writeOrder(0x38);
delayms(5);
writeOrder(0x38);
writeOrder(0x08);
writeOrder(0x01);
writeOrder(0x06);
writeOrder(0x0c);
}
void writeByte(uchar x,y,dod)
{
x&=0x01;
y&=0x0f;
if(x==1)
y|=0x40;
y|=0x80;
writeOrder(y);
writeData(dod);
}
void writeString(uchar x,y,uchar code*P)
{
uchar i=0;
x&=0x01;
y&=0x0f;
if(x==1)
y|=0x40;
y|=0x80;
writeOrder(y);
while(P[i]>0)
writeData(P[i++]);
}
void main()
{
init1602();
while(1)
{
jianzhi=key_get();
if(jianzhi==0)
{
init1602();
writeString(0,2,"0");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==1)
{
init1602();
writeString(0,2,"1");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==2)
{
init1602();
writeString(0,2,"2");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==3)
{
init1602();
writeString(0,2,"3");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==4)
{
init1602();
writeString(0,2,"4");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==5)
{
init1602();
writeString(0,2,"5");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==6)
{
init1602();
writeString(0,2,"6");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==7)
{
init1602();
writeString(0,2,"7");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==8)
{
init1602();
writeString(0,2,"8");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==9)
{
init1602();
writeString(0,2,"9");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==10)
{
init1602();
writeString(0,2,"10");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==11)
{
init1602();
writeString(0,2,"11");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==12)
{
init1602();
writeString(0,2,"12");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==13)
{
init1602();
writeString(0,2,"13");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==14)
{
init1602();
writeString(0,2,"14");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==15)
{
init1602();
writeString(0,2,"15");
feng=0;
delayms(9);
feng=1;
}
if(jianzhi==16)
{
init1602();
writeString(0,2,"16");
feng=0;
delayms(9);
feng=1;
}
}
}