#include<reg51.h>
#include"lcd.h"
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
unsigned char data1;
unsigned char KeyValue;
//用来存放读取到的键值
unsigned char PuZh[]=" hello boys` ";
unsigned char dat[]="aheadback left right";
void Delay10ms(); //延时50us
void KeyDown(); //检测按键函数
void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF4; //计数器初始值设置,注意波特率是4800的
TL1=0XF4;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main(void)
{
unsigned char i;
UsartInit();
LcdInit();
for(i=0;i<16;i++)
{
// LcdWriteCom(0x80);
LcdWriteData(PuZh[i]);
}
while(1)
{
KeyDown();
}
}
/*******************************************************************************
* 函 数 名 : KeyDown
* 函数功能 : 检测有按键按下并读取键值
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void KeyDown()
{ if(k1==0)
{ Delay10ms();
if(k1==0)
{
KeyValue=0;
LcdWriteCom(0x80+0x40);
LcdWriteData(dat[KeyValue]);
LcdWriteData(dat[KeyValue+1]);
LcdWriteData(dat[KeyValue+2]);
LcdWriteData(dat[KeyValue+3]);
LcdWriteData(dat[KeyValue+4]);
while(!k1);
data1=49;
SBUF=data1;
while(!TI);
TI=0;
}
}
else if(k2==0)
{
Delay10ms();
if(k2==0)
{
KeyValue=5;
while(!k2);
LcdWriteCom(0x80+0x40);
LcdWriteData(dat[KeyValue]);
LcdWriteData(dat[KeyValue+1]);
LcdWriteData(dat[KeyValue+2]);
LcdWriteData(dat[KeyValue+3]);
LcdWriteData(dat[KeyValue+4]);
data1=50;
SBUF=data1;
while(!TI);
TI=0;
} }
else if(k3==0)
{ Delay10ms();
if(k3==0)
{
KeyValue=10;
while(!k3);
LcdWriteCom(0x80+0x40);
LcdWriteData(dat[KeyValue]);
LcdWriteData(dat[KeyValue+1]);
LcdWriteData(dat[KeyValue+2]);
LcdWriteData(dat[KeyValue+3]);
LcdWriteData(dat[KeyValue+4]);
data1=51;
SBUF=data1;
while(!TI);
TI=0;
} }
else if(k4==0)
{ Delay10ms();
if(k4==0)
{
KeyValue=15;
while(!k4);
LcdWriteCom(0x80+0x40);
LcdWriteData(dat[KeyValue]);
LcdWriteData(dat[KeyValue+1]);
LcdWriteData(dat[KeyValue+2]);
LcdWriteData(dat[KeyValue+3]);
LcdWriteData(dat[KeyValue+4]);
data1=52;
SBUF=data1;
while(!TI);
TI=0;
} }
}
/*******************************************************************************
* 函 数 名 : Delay10ms
* 函数功能 : 延时函数,延时10ms
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Delay10ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
这是发射程序,用了LCD1602 |