矩阵键盘的键值用数码管显示.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE PAGE 1 矩阵键盘的键值用数码管显示 ? 矩阵按键项目:分别按下 4*4 矩阵键盘,一共 16 个按键,数码管会相应的 显示 1-16 不同的数字。 最终效果图: 现象说明:效果图中我们看到:按 4 键,数码管上即显示 04,同理按 5 键数码 管上即显示 05。上面显示的 2 个 LED 灯是硬件上特意设计的,只要按键按下, 相应的灯就亮了。目前不用太在意。 此项目练习的目的: (1)认识矩阵键盘。 (2)了解矩阵键盘的原理。 (3)熟悉软件编程。 (4)熟悉软件的使用。 完整代码: (注意,代码中省略的部分是我们目前可以不关心的内容,在下一阶 段将着重介绍,此代码已编译测试通过) #include reg52.h //头文件 #include digitron_drv.h //调用数码管显示程序, 现在可以把它当做一个主体 #define uint unsigned int //宏定义 #define uchar unsigned char uchar key_num; //矩阵键盘键值 /*延时函数*/ void delay(uchar x) { uchar i,j; for(i = x;i 0;i--) for(j = 100;j 0;j--); } /*键盘键值显示*/ void display(void) { DigShowNumber(1,key_num%10,0); //个位 除以 10 取余 DigShowNumber(2,key_num/10,0); //十位 除以 10 取整 } /*键盘扫描*/ void keyboard(void) { uchar temp; P1=0xef; //将第 1 列置位低电平,其余的为高电平 temp=P1; //读取 P1 口当前的状态, 赋值给临时变量 temp,用于后面的计算 temp=temp0x0f; //判断 temp 的,低四位是否为 0, if(temp!=0x0f) //如果 temp 不等于 0x0f,说明有按键按下 { delay(10); //延时消抖 temp=P1; //重新读一次 P1 口数据 temp=temp0x0f;// 如果 temp 仍然不等于 0x0f,这次说明第 1 列真的 有按键按下 if(temp!=0x0f) { temp=P1; switch(temp) //判断按下的是该列的第几行 { case 0xee: //如果读到 P1 是 0xee, 说明是第 1 列和第 1 行的交叉 键,即数字键 7 key_num=7; break; case 0xed: //如果读到 P1 是 0xed, 说明是第 1 列和第 2 行的交叉 键,即数字键 4key_num=4; break; case 0xeb: //如果读到 P1 是 0xeb, 说明是第 1 列和第 3 行的交叉 键,即数字键 1 key_num=1; break; case 0xe7: //如果读到 P1 是 0xe7, 说明是第 1 列和第 4 行的交叉 键,即数字键 0 key_num=0; break; } } //在判断完按键序号后,还要等待按键被释放,检测释放语句如下: while(temp!=0x0f) //等待按键被释放 { temp=P1; temp=temp0x0f; //不断的读取 P1 口数据,然后和 0x0f“与” 运 算,只要结果不等于 0x0f,说明按键没有被 释放,直到按键被释放才退出 while display(); } } //以下程序意义同上,继续进行第 2、3、4 列的检测 P1=0xdf; temp=P1; temp=temp0x0f; if(temp!=0x0f) { delay(10); temp=P1; temp=temp0x0f; if(temp!=0x0f) { temp=P1; switch(temp) { case 0xde: key_num=8; break; case 0xdd: key_num=5; break;case 0xdb: key_num=2; break; case 0xd7: key_num=10; break; } } while(temp!=0x0f) { temp=P1; temp=temp0x0f; display(); } } P1=0xbf; temp=P1; temp=temp0x0f; if(temp!=0x0f) { delay(10); temp=P1; temp=temp0x0f; if(temp!=0x0f) { temp=P1; switch(temp) { case 0xbe: key_num=9; break; case 0xb

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档