C51单片机05(键盘).ppt

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C51单片机05(键盘)

第5讲 单片机键盘 独立按键 独立按键触发的中断 #includereg52.h void main() { TCON=0x00; //设置外部中断为电平触发方式 EA=1; //中断总控开放 EX0=1; //外部中断INT0开放 EX1=1; //外部中断INT1开放 P0=0x00; //数码管不显示任何内容 while(1); //等待中断发生 } void keypress0() interrupt 0 //外部中断INT0服务程序 { P0=0x3f; //数码管0显示数字0 P2=0x00; } void keypress1() interrupt 2 //外部中断INT1服务程序 { P0=0x06; //数码管1显示数字1 P2=0x01; } 练习 用查询方式检测独立按键S19是否按下,若第一次按下,LED0发光;第二次按下,LED0熄灭,循环往复。 程序代码 #includereg52.h #define uchar unsigned char #define uint unsigned int sbit KEY1 = P3^2; //独立按键S19连接的端口 sbit LED0 = P0^0; //独立发光二极管连接端口 void Delay(uint milisec) //延时10ms { uint 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) { while(1) { KEY(); //查询方式持续检测是否有键按下 } } 练习 用查询方式检测独立按键S19按下的次数,并在数码管LED7上显示,最大计数值为9,超过9则从0开始重新计数。 #includereg52.h #define uchar unsigned char #define uint unsigned int uchar code table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; sbit KEY1 = P3^2; //独立按键S19连接的端口 uint k=0; void Delay(uint milisec) //延时10ms { uint i,j; for(i=0; imilisec; i++) for(j=0; j1827; j++); } void Main(void) { uint k=0; P2=0x07; while(1) { if(KEY1==0) //如果检测到有键按下 { Delay(2); //20毫秒软件防抖 if(KEY1==0) //再次确认是否有键按下 { k++; //计数 if(k9) k=0; P0=table[k]; //获取LED段位码 } Delay(50); //延时500ms再进行下次按键的检测 } } } 练习 按下独立键S19,使独立发光二极管LED8发光1秒,然后自行熄灭(利用定时器实现准确定时) 练习 连续多次按下独立键S19,使独立发光二极管LED0~LED8依次轮流发光,到头以后能自行返回开始,循环执行 4 * 4 键盘阵列 若无键按下,读回的低4位为全“1” 练习 用查询方式扫描4 * 4键盘阵列,在最右侧数码管LED(LED7)上显示用户按键的位置(0~F) 分析是否有键按下 先向P0口输出0xf0(高四位列选为全1 ,低四位行选为全0),然后读回 由于P0口输出有锁存,若无键按下,从P0口读回应该仍为0xf0,低四位行选保持全0 若读回值不为0xf0,即低四位行选不为全0,说明有键按下 分析是哪个键按下 双重循环 先选定一列,再逐行扫描,获得键位置码 将键位置码送到LED7显示 第0次扫描,P1输出0xef 第0次读回P1,P1 结果不为0 第1次读回P1,P1 结果不

文档评论(0)

文档精品 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6203200221000001

1亿VIP精品文档

相关文档