单片机原理实验
54.4mA,T5选用9012(200mA/50V)可以满足要求。当CS4(P2.4)=0时,若P2.4引脚内部MOS管的饱和电压降,则T5基极控制电流为0.9mA,该基极电流要驱动54.4mA的集电极电流,T5管的放大倍数需超过60倍,通常9012均能满足此要求。
发光管的亮度与流过发光管的正向电流大小有关,也与发光管的发光效率有关,按发光效率区分,光发管通常可分为超高亮度(用于室外)、高亮度(用于室内)、普通亮度(用于较暗背景)3种,根据不同的亮度要求,Φ3发光管的正向电流可设定在1~10mA范围内。
3. 定速循环灯的软件设计
若采用软件延时的方法使8盏LED灯从右至左(LD1→LD2→?LD8→LD1→?)循环点亮,循环速度固定,每盏灯亮的时间0.5秒。根据循环灯控制要求和真值表2.1,用RAM的1个单元(如记为P0S,地址31H)来记录8个LED的状态,P0S的每位对应有尽有只LED,从低位到高位分别对应LD1到LD8,某位的逻辑值为0表示相应LED为亮(负逻辑)。P0S的初始值为0FEH(LD1亮,其它灭),每隔0.5秒P0S的值左循移1位,并将P0S的值从P1口输出,从而实现循环灯控制,程序流图如图2.2所示,程序清单如下
开始(转主程入口) ;==程序首“ORG 0000H”前定义各变量== CS4 BIT P2.4
选择循环灯模块(CS4=0) P0S EQU 31H ;P0口的输出状态
熄灭所有LED ;============ ORG 0000H
P0S赋初值 LJMP MAIN ORG 0030H
P0S值从P1输出 MAIN: CLR CS4
P0S左循移 MOV P0,#0FFH ;LED灯全灭
MOV P0S,#0FEH ;右边第一个亮
延时0.5秒 MLOOP: MOV A,P0S
MOV P0,A RL A
图2.2:循环灯流程图 MOV P0S,A
LCALL DELAY ;延时0.5秒 AJMP MLOOP ;======延时子程序====== DELAY: MOV R5,#200 ;延时((2*R7+3)*R6+5)*R5≈0.5S DL00: MOV R6,#05 DL01: MOV R7,#250 DL02: DJNZ R7,DL02 DJNZ R6,DL01 DJNZ R5,DL00 RET
8
单片机原理实验
END
4. 独立健盘使用 P1.6SW1实验板中配有两个独立按键,如图2.2所示。
由于P1口内部有上拉电阻(20~40kΩ),当按键SW1(或SW2)按下时,端口P1.6(或P1.7)为低电平,
P1.7而按键松开时,端口P1.6为高电平。将P1口的状
SW2态读至ACC,可以判断是否有键按下,ACC.6=0(或
ACC.7=0)表示有SW1(或SW2)键下,此种状态
图2.2:独立键盘接口电路 表示为负逻辑表示,A求反后可得正逻辑表示。若
用RAM的1个单元(如记为KEY,地址30H)来
记录独立按键的状态,则可采用以下子程序读取、并保存按键的状态。 ;==程序首“ORG 0000H”前定义各变量== KEY EQU 20H ;保存按键的状态 SW1 BIT KEY.6 ;SW1键要内部RAM的映射 SW2 BIT KEY.7 ;SW2键要内部RAM的映射 ;======读独立键盘子程序======
RDKEY: ORL P1,#0C0H ;读I/O,先置1再读入 MOV A,P1 XRL A,#0C0H ;第6和7位求反,转为正逻辑 MOV KEY,A ;保存键状态 RET
四、 实验内容
1. 定速循环灯项目调试
⑴建立定速循环灯项目
建立工作文件夹“E:\\学号\\实验二”,采用实验一所述方法完成以下任务,建立定速循环灯项目、建立源程序文件、编辑源程序、编译。
⑵按实验一所述方法,使用伟福软件模拟器对定速循环灯项目进行模拟仿真。 ⑶将软件模拟调试通过的目标程序下载到目标实验板的CPU(AT89S52)上,下载方法参见附录三。取下下载器,上电试运行,观察循环灯运行情况。
2. 循环速度可键控循环灯项目设计
设计一个可以用按键控制循环灯循环速度的工程项目,该项目可实现以下功能:①开始时,循环灯从右到左循环点亮,每盏灯亮的时间为2.5mS,采用软件延时的方法实现;②通过独立按键SW1和SW2可改变循环灯循环速度,每盏灯亮的时间从2.5mS至0.5S可步进调整,每按一次SW1键,每盏灯亮的时间增加2.5mS;每按一次SW2键,每盏灯亮的时间减少2.5mS。
本设计项目算法的核心是编写一个延时时间可调的延时子程序,延时时间从2.5mS至0.5S可键控步进调整,步进值2.5mS。可采用以下方法实现:①在内部RAM中定义1个变量,如TDL、地址30H、初值为#01H,在主程序的每一次循环中都读一次独立按键的状态,并根据SW1(或SW2)键的状态对TDL进行加1(或减1)控制;②
9
单片机原理实验
将“定速循环灯”控制程序中延时子程序的“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 ;根据扫描循环变量转移
N ANL A,#07H 5mS到? RL A Y MOV DPTR,#DSTAB 调用读键状态及去抖 JMP @A+DPTR 处理子程序 DSTAB: AJMP DIS0 AJMP DIS1
调用数码管动态扫描 AJMP DIS2
显示子程序 AJMP DIS3
AJMP DIS4 AJMP DIS0 ┅┅ AJMP DIS0 AJMP DIS0
图3.3:主程序循环
DIS0: MOV A,DSB0 ;扫描个位数码管 ANL A,#0FH MOV DPTR,#LED7 ;查显缓个位值的七段码表 MOVC A,@A+DPTR
12