下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上51单片机矩阵扫描键盘程序#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar idata x,y;uchar code disp_code = 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, / 0-9 0 1 2 3 4 5 6 7 8 9 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, / 10-15 a b
2、c d e f 0x7F, 0xBF, 0x9C, 0xFF / 16-19 . - 。null; /数码管显示值列表void delay(uchar c) /延时函数 char a,b; for(a=c;a>0;a-) for(b=110;b>0;b-);uchar key_scan() /键盘扫描函数 uchar k; uchar z; x=0x00; y=0x00; P3=0xf0; /先给P3赋一个初值 if(P3!=0xf0) /判断P3不等于所赋初值,说明有健按下 delay(10); /消除键盘抖动 延时10ms if(P3!=0xf0) x=P3; P3=0x0f;
3、 y=P3; z=x|y; switch(z) case 0xee: k=0; break; case 0xed: k=1; break; case 0xeb: k=2; break; case 0xe7: k=3; break; case 0xde: k=4; break; case 0xdd: k=5; break; case 0xdb: k=6; break; case 0xd7: k=7; break; case 0xbe: k=8; break; case 0xbd: k=9; break; case 0xbb: k=10;break; case 0xb7: k=11;break;
4、case 0x7e: k=12;break; case 0x7d: k=13;break; case 0x7b: k=14;break; case 0x77: k=15;break; return(k);void main() uchar dat; while(1) P3=0xf0; while(P3!=0xf0) dat=key_scan(); P1=0; P0=disp_codedat; 2:#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned in
5、tuchar idata x,y;uchar code disp_code = 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, / 0-9 0 1 2 3 4 5 6 7 8 9 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, / 10-15 a b c d e f 0x7F, 0xBF, 0x9C, 0xFF / 16-19 . - 。null; /数码管显示值列表void delay(uchar c) /延时函数 char a,b; for(a=c;a>0;a-) for(b=110;b&
6、gt;0;b-);uchar key_scan() /键盘扫描函数 uchar k; uchar z; x=0x00; y=0x00; P3=0xf0; /先给P3赋一个初值 if(P3!=0xf0) /判断P3不等于所赋初值,说明有健按下 delay(10); /消除键盘抖动 延时10ms if(P3!=0xf0) x=P3; /*这里稍作解释:起初我们已经给P3赋了一个0xf0的值,如果有键按下,P3便一定不再是0xf0 , 如果我们这时查看P3的值我们就能知道是哪一列的键按下了(说明一下,我的开发板上P3.0-P3.3接的是列) 但这时我们先不看P3的值,这时我们先把P3的值赋给x,再给
7、P3赋一个0x0f的值,由于这两条语句执行的速度是 很快的,是us级的,而我们按一个按键怎么也得几十到上百ms,尽管我们在前面已经做过一个10ms的延时,但是 在我们给P3重新赋值后,按键一定还是闭合的,所以P3被赋0xof后由于有按键闭合,故P3的值又变了,这时候我们 查看P3的值就可以判断出来是是哪一行的按键按下了.然后我们把这时的P3值赋给y,再用x或上y,把他们的值赋给z 然后判断z的值就可以知道是具体哪一个键被按下了!(行和列都确定了,具体是哪一个键自然就确定了) */ P3=0x0f; y=P3; z=x|y; switch(z) case 0xee: k=0; break; ca
8、se 0xed: k=1; break; case 0xeb: k=2; break; case 0xe7: k=3; break; case 0xde: k=4; break; case 0xdd: k=5; break; case 0xdb: k=6; break; case 0xd7: k=7; break; case 0xbe: k=8; break; case 0xbd: k=9; break; case 0xbb: k=10;break; case 0xb7: k=11;break; case 0x7e: k=12;break; case 0x7d: k=13;break; case 0x7b: k=14;break; case 0x77: k=15;break; return(k);void main() uchar dat; while(1) P3=0xf0; while(P3!=0xf0) /*刚开始运行程序就判断
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026国网北京市电力校园招聘(提前批)笔试模拟试题浓缩500题及一套参考答案详解
- 2026秋季国家管网集团西北公司高校毕业生招聘考试参考试题(浓缩500题)及答案详解(基础+提升)
- 2026国网江西省高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题附答案详解(研优卷)
- 2025国网内蒙古电力公司高校毕业生提前批招聘笔试模拟试题浓缩500题附答案详解(培优b卷)
- 2026国网辽宁省电力公司高校毕业生提前批招聘笔试参考题库浓缩500题附答案详解(巩固)
- 2025国网辽宁省电力校园招聘(提前批)笔试模拟试题浓缩500题带答案详解
- 2025国网青海省电力校园招聘(提前批)笔试模拟试题浓缩500题及答案详解(夺冠系列)
- 2026秋季国家管网集团云南公司高校毕业生招聘考试备考试题(浓缩500题)及答案详解【新】
- 2026国网河南省电力校园招聘(提前批)笔试模拟试题浓缩500题附答案详解(典型题)
- 2026秋季国家管网集团福建公司高校毕业生招聘考试备考试题(浓缩500题)及参考答案详解1套
- T/CEPPEA 5021-2023城市居住区电动汽车充电设施设计规范
- 现浇楼板安全协议书
- 创新型的数字政府在医疗领域的实践
- 拌料班管理制度
- 2025合同模板设备采购合同中英文对照范本
- 高职单招信息技术试题库
- 技术经纪人(初级)考试试题(附答案)
- 2025年1月时事政治考试100题及参考答案
- 《标准编写方法》课件
- 新产品开发研发进度推进计划
- 遵义市正安县公安局招聘警务辅助人员笔试真题2024
评论
0/150
提交评论