89C51单片机44键盘应用实例程序设计(含硬件仿真电路图)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
89c51单片机4*4键盘应用实例硬件仿真电路图如下:
程序如下(编译成功):
#include"reg51.h"
#include"LCD1602.h"
#include"hardware.h"
char code tab[4][4]={ {'1','4','7','#'},
{'2','5','8','0'},
{'3','6','9','*'},
{'A','B','C','D'}}; //0到F的16个键植
void delay(unsigned char a)
{
unsigned char i;
while(a--)
for(i=100;i>0;i--)
;
}
char kbscan() //键盘扫描
{
unsigned char hang,lie,key;
if(P3!=0x0f)
delay(5);
if(P3!=0x0f)
{
switch(P3&0x0f)
{
case 0x0e:lie=0;break;
case 0x0d:lie=1;break;
case 0x0b:lie=2;break;
case 7:lie=3;break;
}
P3=0xf0;
P3=0xf0;
switch(P3&0xf0)
{
case 0xe0:hang=0;break;
case 0xd0:hang=1;break;
case 0xb0:hang=2;break;
case 0x70:hang=3;break;
}
P3=0x0f;
while(P3!=0x0f);
key=tab[hang][lie];
}
else
key=0;
return (key);
}
void main()
{
unsigned char temp;
LCD_initial();
LCD_prints("piaoling");
P3=0x0f;
P0=0xff;
while(1)
{
temp=kbscan();
if(temp!=0)
{
P0=temp;
LCD_set_position(0x40);
LCD_printc(temp);
}
}
}