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

📄 键盘液晶显示.c

📁 单片机外围电路
💻 C
字号:
#include<reg52.h>
sbit RS=P1^1;
sbit RW=P1^2;
sbit E=P1^0;
#define uchar unsigned char

//********************************以下是液晶显示部分程序*****************************




//--------------------------延时程序-------------------------------
void delay(uchar i)
{uchar a;
while(i--)
{for(a=0;a<=125;a++)
  {}
 }
}




 //-----------------------查LCD是否忙程序----------------------------

void wait(void)
{uchar temp;
do
  {RS=0;			   // 检验是否忙
  RW=1;
  E=1;
  delay(10);
  temp=P3;
  E=0;}
  while(temp&0x80);			 //10000000是忙。00000000是不忙。
    }


//------------------------清屏程序---------------------------------
void clear(void)
{ wait();

RS=0;
RW=0;
E=1;
P3=0x01;		    //清屏命令
E=0;
}


//-------------------------向LCD输入指令程序-------------------------
void command(uchar com)
{wait();
RS=0;						 
RW=0;
E=1;
P3=com;			        //指令
E=0;
}


//------------------------向LCD写数据程序-------------------------------
void lcddata(uchar num)
{wait();
RS=1;
RW=0;
E=1;
P3=num;
E=0;
}


//------------------------向LCD写地址程序---------------------------------
 
void position(unsigned char pos)
{
	unsigned char temp;
	
	wait();
	if ( pos<=0x10 )	                   
		temp=( pos+0x80-1 );             //第一行地址:0x00~~0x0f
	else
		temp=( ( pos-17)+0xC0 );         //第二行地址:0x40~~0x4f
		
	command(temp);
	delay(1);
}


 //---------------------显示字符程序-------------------------
 display(uchar address, uchar num)		 //位置为10进制,数为16进制
 {wait();
 position(address);
 lcddata(num);
 }



 //-------------------------初始化程序--------------------------
 void initial()
 { uchar i;
	
	delay(50);
	for(i=0;i<3;i++)                //很有必要	?
	command(0x38);                  //5*7 2行8位
	delay(5);
    command(0x0f);                  //显示开/关控制:开显示、关光标和光标闪烁
	command(0x06);                  //设置输入模式:AC自动加 1、关画面平移
	clear();
	}



//********************************以下是键盘扫描程序**********************************




//----------------------------------键盘扫描------------------------------------

void delay1(void)                                // 延时消抖
{uchar i;
for(i=0;i<=250;i++)
{;}
}


unsigned char keyboard()                        //    键盘扫描
{uchar search,keynum;
P2=0x0f;
if(P2|0xf0!=0xff)

{delay1();
if(P2|0xf0!=0xff)
{search=0xef;                                   //          列扫描

while(search!=0xff)                             //   扫描之前
{P2=search;
if((P2&0x0f)!=0x0f)
{keynum=P2;                                     //         捕捉此时按键信号
return(~keynum);}                            	//	  正逻辑返回
else search=(search<<1)|0x0f;
                                                //    若不在此行则换列扫描
        }
    }
 }
return 0;                                       //若无按键返回0    
}



//**********************************以下是液晶加键盘综合程序***********************************



//----------------------------------键盘液晶主函数-----------------------------------
//    (以开发16个按键的功能)

main()
{uchar key,p=0;
initial();
while(1)
{key=keyboard();
if(key!=0){delay(920);if(key!=0)p=p+1;}	      	   //延时,以确认按键仅按下一次,避免过多显示,次步十分重要!
switch(key)						 	                   
{case 0x11:display(p,0x41);break;	               //A		          键1
case 0x21:display(p,0x42);break;	   	           //B		          键2
case 0x41:display(p,0x43);break;		           //C		          键3
case 0x81:display(p,0x44);break;		           //D			      键4
case 0x12:display(p,0x45);break;		           //E			      键5
case 0x22:display(p,0x46);break;		           //F			      键6
case 0x42:display(p,0x47);break;		           //G		          键7
case 0x82:display(p,0x20);break; 		           //空格             键8
case 0x14:p=p-1;command(0x10);p--;break;	       //光标左移	      键9(p-1是为了抵消按键是的p++,保证只在显示字符是光标才移位)
case 0x24:p=p-1;command(0x14);p++;break;		   //光标右移	      键10
case 0x44:p=p-1;command(0x0c);break;	           //光标关           键11    
case 0x84:p=p-1;command(0x0f);break;			   //光标开	          键12
case 0x18:p=p-1;command(0x1c);break;              //屏幕右移    	  键13	 
case 0x28:p=p-1;command(0x18);break;           	   //屏幕左移	      键14
case 0x48:p=p-1;initial();p=0;break; 	           //初始化           键15
case 0x88:p=p-1;clear();p=0;break;				   //清屏	          键16
case 0:break;                                      //无按键则保持上次状态                      
    }
  }
}

⌨️ 快捷键说明

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