📄 time_m8.asm
字号:
rjmp rb1 ;转移
d1: sec ;c=1
ror r18 ;带C循环右移,r18将放读出的数据
nop
rb1: sbi portc,0 ;clk=1
nop
nop
cbi portc,0 ;clk=0
dec r16 ;寄存器减1
cpi r16,0 ;与立即数0比较
brne rb0 ;不为0,继续发送下一位。
ret
;---------------------------------
;----数据分开,并分别装入相应的显示存储器中,时,分,秒-------------------
moin1: mov r16,r0 ;秒
cbr r16,0xf0
mov r27,r16
swap r0
mov r16,r0
cbr r16,0xf0
mov r26,r16
mov r16,r1 ;分
cbr r16,0xf0
mov r24,r16
swap r1
mov r16,r1
cbr r16,0xf0
mov r23,r16
mov r16,r2 ;时
cbr r16,0xf0
mov r21,r16
swap r2
mov r16,r2
cbr r16,0xf0
mov r20,r16
ldi r22,16 ;-
ldi r25,16 ;-
ret
;----数据分开,并分别装入相应的显示存储器中,年,月,日-------------------
moin2: mov r16,r3 ;日
cbr r16,0xf0
mov r27,r16
swap r3
mov r16,r3
cbr r16,0xf0
mov r26,r16
mov r16,r4 ;月
cbr r16,0xf0
mov r24,r16
swap r5
mov r16,r5
cbr r16,0xf0
mov r23,r16
;r5存的是星期值。
mov r16,r6 ;年
cbr r16,0xf0
mov r21,r16
swap r6
mov r16,r6
cbr r16,0xf0
mov r20,r16
ldi r22,17 ;_
ldi r25,17 ;_
ret
;----------r20-r29单元是显示存储区,只要把数据装入这些寄存器,调动态扫描程序就可以显示了。
datin: ldi r20,0 ;0
ldi r21,0 ;0
ldi r22,16 ;-
ldi r23,0 ;0
ldi r24,0 ;0
ldi r25,16 ;-
ldi r26,0 ;0
ldi r27,0 ;0
ret
;################led动态扫描显示子程序,使用前把显示数据装入显示存储器中###使用145############
;可显示的字符包括:0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F、-、_、P、X、
display: ldi r16,0B10000000 ;作共阴的公共脚。
out portd,r16 ;位号,第1位。
mov r16,r20 ;数据1
rcall dxaa ;显示
;----------------------------
ldi r16,0B10010000
out portd,r16 ;位号,第2位。
mov r16,r21 ;数据2
rcall dxaa ;显示
;----------------------------
ldi r16,0B10100000
out portd,r16 ;位号,第3位。
mov r16,r22 ;数据3
rcall dxaa ;显示
;----------------------------
ldi r16,0B10110000
out portd,r16 ;位号,第4位。
mov r16,r23 ;数据4
rcall dxaa ;显示
;----------------------------
ldi r16,0B11000000
out portd,r16 ;位号,第5位。
mov r16,r24 ;数据5
rcall dxaa ;显示
;----------------------------
ldi r16,0B11010000
out portd,r16 ;位号,第6位。
mov r16,r25 ;数据6
rcall dxaa ;显示
;----------------------------
ldi r16,0B11100000
out portd,r16 ;位号,第7位。
mov r16,r26 ;数据7
rcall dxaa ;显示
;----------------------------
ldi r16,0B11110000
out portd,r16 ;位号,第8位。
mov r16,r27 ;数据8
rcall dxaa ;显示
;----------------------------
ret
;------取码/延迟/消隐多功能程序---------
dxaa: ldi zh, high(Table_1<<1); 初始化Z指针
ldi zl, low(Table_1<<1)
clc ;清进位标志
add r30,r16 ;r16放的是要显示的数据,处理低字节数据
clr r16 ;r16清0
adc r31,r16 ;处理高字节数据
lpm r16,z ;从程序存储器中装入Z指针(r31:r30)指向的常量
out portb,r16
rcall londel ;长延时
ser r16 ;消隐
out portb,r16
rcall del
ret
;------------------------
Table_1:
.db 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF,0xF7,0x8C,0xFF
;共阳 0 1 2 3 4 5 6 7 8 9 A b C d E F - _ P X
;***************************************************************************************************
;.db 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x08,0x73,0x00
;共阴 0 1 2 3 4 5 6 7 8 9 A b C d E F - _ P X
;***************************************************************************************************
;#################短延迟程序##################
del: ldi r16,0x1f ;使用内部1MHzRC震荡器
del1: dec r16
brne del1
nop
ret
;###################钳套的延迟程序################
londel: ldi r17,0x08
del2: rcall del
rcall del
dec r17
brne del2
ret
;##################end###############
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -