实验四 数码管显示控制
嵌入式实验报告数码管显示实验

实验报告课程名称嵌入式系统编程实践实验仪器清华同方辰源嵌入式系统实验箱实验名称实验四:数码管显示实验系别__计算机学院_专业 _班级/学号学生姓名实验日期 2013年10月11日成绩___________________指导教师实验四:数码管显示实验一、实验问题回答(1)如何设置功能3,4中的循环速度?答:利用系统SysTick Handler中断,控制循环速度void SysTick_Handler (void){Event = 1;}(2)若是想实现类似实验(三)通过键盘动态控制循环速度,考虑一下应该如何设计?答:SysTickPeriodSet(SysCtlClockGet() / X)//设置x的大小就可以控制循环的速度。
void Reset_Counter_Speed(int x){SysTickIntDisable();SysTickDisable();SysTickPeriodSet(SysCtlClockGet() / x);// 设置x,控制计数频率,值与频率成正比SysTickEnable();SysTickIntEnable();},达到预期的效果。
二、实验目的和效果(效果即是否达到实验目的,达到的程度如何)学习、了解和掌握数码管工作原理和使用方法实验结果及检查(1)默认在在OLED屏幕上分行显示自己的学号、姓名、项目序号、时间,如“2010011001”、“zhangsan”、“work4”、“2012-11-”(2)首先在屏幕上显示四个功能选单,通过键盘A-F键选择不同功能,选择后屏幕显示相关功能提示,接受键盘输入的数字键0-9并在数码管上显示。
如:开始显示:“please choose the function:”“A: …”“B: …”“C: …”“D: …”按下“A”键后,显示”now you choose function A”(3)按下键盘后,根据不同功能在数码管上显示按键字符。
数码显示控制实验报告(3篇)

第1篇一、实验目的1. 熟悉数码显示模块的结构和工作原理;2. 掌握51单片机控制数码显示模块的方法;3. 学会使用移位寄存器实现数码显示的动态扫描;4. 提高单片机编程能力和实践操作能力。
二、实验原理数码显示模块是一种常见的显示器件,主要由7段LED组成,可以显示0-9的数字以及部分英文字符。
51单片机通过控制数码显示模块的段选和位选,实现数字的显示。
移位寄存器是一种常用的数字电路,具有数据串行输入、并行输出的特点。
在本实验中,使用移位寄存器74HC595实现数码显示的动态扫描。
三、实验仪器与材料1. 51单片机实验板;2. 数码显示模块;3. 移位寄存器74HC595;4. 电阻、电容等电子元件;5. 电路连接线;6. 编译软件Keil uVision;7. 仿真软件Proteus。
四、实验步骤1. 电路连接(1)将51单片机的P1口与数码显示模块的段选端相连;(2)将74HC595的串行输入端Q(引脚14)与单片机的P0口相连;(3)将74HC595的时钟端CLK(引脚11)与单片机的P3.0口相连;(4)将74HC595的锁存端LR(引脚12)与单片机的P3.1口相连;(5)将数码显示模块的位选端与74HC595的并行输出端相连。
2. 编写程序(1)初始化51单片机的P1口为输出模式,P3.0口为输出模式,P3.1口为输出模式;(2)编写数码显示模块的段码数据表;(3)编写74HC595的移位和锁存控制函数;(4)编写数码显示模块的动态扫描函数;(5)编写主函数,实现数码显示模块的循环显示。
3. 编译程序使用Keil uVision编译软件将编写的程序编译成hex文件。
4. 仿真实验使用Proteus仿真软件进行实验,观察数码显示模块的显示效果。
五、实验结果与分析1. 编译程序后,将hex文件下载到51单片机实验板上;2. 使用Proteus仿真软件进行实验,观察数码显示模块的显示效果;3. 通过实验验证,数码显示模块可以正常显示0-9的数字以及部分英文字符;4. 通过实验,掌握了51单片机控制数码显示模块的方法,学会了使用移位寄存器实现数码显示的动态扫描。
实验四 LED数码管显示实验报告

实验名称 LED数码管显示实验指导教师曹丹华专业班级光电1202班姓名陈敬人学号联系电话一、任务要求实验目的:理解LED七段数码管的显示控制原理,掌握数码管与MCU的接口技术,能够编写数码管显示驱动程序;熟悉接口程序调试方法。
实验内容:1.基础部分:利用C8051F310单片机控制数码管显示器。
利用末位数码管循环显示数字0-F,显示切换频率为1Hz。
2.提高部分:在数码管上显示0→199计数,计数间隔为0.5秒。
二、设计思路1.基础部分C8051F310单片机片上晶振为24.5MHz,采用8分频后为3.0625MHz ,输入时钟信号为48个机器周期,T1采用定时器工作方式1,单次定时最长可达1.027s,可以实现1s定时要求。
定时采用软件查询工作方式,利用JNB TF0, HERE实现。
置P0.6和P0.7端口为0,位选信号选定末位数码管。
通过MOVC A, @A+DPTR指令,利用顺序查表法取出显示段码数据。
寄存器R0自增1,并赋给A以取出下一个显示段码数据。
为减短代码长度,利用CJNE指令实现循环结构。
当寄存器R0增至0FH后,跳转至开头,重新开始下一轮显示。
2.提高部分定时方式及查表方式同基础部分,由于要实现三个数码管同时显示,因此采用动态扫描显示法。
三、资源分配1.基础部分P0.6: 位选信号端口P0.7:位选信号端口P1:输出段码数据R0:存放显示数据DPTR:指向段码数据表首 2.提高部分P0.6:位选信号端口P0.7:位选信号端口R0:存放个位显示数据 R5:存放十位显示数据 R6:存放百位显示数据 P1:输出段码数据DPTR: 指向段码数据表首四、流程图1.基础部分2.提高部分五、源代码(含文件头说明、语句行注释)1.基础部分;******************基础部分源代码***************************;Filename: test.asm;Decription: 末位数码管循环显示数字0-F,显示切换频率为1Hz。
实验四 LED数码显示控制

实验四LED数码显示控制12电气信息工程(1)班姓名:彭威、张亚斌在LED数码显示控制实验区完成本实验。
一、实验目的了解并掌握置位与复位指令SET、RST在控制中的应用及其编程方法。
二、置位与复位指令SET、RST的介绍SET为置位指令,使动作保持;RST为复位指令,使操作保持复位。
当X0一接通,即使再变成断开,Y0也保持接通。
X1接通后,即使再变成断开,Y0也将保持断开。
SET指令的操作目标元件为Y、M、S。
而RST指令的操作元件为Y、M、S、D、V、Z、T、C。
这两条指令是1~3个程序步。
用RST指令可以对定时器、计数器、数据寄存器、变址寄存器的内容清零。
三、控制要求按下启动按钮后,由八组LED发光二极管模拟的八段数码管开始显示:先是一段段显示,显示次序是A、B、C、D、E、F、G、H。
随后显示数字及字符,显示次序是0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F,再返回初始显示,并循环不止。
四、LED数码显示控制的实验面板图:图中,下框中的A、B…H分别接主机的输出点Y0、Y1…Y7;SD接主机的输入点X0。
上框中的A、B、C、D、E、F、G、H用发光二极管模拟输出。
五、实验参考程序一、编制梯形图并写出程序实验参考程序指令器件号说明步序指令器件号说明步序0 LD X000 启动34 OR M1091 ANI M0 35 OR M1112 OUT T0 延时1秒36 OR M1123 K10 37 OR M1144 LD T0 38 OR M1155 OUT M0 产生脉冲39 OR M2016 LD X000 40 OR M2027 OUT T1 延时1.5秒41 OR M2038 K15 42 OR M2049 ANI T1 43 OR M20610 OUT M10 44 OR M20811 LD M10 45 OR M20912 OR M2 46 OUT Y000 A段显示13 OUT M100 47 LD M10214 LD M115 48 OR M10915 OUT M200 49 OR M11016 LD M209 50 OR M11117 OUT T2 延时1秒51 OR M11218 K10 52 OR M11319 ANI T2 53 OR M20120 OUT M2 54 OR M20221 LD M0 移位输入55 OR M20322 FNC 35 左移位56 OR M20423 M100 数据输入57 OR M20724 M101 移位58 OUT Y001 B段显示25 K15 移位段数:15 59 LD M10326 K1 1位移位60 OR M10927 LD M0 移位输入61 OR M11028 FNC 35 左移位62 OR M11229 M200 数据输入63 OR M11330 M201 移位64 OR M11431 K9 移位段数:9 65 OR M11532 K1 1位移位66 OR M20133 LD M101 67 OR M202指令器件号说明步序指令器件号说明步序68 OR M203 98 LD M10669 OR M204 99 OR M10970 OR M205 100 OR M11371 OR M207 101 OR M11472 OUT Y002 C段显示102 OR M11573 LD M104 103 OR M20274 OR M109 104 OR M20375 OR M111 105 OR M20476 OR M112 106 OR M20577 OR M114 107 OR M20678 OR M115 108 OR M20879 OR M202 109 OR M20980 OR M203 110 OUT Y005 F段显示81 OR M205 111 LD M10782 OR M206 112 OR M11183 OR M207 113 OR M11284 OR M208 114 OR M11385 OUT Y003 D段显示115 OR M11486 LD M105 116 OR M11587 OR M109 117 OR M20288 OR M111 118 OR M20389 OR M115 119 OR M20490 OR M202 120 OR M20591 OR M204 121 OR M20792 OR M205 122 OR M20893 OR M206 123 OR M20994 OR M207 124 OUT Y006 G段显示95 OR M208 125 LD M10896 OR M209 126 OUT Y007 H小数点显示97 OUT Y004 E段显示127 END 程序结束。
实验四--单片机驱动数码管显示

实验四单片机驱动数码管显示一实验目的1 学习单片机驱动数码管动态显示的电路设计和编程方法二实验原理1、单片机系统中常用的显示器有:发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显示器等。
LED、LCD显示器有两种显示结构:段显示和点阵显示。
七段数码管显示为了显示数字或字符,必须对数字或字符进行编码。
七段数码管加上一个小数点,共计8段。
因此为LED显示器提供的编码正好是一个字节。
字母一般用米字型。
编码表:0x3f 0x06 0x5b 0x4f 0x66 0x6d0 1 2 3 4 50x7d 0x07 0x7f 0x6f 0x77 0x7c6 7 8 9 A B0x39 0x5e 0x79 0x71 0x00C D E F 无显示七段数码管对应八位由低到高:a,b,c,d,e,f,g,dp例:数码管显示2则要点亮a,b,g,e,d段,对应的八位是01011011数码管动态显示方式是将所有显示位的段选择线并联在一起,有统一的I/O资源来控制。
各个数码管公共端也有I/O资源来控制,分时的选通各个数码管进行动态显示。
每个瞬间只能选通一个数码管,人眼的暂留时间为,每个数码管的选通时间必须在以内,通常选择15ms~20ms。
电路图见实验附图。
三实验内容理解动态显示电路图,参考驱动程序,单片机P0口作段码输出控制,P1口作位码控制,使单片机驱动6个7段数码管输出实验当天年、月、日六位数字。
四、实验步骤(1)单片机最小应用系统1的P0口接段码口a~h,P1口接位码口S1~S6。
(2)在KEIL软件下编写程序并调试,完成实验内容要求。
(3)下载程序,通过实验箱验证设计电路和编写的程序是否达到实验要求。
下载程序,通过实验箱验证设计电路和编写的程序是否达到实验要求。
五参考程序与电路汇编语言参考程序:ORG 0000HLJMP STARTORG 0030HSTART: MOV R0,#30HMOV R1,#40HMOV 30H,#1MOV 31H,#2MOV 32H,#1MOV 33H,#1MOV 34H,#2MOV 35H,#0START1: MOV DPTR,#TABMOV R3,#6LOOP: MOV A,@R0MOVC A,@A+DPTRMOV @R1,AINC R0INC R1DJNZ R3,LOOPMOV R3,#6MOV R1,#40HMOV A,#20HLOOP1: MOV P1,@R1MOV P2,AACALL DELAYMOV P2,#00HRR AINC R1DJNZ R3,LOOP1LJMP START1TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,58H,5EH,7BH,71H,00H,40H DELAY: MOV R4,#100LOOP2: DJNZ R4,LOOP2RETENDC语言参考程序:#include <reg51.h>#include <intrins.h>unsigned char code table[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};unsigned char date[]={1,2,1,1,2,0};void delay(){unsigned char j;for(j=0;j<=100;j++);}void main(){unsigned char i,a;while(1){a=0x40;for(i=0;i<6;i++){P1=table[date[i]];a=_cror_(a,1);P2=a;delay();P2=0x00;}}}数码管动态显示电路图(位选信号为高电平,段选信号为高电平):。
(完整word版)数码管动态显示实验报告

实验四数码管动向显示实验一一、实验要求1.在 Proteus 软件中画好 51 单片机最小核心电路,包括复位电路和晶振电路2.在电路中增加四个7 段数码管 ( 共阳 / 共阴自选 ), 将 P1 口作数据输出口与 7 段数码管数据引脚相连, P2.0~P2.3 引脚输出选控制信号3.在 Keil 软件中编写程序 , 采用动向显示法 , 实现数码管分别显示数字1,2, 3, 4二、实验目的1.坚固 Proteus 软件和 Keil 软件的使用方法2.学习端口输入输出的高级应用3.掌握 7 段数码管的连接方式和动向显示法4.掌握查表程序和延时等子程序的设计三.实验说明本实验是将单片机的P1 口做为输出口,将四个数码管的七段引脚分别接到至P1.7 。
由于电路中采用共阳极的数码管,因此当P1 端口相应的引脚为0 时,对应的数码管段点亮。
程序中预设了数字0-9 的段码。
由于是让四个数码管显示不同样的数值,因此要用扫描的方式来实现。
因此定义了scan 函数,接到单片机的p2.0 至在实验中,预设的数字段码表存放在数组TAB中,由于段码表是固定的,因此储藏种类可设为 code。
在 Proteus 软件中依照要求画出电路,再利用Keil软件按需要实现的功能编写 c 程序,生成 Hex 文件,把Hex 文件导到Proteus 软件中进行仿真。
为了可以更好的考据明验要求,在编写程序时需要延时0.5s ,能让人眼更好的分辨;89C51 的一个机器周期包括12 个时钟脉冲,而我们采用的是12MHz晶振,每一个时钟脉冲的时间是1/12us ,因此一个机器周期为 1us。
在 keil程序中,子函数的实现是用void delay_ms(int x),其中x为1时是代表1ms。
四、硬件原理图及程序设计〔一〕硬件原理图设计电路中 P1.0 到 P1.7 为数码管七段端口的控制口,排阻 RP1阻值为 220Ω,到为数码管的扫描信号。
数码管扫描显示控制器实验报告

实验四数码管扫描显示控制器设计与实现2011211208班2011211055 4 于圣泽一、实验目的1.掌握VHDL语言的语法规范, 掌握时序电路描述方法;2.掌握多个数码管动态扫描显示的原理及设计方法。
二、实验原理三、多个数码管动态扫描显示, 是将所有数码管的相同段并联在一起, 通过选通信号分时控制各个数码管的公共端, 循环依次点亮多个数码管, 利用人眼的视觉暂留现象, 只要扫描的频率大于50Hz, 将看不到闪烁现象。
一个数码管要稳定显示要求显示频率大于50Hz, 那么6个数码管则需要50×6=300Hz以上才能看到持续稳定点亮的现象。
四、cat1~cat6是数码管选通控制信号, 分别对应于6个共阴极数码管的公共端, 当catn=‘0’时, 其对应的数码管被点亮。
因此, 通过控制cat1~cat6, 就可以控制6个数码管循环依次点亮。
五、实验内容1.用VHDL语言设计并实现六个数码管串行扫描电路, 要求同时显示0、1.2.3.4.5这6个不同的数字图形到6个数码管上, 仿真验证其功能, 并下载到实验板测试。
2.用VHDL语言设计并实现六个数码管滚动显示电路六、循环左滚动, 始终点亮6个数码管, 左出右进。
状态为: 012345→123450→234501→3450123→450123→501234→012345七、向左滚动, 用全灭的数码管填充右边, 直至全部变灭, 然后再依次从右边一个一个地点亮。
状态为:012345→12345X→2345XX→345XXX→45XXXX→5XXXXX→XXXXXX→XXXXX0→XXXX01→XXX012→XX0123→X01234→012345,其中‘X’表示数码管不显示。
八、设计思路和过程对50MHz时钟进行5000分频, 得到10kHZ时钟scanclk。
把scanclk作为6进制计数器的时钟, 对计数器的状态进行译码, 得到cat(5 downto 0)的选通脉冲。
四位数码管动态显示

实验名称:实验名称四位数码管动态显示一、实验目的1.通过AT89C52单片机控制四位数码管动态显示数字“3210”。
2.用Protues设计、仿真以AT89C52为核心的四位数码管动态显示实验装置。
3.掌握四位数码管的控制方法。
二、实验任务P1端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,接通电源时,显示“”字样;三、实验设备微机1台、Proteus软件1套、GL10型51单片机学习开发板1台。
四、实验电路绘制五、汇编语言程序设计1.设计原理动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。
在进行数码显示的时候,要对显示单元开辟4个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。
对于显示的字形码数据我们采用查表方法来完成。
2.程序框图3.汇编程序ORG 0000H ;初始化START:MOV R0,#0FFH ;控制段选,给R0传递一个初值1111 1111MOV DPTR,#TABLE ;将表头的地址传递给数据指针NEXT:MOV A,R0 ;R0的值传给累加器AMOVC A,@A+DPTR ;查表指令,将TABLE的值按底标给AMOV P2,A ;A的值传给P2接口,显示数字0LCALL DELAY ;调用延时函数,延时INC R0 ;R0加一,MOV A,R0 ;R0的值再次传给A,控制位选移动MOV P1,A ;A的值传给P1口,CJNE R0,#04,NEXT ;判断R0是否等于4,若不等于,转NEXT继续执行,若等于,继续执行下一条程序SJMP START,相当于将值初始化,重新开始。
SJMP START ;跳转到START,R0,R1初始化,重新执行一轮。
DELAY:MOV R6,#4 ;延时程序DL2:MOV R7,#248DL1:DJNZ R7,$DJNZ R6,DL2RETTABLE:DB 3FH,06H,5BH,4FH ;以table为表头地址,依次存入二进制的0.1.2.3END六、Proteus软件模拟仿真七、GL10单片机仿真系统1.实验板连线2.实验操作步骤先把“单片机系统”区域中的P1.0/AD0-P1.7/AD7用8芯排线连接到“动态数码显示”区域中的a-h端口上;再把“单片机系统”区域中的P2.0/A8-P2.3/A15用4芯排线连接到“动态数码显示”区域中的0-N端口上。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四数码管显示控制一、实验目的1、熟悉Keil uVision2软件的使用;2、掌握LED数码管显示接口技术;3、理解单片机定时器、中断技术。
二、实验设备及仪器Keil μVision2软件;单片机开发板;PC机一台三、实验原理及内容1、开发板上使用的LED 数码管是四位八段共阴数码管(将公共端COM接地GND),其内部结构原理图,如图4.1所示。
图4.1共阴四位八段LED数码管的原理图图4.1表明共阴四位八段数码管的“位选端”低电平有效,“段选端”高电平有效,即当数码管的位为低电平,且数码管的段为高电平时,相应的段才会被点亮。
实验开发板中LED数码管模块的电路原理图,如图4.2所示。
SP1a~hP0.4~P0.7SP2P0.0~P0.3图4.2 LED数码管模块电路原理图图中,当P1.0“段控制”有效时,P0.0~P0.7分别对应到数码管的a~h段。
当P1.1“位控制”有效时,P0.0~P0.7分别对应到DIG1~DIG8。
训练内容一:轮流点亮数码管来检测数码管是否正常。
参考程序:ORG 00HAJMP MAINMAIN:SETB P1.2;LED流水灯模块锁存器的控制位MOV P0,#0FFH;关闭LED灯CLR P1.2SETB P1.3 ;点阵模块的行控制锁存器MOV P0,#0 ;关闭点阵行CLR P1.3MOV A,#11111110B;数码管“位选信号”初值,低电平有效LOOP:SETB P1.1;数码管位控制锁存器有效MOV P0,ACLR P1.1RL A ;形成新的“位选信号”,为选择下一位数码管做准备SETB P1.0;数码管段控制锁存器有效MOV P0,#0FFH ;数码管的所有段点亮,显示“8”CLR P1.0CALL DELAYSJMP LOOPDELAY:MOV R5,#0;延时子程序D1: MOV R6,#0D2:NOPDJNZ R6,D2DJNZ R5,D1RETEND训练内容二:静态显示,0~9计数。
参考程序:ORG 00HAJMP MAINMAIN:SETB P1.2MOV P0,#0FFH;关闭LED灯CLR P1.2SETB P1.3MOV P0,#0 ;关闭点阵行CLR P1.3MOV A,#11111110BSETB P1.1MOV P0,A ;数码管"位选"CLR P1.1MOV DPTR,#TABLE;初始化表首地址LOOP:MOV R0,#0;显示数字从0开始MOV R1,#10;显示数字个数NEXT:MOV A,R0MOVC A,@A+DPTR;查表,获取显示字型码SETB P1.0;数码管段控制锁存器有效MOV P0,A ;显示CLR P1.0INC R0 ;下一个数字ACALL DELAYDJNZ R1,NEXTSJMP LOOPDELAY:MOV R5,#0D1: MOV R6,#0D2: NOPNOPDJNZ R6,D2DJNZ R5,D1RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共阴字码表0~9 END训练内容三:动态显示,00~99计数。
动态显示:也称扫描显示,是一种按位轮流点亮各位数码管的显示方式,即在某个时刻,只让其中某一个数码管“位选端”有效,并送出相应的字型显示码,此时,其他的数码管因“位选端”无效而处于熄灭状态。
下一时刻,按顺序选通另一个数码管,并送出相应的字型显示码,依此规律循环下去,即可使各位数码管分别间断地显示出相应的字符。
由于人眼的“视觉驻留效应”,只要能保证每个数码管显示间断的时间间隔小于眼睛的驻留时间,就可以给人一种连续显示的视觉效果。
在显示位数较多时,动态显示方式可节省I/O接口资源,硬件电路与静态显示方式简单,但其显示亮度低于静态显示方式;由于CPU要不断地依次扫描显示程序,将占用CPU更多的时间,若显示位数较少,采用静态显示方式更加简便。
参考程序:ORG 00HAJMP MAINMAIN:SETB P1.2;LED流水灯模块锁存器的控制位MOV P0,#0FFH;关闭LED灯CLR P1.2SETB P1.3 ;点阵模块的行控制锁存器MOV P0,#0 ;关闭点阵行CLR P1.3MOV DPTR,#TABLE;初始化表首地址START:MOV R0,#0 ;显示数据的初值,从数字0开始显示NEXT:MOV A,R0MOV B,#10DIV AB ;分解将要显示的数据,分为十位、个位MOV R2,A ;十位送R2MOV R3,B ;个位送R3MOV R1,#100 ;每个数字显示的次数,100次,即更长延时LOOP_VIEW:MOV A,R2MOVC A,@A+DPTR;获取十位的显示码SETB P1.0MOV P0,A;显示十位CLR P1.0SETB P1.1MOV P0,#11111110B;位选,选中显示十位的数码管CLR P1.1ACALL DELAYMOV A,R3MOVC A,@A+DPTR;获取个位的显示码SETB P1.0MOV P0,A;显示个位CLR P1.0SETB P1.1MOV P0,#11111101B;位选,选中显示个位的数码管CLR P1.1ACALL DELAYDJNZ R1,LOOP_VIEW;每个数字循环显示R1次,即延时INC R0;下一个数字CJNE R0, #100, NEXT ;若小于100,继续计数和显示;若大于100,则从0开始重新计数SJMP STARTDELAY:MOV R6,#25;延时子程序1msD1: MOV R7,#20D2: DJNZ R7,D2DJNZ R6,D1RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共阴字码表0~9 END训练内容四:利用定时器中断实现60秒计时,具有启动按键和清0按键。
说明:利用定时器T0产生50ms的延时,即每50ms中断一次,计满20次(20×50ms=1s),秒计数单元加1。
4位独立按键电路原理图,如图4.3所示。
4位独立按键使用了P2.4、P2.5、P2.6、P2.7四位I/O口,当键按下时,为低电平,因此,可以通过检测低电平来检测按键是否按下。
本实验中,选用s6为启动按键,s11为暂停按键,A18为清0按键,采用查询法检测按键状态。
在按下暂停按键或清0按键后,需重新按下启动按键,才能继续计时。
图4.3 四位独立按键流程图如图4.4、4,5、4.6所示。
关闭流水灯、点阵模块;初始化:定时器T0、中断DPTR ←表首地址T0中断次数20→R0显示初值0→R1启动定时器T0调用数码管显示子程序暂停定时器T0启动按键?开始NNY暂停按键?Y暂停定时器T0T0中断次数20→R0显示初值0→R1N清0按键?Y图4.4 主程序流程图图4.5 数码管扫描显示程序图4.6 T0中断服务子程序参考程序:ORG 00HJMP MAINORG 0BHJMP TIM0MAIN:SETB P1.2;LED流水灯模块锁存器的控制位MOV P0,#0FFH;关闭LED灯CLR P1.2SETB P1.3 ;点阵模块的行控制锁存器MOV P0,#0 ;关闭点阵行CLR P1.3MOV TMOD,#01H ;定时器T0工作在方式2MOV TH0,#HIGH(15536)MOV TL0,#LOW(15536) ;初值50msMOV IE,#82H ;开中断MOV DPTR,#TABLE;表首地址MOV R0,#20 ;存放定时器中断的循环次数MOV R1,#0 ;显示初值,从0开始显示START: JB P2.4,IF_STOP ;启动按键s6,启动定时器T0 SETB TR0 ;启动定时器T0IF_STOP: JB P2.5,IF_CLR;暂停按钮S11CLR TR0IF_CLR:JB P2.6,LED_SCAN;清0按钮s18CLR TR0MOV R0,#20MOV R1,#0LED_SCAN:ACALL SCAN ;调用显示子程序SJMP STARTSCAN: ;;;扫描显示子程序CJNE R1,#60,LED_VIEW ;到60则清零MOV R1,#0LED_VIEW:MOV A,R1 ;分解数字MOV B,#10DIV ABMOV 20H,B ; 个位MOV 21H,A ; 十位MOV R2,#11111110B;位选信号的初值MOV R3,#2 ;数码管显示2位数MOV A,21H ;个位,准备显示DISP: ;;;分别显示十位、个位MOVC A,@A+DPTRSETB P1.0MOV P0,A ;显示字型码CLR P1.0SETB P1.1MOV P0,R2 ;输出位选信号CLR P1.1MOV A,R2;形成下一个位选信号RL AMOV R2,ACALL DELAY;扫描延时MOV A,20H;十位,准备显示DJNZ R3,DISPRETTIM0: ;;;定时器T0中断子程序PUSH ACC ;现场保护MOV TH0,#HIGH(15536);重新装载初值TH0、TL0MOV TL0,#LOW(15536)DJNZ R0,EXIT ;判断是否到1SMOV R0,#20 ;若到1s,重置中断次数INC R1 ;秒单元加1EXIT:POP ACC ;恢复现场RETIDELAY:MOV R6,#4 ;扫描延时2ms,太小会重影,太大会闪烁D3: MOV R7,#248DJNZ R7,$DJNZ R6,D3RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;共阴字码表END。