4.2.第十个实验--检测键值并使用数码管显示
2016-06-01 16:34
369 查看
第十个实验–检测键值并使用数码管显示
预备知识:(1)什么是键值:给每一个按键一个编码值,通过编码值来判断是哪个按键被按下了。
(2)在大程序中,键值的检测和处理事分开独立的。这样可以提高安全性。
(3)再次理解什么是键值,总共有8个按键,当第1个被按住,其对应的一个IO引脚变为低电平,那么接按键的8个按键的IO端口对应的二进制数就是1111 1110.以此类推,通过IO端口对应的八位二进制数来判断哪一个按键被按下。
实验过程分析:
(1)每一个按键设置一个键值keynum,当按键1被按下,keynum = 1,以此类推。
(2)测试八个按键分别被按下的键值
(3)编写按键处理函数
实验代码:
#include<reg51.h> int dm[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc7,0xa1,0x86,0x8e}; //独立数码管的段码表,显示从0到f void display(unsigned char); //按键处理函数声明 void main(void) { unsigned char i=0; unsigned char j = 0; unsigned char keynum = 0; //keynum保存每一个按键的键值 /*******************解决不能同时按住两个按键的问题**************************/ for(i=0;i<8;i++) { //假设原来是第五个按键 1110 1111 if(P1 & (0x1<<i)==0) //再按第六个按键 1101 1111 这时候那一个0 第5位跑到了第6位 { //这里的0x1左移了5位跑到了第6位上,所以键值keynum = i + 1 keynum = i+1; } } /***********************************按键检测****************************/ while(1) { if(P1==0xfe) //P1端口接独立按键 { keynum = 1; } if(P1==0xfd) { keynum = 2; } if(P1==0xfb) { keynum = 3; } if(P1==0xf7) { keynum = 4; } if(P1==0xef) { keynum = 5; } if(P1==0xdf) { keynum = 6; } if(P1==0xbf) { keynum = 7; } if(P1==0x7f) { keynum = 8; } /******************下面是按键的处理*********************************/ display(keynum); //按键的处理函数 } } /******************************独立数码管显示***********************/ void display(unsigned char keynum) { P0 =dm[keynum]; //P0接数码管 }
实验总结:
这个实验把之间的实验结合在了一起,随着学习的深入,代码也会越来越长,难度也越来越大。多总结多回顾。
相关文章推荐
- OPC UA官方文档翻译Part 1 --待续
- offsetTop和offset().top
- Android之序列化浅析
- [LeetCode][2]Add Two Numbers解析 -Java实现
- Instagantt
- Spring AOP
- Android上拉加载下拉刷新(使用第三方类库实现的)
- Java Exception in thread "main" java.lang.NoClassDefFoundError问题
- Saltstack-UI (halite) 安装
- hql语句
- 41 First Missing Positive
- Linux下静默安装 oracle参考链接(for单实例、for RAC集群)
- Spring配置文件浅析(学习笔记)
- 如何开启MySQL的慢查询日志
- Android显示Gif动图
- 开发神器的打造--开篇
- Consul入门
- python __ini__.py
- Hibernate中,left join、inner join以及left
- docker-容器常用操作