admin管理员组文章数量:1531372
2024年7月2日发(作者:)
一、实验目的
1、在之前单键实验和中断控制数码管“静态”显示实验的基础上,把单键
判断、数码管显示和中断结合起来编写中断程序实现单键控制一位数码管;
2、在实现控制一位数码管显示的基础上用单键控制两位数码管显示。
二、实验所需器材与软件
硬件:电脑、传输线、AT89S52单片机
软件:编程软件Keil uVision3;读写软件MePro V5.02
三、实验程序的及其分析:
1、单键控制一位数码管显示
主要设计思路:在中断主程序后加入单键判断键按下情况判断语句,把数码管显
示程序放在中断子程序中。当有键按下且有中断请求时,重新给数码管显示偏移
地址赋值,从而改变显示内容。
程序:
ORG 0000H
AJMP MAIN ;转向主程序
ORG 001BH ;中断矢量地址
AJMP T_INT ;转向中断服务程序
MAIN: ;主程序标号
MOV R3,#0 ;表偏移地址
MOV DPTR,#TAB ;把表头地址赋值给寄存器DPTR
MOV TMOD,#10H ;设定定时器工作于模式1
MOV TH1,#0FEH ;定时器赋初值
MOV TL1,#0EH
SETB ET1 ;开中断
SETB EA
SETB TR1 ;启动定时器
LOOP1:JNB P1.4, LOOP4
AJMP LOOP1
LOOP4:ACALL DELAY
JNB P1.4, LOOP_ADD 单键按下判断程序
LOOP_ADD:INC R3
CJNE R3,#10,LOOP8
MOV R3,#0
LOOP8: AJMP LOOP1
T_INT: MOV TH1,#0FEH
MOV TL1,#0EH
MOV A,R3 中断程序内嵌的数码管显示程序
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#11111110B
RETI
TAB:DB 0C0H,0F9H,0A4H,0B0H ,99H,92H,82H,0F8H ;表内容
DB 80H,90H
DELAY:MOV R5,#64H
LOOP5:MOV R7,#0FFH
LOOP6:NOP
NOP 用于单键按下防抖动的延时程序
DJNZ R7,LOOP6
DJNZ R5,LOOP5
RET
2、单键控制两位数码管显示
设计思路:用两个寄存器分别存放数码管显示的个位和十位,并且在数码管显示
程序中用移位指令对数码管的位码进行移位,使每次执行中断程序时显示一位
数,循环两次中断程序后“静态”显示两位数字。
程序:
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP T_INT
MAIN:
MOV R0,#0 ;用来判断中断程序显示内容的位数
MOV R3,#0 ;把数码管显示的个位偏移地址存放在R3
MOV R1,#0 ;把数码管显示的十位偏移地址存放在R1
MOV R4 ,#0FEH ;数码管位码内容
MOV R2,#0 ;用于计算数码管位码移位次数
MOV DPTR,#TAB ;把表头地址赋给DPTR
MOV TMOD,#10H
MOV TH1,#0FEH
MOV TL1,#0EH
SETB ET1 中断启动初始化
SETB EA
SETB TR1
LOOP1:JNB P1.4, LOOP4 ;键按下判断程序
AJMP LOOP1
LOOP4:ACALL DELAY
JNB P1.4,LOOP_ADD
LOOP_ADD:INC R3 ;当有键按下时,个位偏移地址加一位
CJNE R3, #10, LOOP8 ;判断个位显示的数值是否超过9
INC R1 ;个位数值到9后十位进一位
MOV R3,#0 ;使个位显示为“0”
CJNE R1,#10,LOOP8 ;判断十位显示数值是否超过9
MOV R1,#0 ;显示满“99”后将数码管置“00”
LOOP8: AJMP LOOP1
T_INT:MOV TH1,#0FEH
MOV TL1,#0EH
CJNE R0, #2, LOOP10
MOV A, R3
INC R0 数码管个位和十位切换操作指令
AJMP LOOP11
LOOP10:MOV A,R1
MOV R0,#2
LOOP11:MOVC A,@A+DPTR
MOV P0,A
MOV P2,R4
MOV A,R4
RL A ;显示完一个数码管后对位码向左移一位
MOV R4,A
INC R2 ;记录移位次数
CJNE R2,#2,LOOP9 ;当移位次数为两次时,执行位码赋初始值指令
MOV R4,#0FEH ;令位码返回初始值
MOV R2,#0 ;移位次数清零
LOOP9:RETI
TAB:DB 0C0H,0F9H,0A4H,0B0H ,99H,92H,82H,0F8H ;表内容
DB 80H,90H
DELAY:MOV R5,#99H
LOOP5:MOV R7,#0FFH
LOOP6:NOP
NOP 键防抖动延时判断程序
DJNZ R7,LOOP6
DJNZ R5,LOOP5
RET
四、实验结果分析
经过艰辛的调试工作,单键的按下判断程序能成功区分抖动键,实现按下与
否判断,一位数码管和两位数码管显示均能按预定要求工作,但两位数码管显示
程序设计逻辑有局限性,在自己所设计逻辑的模式下难以向上扩展,要实现三位
以上数码管显示时有很大困难。
五、实验心得体会
每一次的实验内容都是在之前实验基础上进行的,因此,从多次实验经验来
看,要想顺利完成当次实验,课前回顾之前所做实验内容也是颇为重要的。在写
程序时应先想好程序设计基本思路,避免在原来的程序模板中漫无目的地插入程
序,靠投机取巧实现实验要求,每次在实验中都有深深的体会,在编程序前想好
思路,然后循着思路琢磨着怎么实现会比较容易,且能更好掌握程序逻辑结构,
免得实现了实验要求,自己却看懂所写的程序。在这次实验中,虽然实现了两位
数码管的显示,但是数码管显示的个位和十位是通过存放在两个寄存器中实现
的,再向上扩展至多位数码管显示却是难以实现,因此不是一个优良的程序结构,
这也是这次实验最难突破的难点。
指导教师批阅意见:
成绩评定:
指导教师签字:
年 月 日
备注:
注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
版权声明:本文标题:单片机实验两位数码管显示报告 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/shuma/1719866092a802241.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论