5数码管显示4×4键盘矩阵按键实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数码管显示4×4键盘矩阵按键实验

一、实验目的、原理及方法

键盘在单片机应用系统中能实现向单片机输入数据、传送命令等功能,是人工干预单片机的主要手段。该实验的目的在于了解键盘的工作原理,键盘按键的识别过程及识别方法,键盘与单片机的接口技术和编程。

键盘实质上是一组按键开关的集合。通常,键盘开关利用了机械触点的合、断作用。

键的闭合与否,反映在行线输出电压上就是呈高电平或低电平,如果高电平表示键断开,低电平则表示键闭合,反之也可。通过对行线电平高低状态的检测,便可确认按键按下与否。

为了确保CPU对一次按键动作只确认一次按键有效,还必须消除抖动。

当按键较多时会占用更多的控制器端口,为减少对端口的占用,可以使用行列式键盘接口,本实验中采用的4×4键盘矩阵可以大大减少对单片机的端口占用,但识别按键的代码比独立按键的代码要复杂一些。在识别按键时使用了不同的扫描程序代码,程序运行时数码管会显示相应按键的键值0~F。本实验中P1端口低4位连接是列线,高4位连接的是行线。

二、实验步聚及注意事项

1、使用Proteus IS 7 Professional应用程序,建立一个.DSN文件

2、在“库”下拉菜单中,选中“拾取元件”(快捷键P),分别选择以下元件:

AT

89C51、RX

8、7SEG-COM-ANGRN、BUTTON。

3、构建仿真电路

4、创建一个Keil应用程序:

新建一个工程项目文件;为工程选择目标器件(AT89C51);为工程项目创建源程序文件并输入程序代码;保存创建的源程序项目文件;把源程序文件添加到项目中。

5、把用户程序经过编译后生成的HEX文件添加到仿真电路中的处理器中(编辑元件→文件路径)

三、实验仪器

电脑一台,并装载软件:

Proteus IS 7 Professional应用程序

Keil应用程序

四、数据记录及处理

#include

51.h>

#define uint unsigned int

#define uchar unsigned char

Uchar code dsy_code[]={0xC0,0xF9,0xA4,

0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xFF};

uchar Pre_keyno=16,keyno=16;

void delayMS(char x){uchar i;

while(x--)

for(i=0;i<120;i++) ;}void keys_scan(){uchar tmp;

P1=0x0f;

delayMS

(1);

tmp=P1^0x0f;

switch(tmp){case 1:keyno=0;break;

case 2:keyno=1;break;

case 4:keyno=2;break;

case 8:keyno=3;break;

default:

keyno=16;}P1=0xf0;

delayMS

(1);

tmp=P1>>4^0x0f;

switch(tmp){case 1:keyno+=0;break;

case 2:keyno+=4;break;

case 4:keyno+=8;break;

case 8:keyno+=12;break;}}

main(){P0=0xff;

while

(1){P1=0xf0;

if(P1!=0xf0)keys_scan();

if(Pre_keyno!=keyno){P0=dsy_code[keyno];

Pre_keyno=keyno;}delayMS

(50);}}

五、结果分析

(自行填写,如:

功能是否实现;整个过程中存在哪些问题;如何解决的….)

相关文档
最新文档