#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={"KEY NUMBER"} ;
uchar code table1[]={"KEY-CODE: H"} ;
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
sbit BEEP = P3^7 ; //蜂鸣器驱动线
uchar num,dis_buf,key,temp;
void keydown(void);
void keyscan(void);
void beep() ; //蜂鸣器
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay0(uchar x) //蜂鸣器延时程序
{
unsigned char i ;
while(x--)
{
for (i = 0;i<13;i++) {}
}
}
void write_com(uchar com) //写指令数据到LCD
{
LCD_RS=0;
LCD_RW=0;
P0=com;
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
void write_data(uchar date) //写显示数据到LCD
{
LCD_RS=1;
LCD_RW=0;
P0=date;
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
void init() //初始化
{
LCD_EN =0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void main()
{
init();
write_com(0x80+0x03);
for(num=0;num<10;num++)
{
write_data(table[num]);
delay(20);
}
write_com(0x80+0x42);
for(num=0;num<11;num++)
{
write_data(table1[num]);
delay(20);
}
dis_buf = 0x2d ; //显示字符"-"
while(1)
{ keydown();
write_com(0x80+0x4b) ;
write_data(dis_buf) ; //显示的数字
}
}
void keydown(void)
{
P1=0xF0;
if(P1!=0xF0)
{
keyscan();
beep();
}
}
void keyscan(void) //扫键
{
P1=0x0F ; //低四位输入
delay(1) ;
temp=P1 ; //读P1口
temp="temp"&0x0F ;
temp=~(temp|0xF0) ;
if(temp==1)
key="0" ;
else if(temp==2)
key="1" ;
else if(temp==4)
key="2" ;
else if(temp==8)
key="3" ;
else
key="16" ;
P1=0xF0 ; //高四位输入
delay(1) ;
temp=P1 ; //读P1口
temp="temp"&0xF0 ;
temp=~((temp>>4)|0xF0) ;
if(temp==1)
key="key"+0 ;
else if(temp==2)
key="key"+4 ;
else if(temp==4)
key="key"+8 ;
else if(temp==8)
key="key"+12 ;
else
key="16" ;
dis_buf = key ; //键值入显示缓存
dis_buf = dis_buf & 0x0f ;
if(dis_buf>9) //转换为ASCII码
dis_buf = dis_buf+0x37 ;
else
dis_buf = dis_buf+0x30 ;
}
void beep() //蜂鸣器驱动
{
unsigned char i ;
for (i=0;i<100;i++)
{
delay0(4) ;
BEEP=!BEEP ; //BEEP取反
}
BEEP=1 ; //关闭蜂鸣器
delay(250) ; //延时
}
文章评论(0条评论)
登录后参与讨论