单片机第八次实验课——循环彩灯控制实验(定时器控制方式)

发布时间 2023-03-22 21:10:53作者: Ryan爱吃糖

八、单片机第八次实验课——循环彩灯控制实验(定时器控制方式)


(1)用 P1 口作为输出口实现循环彩灯。(至少要有 5 种形式)

汇编:

;可自行拓展,这里只写了五种,另外加闪烁模式需修改模式种数增加模式初值个数,在循环内添加对应处理就好了

ORG 0000H
MOV DPTR,#TAB1
MOV R0,#04H ;闪烁模式种类数
MOV R1,#07H ;每种模式闪烁次数

LOOP:
MOD1:
MOV A,R0
MOVC A,@A+DPTR
B1:
ADD A,#01H
MOV P1,A
RL A
LCALL DELAY
DJNZ R1,B1
MOV R1,#07H
DEC R0

MOD2:
MOV A,R0
MOVC A,@A+DPTR
B2:
MOV P1,A
SUBB A,#01H
RR A
LCALL DELAY
DJNZ R1,B2
MOV R1,#07H
DEC R0

MOD3:
MOV A,R0
MOVC A,@A+DPTR
B3:
MOV P1,A
CPL A
LCALL DELAY
DJNZ R1,B3
MOV R1,#07H
DEC R0

MOD4:
MOV A,R0
MOVC A,@A+DPTR
B4:
MOV P1,A
RL A
LCALL DELAY
DJNZ R1,B4
MOV R1,#07H
DEC R0
MOD5:
MOV A,R0
MOVC A,@A+DPTR
B5:
MOV P1,A
RR A
LCALL DELAY
DJNZ R1,B5
MOV R1,#07H
DEC R0

MOV R0,#04H 
MOV R1,#07H
SJMP LOOP
;每种闪烁模式初值表
TAB1: DB 10000000B,00000001B,00000000B,11111111B,00000000B   
    
DELAY:    
    MOV R7,#17H
DL1:
    MOV R6,#98H
DL0:
    MOV R5,#46H
    DJNZ R5,$
    DJNZ R6,DL0
    DJNZ R7,DL1
    RET
END

(2) 设计一个简易数字钟。 选择一位开关作为数字钟的开关,开关合上后,数字钟开始运行。led8--led13 表示为 6 位二进制数,显示数字钟的秒值;led14--led15 表示为 2 位二进制数,显示数字钟的分钟值,如达到 4 分钟,分钟值又从 0 开始;如此循环往复。

汇编:

ORG 0000H
SJMP MAIN
ORG 000BH
SJMP TINT0
MAIN:
MOV R0,#64H
MOV TMOD,#01H
MOV TH0,#7DH
MOV TL0,#0CBH
SETB EA
SETB ET0
SETB TR0
MOV R1,#00H;记录分钟数
MOV R2,#00H;记录秒数
MOV A,#00H
SJMP $

TINT0:
DJNZ R0,BACK
MOV R0,#64H
MOV A,R1
ADD A,R2
SETB P3.5
JNB P3.5,HAHA   ;如果控制开关关闭则计时,每隔一秒检测一次
SJMP BACK
HAHA:
CJNE A,#11111011B,ADDS  ;如果没有到3分59秒则加一秒
MOV A,#00H   ;如果到了3分59秒则清零
MOV P1,A
MOV R1,#00H
MOV R2,#00H
BACK:
MOV TH0,#7DH
MOV TL0,#0CBH
RETI

ADDS:
MOV A,R2
CJNE A,#00111011B,ADDONESEC ;如果没有到59秒则直接加一秒
MOV R2,#00H  ;如果到了59秒则秒数清零,分钟数加一
MOV A,R1
ADD A,#01000000B
MOV R1,A
MOV P1,A
SJMP BACK
ADDONESEC:
MOV A,R2
ADD A,#01H
MOV R2,A
ADD A,R1
MOV P1,A
SJMP BACK
END