?? tc_clock.s
字號:
mov R16,R12
subi R16,255 ; addi 1
xcall _LCD_WRITE_COM
.dbline 257
; LCD_WRITE_COM(y);
mov R16,R10
xcall _LCD_WRITE_COM
.dbline 258
; for(i=0;i<16;i++)
clr R20
xjmp L34
L31:
.dbline 259
.dbline 260
ldi R24,2
mul R24,R22
mov R17,R0
ldi R16,16
muls R16,R17
ldi R24,<_Tab_Chinesepoem+16
ldi R25,>_Tab_Chinesepoem+16
movw R2,R0
add R2,R24
adc R3,R25
mov R30,R20
clr R31
add R30,R2
adc R31,R3
lpm R16,Z
xcall _LCD_WRITE_DAT
.dbline 261
L32:
.dbline 258
inc R20
L34:
.dbline 258
cpi R20,16
brlo L31
.dbline -2
L26:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r p 22 c
.dbsym r y 10 c
.dbsym r x 12 c
.dbend
.dbfunc e LCD_WRITE_PICTURE _LCD_WRITE_PICTURE fV
; a -> <dead>
; k -> R20
; i -> R22
; j -> R10
.even
_LCD_WRITE_PICTURE::
xcall push_gset3
.dbline -1
.dbline 274
; {
; LCD_WRITE_DAT(Tab_Chinesepoem[2*p+1][i]);
; }
; }
;
; /********************************************************
; *函數名稱:LCD_WRITE_PICTURE()
; *函數功能:在LCD液晶屏上顯示圖片‘南華大學電氣工程學院’
; *函數引用了字模軟件生成的字模表Tab_pic2[][16]
; *其取模方式為 :從第一列開始向下取8個點作為一個字節
; ,然后從第二列開始向下取8個點作為第二個字節...依此類推。
; 如果最后不足8個點就補滿8位。 取模順序是從低到高,即第
; 一個點作為最低位。如*-------取為00000001
; ***********************************************************/
; void LCD_WRITE_PICTURE()
; {
.dbline 277
; uchar i,j,k;
; uint a;
; LCDCS1H;
sbi 0x12,5
.dbline 278
; LCDCS2L;
cbi 0x12,4
.dbline 279
; LCD_WRITE_COM(0x3F);
ldi R16,63
xcall _LCD_WRITE_COM
.dbline 280
; LCD_WRITE_COM(0xC0);
ldi R16,192
xcall _LCD_WRITE_COM
.dbline 281
; for(k=0;k<8;k++)
clr R20
xjmp L40
L37:
.dbline 282
; {
.dbline 283
; LCD_WRITE_COM(0xB8+k); //起始行,每頁有八行
mov R16,R20
subi R16,72 ; addi 184
xcall _LCD_WRITE_COM
.dbline 284
; LCD_WRITE_COM(0x40); //起始列,列自動加一
ldi R16,64
xcall _LCD_WRITE_COM
.dbline 285
; for(i=0;i<4;i++)
clr R22
xjmp L44
L41:
.dbline 286
; for(j=0;j<16;j++)
clr R10
xjmp L48
L45:
.dbline 287
.dbline 288
ldi R24,8
mul R24,R20
mov R2,R22
add R2,R0
ldi R24,16
mul R24,R2
movw R2,R0
ldi R24,<_Tab_pic2
ldi R25,>_Tab_pic2
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
lpm R16,Z
xcall _LCD_WRITE_DAT
.dbline 290
L46:
.dbline 286
inc R10
L48:
.dbline 286
mov R24,R10
cpi R24,16
brlo L45
L42:
.dbline 285
inc R22
L44:
.dbline 285
cpi R22,4
brlo L41
.dbline 292
L38:
.dbline 281
inc R20
L40:
.dbline 281
cpi R20,8
brlo L37
.dbline 293
; {
; LCD_WRITE_DAT(Tab_pic2[i+k*8][j]);
;
; }
;
; }
; LCDCS1L;
cbi 0x12,5
.dbline 294
; LCDCS2H;
sbi 0x12,4
.dbline 295
; LCD_WRITE_COM(0x3F);
ldi R16,63
xcall _LCD_WRITE_COM
.dbline 296
; LCD_WRITE_COM(0xC0);
ldi R16,192
xcall _LCD_WRITE_COM
.dbline 297
; for(k=0;k<8;k++)
clr R20
xjmp L52
L49:
.dbline 298
; {
.dbline 299
; LCD_WRITE_COM(0xB8+k); //起始行,每頁有八行
mov R16,R20
subi R16,72 ; addi 184
xcall _LCD_WRITE_COM
.dbline 300
; LCD_WRITE_COM(0x40); //起始列,列自動加一
ldi R16,64
xcall _LCD_WRITE_COM
.dbline 301
; for(i=0;i<4;i++)
clr R22
xjmp L56
L53:
.dbline 302
; for(j=0;j<16;j++)
clr R10
xjmp L60
L57:
.dbline 303
.dbline 304
ldi R24,8
mul R24,R20
mov R24,R22
subi R24,252 ; addi 4
add R24,R0
ldi R25,16
mul R25,R24
movw R2,R0
ldi R24,<_Tab_pic2
ldi R25,>_Tab_pic2
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
lpm R16,Z
xcall _LCD_WRITE_DAT
.dbline 306
L58:
.dbline 302
inc R10
L60:
.dbline 302
mov R24,R10
cpi R24,16
brlo L57
L54:
.dbline 301
inc R22
L56:
.dbline 301
cpi R22,4
brlo L53
.dbline 307
L50:
.dbline 297
inc R20
L52:
.dbline 297
cpi R20,8
brlo L49
.dbline -2
L36:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym l a 1 i
.dbsym r k 20 c
.dbsym r i 22 c
.dbsym r j 10 c
.dbend
.dbfunc e LCD_CLS _LCD_CLS fV
; i -> R20
; j -> R22
.even
_LCD_CLS::
xcall push_gset2
sbiw R28,1
.dbline -1
.dbline 311
; {
; LCD_WRITE_DAT(Tab_pic2[i+4+k*8][j]);
;
; }
; }
; }
; /***************12864液晶清屏**********************/
; void LCD_CLS()
; {
.dbline 313
; uchar i,j;
; LCDCS1H; //清左邊屏幕
sbi 0x12,5
.dbline 314
; LCDCS2L;
cbi 0x12,4
.dbline 315
; LCD_WRITE_COM(0x3F);
ldi R16,63
xcall _LCD_WRITE_COM
.dbline 316
; LCD_WRITE_COM(0xC0);
ldi R16,192
xcall _LCD_WRITE_COM
.dbline 317
; for(i=0;i<4;i++)
clr R20
xjmp L65
L62:
.dbline 318
; for(j=0;j<8;j++)
clr R22
xjmp L69
L66:
.dbline 319
.dbline 320
ldi R24,12
std y+0,R24
mov R18,R22
mov R16,R20
xcall _LCD_WRITE_ADD_CHAR
.dbline 321
L67:
.dbline 318
inc R22
L69:
.dbline 318
cpi R22,8
brlo L66
L63:
.dbline 317
inc R20
L65:
.dbline 317
cpi R20,4
brlo L62
.dbline 323
; {
; LCD_WRITE_ADD_CHAR(i,j,0x0C);
; }
;
; LCDCS1L; //清右邊屏幕
cbi 0x12,5
.dbline 324
; LCDCS2H;
sbi 0x12,4
.dbline 325
; LCD_WRITE_COM(0x3F);
ldi R16,63
xcall _LCD_WRITE_COM
.dbline 326
; LCD_WRITE_COM(0xC0);
ldi R16,192
xcall _LCD_WRITE_COM
.dbline 327
; for(i=0;i<4;i++)
clr R20
xjmp L73
L70:
.dbline 328
; for(j=0;j<8;j++)
clr R22
xjmp L77
L74:
.dbline 329
.dbline 330
ldi R24,12
std y+0,R24
mov R18,R22
mov R16,R20
xcall _LCD_WRITE_ADD_CHAR
.dbline 331
L75:
.dbline 328
inc R22
L77:
.dbline 328
cpi R22,8
brlo L74
L71:
.dbline 327
inc R20
L73:
.dbline 327
cpi R20,4
brlo L70
.dbline -2
L61:
adiw R28,1
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 22 c
.dbend
.dbfunc e Timer1_INIT _Timer1_INIT fV
.even
_Timer1_INIT::
.dbline -1
.dbline 338
; {
; LCD_WRITE_ADD_CHAR(i,j,0x0C);
; }
; }
;
; //定時器0溢出中斷函數
;
; /*****************************************/
; void Timer1_INIT()
; {
.dbline 339
; TCNT1H=0xB9; //在18.432MHz晶振下,取1024分頻時鐘設初值
ldi R24,185
out 0x2d,R24
.dbline 340
; TCNT1L=0xAF;
ldi R24,175
out 0x2c,R24
.dbline 341
; TCCR1A=0x00; //普通模式
clr R2
out 0x2f,R2
.dbline 342
; TCCR1B|=0x05; //時鐘選擇為1024分頻模式
in R24,0x2e
ori R24,5
out 0x2e,R24
.dbline 343
; SREG|=BIT(7); //使能全局中斷
bset 7
.dbline 344
; TIMSK|=0x04; //TIMSK的bit2為定時器1溢出中斷使能
in R24,0x37
ori R24,4
out 0x37,R24
.dbline -2
L78:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Timer1_int _Timer1_int fV
.even
_Timer1_int::
st -y,R2
st -y,R24
st -y,R25
in R2,0x3f
st -y,R2
.dbline -1
.dbline 351
.dbline 352
ldi R24,185
out 0x2d,R24
.dbline 353
ldi R24,175
out 0x2c,R24
.dbline 354
lds R24,_sec
subi R24,255 ; addi 1
sts _sec,R24
.dbline 355
cpi R24,60
brne L80
.dbline 356
.dbline 357
clr R2
sts _sec,R2
.dbline 358
lds R24,_min
subi R24,255 ; addi 1
sts _min,R24
.dbline 359
L80:
.dbline -2
L79:
ld R2,y+
out 0x3f,R2
ld R25,y+
ld R24,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e CLOCK _CLOCK fV
.even
_CLOCK::
xcall push_gset2
.dbline -1
.dbline 362
; }
; /****************************************
; * 名稱:Timer1_int() 定時器1中斷函數
; * 功能:實現秒計數
; **************************************/
; void Timer1_int()
; {
; TCNT1H=0xB9; //重裝初值
; TCNT1L=0xAF;
; sec++;
; if(sec==60)
; {
; sec=0;
; min++;
; }
; }
; void CLOCK()
; {
.dbline 363
; if(min==60)
lds R24,_min
cpi R24,60
breq X1
xjmp L83
X1:
.dbline 364
; {
.dbline 365
; min=0;
clr R2
sts _min,R2
.dbline 366
; hour++;
lds R24,_hour
subi R24,255 ; addi 1
sts _hour,R24
.dbline 367
; if(hour==24)
cpi R24,24
breq X2
xjmp L85
X2:
.dbline 368
; {
.dbline 369
; hour=0;
sts _hour,R2
.dbline 370
; date++;
lds R24,_date
subi R24,255 ; addi 1
sts _date,R24
.dbline 371
; day++;
lds R24,_day
subi R24,255 ; addi 1
sts _day,R24
.dbline 372
; if(day==8)
cpi R24,8
brne L87
.dbline 373
; {day=1;}
.dbline 373
ldi R24,1
sts _day,R24
.dbline 373
L87:
.dbline 374
; if(date==32&&((mon==1)|(mon==3)||(mon==5)||(mon==7)||(mon==8)||(mon==10)||(mon==12)))
lds R24,_date
cpi R24,32
brne L89
lds R24,_mon
cpi R24,1
brne L92
ldi R22,1
ldi R23,0
xjmp L93
L92:
clr R22
clr R23
L93:
lds R24,_mon
cpi R24,3
brne L94
ldi R20,1
ldi R21,0
xjmp L95
L94:
clr R20
clr R21
L95:
movw R2,R22
or R2,R20
or R3,R21
tst R2
brne L99
tst R3
brne L99
X0:
lds R24,_mon
cpi R24,5
breq L99
cpi R24,7
breq L99
cpi R24,8
breq L99
cpi R24,10
breq L99
cpi R24,12
brne L89
L99:
.dbline 375
; {
.dbline 376
; date=1;
ldi R24,1
sts _date,R24
.dbline 377
; mon++;
lds R24,_mon
subi R24,255 ; addi 1
sts _mon,R24
.dbline 378
; }
L89:
.dbline 379
; if(date==31&&mon!=2)
lds R24,_date
cpi R24,31
brne L100
lds R24,_mon
cpi R24,2
breq L100
.dbline 380
; {
.dbline 381
; date=1;
ldi R24,1
sts _date,R24
.dbline 382
; mon++;
lds R24,_mon
subi R24,255 ; addi 1
sts _mon,R24
.dbline 383
; }
L100:
.dbline 384
; if(date==29&&mon==2&&year%4==0)
lds R24,_date
cpi R24,29
brne L102
lds R24,_mon
cpi R24,2
brne L102
ldi R17,4
lds R16,_year
xcall mod8u
tst R16
brne L102
.dbline 385
; {
.dbline 386
; date=1;
ldi R24,1
sts _date,R24
.dbline 387
; mon++;
lds R24,_mon
subi R24,255 ; addi 1
sts _mon,R24
.dbline 388
; }
L102:
.dbline 389
; if(date==30&&mon==2&&year%4!=0)
lds R24,_date
cpi R24,30
brne L104
lds R24,_mon
cpi R24,2
brne L104
ldi R17,4
lds R16,_year
xcall mod8u
tst R16
breq L104
.dbline 390
; {
.dbline 391
; date=1;
ldi R24,1
sts _date,R24
.dbline 392
; mon++;
lds R24,_mon
subi R24,255 ; addi 1
sts _mon,R24
.dbline 393
; }
L104:
.dbline 394
; }
L85:
.dbline 395
; if(mon==13)
lds R24,_mon
cpi R24,13
brne L106
.dbline 396
; {
.dbline 397
; mon=0;
clr R2
sts _mon,R2
.dbline 398
; year++;
lds R24,_year
subi R24,255 ; addi 1
sts _year,R24
.dbline 399
; if(year==100)
cpi R24,100
brne L108
.dbline 400
; {year=0;}
.dbline 400
sts _year,R2
.dbline 400
L108:
.dbline 401
; }
L106:
.dbline 402
L83:
.dbline -2
L82:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbend
.dbfunc e keyscan _keyscan fc
; key -> R16
; st -> R16
.even
_keyscan::
.dbline -1
.dbline 413
; }
; }
;
; /*********************************************
; *函數名稱:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -