📄 2.s
字号:
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline -2
L35:
adiw R28,4
.dbline 0 ; func end
ret
.dbend
.dbfunc e day_display _day_display fV
.even
_day_display::
sbiw R28,4
.dbline -1
.dbline 130
; }
; /**********************************************/
; /* LCD显示星期年月日*/
; /**********************************************/
; void day_display(void)
; {
.dbline 131
; write_hazi(7,0,biao1[7],biao2[7]);//星
ldi R30,<_biao2+7
ldi R31,>_biao2+7
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
ldi R30,<_biao1+7
ldi R31,>_biao1+7
lpm R2,Z
clr R3
std y+1,R3
std y+0,R2
clr R18
clr R19
ldi R16,7
ldi R17,0
xcall _write_hazi
.dbline 132
; write_hazi(8,0,biao1[8],biao2[8]);//期
ldi R30,<_biao2+8
ldi R31,>_biao2+8
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
ldi R30,<_biao1+8
ldi R31,>_biao1+8
lpm R2,Z
clr R3
std y+1,R3
std y+0,R2
clr R18
clr R19
ldi R16,8
ldi R17,0
xcall _write_hazi
.dbline 133
; write_hazi(4,1,biao1[9],biao2[9]);//年
ldi R30,<_biao2+9
ldi R31,>_biao2+9
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
ldi R30,<_biao1+9
ldi R31,>_biao1+9
lpm R2,Z
clr R3
std y+1,R3
std y+0,R2
ldi R18,1
ldi R19,0
ldi R16,4
ldi R17,0
xcall _write_hazi
.dbline 134
; write_hazi(6,1,biao1[10],biao2[10]);//月
ldi R30,<_biao2+10
ldi R31,>_biao2+10
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
ldi R30,<_biao1+10
ldi R31,>_biao1+10
lpm R2,Z
clr R3
std y+1,R3
std y+0,R2
ldi R18,1
ldi R19,0
ldi R16,6
ldi R17,0
xcall _write_hazi
.dbline 135
; write_hazi(8,1,biao1[11],biao2[11]);//日
ldi R30,<_biao2+11
ldi R31,>_biao2+11
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
ldi R30,<_biao1+11
ldi R31,>_biao1+11
lpm R2,Z
clr R3
std y+1,R3
std y+0,R2
ldi R18,1
ldi R19,0
ldi R16,8
ldi R17,0
xcall _write_hazi
.dbline 136
; write_hazi(9,0,biao1[day-1],biao2[day-1]);//一,二,三,四,五,六,日
ldi R24,<_biao2-1
ldi R25,>_biao2-1
lds R30,_day
clr R31
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
ldi R24,<_biao1-1
ldi R25,>_biao1-1
lds R30,_day
clr R31
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
std y+1,R3
std y+0,R2
clr R18
clr R19
ldi R16,9
ldi R17,0
xcall _write_hazi
.dbline 137
; write_ASCII(0xf9,4,16,table[year/1000]);//年第四位
ldi R18,1000
ldi R19,3
lds R16,_year
lds R17,_year+1
xcall div16u
movw R30,R16
ldi R24,<_table
ldi R25,>_table
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
ldi R24,16
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,4
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 138
; write_ASCII(0xf9,5,16,table[year%1000/100]);//年第三位
ldi R18,1000
ldi R19,3
lds R16,_year
lds R17,_year+1
xcall mod16u
ldi R18,100
ldi R19,0
xcall div16u
movw R30,R16
ldi R24,<_table
ldi R25,>_table
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
ldi R24,16
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,5
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 139
; write_ASCII(0xf9,6,16,table[year%1000%100/10]);//年第二位
ldi R18,1000
ldi R19,3
lds R16,_year
lds R17,_year+1
xcall mod16u
ldi R18,100
ldi R19,0
xcall mod16u
ldi R18,10
ldi R19,0
xcall div16u
movw R30,R16
ldi R24,<_table
ldi R25,>_table
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
ldi R24,16
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,6
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 140
; write_ASCII(0xf9,7,16,table[year%1000%100%10]);//年第一位
ldi R18,1000
ldi R19,3
lds R16,_year
lds R17,_year+1
xcall mod16u
ldi R18,100
ldi R19,0
xcall mod16u
ldi R18,10
ldi R19,0
xcall mod16u
movw R30,R16
ldi R24,<_table
ldi R25,>_table
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
ldi R24,16
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,7
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 141
; write_ASCII(0xf9,10,16,table[month/10]);//月份高位
ldi R18,10
ldi R19,0
lds R16,_month
clr R17
xcall div16s
movw R30,R16
ldi R24,<_table
ldi R25,>_table
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
ldi R24,16
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,10
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 142
; write_ASCII(0xf9,11,16,table[month%10]);//月份低位
ldi R18,10
ldi R19,0
lds R16,_month
clr R17
xcall mod16s
movw R30,R16
ldi R24,<_table
ldi R25,>_table
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
ldi R24,16
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,11
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 143
; write_ASCII(0xf9,14,16,table[days/10]);//日期高位
ldi R18,10
ldi R19,0
lds R16,_days
clr R17
xcall div16s
movw R30,R16
ldi R24,<_table
ldi R25,>_table
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
ldi R24,16
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,14
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 144
; write_ASCII(0xf9,15,16,table[days%10]);//日期低位
ldi R18,10
ldi R19,0
lds R16,_days
clr R17
xcall mod16s
movw R30,R16
ldi R24,<_table
ldi R25,>_table
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
ldi R24,16
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,15
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline -2
L36:
adiw R28,4
.dbline 0 ; func end
ret
.dbend
.dbfunc e get_days _get_days fc
; tian -> R20
; yue -> R20
.even
_get_days::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 150
; }
; /**********************************************/
; /* 确定天数*/
; /**********************************************/
; unsigned char get_days(unsigned char yue)
; {
.dbline 152
; unsigned char tian;
; switch(yue)
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
breq L53
cpi R20,2
ldi R30,0
cpc R21,R30
breq L55
cpi R20,3
ldi R30,0
cpc R21,R30
breq L53
cpi R20,4
ldi R30,0
cpc R21,R30
breq L54
cpi R20,5
ldi R30,0
cpc R21,R30
breq L53
cpi R20,6
ldi R30,0
cpc R21,R30
breq L54
cpi R20,7
ldi R30,0
cpc R21,R30
breq L53
cpi R20,8
ldi R30,0
cpc R21,R30
breq L53
cpi R20,9
ldi R30,0
cpc R21,R30
breq L54
cpi R20,10
ldi R30,0
cpc R21,R30
breq L53
cpi R20,11
ldi R30,0
cpc R21,R30
breq L54
cpi R20,12
ldi R30,0
cpc R21,R30
breq L53
xjmp L51
X4:
.dbline 153
; {
L53:
.dbline 160
; case 1:
; case 3:
; case 5:
; case 7:
; case 8:
; case 10:
; case 12:tian=31;break;
ldi R20,31
.dbline 160
xjmp L51
L54:
.dbline 164
; case 4:
; case 6:
; case 9:
; case 11:tian=30;break;
ldi R20,30
.dbline 164
xjmp L51
L55:
.dbline 165
; case 2: if((year%4==0&&year%100!=0)||(year%400==0))tian=29;else tian=28;break;
lds R24,_year
lds R25,_year+1
andi R24,3
andi R25,0
cpi R24,0
cpc R24,R25
brne L59
X5:
ldi R18,100
ldi R19,0
lds R16,_year
lds R17,_year+1
xcall mod16u
cpi R16,0
cpc R16,R17
brne L58
X6:
L59:
ldi R18,400
ldi R19,1
lds R16,_year
lds R17,_year+1
xcall mod16u
cpi R16,0
cpc R16,R17
brne L56
X7:
L58:
.dbline 165
ldi R20,29
xjmp L51
L56:
.dbline 165
ldi R20,28
.dbline 165
.dbline 166
; default:break;
L51:
.dbline 168
; }
; return tian;
mov R16,R20
.dbline -2
L49:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r tian 20 c
.dbsym r yue 20 c
.dbend
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 174
; }
; /**********************************************/
; /* 定时器初始化 1秒*/
; /**********************************************/
; void timer0_init(void)
; {
.dbline 175
; TCCR0 = 0x00; //stop
clr R2
out 0x33,R2
.dbline 176
; ASSR = 0x08; //set async mode
ldi R24,8
out 0x30,R24
.dbline 177
; TCNT0 = 0x00; //set count
out 0x32,R2
.dbline 178
; TCCR0 = 0x05; //start timer
ldi R24,5
out 0x33,R24
.dbline -2
L60:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 64
jmp _timer0_ovf_isr
.area text(rom, con, rel)
.dbfile E:\ATMEGA~1\万年历实验\2.c
.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
_timer0_ovf_isr::
xcall push_lset
.dbline -1
.dbline 185
; }
; /**********************************************/
; /* 定时器中断服务程序*/
; /**********************************************/
; #pragma interrupt_handler timer0_ovf_isr:17
; void timer0_ovf_isr(void)
; {
.dbline 186
; second=second+1;
lds R24,_second
subi R24,255 ; addi 1
sts _second,R24
.dbline 187
; if(second==60)
cpi R24,60
breq X8
xjmp L62
X8:
.dbline 188
; {
.dbline 189
; second=0;
clr R2
sts _second,R2
.dbline 190
; minute=minute+1;
lds R24,_minute
subi R24,255 ; addi 1
sts _minute,R24
.dbline 191
; if(minute==60)
cpi R24,60
breq X9
xjmp L64
X9:
.dbline 192
; {
.dbline 193
; minute=0;
sts _minute,R2
.dbline 194
; hour=hour+1;
lds R24,_hour
subi R24,255 ; addi 1
sts _hour,R24
.dbline 195
; if(hour==24)
cpi R24,24
brne L66
.dbline 196
; {
.dbline 197
; hour=0;
sts _hour,R2
.dbline 198
; day=day+1;
lds R24,_day
subi R24,255 ; addi 1
sts _day,R24
.dbline 199
; if(day>7)
ldi R24,7
lds R2,_day
cp R24,R2
brsh L68
.dbline 200
; day=1;
ldi R24,1
sts _day,R24
L68:
.dbline 201
; days=days+1;
lds R24,_days
subi R24,255 ; addi 1
sts _days,R24
.dbline 202
; if(days>get_days(month))
lds R16,_month
xcall _get_days
lds R2,_days
cp R16,R2
brsh L70
.dbline 203
; {
.dbline 204
; days=1;
ldi R24,1
sts _days,R24
.dbline 205
; month=month+1;
lds R24,_month
subi R24,255 ; addi 1
sts _month,R24
.dbline 206
; if(month>12)
ldi R24,12
lds R2,_month
cp R24,R2
brsh L72
.dbline 207
; {
.dbline 208
; month=1;
ldi R24,1
sts _month,R24
.dbline 209
; year=year+1;
lds R24,_year
lds R25,_year+1
adiw R24,1
sts _year+1,R25
sts _year,R24
.dbline 210
; }
L72:
.dbline 211
; }
L70:
.dbline 213
;
; }
L66:
.dbline 214
; }
L64:
.dbline 215
; }
L62:
.dbline 216
xcall _time_display
.dbline 217
lds R2,_flag
tst R2
brne L74
.dbline 218
.dbline 219
xcall _day_display
.dbline 220
L74:
.dbline -2
L61:
xcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e lcd_time _lcd_time fV
.even
_lcd_time::
sbiw R28,4
.dbline -1
.dbline 226
; time_display();//显示小时,分钟
; if(flag==0) //与最后面相照应 //如果没有标志位就不能起缓冲作用,边化快
; {
; day_display();//显示年月日
; }
; }
; /**********************************************/
; /*写显示*/
; /**********************************************/
; void lcd_time(void)
; {
.dbline 227
; write_ASCII(0xf9,4,0,table[lcd_buff[0]]);//小时高位
ldi R24,<_table
ldi R25,>_table
lds R30,_lcd_buff
clr R31
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
clr R2
std y+1,R3
std y+0,R2
ldi R18,4
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 228
; write_ASCII(0xf9,5,0,table[lcd_buff[1]]);//小时地位
ldi R24,<_table
ldi R25,>_table
lds R30,_lcd_buff+1
clr R31
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
std y+3,R3
std y+2,R2
clr R2
std y+1,R3
std y+0,R2
ldi R18,5
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 229
; write_ASCII(0xf9,6,0,58); //:
ldi R24,58
ldi R25,0
std y+3,R25
std y+2,R24
clr R2
clr R3
std y+1,R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -