开关控制定时器秒表(汇编版)
一、题目
利用单片机定时/计数器设计一个秒表,采用LED数码管显示,计满100s 后重新计数,依次循环。利用一只开关控制秒表的启动和停止。利用复位键,返回初始工作状态。
二、代码
gpio文件
GPIO:
MOV P0M1, #0
MOV P0M0, #0
MOV P1M1, #0
MOV P1M0, #0
MOV P2M1, #0
MOV P2M0, #0
MOV P3M1, #0
MOV P3M0, #0
MOV P4M1, #0
MOV P4M0, #0
MOV P5M1, #0
MOV P5M0, #0
MOV P6M1, #0
MOV P6M0, #0
MOV P7M1, #0
MOV P7M0, #0
RET
main文件
P0M1 DATA 0x93 ; P0M1.n,P0M0.n =00--->Standard, 01--->push-pull
P0M0 DATA 0x94 ; =10--->pure input, 11--->open drain
P1M1 DATA 0x91 ; P1M1.n,P1M0.n =00--->Standard, 01--->push-pull
P1M0 DATA 0x92 ; =10--->pure input, 11--->open drain
P2M1 DATA 0x95 ; P2M1.n,P2M0.n =00--->Standard, 01--->push-pull
P2M0 DATA 0x96 ; =10--->pure input, 11--->open drain
P3M1 DATA 0xB1 ; P3M1.n,P3M0.n =00--->Standard, 01--->push-pull
P3M0 DATA 0xB2 ; =10--->pure input, 11--->open drain
P4M1 DATA 0xB3 ; P4M1.n,P4M0.n =00--->Standard, 01--->push-pull
P4M0 DATA 0xB4 ; =10--->pure input, 11--->open drain
P5M1 DATA 0xC9 ; P5M1.n,P5M0.n =00--->Standard, 01--->push-pull
P5M0 DATA 0xCA ; =10--->pure input, 11--->open drain
P6M1 DATA 0xCB ; P6M1.n,P6M0.n =00--->Standard, 01--->push-pull
P6M0 DATA 0xCC ; =10--->pure input, 11--->open drain
P7M1 DATA 0xE1
P7M0 DATA 0xE2
AUXR DATA 0x8E
P6 DATA 0xE8
P7 DATA 0xF8
ORG 0x00
LJMP MAIN
MAIN:
LCALL GPIO
ANL AUXR,#7FH ;定时器时钟12T模式
ANL TMOD,#0F0H ;设置定时器模式
MOV TL0,#0F0H ;设置定时初始值
MOV TH0,#0D8H ;设置定时初始值
CLR TF0 ;清除TF0标志
SETB TR0
MOV R7, #0
MOV 50H,#0
MOV 51H,#0
MOV R0, #50H
LOOP:
LCALL NIXIE
JB P3.2, Stop
MOV A, R7
INC A
CJNE A, #2, FLAG
CLR A
FLAG:
MOV R7, A
CJNE R7, #1, Stop
Start:
CLR A
MOV A, #2
ADD A, R2
MOV R2, A
CJNE R2, #200, LOOP
LCALL Timecount
SJMP LOOP
Stop:
CJNE R7, #0, Start
SJMP LOOP
NIXIE:
MOV R0, #50H
MOV P7, #0FEH
MOV A, @R0
MOV DPTR, #NUM
MOVC A, @A+DPTR
MOV P6, A
CIR1:
JNB TF0, CIR1
CLR TF0
MOV P6, #0FFH
MOV P7, #0FDH
INC R0
MOV A, @R0
MOV DPTR, #NUM
MOVC A, @A+DPTR
MOV P6, A
CIR2:
JNB TF0, CIR2
CLR TF0
MOV P6, #0FFH
RET
NUM:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH
Timecount:
MOV R0, #50H
MOV A, @R0
INC A
MOV R3, A
MOV B, #10
DIV AB
MOV R1, B
CJNE R1, #0, NEXT
MOV R3, #0
MOV A, R4
INC A
MOV R4, A
MOV B, #10
DIV AB
MOV R5, B
CJNE R5, #0, NEXT1
MOV R4, #0
NEXT1:
MOV 50H, R3
MOV 51H, R4
RET
NEXT:
MOV 50H, R3
RET
MOV @R0, A
RET
$INCLUDE(NIXIE.inc)
$INCLUDE(gpio.inc)
END
总结
由于最近实验课程较多,刚刚完成所有代码,还没有来得及上传,近期会上传,全部开源,欢迎各位来看!!!
非常感谢各位观看!!!
系列文章——STC8H8K系列汇编51实战
基于ESP8266与STC单片机的天气时钟(包括DS18B20、TFT、串口、外部中断、ESP8266、STC、API等)
STC8H8K系列汇编和C51实战——实现键控不同方式数码管动态显示(C51版与汇编版)
STC8H8K系列汇编和C51实战——开关控制定时器秒表(C51版)
STC8H8K系列汇编和C51实战——开关控制定时器秒表(汇编版)
STC8H8K系列汇编和C51实战——双中断控制定时器流水灯
STC8H8K系列汇编和C51实战——秒倒计时器(可自行设定初值)(51版)
STC8H8K系列汇编和C51实战——按键允许按键计数(51版)
STC8H8K系列汇编和C51实战——按键允许按键计数(汇编版)
STC8H8K系列汇编和C51实战——按键允许按键计数(定时器去抖动51版)
STC8H8K系列汇编和C51实战——按键允许按键计数(利用下降沿中断控制)
STC8H8K系列汇编和C51实战——计算机串口控制单片机LED