网站大量收购独家精品文档,联系QQ:2885784924

课件:KeilC自学.ppt

  1. 1、本文档共124页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机的C51语言 运行效果图 单片机的C51语言 1.5.2.2 行列式键盘原理与编程 独立式键盘的电路简单,易于编程,但占用的I/O口线较多,当需要较多按键时可能产生I/O资源紧张问题。 独立式键盘电路 单片机的C51语言 行列式键盘——将I/O口分为行线和列线,按键跨接在行线和列线上,列线通过上拉电阻接正电源。 4×4行列式键盘 7407——六高压输出缓冲器/驱动器 行列式键盘的特点:占用I/O口线少,但软件过程复杂。 单片机的C51语言 ① 键盘扫描 同时将各行电平置1,分别将各列电平置0。 扫描码:key_scan[] = {0xef, 0xdf, 0xbf, 0x7f}; 写P3: P3=key_scan[i]; 键盘扫描原理(以P3口接4×4键盘为例) 第一次 1110 1111B 第二次 1101 1111B 第三次 1011 1111B 第四次 0111 1111B = 0xef = 0xdf = 0xbf = 0x7f 单片机的C51语言 (P3 0x0f) = 0x0f →无键压下 (P3 0x0f)≠0x0f →有键压下 ② 按键闭合状态判断 0#: 1110 1110B——0xee 1#: 1101 1110B——0xde F#: 0111 0111B——0x77 按键闭合前后,所在行线端口电平反转; 读P3后,若发现其低4位为f,说明无键压下;反之则相反。 键值——按键闭合时从引脚读出的数值。 单片机的C51语言 ③ 查找闭合键键号 for (j = 0 ; j 16 ;j++) { if (P3== key_buf [j]) return j; } 键值数组 key_buf [] = {0xee, 0xde, 0xbe, 0x7e, 0xed, 0xdd, 0xbd, 0x7d, 0xeb, 0xdb, 0xbb, 0x7b, 0xe7, 0xd7, 0xb7, 0x77}; 键号——按照一定规则给按键分配的编号 闭合键键号: 闭合键值与键值数组相等时的查询号 单片机的C51语言 实例7 功能:开机黑屏;按下任意按键后,数码管上显示该键的键号(0~F);若没有新键按下,维持前次按键结果。 行列式键盘+静态数码显示 单片机的C51语言 实例7程序流程图 获取键号函数 P3←键扫描码 (P3 0x0f) = 0x0f? 查找闭合键键号 键号key = 0~f 扫描4次? 键号key= -1 返回 Y Y N N 主函数 获取键号函数 键号 = -1? P2←键号显示码 N Y P2←黑屏显示码 单片机的C51语言 完整程序 单片机的C51语言 程序运行效果 单片机的C51语言 按键在闭合和断开瞬间会因弹簧开关的变形产生电压波动 软件消抖法: 延时10ms后再次扫描按键状态。若仍判为“闭合”说明确有键压下;若为“非闭合”说明是误动作。 按键抖动波形 键盘消抖原理: 单片机的C51语言 消抖实例: (实例5) 本章小结 C51的数据类型与变量的定义,都必须考虑单片机的存储结构。 在Keil下进行C51开发的基本步骤是:建立工程→输入源程序→设置编译参数→编译连接→下载调试。 单片机I/O口基本编程应用包括按键(或开关)状态检测、发光二极管输出控制、数码管动态显示以及行列式键盘扫描编程等内容。 单片机的C51语言 THANK YOU SUCCESS * * 可编辑 单片机的C51语言 键值: 按压K1——xxxx 1110B 按压K2——xxxx 1101B 按压K3——xxxx 1011B 按压K4——xxxx 0111B 无按键—— xxxx 1111B 按键动作判断——(P0 0x0f)是否等于 0x0f?若是,说明无按键动作,反之则有按键动作。 → 0x0e → 0x0d → 0x0b → 0x07 → 0x0f 获取按键状态 单片机的C51语言 修改方向和启停标志值 单片机的C51语言 亮灯P2输出码: xxxx 0001 xxxx 0010 xxxx 0100 xxxx 1000 D1~D4循环方向控制 char led [ ] = {0x01,0x02,0x04,0x08}; for (i=0; i=3; i++){ P2 = led [i]; } //↓移动 for (i=3; i=0; i-- ) { P2 = led [i]; } //↑移动 单片机的

文档评论(0)

iuad + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档