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

📄 text5.c

📁 最小系统,能够停留1s实现连击,还有部分双键功能
💻 C
字号:
 #include <reg51.h>

sfr   ldata=0x90;
sbit  rs=P2^6;
sbit  rw=P2^5;
sbit  en=P2^4;
sbit  busy=P1^7; 
void  lcdready();
void  lcddata(unsigned  char  value);
void  lcdcmd(unsigned  char  value);
void  countprint(void);
void  doublekey(void);
void clear(void);
void  MSDelay(unsigned  int  value);
unsigned  	char  keypad[18]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','&',0x20};
unsigned  	char  jishu[19]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned  	char  store[18];
unsigned  	char  colloc,rowloc;
unsigned  	char   n;
unsigned  	char   i=0;
unsigned  	char  count;
unsigned	char b;
unsigned	char c;
unsigned	char g,s;
unsigned  char   ge=0,shi=0,bai=0;

void  KEYread(void);
void LCDprint(unsigned  char  row ,unsigned  char  col);

void  main(void)
{
 	lcdcmd(0x38);
	lcdcmd(0x0E);
	lcdcmd(0x01);
	lcdcmd(0x80);
	
	while(1)
	{
		KEYread();
		LCDprint(rowloc,colloc);
	
		//doublekey();
		count=10;
		while(1)
		{
			if((P0==n)&&(count!=0))
			{
				MSDelay(18);
				count--;
			}
			else
				break;
		} 
		
	}

}

 void  lcdcmd(unsigned  char  value)
 {
	 lcdready();
	 ldata=value;
	 rs=0;
	 rw=0;
	 en=1;
	 MSDelay(1);
	 en=0;
	 return;
 }

void  lcdready()
  {	 
  	busy=1;
    rs=0;
    rw=1;
    while(busy==1)
    {
		en=0;
		MSDelay(1);
		en=1;
	}
	return;
}



void  KEYread(void)
{
	P0=0xFF;
	P0=0xF0;

	do
	{
		do
		{
			MSDelay(1);
	    	colloc=P0;
			//colloc &=0xF0;
		}while(colloc ==0xF0);

		MSDelay(1);
		colloc=P0;
		//colloc &=0xF0;
	}while(colloc ==0xF0);
	n=P0;

	while(1)
	{
		P0|=0x0E;		 
		if(P0!=0xFE)
		 {
		 	rowloc=0;
			break;
		 }

		P0&=0xF0;
		P0|=0x0D;		 
		if(P0!=0xFD)
		 {
		 	rowloc=1;
			break;
		 }

		P0&=0xF0;
		P0|=0x0B;	 
		if(P0 !=0xFB)
		 {
		 	rowloc=2;
			break;
		 }

		P0&=0xF0;
		P0|=0x07;		 
		rowloc=3;
		break;
	 }
	  P0&=0xF0;
	  //colloc=P0;

}

void LCDprint(unsigned  char  row,unsigned  char  col)   
{
	unsigned  char   value;
	unsigned  char   no;

	if(col==0xE0)
		col=0;
	else if(col==0xD0)
		col=1;
	else if(col==0xB0)
		col=2;
	else if(col==0x70)
		col=3;
	else if(col==0x60)
		col=4;
	else if(col==0xA0)
		col=5;
	else if(col==0xC0)
		col=6;
	no=col+ row*4;
	
	value=keypad[no];
	store[i%18]=value;
	if(no==18)
	{
		clear();
		lcdcmd(0x10);
		i--;
		i--;
		i--;
	}
	/*if(no==16||no==17)
	{
		i++;
		clear();
		i--;
		i--;
		store[i%18]=keypad[no];
	}*/
	i++;
	if(	i==17)
	{
		lcdcmd(0x80);
		lcdcmd(0x01);
		i=1;
	}
	lcddata(value);
	
	lcdcmd(0x14);
	lcdcmd(0xC0);
	jishu[no]++;
	g=jishu[no]%10;
	s=jishu[no]/10;
	lcddata(keypad[s]);
	lcddata(keypad[g]);
	//lcdcmd(0x14);



	//lcdcmd(0xC0);
	
	countprint();

	lcdcmd(0x80);
	
	for(b=0;b<i;b++)
	{
		lcdcmd(0x14);
	}

	//lcdcmd(0x8i);
	
}

void countprint(void)
{

	ge++;
	if(ge==10)
	{
		shi++;
		ge=0;
		if(shi==10)
		{
			bai++;
			shi=0;
		}
	}	
	lcdcmd(0xC6);
	lcddata(keypad[bai]);
	lcddata(keypad[shi]);
	lcddata(keypad[ge]);
}

void clear(void)
{
	//i=i-2;
	lcdcmd(0x80);
	lcdcmd(0x01);
	for(c=0;c<i-2;c++)
		lcddata(store[c]);
	lcdcmd(0x14);

}



/*void doublekey(void)
{
	if(rowloc==3&&colloc==1)
	{
		MSDelay(10);
		if(P0!=0xE0)
		switch(P0)
		{
			case 0xA0:	
				lcdcmd(0x80);
				lcddata(0x20);
				//lcdcmd(0xC0);
				countprint();	
				break;

			case 0x60:
				P0|=0x0E;		 
				if(P0==0x7E)
				 {
					lcdcmd(0x80);
					lcddata(0x26);
					//lcdcmd(0xC0);
					countprint();
					break;
				 }

				P0&=0xF0;
				P0|=0x0D;
						 
				if(P0==0x7D)
				 {
					lcdcmd(0x80);
					lcddata(0x7C);
					//lcdcmd(0xC0);
					countprint();
					break;
				 }

				P0&=0xF0;
				P0|=0x0B;		 
				if(P0==0x7B)
				 {
					lcdcmd(0x80);
					lcddata(0x21);
					//lcdcmd(0xC0);
					countprint();
					break;
				 }

				lcdcmd(0x80);
				lcddata(0x5E);
				//lcdcmd(0xC0);
				countprint();
				break;
			}
		MSDelay(10);
	}
}*/
 void  lcddata(unsigned  char  value)
 { 
	 lcdready();
	 ldata=value;
	 rs=1;
	 rw=0;
	 en=1;
	 MSDelay(1);
	 en=0;
	 return;
 }

 void  MSDelay(unsigned  int   value)
{
	unsigned  int  x,y;
	for(x=0; x < value; x++)
		for(y=0; y< 1275; y++);
}

⌨️ 快捷键说明

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