#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sfr ldata=0x90; //P1 = LCD input
sbit rs=P2^6;
sbit rw=P2^5;
sbit en=P2^4;
sbit busy=P1^7;
void lcdready();
void lcddata(uchar value);
void lcdcmd(uchar value);
void Delay(uint value);
uchar code keypad[10]={'0','1','2','3','4','5','6','7','8','9'};
uchar Speed=25,MinSpd=25,MaxSpd=100,i=0;
uchar g=0,s=0,b=0,K;
uint code LData[4]={0,236,86,73};
uint code HData[4]={76,82,89,95};
uchar code Forward[4]={0xef,0xdf,0xbf,0x7f};
//uchar code Back[4]={0xef,0x7f,0xbf,0xdf};
//sbit K1 = P0^0; //加速
//sbit K2 = P0^1; //减速
//sbit K3 = P0^2; //停止
//sbit K4 = P0^3; //启动
sbit K1 = P2^0;
sbit K2 = P2^1;
sbit K3 = P2^2;
sbit K4 = P2^3;
void Key( void);
void lcddata(unsigned char value);
void lcdcmd(unsigned char value);
void lcdready();
void SpdLcd(uchar value);
void CounterLcd(void);
void Delay(unsigned int value);
void time0(void) interrupt 1
{
//if(P0==0xef)
//return;
if(P0==0xee)
{
K=1;
TR1=0;
}
else if(P0==0xed)
{
K=2;
TR1=0;
}
else if(P0==0xeb)
{
K=3;
TR1=0;
}
else if(P0==0xe7)
{
K=4;
TR1=0;
}
}
void time1(void) interrupt 3
{
K1=1;
K2=1;
K2=1;
K2=1;
P2=(P2&Forward[i++]);
if(i==4)
i=0;
TH1=HData[Speed-25];
TL1=LData[Speed-25];
TR1=1;
CounterLcd();
/* P3=Forward[i++];
if(i==4)
i=0;
TH1=HData[Speed-25];
TL1=LData[Speed-25];
TR1=1;
CounterLcd(); */
}
void main()
{
//P3=0xff;
TMOD=0x11;
IE=0x8A;
//TR0=1;
//IE=0x8A;
while(1)
{
///P0=oxef;
Key(); //read keyboard
if(K==1)
{
//TR0=0;
Speed++;
if(Speed>MaxSpd)
{
Speed=100;
}
}
else if(K==2)
{
//TR0=0;
Speed--;
if(Speed<MinSpd)
{
Speed=25;
}
}
else if(K==3)
{
//TR0=0;
EA=0;
Speed=25;
//break;
}
else if(K==4)
{
Speed=MinSpd;
}
g=0;
s=0;
b=0;
SpdLcd(Speed);
TH1=HData[Speed-25];
TL1=LData[Speed-25];
TH0=-255;
//TR0=1;
TR1=1;
//IE=0x8A;
}
}
void Key( void)
{
//uchar temp;
P0=0xEF;
do
{
if(P0!=0xEF)
{
TH0=255;
TL0=0;
TR0=1;
}
}while(P0==0xef);
/*do
{
do
{
Delay(2);
temp=P0;
}while(temp ==0xEF);
Delay(2);
temp=P0;
}while(temp==0xEF);
TR0=0;
if(P0==0xEE)
K1=1;
else if(P0==0xDE)
K2=1;
else if(P0==0xBE)
K3=1;
else
K4=1; */
}
void lcddata(unsigned char value)
{
lcdready();
ldata=value;
rs=1;
rw=0;
en=1;
Delay(1);
en=0;
return;
}
void lcdcmd(unsigned char value)
{
lcdready();
ldata=value;
rs=0;
rw=0;
en=1;
Delay(1);
en=0;
return;
}
void lcdready()
{
busy=1;
rs=0;
rw=1;
while(busy==1)
{
en=0;
Delay(1);
en=1;
}
return;
}
void SpdLcd(uchar value) //LCD 速度显示
{
uchar ge,shi,bai,temp;
ge=value%10;
temp=value/10;
shi=temp%10;
bai=temp/10;
lcdcmd(0x01);
lcdcmd(0x80);
lcddata(keypad[bai]);
//lcdcmd(0x14);
lcddata(keypad[shi]);
//lcdcmd(0x14);
lcddata(keypad[ge]);
}
void CounterLcd(void) //LCD记数显示
{
g++;
if(g==10)
{
s++;
g=0;
if(s==10)
{
b++;
s=0;
}
}
//lcdcmd(0x01);
lcdcmd(0xC0);
lcddata(keypad[b]);
lcddata(keypad[s]);
lcddata(keypad[g]);
}
void Delay(unsigned int value)
{
uint x,y;
for(x=0; x < value; x++)
for(y=0; y<1275;y++);
}