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日内。


本文标签: 显示数码管中断程序实验