LED数码管显示矩阵键盘按键的设计

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

任务九设计说明2 一、电路原理及仿真图:

二、程序设计:

#include

#define uchar unsigned char

uchar

display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x0 7,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};

uchar key;

void get(){

uchar a;

P1=0x0f;

//按下按钮//

a=P1^0x0f;

switch(a) //确定行// {

case 1:key=0;break;

case 2:key=4;break;

case 4:key=8;break;

case 8:key=12;break;

case 0:key=16;}

P1=0xf0;

a=P1^0xf0;

switch(a) //确定列//{

case 16:key=key+3;break;

case 32:key=key+2;break;

case 64:key=key+1;break;

case 128:key=key+0;}} void main(){

P0=display[16];

get();

P0=display[key];

}

程序完成两个功能,首先扫描键盘,检测是否有按键按下并计算键值。

然后如果有按键按下则驱动数码管显示相应键值,否则显示”-“符号。

三、设计说明

如电路原理图所示,图中矩阵键盘和P3端口连接,共阳极数码管的段选

端和单片机的P0口连接,位选直接接到高电平,使得数码管始终处于选通状态。系统启动后,单片机逐行扫描键盘,当没有按键按下时,驱动数码管显示“-”符号,当检测到有按键按下时,单片机将相应键值对应的数码编码送至P0端口,驱动数码管以十六进制方式显示被按下的按键的键值。

四、遇到的问题

首先遇到的问题是系统启动后数码管没有任何显示,仔细查看仿真现象后发现P0口始终为高阻状态,于是怀疑是数码管极性错误。再检查数码管型号后发现果然使用了共阴极数码管,于是换成共阳极数码管后终于有了显示。其次是希望键值从键盘的左下角起始,即左下角键值为0。但由于对键盘的扫描方向理解的不是很透彻,导致调试了很多次,键值排列顺序都不尽人意。不过最终还是达到了设计要求。

相关文档
最新文档