ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:1.15MB ,
资源ID:3785452      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3785452.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(CH4输入口的应用.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

CH4输入口的应用.docx

1、CH4输入口的应用课题名称 第四章输入端口的应用计划学时2课时内容分析 知识点:输入电路的设计教学目标及要求认识c51的输入口理解并掌握常见的输入设备(按钮开关、拨码开关、数字型拨码开关)与输入电路的设计方法。重点及措施教学重点:按钮开关、拨码开关的电路设计,去抖动的硬件和软件方法难点及措施教学难点:按钮开关、拨码开关的电路设计教学方式教学采用教师课堂讲授为主,使用多媒体教学方式,学生讨论、交流与提问。教学过程一、引入在第三章中介绍了c51系列单片机的4个I/O口,分别是P0、P1、P2和P3口,四个口均可作为输入口使用,经过本章的学习,我们可以掌握到常用的按钮开关和拨码开关的电路如何设计,并

2、通过7个实例具体讲解输入电路的应用。二、新授4.1认识输入口PORT 0 的输入功能 4.2 输入设备与输入电路设计4.2.1 输入设备 按钮开关(Tack Switch) 2、8P 拨码开关(DIP Switch) 数字型拨码开关的外观(四位数)与内部结构(每一位数) 电路板用数字型拨码开关的尺寸与外观(一位数) 1、按钮开关的输入电路 2、闸刀开关的输入电路 3、BCD 拨码开关的使用 4.2.3抖动与去抖动 1、抖动现象: 2、硬件去抖动: 通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。

3、因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。结论:RS触发器的R和S端,一个保持不变,一个改变,触发器的Q端不变,只有两个都改变,Q端才改变;单片机电路中的防抖现在一般都用程序防抖而不用触发器这些硬件防抖了。QnSRQn+1000000100101011不确定100110101101111不确定条件:Qn+1=S+RQnSR=02、硬件去抖动:RC 去抖动电路 PB1未被按下时,P2.3上是高电平,C1右侧是VCC,左侧是0。PB1被按下时,C1两侧会放电延时,C1右侧的正电荷越来越少,直到P2.3上是低电平,PB1抖动,貌似弹起,C1右侧的正电荷会增

4、加一点,但时间很短暂,可以忽略不计,此时P2.3上还是低电平,真到PB1按下稳定,C1放电结束如a图:按下按钮开关时,开关第一次接触时电容短路,电容快速放电,电容两端电压快速为0;开关弹开时,电路构成RC充电电路。电容两端的电压:VC=VCC*(1-e-t/RC)0.3VCCt/RC0.357 10ms/10k*c2.8uf电容选择在2.8uf5.6uf之间,一般R=10k,C=3.3uf,或R=100K,C=0.33uf3、软件去抖动 按钮开关动作与去抖动函数的波形分析 1)按下按钮,8051检测到第一个低电平信号时,随即调用debouncer函数以延迟 20ms,这段时间程序不动作。2)d

5、ebouncer函数结束后,继续检测开关是否为高电平?若检测到第一个高电平,再调用 debouncer函数以延迟 20ms,这段时间程序不动作。3)debouncer函数结束后,程序才响应该按钮所要进行的动作。 void debouncer(void) int i; for(i=0;i2400;i+)实例演练4-3-2按钮ON-OFF控制实验#include / 定义8051暂存器sbit PB1=P20; / 声明按钮1接至P2.0sbit PB2=P21; / 声明按钮2接至P2.1sbit LED=P10; / 声明LED为P1.0main() / 主程序开始 LED=1; / 关闭LE

6、D PB1=PB2=1; / 规划输入端口 while(1) / 无穷循环,程式一直跑 if (PB2=0) LED=1; / 若按下PB2,则关闭LED else if (PB1=0) LED=0; / 若按下PB1,则点亮LED / while循环结束 / 结束程序思考:1)在本实验里,有没有“抖动”的困扰? 2)若将按钮开关当成启动电机的 ON-OFF开关,而 LED换成继电器(RELAY),是否可作为电机控制? 3)若同时按下 PB1 与 PB2按钮会怎样? 实例演练4-3-3按钮切换式控制实验#include / 定义8051暂存器sbit PB1=P20; / 声明PB1接至P2.

7、0sbit LED=P10; / 声明LED接至P1.0void debouncer(void); / 声明防弹跳函数 main() / 主程式开始 LED=1; / 关闭LED PB1=1; / 规划P2.0为输入埠 while(1) / 无穷循环,程序一直跑 if (PB1=0) / 若按下PB1 debouncer();/ 呼叫防弹跳函数(按下时) LED=!LED; / 切换LED为反相 while(PB1 != 1);/ 若仍按住PB1,继续等 debouncer();/ 呼叫防弹跳函数(放开时) / if叙述结束 / while循环结束 / 主程序结束 void debouncer

