C51单片机05(键盘)_第1页
C51单片机05(键盘)_第2页
C51单片机05(键盘)_第3页
C51单片机05(键盘)_第4页
C51单片机05(键盘)_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、51系列单片机第第5讲讲 单片机键盘单片机键盘独立按键独立按键独立按键触发的中断独立按键触发的中断#includevoid main()TCON=0 x00;/设置外部中断为电平触发方式设置外部中断为电平触发方式EA=1;/中断总控开放中断总控开放EX0=1;/外部中断外部中断INT0开放开放EX1=1;/外部中断外部中断INT1开放开放P0=0 x00;/数码管不显示任何内容数码管不显示任何内容while(1);/等待中断发生等待中断发生void keypress0() interrupt 0 /外部中断外部中断INT0服务程序服务程序P0=0 x3f;/数码管数码管0显示数字显示数字0P2

2、=0 x00;void keypress1() interrupt 2 /外部中断外部中断INT1服务程序服务程序P0=0 x06;/数码管数码管1显示数字显示数字1P2=0 x01;练习练习 用查询方式检测独立按键用查询方式检测独立按键S19是否按下,若是否按下,若第一次按下,第一次按下,LED0发光;第二次按下,发光;第二次按下,LED0熄灭,循环往复。熄灭,循环往复。程序代码程序代码#include#define uchar unsigned char#define uint unsigned intsbit KEY1 = P32;/独立按键独立按键S19连接的端口连接的端口sbit L

3、ED0 = P00;/独立发光二极管连接端口独立发光二极管连接端口void Delay(uint milisec)/延时延时10msuint i,j;for(i=0; imilisec; i+)for(j=0; j1827; j+);程序代码程序代码void KEY()if(KEY1=0)/如果检测到有键按下如果检测到有键按下Delay(2); /20毫秒软件防抖毫秒软件防抖if(KEY1=0)/再次确认是否有键按下再次确认是否有键按下 LED0 = LED0;/LED显示取反显示取反Delay(50);/延时延时0.5秒再进行下次按键的检测秒再进行下次按键的检测void Main(void)

4、while(1) KEY();/查询方式持续检测是否有键按下查询方式持续检测是否有键按下练习练习 用查询方式检测独立按键用查询方式检测独立按键S19按下的次数,按下的次数,并在数码管并在数码管LED7上显示,最大计数值为上显示,最大计数值为9,超过超过9则从则从0开始重新计数。开始重新计数。#include#define uchar unsigned char#define uint unsigned intuchar code table16 = 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0

5、 x39,0 x5e,0 x79,0 x71;sbit KEY1 = P32;/独立按键独立按键S19连接的端口连接的端口uint k=0;void Delay(uint milisec)/延时延时10msuint i,j;for(i=0; imilisec; i+)for(j=0; j9) k=0; P0=tablek;/获取获取LED段位码段位码 Delay(50);/延时延时500ms再进行下次按键的检测再进行下次按键的检测练习练习 按下独立键按下独立键S19,使独立发光二极管,使独立发光二极管LED8发光发光1秒,然后自行熄灭(利用定时器实现秒,然后自行熄灭(利用定时器实现准确定时)准

6、确定时)练习练习 连续多次按下独立键连续多次按下独立键S19,使独立发光二极,使独立发光二极管管LED0LED8依次轮流发光,到头以后能依次轮流发光,到头以后能自行返回开始,循环执行自行返回开始,循环执行4 * 4 键盘阵列键盘阵列 若无键按下,读回的低若无键按下,读回的低4位为全位为全“1”0111练习练习 用查询方式扫描用查询方式扫描4 * 4键盘阵列,在最右侧键盘阵列,在最右侧数码管数码管LED(LED7)上显示用户按键的位置上显示用户按键的位置(0F)分析是否有键按下分析是否有键按下 先向先向P0口输出口输出0 xf0(高四位列选为全(高四位列选为全1 ,低四位行选为全低四位行选为全0

7、),然后读回),然后读回 由于由于P0口输出有锁存,若无键按下,从口输出有锁存,若无键按下,从P0口读回应该仍为口读回应该仍为0 xf0,低四位行选保持全,低四位行选保持全0 若读回值不为若读回值不为0 xf0,即低四位行选不为全,即低四位行选不为全0,说明有键按下说明有键按下111100001分析是哪个键按下分析是哪个键按下 双重循环双重循环 先选定一列,再逐行扫描,获得键位置码先选定一列,再逐行扫描,获得键位置码 将键位置码送到将键位置码送到LED7显示显示第第0次扫描,次扫描,P1输出输出0 xef(11101111)01111111 第第0次读回次读回P1,P1 & 00000

8、001,结果不为,结果不为0 第第1次读回次读回P1,P1 & 00000010,结果不为,结果不为0 第第2次读回次读回P1,P1 & 00000100,结果不为,结果不为0 第第3次读回次读回P1,P1 & 00001000,结果不为,结果不为0说明按下的键不在P14对应的列第第1次扫描,次扫描,P1输出输出0 xdf(11011111)10111111 第第0次读回次读回P1,P1 & 00000001,结果不为,结果不为0 第第1次读回次读回P1,P1 & 00000010,结果不为,结果不为0 第第2次读回次读回P1,P1 & 0000

9、0100,结果不为,结果不为0 第第3次读回次读回P1,P1 & 00001000,结果不为,结果不为0说明按下的键不在P15对应的列第第2次扫描,次扫描,P1输出输出0 xbf(10111111)11011111 第第0次读回次读回P1,P1 & 00000001,结果不为,结果不为0 第第1次读回次读回P1,P1 & 00000010,结果为,结果为0 找到了按键所在的列找到了按键所在的列(2)与行与行(1)说明按下的键在P16对应的列0程序代码程序代码#include#include#define uint unsigned int#define uchar un

10、signed charuchar code table16 = 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;void Delay_1ms(uint i)/1ms延时延时uchar x,j;for(j=0;ji;j+) for(x=0;x=148;x+);void delay()/一个很短的延时一个很短的延时int i,j;for(i=0; i=20; i+);键盘扫描的关键代码键盘扫描的关键代码uchar Keyscan(void)/返回一个返回一

11、个0F的键位置码的键位置码uchar i, j, temp; uchar Buffer4 = 0 xef, 0 xdf, 0 xbf, 0 x7f;for(j=0; j4; j+)/从第从第0列开始,逐列扫描列开始,逐列扫描P1 = Bufferj;/向向P1口输出列扫描码口输出列扫描码(高高4位含有一个位含有一个0)delay();/短暂延时,等待短暂延时,等待 P1 口的状态稳定口的状态稳定temp = 0 x01; /从第从第0行开始,逐行扫描行开始,逐行扫描 for(i=0; i4; i+) if(!(P1 & temp) /若有键按下,若有键按下, P1 & temp为全为全“0” return (j*4+i);/返回键位置返回键位置(j表示列号,表示列号, i表示行号表示行号) temp = 1;/左移一位,扫描下一行左移一位,扫描下一行主程序主程序void Main(void)uchar Key_Value; /读出的键值读出的键值while(1)P1 = 0 xf0;/检测是否有键按下检测是否有键按下if(P1 != 0 xf0)/若有键按下若有键按下 Delay_1ms(15);/等待等待15ms,按键消抖,按键消抖 if(P1 != 0 xf0)/确实有键按下确实有键按下 Key_Valu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论