


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校建设工程环保及“治污减霾”措施计划
- 2025年新学期幼儿园心理健康促进工作计划
- 电子器件主要设备材料采购质量控制措施
- 医院患者跌倒、坠床环境优化措施
- 老旧小区外立面管线梳理与整合方案
- 2025年制药厂质量与感染管理工作计划
- 自动化设备项目质量保证措施
- 医药研发经理岗位职责
- 医院电气安装关键难点及监理措施
- 企业新冠肺炎急救演练流程
- 2025年职业指导师考试试卷:职业指导师专业能力
- 小学英语人教版四年级下册 巩固强化练(含答案)
- 2025-2026学年粤教粤科版(2024)小学科学二年级上册(全册)教学设计(附目录)
- 2025年山东高考历史试卷真题讲评及备考策略指导(课件)
- 供养中心考试题及答案
- 2025年云南省中考英语试卷真题(含标准答案及解析)
- 开学第一课(教学课件)-八年级语文上册同步备课系列(部编版)
- 【公开课】第一节+内能及其改变(教学课件)物理沪科版2024九年级全一册
- 海事英语阅读 课件Unit 9 Text A Types of Maritime Vessels
- 发型师的职业素养
- 2025科技公司研发部门劳动合同范本
评论
0/150
提交评论