- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 房产税城镇土地使用税政策讲解.pdf VIP
- 《弟子规正版全文-带拼音-完善打印版》.docx VIP
- 新大学日语阅读与写作1东娜练习答案及译文.pptx
- 第19课 法国大革命和拿破仑帝国 课件(共33张PPT).pptx VIP
- 施工现场节假日前安全检查表.doc VIP
- 500kV龙昌Ⅰ、Ⅱ号线直线塔绝缘子单串改双串施工方案.pdf VIP
- 结构优化的群体智能优化算法研究.pdf VIP
- 新视野大学英语(第四版)读写教程1(思政智慧版)课件 B1U1 Section A Fresh start.pptx VIP
- 北京-407EV-标准版-BJ5030XXYVRRC-BEV-407EV纯电动汽车产品使用说明书.pdf VIP
- GB50666混凝土结构工程施工规范.pdf VIP
文档评论(0)