51单片机矩阵扫描键盘程序实例_第1页
51单片机矩阵扫描键盘程序实例_第2页
51单片机矩阵扫描键盘程序实例_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论