|
#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(); //檢測按鍵函數(shù)
void UsartInit()
{
SCON=0X50; //設(shè)置為工作方式1
TMOD=0X20; //設(shè)置計(jì)數(shù)器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF4; //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的
TL1=0XF4;
ES=1; //打開接收中斷
EA=1; //打開總中斷
TR1=1; //打開計(jì)數(shù)器
}
/*******************************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void main(void)
{
unsigned char i;
UsartInit();
LcdInit();
for(i=0;i<16;i++)
{
// LcdWriteCom(0x80);
LcdWriteData(PuZh[i]);
}
while(1)
{
KeyDown();
}
}
/*******************************************************************************
* 函 數(shù) 名 : KeyDown
* 函數(shù)功能 : 檢測有按鍵按下并讀取鍵值
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
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;
} }
}
/*******************************************************************************
* 函 數(shù) 名 : Delay10ms
* 函數(shù)功能 : 延時函數(shù),延時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--);
}
這是發(fā)射程序,用了LCD1602 |
|