单片机原理实验讲义(3)

2019-01-27 18:58

单片机原理实验

将“定速循环灯”控制程序中延时子程序的“MOV R5,#200”指令改为“MOV R5,TDL”,即可实现循环灯循环速度键控。

项目程序设计完后,完成以下任务:

⑴建立循环速度可键控循环灯项目,建立项目、建立源程序文件、编辑源程序、编译。

⑵使用伟福软件模拟器对循环速度可键控循环灯项目进行模拟仿真。

⑶将软件模拟调试通过和目标程序下载到目标实验板的CPU(AT89S52)上,取下下载器,上电试运行,观察循环灯运行情况、按键SW1和SW2对循环速度的控制作用。

⑷注意观察以下现象。其一是,当总循环周期为20mS(每盏灯亮的时间为2.5mS)时,循环灯亮成一条直线,当循环周期大于40mS时,循环灯或逐个点亮、或亮成一条抖动的直线(即频闪现象)。其二是,点击SW1和SW2键时,单片机有时可检测到按键,有时检测不到按键。其三是,点击一次按键时,单片机有时会检测到多次按键。

五、 实验报告要求

实验报告要求写明实验目的,并提交以下内容。

1. 简述“循环速度可键控循环灯”控制算法原理,提交程序流图、汇编语言源程序清单。

2. 对在实验板运行“循环速度可键控循环灯”项目目标程序所观察到的现象进行分析,解释其原因。

3. 回答思考题。

六、 思考题

1. 调整哪些电路参数可以调整循环灯的亮度。

2. 如果8只LED发光二极管改为8只LED数码管,使用类似于循环灯方式,循环点亮8只LED数码管,若要正常显示没有频闪,每只LED数码管显示的时间不能超过毫秒?

10

单片机原理实验

实验三、I/O口输入输出实验

――LED数码管动态显示与按键去抖程序设计

一、

实验目地

1. 掌握LED数码管动态显示电路工作原理及其驱动程序设计方法。 2. 掌握软件处理按键去抖动的算法原理及其程序设计方法。 3. 学习模块化程序设计方法。

二、 实验设备

PC 兼容机1台、目标程序下载接口电路1套、AT89S52实验板1套;操作系统为WindowsXP,安装有单片机集成开发软件“WAVE 3.2”和下载器驱动软件。

三、 实验原理

1. LED数码管动态显示电路工作原理

在实验二中,我们观察到当循环灯的总循环周期为20mS(每盏灯亮的时间为2.5mS)时,循环灯亮成一条直线。这个现象是由于眼睛有视觉惰性,即光像一旦在视网膜上形成,视觉将会对这个光像的感觉维持一个有限的时间,这种生理现象叫做视觉暂留性,光亮度越大视觉暂留时间越长,对中等亮度的光刺激,视觉暂留时间约为0.05至0.2秒。循环灯完成一次循环称为一帧图像,由于LED的亮度较低,当每秒超过40帧图像时,循环灯亮成一条直线,无频闪感觉。

P00P01P02P03P04P05P06P07470R7~14SEG4abcdefghgfedcbah109124675gfedcbahT49012gfedcbah109124675gfedcbahT39012SEG3gfedcbah109124675gfedcbahT29012SEG2gfedcbah109124675gfedcbahT19012SEG1共阳hhhhcomcomcomcomcomcom数码显示电路+5VR184K7CS3383838+5VR174K7CS2+5VR164K7CS1+5VR154K7CS038comcom

+5VT59012R194K7CS4LD8LD7LD6LD5LD4LD3LD2LD1 hfgedcba

图3.1 LED数码管动态显示电路

LED数码管动态显示电路如图3.1所示,其工作原理也是基于眼睛的视觉暂留效应,与循环灯的工作原理相似。在图3.1中,SEG1~4为4只共阳极数码管,8只LED指示灯LD1~8也按共阳极联接,相当于1只共阳极数码管(记为SEG5),每只数码管均通过开关管9012控制阳极电源,电路中电阻R7~14、开关管T1~5的选择方法与实验二所述方法相同。LED数码管动态显示采用循环点亮(或扫描)数码管,当每秒的总循环超过40次时,即每秒40帧像以上,将产生每个数码管“连续点亮”的视觉效果。

11

单片机原理实验

≤25mS DSW=1 DSW=2 DSB1 七段码 DSB2 七段码 ≤25mS DSW=1 DSW=2 DSB1 七段码 DSB2 七段码 DSW=0 P0.0~.7 CS0 CS1 CS2 CS3 CS4

DSB0 七段码 DSW=3 DSW=4 DSB3 七段码 DSB4 灯状态 DSW=0 DSB0 七段码

图3.2:5位LED数码管的动态显示时序

2. 显示驱动程序设计方法

若在单片机内部RAM中指定1个字节作为扫描循环变量(记为DSW)和5个字节的显示缓冲区(记为DSB0~4),其中DSB0~3分别保存个、十、百、千位数码的显示数据,DSB4保存8个指示灯的状态(每位对应一个指示灯状态,该字节应可位寻址),则5位LED数码管的动态显示时序如图3.2所示。若主程序循环中每隔5mS调用一次LED数码管动态显示子程序,如图3.3所示,则5位LED数码管动态显示子程序的算法流图如3.4所示,部分程序清单如下。 ;====5位数码管扫描子程序==== DISP: ORL P2,#1FH MOV A,DSW ANL A,#07H RL A MOV DPTR,#DSTAB

JMP @A+DPTR AJMP DIS1 AJMP DIS2 AJMP DIS3 AJMP DIS4

┅┅ 图3.3:主程序循环

DSTAB: AJMP DIS0

调用数码管动态扫描显示子程序 ;关闭数码显示器

;根据扫描循环变量转移

初始化 5mS到? Y 调用读键状态及去抖处理子程序 N AJMP DIS0 AJMP DIS0 AJMP DIS0

DIS0: MOV A,DSB0 ANL A,#0FH MOV DPTR,#LED7

;扫描个位数码管

;查显缓个位值的七段码表

12

MOVC A,@A+DPTR

单片机原理实验

MOV P0,A CLR CS0

;七段码送P0口 ;点亮个位数码管 ;扫描指针指向下十位 ;扫描十位数码管 ;扫描百位数码管 ;扫描千位数码管 ;扫描指示灯

根据扫描循环变量(DSW)转移 (DSW)=0 (DSW)=1 (DSW)=2 (DSW)=1 扫描千位数码管 ;0~9,a~f共16个七段码

(DSW)=2 扫描指示灯 返回 图3.4:5位LED数码管动态

显示子程序流图

键状态 原始键状态 关闭数码显示器 MOV DSW,#01H

RET

DIS1: …… DIS2: DIS3: DIS4:

…… ……

扫描个位数码管 扫描十位数码管 扫描百位数码管 MOV A,DSB4

CPL A

MOV P0,A

CLR CS4

MOV DSW,#00H

RET

;====LED段码表==== LED7: DB 0C0H,……

3. 键去抖动的软件处理方法

在实验二中,我们还观察到以下两现象,其一是,点击SW1和SW2键时,单片机有时可检测到按键,有时检测不到按键;其二是,点击一次按键时,单片机有时会检测到多次按键。前者是由于在实验二的“循环速度可键控循环灯”项目中,每换一盏灯主程序循环一次,读一次键状态,当循环时间较长时(超过点出按键时间),将漏过键状态变化,若采用图3.3所示的主程序循环,每5mS读一次键状态,本问题将得到解决。后者是由于键的抖动,所有的按键在按下的初始时间段内,触点未达到稳定接触,连接按键的端口的电平不稳定,CPU读到的

键状态不稳定,此即所谓的键抖动,如图3.5所示,键按下时刻 去抖后键状态 20mS 键状态稳定 t 通常键抖动发生在键按下的最初20mS内。键去抖动图3.5:键抖动及处理 处理方法有多种,软件延时去抖是最常用的方法,

其算法原理是CPU一旦检测到键状态有变化表明有键按下,延时一段时间(不小于20mS)后,待键状态稳定后,再读取有效的键状态。

在内部RAM指定1字节用于保存键状态,记为KEY,该字节应是可位寻址,以便主程序对键状态的查询;另指定1字节作为键去抖延时器,记为KTMR。若采用图3.3所示的主程序循环,由于系统每5mS调用一次读键状态及去抖处理子程序,因此每次读键状态后,先暂存键状态,若键状态发生变化则启动去抖延时器(实际是记录子程序调用次数,每调用1次相当5mS),延时未到则放弃不稳定的键状态,仍延用原来的键状态;若延时已到则启用新的键状态,键去抖算法如图3.6所示。

在一个微机系统中,按键可以有两种用法。其一是不论键按下有多久,按一下只

13

单片机原理实验

起一次作用,这种按键是键状态变化的前沿起作用,不妨将这种键称为前沿型 (或触发型) 键。其二是键只在按下时才有作用,一旦键松开其作用也消失,不妨称这种键为开关型键。如前所述KEY保存键状态,它保存的是开关型的键状态(按下为1,抬起为0),因此在读键状态及处理子程序中添加了键状态变化前沿提取功能,前沿提取算法如下:若前后两次键状态有变化(异或为1),且本次键状态也为1,则表明键状态发生了正跃变。在内部RAM中另指定1字节用于保存前沿型的键状态,记为EKEY。

;====读独立按键子程序(延时去抖)==== RDKEY: ORL P1,#0C0H ;先置1,后读口 MOV A,P1 ;读键

ANL A,#0C0H XRL A,#0C0H

;接独立键盘的位保留 ;求反转正逻辑 ;新的键状态暂存R7 ;键状态变化则转移 ;去抖延时器加载初值 ;过了延时时间? ;延时未结束

;放弃不稳定的键状态 ;键前沿提取

读键、转正逻辑 新的键状态暂存 N 去抖延时器加载初值 键状态变? Y 过了延时时间? MOV R7,A CJNE A,KEY,RDK0 MOV KTMR,#05H SJMP RDK1

RDK0: MOV A,KTMR JZ RDK1 DEC KTMR MOV R7,KEY XRL A,R7 ANL A,R7 MOV EKEY,A MOV KEY,R7

Y N 放弃不稳定的键状态、延用原键状态 RDK1: MOV A,KEY

键前沿提取 启用新的键状态 返回 ;启用键的新状态

RET

4. 模块化程序设计方法

图3.6:读键状态及去抖等处理

子程序流图

实际的应用程序一般都由一个主程序(包括若干个功能模块)和多个子程序构成。每一程序模块都能完成一个明确的任务,实现某个具体功能,如发送、接收、延时、显示等。采用模块化的程序设计方法,有以下优点:

①单个模块程序的功能单一,易于编写、调试和修改;

②便于分工,可使多个程序员同时进行程序的编写和调试,加快软件研制进度; ③程序可读性好,便于功能扩充和版本升级;

④对程序的修改可局部进行,其他部分可以保持不变;

⑤对于使用频繁的子程序可以建立子程序库,便于移植到其它工程项目中。 在进行模块划分时,应首先弄清楚每个模块的功能,确定其数据结构以及与其他模块的关系;其次是对主要任务进一步细化,将一些专用的子任务交由下一级子模块完成,按这种方法一直细分成易于理解和实现的小模块为止。模块的划分应遵循下述原则:

14


单片机原理实验讲义(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:考研政治知识结构框架图

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: