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

第5章-MCS-51单片机的外围模块及应用.ppt

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

* * * void main() { for(;;) { uint a,b; a=200; b=10;? poiiu(a,b); } } 5.1.6 并行口的应用——拨码盘的接口和编程 一、BCD拨码盘的构造 拨码盘的结构和型号有多种,常用的为BCD拨码盘。BCD拨码盘具有0~9十个位置,可以通过齿轮型圆盘拨到所需的位置,每个位置都有相应的数字指示,一个拨码盘可以输入1位十进制,如果要输入4位十进制数据,需4个BCD拨码盘。 ?表示插入控制线A与数据线不通; * 表示输入控制线A与数据线接通。 二、BCD码拨码盘的接口方法 图5-6 二位BCD码的接口 图5-7 4位BCD码的接口 例5.6 扫描法读4个BCD码拨码盘程序 #include reg52.h #define uchar unsigned char #define uint unsigned int uint inbcd() { uint x=0; uchar a,b,i; for(i=0,b=0x7f;i4;i++) { P1=b; a=P1; a=0xf; x=x*10+a; b =1; b |=0x80; } return x; } void main() { for(;;) { uint y; y=inbcd(); } } 在单片机应用系统中,经常需要驱动一些直流负载,比如发光二极管、蜂鸣器、扬声器、 5.1.7 直流负载驱动 5.1.7 并行口的应用——4X4键盘的接口和编程 一、键盘工作原理 用于按键数目较多的场合,由行线和列线组成,按键位于行、列的交叉点上。 按键数目较多的场合,矩阵键盘与直接编码输入键盘相比,要节省很多的I/O口线。 行线X0~X3接P1.4~平P1.7; 列线Y0~Y3接P1.0~P1.3。 图5-9 4X4键盘结构和接口方法 二、键盘状态的判断 无键按下,该行线为高电平,当有键按下时,行线电平由列线的电平来决定。 由于行、列线为多键共用,各按键彼此将相互发生影响,必须将行、列线信号配合起来并作适当的处理,才能确定闭合键的位置。 三、闭合键建号的识别 1.逐行扫描法 识别键盘有无键被按下的方法,分两步进行: 第1步:识别键盘有无键按下; 把所有列线置0,检查各行线电平是否有变化,如有变化,说明有键按下,如无变化,则无键按下。 第2步:如有键被按下,识别出具体的按键。 上述方法称为扫描法,即先把某一列置低电平,其余各列为高电平,检查各行线电平的变化,如果某行线电平为低,可确定此行列交叉点处的按键被按下。 2.行翻转法 第1步:列线输出为全低电平,则行线中电平由高变低的所在行为按键所在行。 第2步:行线输出为全低电平,则列线中电平由高变低所在列为按键所在列。 结合上述两步,可确定按键所在行和列。 把上两步得到的输入数据拼成一个字节数据作为键值,则键值和键号的对应关系如下表所示: 表5-3 键值表 四、键抖动及处理 在理想状态下,按键引脚电压变化如图5-9(a)所示。 实际上,在按键被按下或释放的瞬间,由于机械触点存在弹跳现象,实际按键电压波形如图5-9(b)所示,即机械按键在按下和释放瞬间存在抖动现象。 抖动时间的长短与按键的机械特性有关,一般在5~10ms之间,而按键稳定闭合期的长短与按键时间有关,从数百毫秒到数秒不等。 图5-9 键按下和释放时行线电压波形 (a) 理想状态下按键电压波形; (b) 实际按键电压波形 如何消除按键的抖动 常用软件来消除按键抖动。 基本思想:检测到有键按下,延迟10~20ms(因为机械按键由按下到稳定闭合的时间为5~10ms)再去判别按键是否处于按下状态,并确定是哪一个按键被按下。 例5.7 行翻转法键输入程序设计 #include reg52.h #include “stdio.h” #define uchar unsigned char #define uint unsigned int uchar code k_tab[]={0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7, 0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77}; uchar idata D_BUF[16];? uchar nkey_s0(uchar y) { uchar i,b; for(i=0;i16;i++) { b=k_ta

文档评论(0)

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

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

1亿VIP精品文档

相关文档