8、(void) / 防弹跳函数开始 int i; / 声明整数变数i for(i=0;i2400;i+);/ 计数2400次,延迟约20ms / 防弹跳函数结束思考:在本实验里,改变 debouncer函数的时间长短,看看有什么影响? 若按住 PB1不放会怎样?如何改善? 实例演练4-3-4 :按钮开关应用实验 /* ch04-3-4.c -按钮应用(两按钮控制七段显示器上下数) */#include / 定义8051暂存器 #define SEG P0 / 定义七节显示器接至Port 0/* 声明七节显示器驱动信号阵列(共阳) */char code TAB10= 0xc0, 0xf9, 0x

9、a4, 0xb0, 0x99, / 数字0-4 0x92, 0x83, 0xf8, 0x80, 0x98 ; / 数字5-9sbit PB1=P20; / 声明按钮1接至P2.0sbit PB2=P21; / 声明按钮2接至P2.1void debouncer(void); / 声明防弹跳函数 /=主程式=main() / 主程序开始 unsigned char i=0; / 声明变量i初值=0 PB1=PB2=1; / 规划输入端口 SEG=TABi; / 输出数字至七段显示器 while(1) / 无穷循环,程式一直跑 if (PB1=0) / 判断PB1是否按下 debouncer();

10、/ 呼叫防弹跳函数 i= (i9)? i+1:0;/ 若i=9清除为0 SEG=TABi;/ 输出数字至七段显示器 while(PB1=0); / PB1是否按住? debouncer(); / 呼叫防弹跳函数 / if叙述结束 if (PB2=0) / 判断PB2是否按下 debouncer();/ 呼叫防弹跳函数 i= (i0)? i-1:9;/ 若i0则i=i-1,i=0重设为9 SEG=TABi; / 输出数字至七段显示器 while(PB2=0); / PB1是否按住? debouncer(); / 呼叫防弹跳函数 / if叙述结束 / while循环结束 / 主程序结束 /* 防弹

11、跳函数函数,延迟约20ms */void debouncer(void) / 防弹跳函数开始 int i; / 声明整数变量i for(i=0;i2400;i+); / 计数2400次,延迟约20ms / 防弹跳函数结束 思考:1)在本实验里,若按钮按住不放,会怎样?如何改善? 2)在本实验里,若 PB1与 PB2两个按钮同时按,会怎样?实例演练4-3-6多重按钮开关实验 /* myio.h - 自己写的程序库 */#define LED P1 / 定义LED接至Port 1void debouncer(void); / 声明防弹跳函数 void delay10ms(int); / 声明10毫

12、秒延迟函数 void alter(int); / 声明交互闪烁函数 void left(int); / 声明单灯左移函数 void right(int); / 声明单灯右移函数 void pili(int); / 声明霹雳灯函数 void flash(int); / 声明闪烁函数 /* 防弹跳函数函数,延迟约20ms */void debouncer(void) / 防弹跳函数开始 delay10ms(2); / 延迟约20ms / 防弹跳函数结束 /* 延迟函数开始,延迟约x 10ms */void delay10ms(int x) / 延迟函数开始 int i,j; / 声明整数变量i,j

13、 for (i=0;ix;i+) / 计数x次,延迟约x 10ms for (j=0;j1200;j+); / 计数1200次,延迟约10ms / 延迟函数结束 /* 高低位元交互闪烁函数,执行x次 */void alter(int x) / 高低位元交互闪烁函数开始 int i; / 声明变量i LED=0x0f; / 初始状态(高位元亮,低位元灭) for(i=0;i2*x-1;i+)/ i变量for循环执行2x-1次 delay10ms(50); / 延迟50*10m=0.5s LED=LED; / LED反相输出 / i变量for循环结束 delay10ms(50); / 延迟50 1

14、0m=0.5s / 高低位元交互闪烁函数结束 /* 全灯闪烁函数,执行x次 */void flash(int x) / 全灯闪烁函数开始 int i; / 声明变量i LED=0x00; / 初始状态(全亮) for(i=0;i2*x-1;i+)/ i变量for循环执行2x-1次 delay10ms(50); / 延迟50 10m=0.5s LED=LED; / P0反相输出 / i变量for循环结束 delay10ms(50); / 延迟50 10m=0.5s / 全灯闪烁函数结束 /* 单灯左移函数,执行x圈 */void left(int x) / 单灯左移函数开始 int i, j;

15、/ 声明变量i,j for(i=0;ix;i+) / i循环,执行x圈 LED=0xfe; / 初始状态=1111 1110 for(j=0;j7;j+)/ j循环,左移7次 delay10ms(25); / 延迟25 10m=0.25s LED=(LED1)|0x01; / 左移1位後,LSB设为1 / j循环结束 delay10ms(25); / 延迟25 10m=0.25s / i循环结束*/ / 单灯左移函数结束 /* 单灯右移函数,执行x圈 */void right(int x) / 单灯右移函数开始 int i, j; / 声明变量i,j for(i=0;ix;i+) / i循环,

16、执行x圈 LED=0X7f; / 初始状态=0111 1111 for(j=0;j1)|0x80; / 左移1位後,MSB设为1 / j循环结束 delay10ms(25); / 延迟25 10m=0.25s / i循环结束 / 单灯左移函数结束 /* 霹雳灯函数,执行x圈 */void pili(int x) / 霹雳灯函数开始 int i; / 声明变量i for(i=0;ix;i+)/ i循环,执行x圈 left(1); / 单灯左移一圈 right(1); / 单灯左移一圈 / i循环结束 / 霹雳灯函数结束/* ch04-3-6a.c - 多重按钮开关实验之1 - P4-26 */#

17、include / 定义8051暂存器的标头档,P2-1719 #include myio.h / 自己写的I/O程序库 sbit PB1=P20; / 声明PB1=P2.0sbit PB2=P21; / 声明PB2=P2.1sbit PB3=P22; / 声明PB3=P2.2sbit PB4=P23; / 声明PB4=P2.3main() / 主程序开始 LED=0xff; / 初始状态(LED全灭) P2=0xff; / 规划P2输入端口 while(1) / 无穷循环,程序一直跑 if (PB1=0) / 如果按下PB1 debouncer();/ 防弹跳 alter(3); / 高低位

18、元交互闪烁三次 flash(3); / 全灯闪烁三次 else if (PB2=0)/ 如果按下PB2 debouncer();/ 防弹跳 left(3); / 单灯左移三圈 flash(3); / 全灯闪烁三次 else if (PB3=0)/ 如果按下PB3 debouncer();/ 防弹跳 right(3); / 单灯右移三圈 flash(3); / 全灯闪烁三次 else if (PB4=0)/ 如果按下PB4 debouncer();/ 防弹跳 pili(3); / 霹雳灯三圈 flash(3); / 全灯闪烁三次 / while循环结束 / 主程序结束方法二:/* ch04-3-

19、6b.c - 多重按钮开关实验之2 - P4-30 */#include / 定义8051暂存器 #include myio.h / 自己写的I/O程序库 P4-26#define PB P2 / 定义按钮开关接至Port 2main() / 主程序开始 LED=0xff; / 初始状态(LED全灭) while(1) / 无穷循环,程序一直跑 PB=0xff; / 规划输入埠 switch(PB) / switch叙述开始 case 0x01: / 如果按下PB1 debouncer();/ 防弹跳 alter(3); / 交互闪烁三次 flash(3); / 全灯闪烁三次 break; /

20、 退出switch叙述 case 0x02: / 如果按下PB2 debouncer();/ 防弹跳 left(3); / 单灯左移三圈 flash(3); / 全灯闪烁三次 break; / 退出switch叙述 case 0x04: / 如果按下PB3 debouncer();/ 防弹跳 right(3); / 单灯右移三圈 flash(3); / 全灯闪烁三次 break; / 退出switch叙述 case 0x08: / 如果按下PB4 debouncer();/ 防弹跳 pili(3); / 霹雳灯三圈 flash(3); / 全灯闪烁三次 break; / 退出switch叙述

21、/ 结束switch叙述 / while结束 / 主程序结束实例演练4-3-7放开按钮后动作实验 /* ch04-3-7.c - 按钮放开后才动作实验 - P4-34 */#include / 定义8051暂存器的标头档,P2-1719 #include myio.h / 自己写的I/O程序库 #define PB P2 / 定义按钮开关接至Port 2main() / 主程序开始 LED=0xff; / 初始状态(LED全灭) while(1) / 无穷循环,程序一直跑 PB=0xff; / 规划P2为输入端口 switch(PB) / switch叙述开始 case 0x01: / 如果按

22、下PB1 debouncer();/ 防弹跳 while(PB=1); / 等待PB1放开 debouncer();/ 防弹跳 alter(3); / 交互闪烁三次 flash(3); / 全灯闪烁三次 break; / 退出switch叙述 case 0x02: / 如果按下PB2 debouncer();/ 防弹跳 while(PB=2); / 等待PB2放开 debouncer();/ 防弹跳 left(3); / 单灯左移三圈 flash(3); / 全灯闪烁三次 break; / 退出switch叙述 case 0x04: / 如果按下PB3 debouncer();/ 防弹跳 wh

23、ile(PB=4); / 等待PB3放开 debouncer();/ 防弹跳 right(3); / 单灯右移三圈 flash(3); / 全灯闪烁三次 break; / 退出switch叙述 case 0x08: / 如果按下PB4 debouncer();/ 防弹跳 while(PB=8); / 等待PB4放开 debouncer();/ 防弹跳 pili(3); / 霹雳灯三圈 flash(3); / 全灯闪烁三次 break; / 退出switch叙述 / 结束switch叙述 / while结束 / 主程序结束三、小结本节讲述了按钮开关、拨码开关以及它们的电路设计,并讲解了抖动产生的原因,以及怎样通过硬件和软件的方法去抖动,最后通过实例的方式进一步讲述了拨码开关、多个按钮开关以及它们的电路设计,并讲解了自定义链接库的编写方法。思考题和习题思考与习题:完成课堂思考题仿真实现例4-3-2、4-3-3、4-3-4、4-3-6教学后记

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1