5数码管显示4×4键盘矩阵按键实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);}} 五、结果分析 (自行填写,如: 功能是否实现;整个过程中存在哪些问题;如何解决的….)