⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text1.c

📁 本程序针对P89V51RD2
💻 C
字号:
#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++);
}








⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -