⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data.txt

📁 闪烁灯程序课程设计
💻 TXT
📖 第 1 页 / 共 2 页
字号:

目 录
摘要........	I
Abstract	II
第1章 绪论	1
1.1 前言	1
  1.2 国内外研究现状	2
第2章 系统设计	3
2.1功能要求	3
2.2方案论证	3
  2.3系统硬件电路的设计	3
2.3.1单片机简介	4
2.3.2三极管8550 244 共阳七段LED显示器	8
2.4系统程序的设计	10
2.4.1主程序	10
  2.4.2显示子程序	10
2.4.3定时器T0中断服务程序	11
2.4.4 T1中断服务程序	11
2.4.5调时功能程序	12
  2.4.6时钟/秒表功能程序	12
2.5调试及性能分析	12
2.5.2硬件调试	12
2.5.3软件调试	12
2.5.4性能分析	12
2.6控制源程序清单	12
结论	15
致谢	16
参考文献	17
附录	18










控制源程序清单 
以下是秒表/时钟计时器的控制源程序:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
AT89C52秒表/时钟程序      ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;定时器T0、T1溢出周期为50ms(10ms),T0为秒计数用,T1为调整时闪烁用,
;P1.0、P1.1、P1.2为调整按钮,P0口为字符输出口,采用共阳显示管。;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;    中断人口程序                ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;





ORG 0000H
;程序执行开始地址





LJMP
START ;跳到标号START执行





ORG 0003H
;外中断0中断程序入口





RETI
;外中断0中断返回

ORG 000BH
;定时器T0中断程序入口

LJMP
INTT0
;跳至INTT0执行



ORG 0013H
;外中断1中断程序入口



RETI
;外中断1中断返回

ORG 001BH
;定时器T1中断程序入口

LJMP
INTT1
;跳至INTT1执行

ORG 0023H
;串行中断程序人口地址

RETI
;串行中断程序返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;          主程序                ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START:
LCALL
ST
;上电显示年月日及班级学号

MOV
R0,#70H
;请70H~7AH共11个内存单元

MOV
R7,#0BH

CLEARDISP:MOV
@R0,#00H

INC
R0

DJNZ
R7,CLEARDISP

MOV
20H,#00H
;请20H(标志用)

MOV
7AH,#0AH
;放入“熄灭符”数据

MOV
TMOD,#11H

;设T0、T1为16位定时器

MOV
TL0,#0B0H
;50ms定时初值(T0计时用)

MOV
TH0,#3CH
;50ms定时初值

MOV
TL1,#0B0H
;50ms定时初值(T1闪烁定时用)

MOV
TH1,#3CH
;50ms定时初值

SETB
EA
;总中断开放

SETB
ET0
;允许T0中断

SETB
TR0
;开启T0定时器

MOV
R4,#14H
;1s定时用初值(50ms*20)
START1:
LCALL
DISPLAY
;调用显示子程序

JNB
P1.0,SETMM1
;P1.0口为0时,转时间调整程序

JNB
P1.1,FRNSS
;秒表功能,P1.1按键调时时作减1操作

JNB
P1.2,FUNPT
;STOP,PUSE,CLR

SJMP
START1
;P1.0口为1时跳回START1
SETMM1:
LJMP
SETMM
;转到时间调整程序SETMM
FUNSS:
LCALL
DS20MS


JB
P1.1,START1
WAIT11:
JNB

P1.1,WAIT11

CPL
03H

MOV
70H,#00H

MOV
71H,#00H

MOV
76H,#00H

MOV
77H,#00H

MOV
78H,#00H

MOV
79H,#00H

AJMP
START1
FUNPT:
LCALL
DS20MS


JB
P1.2,START1
WAIT22:
JNB
P1.2,WAIT21

CLR
ET0

CLR
TR0
WAIT33:
JB
P1.2,WAIT31

LCALL
DS20MS

JB
P1.2,WAIT33
WAIT66:
JNB
P1.2,WAIT61


MOV
R0,#70H
;请70H~79H共10个内存单元

MOV
R7,#0AH
CLEARP:
MOV
@R0,#00H

INC
RO

DJNZ
R7,CLEARP
WAIT44:
JB 
P1.2,WAIT41
LCALL 

DS20MS
JB 
P1.2,WAIT44
WAIT55:
JNB

P1.2,WAIT51
SETB 
ET0
SETB

TR0
AJMP

START1
WAIT21:
LCALL

DISPLAY
AJMP

WAIT22
WAIT31:
LCALL
DISPLAY
AJMP
WAIT33
WAIT41:
LCALL
DISPLAY
AJMP
WAIT44
WAIT51:
LCALL
DISPLAY
AJMP
WAIT55
WAIT61:
LCALL
DISPLAY
AJMP
WAIT66
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
1s计时程序          ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中断服务程序
INTT0:
PUSH
ACC
;累加器字入栈保护

PUSH
PSW
;状态字入栈保护

CLR
ET0
;关T0中断允许

CLR
TR0
;关闭定时器T0

JB
03H,FSS 
;标志为1转秒表处理程序(10ms定时)

MOV
A,#0B7H
;中断响应时间同步修正

ADD
A,TL0
;低8位初值修正

MOV
TL0,A
;重装初值(低8位修正值)

MOV 
A,#3CH
;高8位初值修正

ADDC
A,TH0

MOV
TH0,A 
;重装初值(高8位修正值)

SETB
TR0
;开启定时器T0

DJNZ
R4,OUTT0 ;20次中断未到中断退出
ADDSS:
MOV
R4,#14H
;20次中断到(1s)重赋初值

MOV
R0,#71H

;指向秒计时单元(71H~72H)

ACALL
ADD1
;调用加1程序(加1s操作)

MOV
A,R3
;秒数据放入A(R3为2位十进制数组合)

CLR
C

;清进位标志

CJNE
A,#60H,ADDMM
ADDMM:
JC
OUTT0
;短于60s时中断退出

ACALL
CLR0
;长于或等于60s时对秒计时单元清0

MOV
R0,#77H
;指向分时单元(76H~77H)

ACALL
ADD1
;分计时单元加1min

MOV
A,R3
;分数据放入A

CLR
C
;清进位标志

CJNE
A,#60H,ADDHH
ADDHH:
JC
OUTT0
;短于60min时中断退出

ACALL
CLR0
;长于或等于60min时对分计时单元清0

MOV
R0,#79H
;指向小时单元(78H~79H)

ACALL
ADD1
;小计时单元加1h

MOV
A,R3
;时数据放入A

CLR
C

;清进位标志

JB
03H,OUTT0
;秒表时最大数为99

CJNE
A,#24H,HOUR
HOUR:
JC
OUTT0
;短于24h时中断退出

ACALL
CLR0
;长于或等于24h[小]时计时单元清0
OUTT0:
MOV
72H,76H
;中断退出时将分、时计时单元数据移

MOV

73H,77H
;入对应显示单元

MOV
74H,78H

MOV
75H,79H

POP
PSW 
;恢复状态字(出栈)

POP
ACC 
;恢复累加器

SETB
ET0
;开放T0中断

RETI
;中断返回
;秒表计时程序(10min加1),低2位为0.1、0.01秒,中间2位为秒,最高2位为分。
;最大计数值为99分59.99秒
FSS:
MOV
A,#0F7H
;重装初值(10ms),中断响应时间同步修正

ADD
A,TL0
;低8位初值修正

MOV
TL0,A
;重装初值(低8位修正值)

MOV
A,#0D8H
;高8位初值修正

ADDC
A,TH0

MOV
TH0,A
;重装初值(高8位修正值)

SETB
TR0
;开启定时器T0

MOV
R0,#71H
;指向秒计时单元(71H~72H)

ACALL
ADD1
;调用加1程序(加1s操作)

CLR
C

MOV
A,R3

JZ
FSS1
;加1后为00,C=0

SETB
C
;加1后不为00,C=1
FSS1:
AJMP
ADDMM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;         闪动调时程序         ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T1中断服务程序,用作时间调整时调整单元闪烁指示
INTT1: 
PUSH
ACC
;中断现场保护

PUSH
PSW


MOV
TL1,#0B0H
;装定时器T1定时初值

MOV
TH1,#3CH

DJNZ
R2,INTT1OUT ;0.3s未到,退出中断(50ms中断6次)

MOV
R2,#06H
;重装0.3s定时用初值

CPL
02H
;0.3s定时到,对闪烁标志取“反”

JB
02H,FLASH1
;0.2H位为1时,显示单元“熄灭”

MOV
72H,76H 
;0.2H位为0时,正常显示

MOV
73H,77H

MOV
74H,78H

MOV
75H,79H
INTT1OUT:
POP
PSW
;恢复现场

POP
ACC

RETI
;中断退出
FLASH1:
JB
01H,FLASH2;01H位为1时,转[小]时熄灭控制

MOV
72H,7AH 
;01H位为0时,“熄灭符”数据放入分

MOV

73H,7AH
;显示单元(72H~73H),将不显示分数据

MOV
74H,78H

MOV
75H,79H 

AJMP
INTT1OUT
;转中断退出 
FLASH2:
MOV
72H,76H 
;01H位为1时,“熄灭符”数据放入[小]时

MOV
73H,77H
;显示单元(74H~75H),[小]时数据将不显示

MOV
74H,7AH

MOV
75H,7AH

AJMP
INTT1OUT
;转中断退出
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;              加1子程序       ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ADD1:
MOV
A,@R0

;取当前计时单元数据到A

DEC
R0
;指向前一地址

SWAP
A
;A中数据高四位与低四位交换

ORL
A,@R0
;前一地址中数据放入A中低四位

ADD
A,#01H
;A加1操作

DA
A
;十进制调整


MOV
R3,A
;移入R3寄存器

ANL
A,#0FH
;高四位变0

MOV
@R0,A
;放回前一地址单元

MOV
A,R3
;取回R3中暂存数据

INC
R0
;指向当前地址单元

SWAP
A
;A中数据高四位与低四位交换

ANL
A,#0FH
;高四位变0

MOV
@R0,A
;数据放入当前地址单元中

RET
;子程序返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;            分减1子程序        ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SUB1:MOV
A,@R0
;取当前计时单元数据到A

DEC
R0
;指向前一地址

SWAP
A
;A中数据高四位与低四位交换

ORL
A,@R0
;前一地址中数据放入A中低四位



JZ
SUB11


DEC
A
;A减1操作


SUB111:
MOV
R3,A
;移入R3寄存器

ANL
A,#0FH
;高四位变0

CLR
C
;清进位标志

SUBB
A,#0AH

SUB1111:
JC
SUB1110


MOV
@R0,#09H
;大于等于0AH,为9

SUB110:
MOV
A,R3
;取回R3中暂存数据

INC
R0
;指向当前地址单元

SWAP
A
;A中数据高四位与低四位交换

ANL
A,#0FH
;高四位变0

MOV
@R0,A
;数据放入当前地址单元中

RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -