- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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 结果不
您可能关注的文档
最近下载
- 河南省漯河市郾城区2022-2023学年八年级上学期期末英语试题(含答案).docx VIP
- 计算机外部设备装配调试员练习题库及参考答案.docx VIP
- 2024首届全国红旗杯班组长大赛题库及答案(5)(第8001-10000题).docx VIP
- 贵州银行2017年年度报告.pdf
- 35kv集电线路施工组织设计.docx
- 2024首届全国红旗杯班组长大赛题库及答案(4)(第6001-8000题).docx VIP
- 可变形超材料技术发展现状及应用综述.docx VIP
- 王艳艳《工程招投标与合同管理》2-1第二章 工程项目招标.ppt VIP
- 2024首届全国红旗杯班组长大赛题库及答案(3)(第4001-6000题).docx VIP
- 2024首届全国红旗杯班组长大赛题库及答案(2)(2001-4000题).docx VIP
文档评论(0)