📄 lcd1602.s
字号:
std z+0,R2
.dbline -2
L30:
adiw R28,2
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l a 0 A[2:2]c
.dbsym r i 20 c
.dbsym r str 22 pc
.dbsym r t 20 c
.dbend
.dbfunc e IntToStr1 _IntToStr1 fV
; j -> <dead>
; a -> y+0
; i -> R20
; str -> R22,R23
; t -> R20,R21
.even
_IntToStr1::
xcall push_gset2
movw R22,R18
movw R20,R16
sbiw R28,4
.dbline -1
.dbline 56
.dbline 59
ldi R18,1000
ldi R19,3
movw R16,R20
xcall div16u
ldi R18,10
ldi R19,0
xcall mod16u
std y+0,R16
.dbline 60
ldi R18,100
ldi R19,0
movw R16,R20
xcall div16u
ldi R18,10
ldi R19,0
xcall mod16u
std y+1,R16
.dbline 61
ldi R18,10
ldi R19,0
movw R16,R20
xcall div16u
ldi R18,10
ldi R19,0
xcall mod16u
std y+2,R16
.dbline 62
ldi R18,10
ldi R19,0
movw R16,R20
xcall mod16u
std y+3,R16
.dbline 63
clr R20
xjmp L47
L44:
.dbline 64
movw R24,R28
mov R2,R20
clr R3
add R2,R24
adc R3,R25
movw R30,R2
ldd R24,z+0
subi R24,208 ; addi 48
std z+0,R24
L45:
.dbline 63
inc R20
L47:
.dbline 63
cpi R20,4
brlo L44
.dbline 65
clr R20
xjmp L51
L48:
.dbline 66
.dbline 67
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
movw R30,R22
std z+0,R2
.dbline 68
subi R22,255 ; offset = 1
sbci R23,255
.dbline 69
L49:
.dbline 65
inc R20
L51:
.dbline 65
cpi R20,4
brlo L48
.dbline 70
clr R2
movw R30,R22
std z+0,R2
.dbline -2
L40:
adiw R28,4
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l j 1 c
.dbsym l a 0 A[4:4]c
.dbsym r i 20 c
.dbsym r str 22 pc
.dbsym r t 20 i
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 75
.dbline 80
xcall _init_devices
.dbline 81
xcall _lcd_init
.dbline 82
clr R18
clr R16
xcall _GotoXY
.dbline 83
ldi R16,<L53
ldi R17,>L53
xcall _Print
.dbline 84
ldi R18,1
clr R16
xcall _GotoXY
.dbline 85
nop
.dbline 86
ldi R16,<L54
ldi R17,>L54
xcall _Print
.dbline 88
clr R18
ldi R16,13
xcall _GotoXY
.dbline 89
ldi R16,<L55
ldi R17,>L55
xcall _Print
.dbline 90
clr R18
ldi R16,10
xcall _GotoXY
.dbline 91
ldi R16,<L55
ldi R17,>L55
xcall _Print
xjmp L57
L56:
.dbline 94
.dbline 96
wdr
.dbline 97
ldi R18,<_second
ldi R19,>_second
lds R16,_sec
xcall _IntToStr
.dbline 98
ldi R18,1
ldi R16,12
xcall _GotoXY
.dbline 99
lds R24,_time_set
cpi R24,1
breq L59
.dbline 100
.dbline 101
ldi R16,<_second
ldi R17,>_second
xcall _Print
.dbline 102
xjmp L60
L59:
.dbline 103
lds R24,_time_set
cpi R24,1
brne L61
.dbline 104
.dbline 105
ldi R17,2
lds R16,_flash_flag
xcall mod8u
tst R16
brne L63
.dbline 106
.dbline 107
ldi R16,<_second
ldi R17,>_second
xcall _Print
.dbline 108
xjmp L64
L63:
.dbline 110
.dbline 111
ldi R16,<L65
ldi R17,>L65
xcall _Print
.dbline 112
L64:
.dbline 113
L61:
L60:
.dbline 115
ldi R17,2
lds R16,_flash_flag
xcall mod8u
tst R16
brne L66
.dbline 116
.dbline 117
ldi R18,1
ldi R16,11
xcall _GotoXY
.dbline 118
ldi R16,<L55
ldi R17,>L55
xcall _Print
.dbline 119
ldi R18,1
ldi R16,8
xcall _GotoXY
.dbline 120
ldi R16,<L55
ldi R17,>L55
xcall _Print
.dbline 121
xjmp L67
L66:
.dbline 123
.dbline 124
ldi R18,1
ldi R16,11
xcall _GotoXY
.dbline 125
ldi R16,<L68
ldi R17,>L68
xcall _Print
.dbline 126
ldi R18,1
ldi R16,8
xcall _GotoXY
.dbline 127
ldi R16,<L68
ldi R17,>L68
xcall _Print
.dbline 128
L67:
.dbline 130
ldi R18,<_minute
ldi R19,>_minute
lds R16,_min
xcall _IntToStr
.dbline 131
ldi R18,1
ldi R16,9
xcall _GotoXY
.dbline 132
lds R24,_time_set
cpi R24,2
breq L69
.dbline 133
.dbline 134
ldi R16,<_minute
ldi R17,>_minute
xcall _Print
.dbline 135
xjmp L70
L69:
.dbline 136
lds R24,_time_set
cpi R24,2
brne L71
.dbline 137
.dbline 138
ldi R17,2
lds R16,_flash_flag
xcall mod8u
tst R16
brne L73
.dbline 139
.dbline 140
ldi R16,<_minute
ldi R17,>_minute
xcall _Print
.dbline 141
xjmp L74
L73:
.dbline 143
.dbline 144
ldi R16,<L65
ldi R17,>L65
xcall _Print
.dbline 145
L74:
.dbline 146
L71:
L70:
.dbline 148
ldi R18,<_hour
ldi R19,>_hour
lds R16,_hou
xcall _IntToStr
.dbline 149
ldi R18,1
ldi R16,6
xcall _GotoXY
.dbline 150
lds R24,_time_set
cpi R24,3
breq L75
.dbline 151
.dbline 152
ldi R16,<_hour
ldi R17,>_hour
xcall _Print
.dbline 153
xjmp L76
L75:
.dbline 154
lds R24,_time_set
cpi R24,3
brne L77
.dbline 155
.dbline 156
ldi R17,2
lds R16,_flash_flag
xcall mod8u
tst R16
brne L79
.dbline 157
.dbline 158
ldi R16,<_hour
ldi R17,>_hour
xcall _Print
.dbline 159
xjmp L80
L79:
.dbline 161
.dbline 162
ldi R16,<L65
ldi R17,>L65
xcall _Print
.dbline 163
L80:
.dbline 164
L77:
L76:
.dbline 166
ldi R18,<_Day
ldi R19,>_Day
lds R16,_day
xcall _IntToStr
.dbline 167
clr R18
ldi R16,14
xcall _GotoXY
.dbline 168
lds R24,_time_set
cpi R24,4
breq L81
.dbline 169
.dbline 170
ldi R16,<_Day
ldi R17,>_Day
xcall _Print
.dbline 171
xjmp L82
L81:
.dbline 172
lds R24,_time_set
cpi R24,4
brne L83
.dbline 173
.dbline 174
ldi R17,2
lds R16,_flash_flag
xcall mod8u
tst R16
brne L85
.dbline 175
.dbline 176
ldi R16,<_Day
ldi R17,>_Day
xcall _Print
.dbline 177
xjmp L86
L85:
.dbline 179
.dbline 180
ldi R16,<L65
ldi R17,>L65
xcall _Print
.dbline 181
L86:
.dbline 182
L83:
L82:
.dbline 185
ldi R18,<_Month
ldi R19,>_Month
lds R16,_month
xcall _IntToStr
.dbline 186
clr R18
ldi R16,11
xcall _GotoXY
.dbline 187
lds R24,_time_set
cpi R24,5
breq L87
.dbline 188
.dbline 189
ldi R16,<_Month
ldi R17,>_Month
xcall _Print
.dbline 190
xjmp L88
L87:
.dbline 191
lds R24,_time_set
cpi R24,5
brne L89
.dbline 192
.dbline 193
ldi R17,2
lds R16,_flash_flag
xcall mod8u
tst R16
brne L91
.dbline 194
.dbline 195
ldi R16,<_Month
ldi R17,>_Month
xcall _Print
.dbline 196
xjmp L92
L91:
.dbline 198
.dbline 199
ldi R16,<L65
ldi R17,>L65
xcall _Print
.dbline 200
L92:
.dbline 201
L89:
L88:
.dbline 203
ldi R18,<_Year
ldi R19,>_Year
lds R16,_year
lds R17,_year+1
xcall _IntToStr1
.dbline 204
clr R18
ldi R16,6
xcall _GotoXY
.dbline 205
lds R24,_time_set
cpi R24,6
breq L93
.dbline 206
.dbline 207
ldi R16,<_Year
ldi R17,>_Year
xcall _Print
.dbline 208
xjmp L94
L93:
.dbline 209
lds R24,_time_set
cpi R24,6
brne L95
.dbline 210
.dbline 211
ldi R17,2
lds R16,_flash_flag
xcall mod8u
tst R16
brne L97
.dbline 212
.dbline 213
ldi R16,<_Year
ldi R17,>_Year
xcall _Print
.dbline 214
xjmp L98
L97:
.dbline 216
.dbline 217
ldi R16,<L99
ldi R17,>L99
xcall _Print
.dbline 218
L98:
.dbline 219
; }
L95:
L94:
.dbline 220
wdr
.dbline 221
L57:
.dbline 93
xjmp L56
X2:
.dbline -2
L52:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 32
jmp _timer1_ovf_isr
.area text(rom, con, rel)
.dbfile D:\练习\LCD显示1602\lcd1602.c
.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
_timer1_ovf_isr::
st -y,R2
st -y,R16
st -y,R17
st -y,R18
st -y,R19
st -y,R24
st -y,R25
in R2,0x3f
st -y,R2
.dbline -1
.dbline 228
; WDR();
; }
; }
;
; //******************************************************************
; //每次延时500MS,经过两次延时后,秒位加1;
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
.dbline 230
; //TIMER1 has overflowed
; WDR();
wdr
.dbline 231
; flash_flag++;
lds R24,_flash_flag
subi R24,255 ; addi 1
sts _flash_flag,R24
.dbline 232
; if((flash_flag%2)==0)//判断是否是一秒
ldi R17,2
mov R16,R24
xcall mod8u
tst R16
breq X6
xjmp L101
X6:
.dbline 233
; {
.dbline 235
;
; sec++;
lds R24,_sec
subi R24,255 ; addi 1
sts _sec,R24
.dbline 236
; if(sec==60) //超过60秒,分加1;秒清0
cpi R24,60
brne L103
.dbline 237
; {
.dbline 238
; min++;
lds R24,_min
subi R24,255 ; addi 1
sts _min,R24
.dbline 239
; sec=0;
clr R2
sts _sec,R2
.dbline 240
; }
L103:
.dbline 241
; if(min==60) //超过60分,小时位进1,
lds R24,_min
cpi R24,60
brne L105
.dbline 242
; {
.dbline 243
; hou++;
lds R24,_hou
subi R24,255 ; addi 1
sts _hou,R24
.dbline 244
; min=0;
clr R2
sts _min,R2
.dbline 245
; }
L105:
.dbline 246
; if(hou==24) //小时位超过24,则清0
lds R24,_hou
cpi R24,24
brne L107
.dbline 247
; {
.dbline 248
; hou=0;
clr R2
sts _hou,R2
.dbline 249
; day++;
lds R24,_day
subi R24,255 ; addi 1
sts _day,R24
.dbline 250
; }
L107:
.dbline 251
; if(((year%4==0)&&(year%100!=0))||(year%400==0)) //判断是否为闰年 1为闰年
lds R24,_year
lds R25,_year+1
andi R24,3
andi R25,0
cpi R24,0
cpc R24,R25
brne L112
X3:
ldi R18,100
ldi R19,0
lds R16,_year
lds R17,_year+1
xcall mod16u
cpi R16,0
cpc R16,R17
brne L111
X4:
L112:
ldi R18,400
ldi R19,1
lds R16,_year
lds R17,_year+1
xcall mod16u
cpi R16,0
cpc R16,R17
breq X7
xjmp L109
X7:
X5:
L111:
.dbline 252
; {
.dbline 253
; if((month==2)&&(day==30))//闰年2月份是29天
lds R24,_month
cpi R24,2
brne L113
lds R24,_day
cpi R24,30
brne L113
.dbline 254
; {
.dbline 255
; month++;
lds R24,_month
subi R24,255 ; addi 1
sts _month,R24
.dbline 256
; day=0;
clr R2
sts _day,R2
.dbline 257
; }
xjmp L110
L113:
.dbline 258
; else if((month<=7)&&(month%2==0)&&(day==31))//其他月份小于等于7月份的偶数月份是30天
ldi R24,7
lds R2,_month
cp R24,R2
brlo L115
ldi R17,2
mov R16,R2
xcall mod8u
tst R16
brne L115
lds R24,_day
cpi R24,31
brne L115
.dbline 259
; {
.dbline 260
; month++;
lds R24,_month
subi R24,255 ; addi 1
sts _month,R24
.dbline 261
; day=0;
clr R2
sts _day,R2
.dbline 262
; }
xjmp L110
L115:
.dbline 263
; else if((month<=7)&&(month%2!=0)&&(day==32))//奇数是31天;
ldi R24,7
lds R2,_month
cp R24,R2
brlo L117
ldi R17,2
mov R16,R2
xcall mod8u
tst R16
breq L117
lds R24,_day
cpi R24,32
brne L117
.dbline 264
; {
.dbline 265
; month++;
lds R24,_month
subi R24,255 ; addi 1
sts _month,R24
.dbline 266
; day=0;
clr R2
sts _day,R2
.dbline 267
; }
xjmp L110
L117:
.dbline 268
; else if((month>7)&&(month%2==0)&&(day==32))//大于7月份的偶数月份是31天
ldi R24,7
lds R2,_month
cp R24,R2
brsh L119
ldi R17,2
mov R16,R2
xcall mod8u
tst R16
brne L119
lds R24,_day
cpi R24,32
brne L119
.dbline 269
; {
.dbline 270
; month++;
lds R24,_month
subi R24,255 ; addi 1
sts _month,R24
.dbline 271
; day=0;
clr R2
sts _day,R2
.dbline 272
; }
xjmp L110
L119:
.dbline 273
; else if((month>7)&&(month%2!=0)&&(day==31))//奇数是30天;
ldi R24,7
lds R2,_month
cp R24,R2
brlo X8
xjmp L110
X8:
ldi R17,2
mov R16,R2
xcall mod8u
tst R16
brne X9
xjmp L110
X9:
lds R24,_day
cpi R24,31
breq X10
xjmp L110
X10:
.dbline 274
; {
.dbline 275
; month++;
lds R24,_month
subi R24,255 ; addi 1
sts _month,R24
.dbline 276
; day=0;
clr R2
sts _day,R2
.dbline 277
; }
.dbline 278
; }
xjmp L110
L109:
.dbline 279
; else if((month==2)&&(day==29))//不是闰年二月份是28天;
lds R24,_month
cpi R24,2
brne L123
lds R24,_day
cpi R24,29
brne L123
.dbline 280
; {
.dbline 281
; month++;
lds R24,_month
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -