?? mb90092.s
字號(hào):
.dbline 235
; {
.dbline 236
; WDR(); //喂狗
wdr
.dbline 237
; for (j=0;j<Lcd_Characters;j++)
clr R10
xjmp L49
L46:
.dbline 238
.dbline 239
wdr
.dbline 245
clr R2
std y+8,R2
ldi R24,7
std y+6,R24
ldi R24,1
std y+4,R24
ldi R24,2
std y+2,R24
movw R30,R20
ld R2,Z+
ld R3,Z+
movw R20,R30
std y+1,R3
std y+0,R2
mul R24,R22
mov R18,R0
mov R16,R10
xcall _MB90092_DisChar
.dbline 246
L47:
.dbline 237
inc R10
L49:
.dbline 237
mov R24,R10
cpi R24,23
brlo L46
.dbline 247
L43:
.dbline 234
inc R22
L45:
.dbline 234
cpi R22,6
brlo L42
.dbline 248
L40:
.dbline -2
L39:
adiw R28,9
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r Buf 20 pi
.dbsym r i 22 c
.dbsym r j 10 c
.dbend
.dbfunc e M90092_DisRow _M90092_DisRow fV
; charaddr -> R20,R21
; i -> R22
; c_color -> R10
; b_color -> R12
; charsize -> R14
; len -> y+23
; Row -> y+21
; CChar -> y+19
.even
_M90092_DisRow::
xcall push_arg4
xcall push_gset5
sbiw R28,9
ldd R14,y+25
ldd R12,y+27
ldd R10,y+29
.dbline -1
.dbline 322
; {
; WDR(); //喂狗
; // charaddr=CharToAddr(Buf);
; // if (*Buf > 127)
; // Buf+=2;
; // else
; // Buf++;
; MB90092_DisChar (j,i*2,*Buf++,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
; }
; }
; }
; }
; /*
; void Tft_Show_Update(void){
; uint8 i,j=0;
; uint8 *Buf=(uint8 *)Lcd_Show_Buf;
; uint16 charaddr;
; if(Tft_Enable_Show_Flag)
; {
; Tft_Enable_Show_Flag=FALSE;
; for(i=0;i<Lcd_Lines;i++)
; {
; for (j=0;j<Lcd_Characters/2;j++)
; {
; charaddr=CharToAddr(Buf);
; if (*Buf > 127)
; Buf+=2;
; else
; Buf++;
; MB90092_DisChar (j,i*2,charaddr,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
; }
; }
; }
; }
; */
; /*
; void Tft_Show_Update(void){
; uint8 i,j=0;
; uint8 *Buf;
; uint16 charaddr;
; for(i=0;i<0x06;i++)
; {
; if(len!=0){
; for (j=0;j<23 && len!=0;j++)
; {
; charaddr=CharToAddr(Buf);
; if (*Buf > 127)
; Buf+=2;
; else
; Buf++;
; MB90092_DisChar (j,i*2,charaddr,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
; len--;
; }
; for (;j<23 && len==0;j++)
; MB90092_DisChar (j,i*2,0,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
; }
; else
; {
; for(j=0;j<23;j++)
; MB90092_DisChar (j,i*2,0,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
; }
; }
; }
;
;
; */
;
; /*********************************************************************************************************
; ** 函數(shù)名稱:M90092_DisRow
; ** 功能描述: 顯示一行字符
; ** 輸 入: CChar:要新顯示的數(shù)據(jù),計(jì)算機(jī)內(nèi)碼非90092內(nèi)碼
; ** Row:指定顯示行
; ** len:顯示數(shù)據(jù)長(zhǎng)度,全角半角都算一個(gè)
; ** charsize:顯示字體大小 00:standard 01:double width 02:double width double hight 03:quadruple width double hight
; ** b_color:指定顯示行背景色
; ** c_color:指定顯示行前景色
; ** 全局變量:
; ** 調(diào)用模塊: CharToAddr():顯示數(shù)據(jù)內(nèi)碼轉(zhuǎn)換
; ** 說明:
; ** 注意:
; ** 日 期: 2005年11月21日
; ********************************************************************************************************/
;
; void M90092_DisRow(uint8 *CChar,uint8 Row,uint8 len,uint8 charsize, uint8 b_color,uint8 c_color)
; {
.dbline 325
; uint8 i;
; uint16 charaddr;
; if (Row>0x0B) return; //invlid row number
ldi R24,11
ldd R0,y+21
cp R24,R0
brsh L51
.dbline 325
xjmp L50
L51:
.dbline 326
; charaddr=CharToAddr(CChar);
ldd R16,y+19
ldd R17,y+20
xcall _CharToAddr
movw R20,R16
.dbline 327
clr R22
xjmp L56
L53:
.dbline 327
; for (i=0;i<0x17 && i<len;i++){
.dbline 328
; WDR(); //喂狗
wdr
.dbline 329
; MB90092_ClearXY (i,Row);
ldd R18,y+21
mov R16,R22
xcall _MB90092_ClearXY
.dbline 330
; MB90092_DisChar(i,Row,charaddr,charsize,b_color,c_color,0);
clr R2
std y+8,R2
std y+6,R10
std y+4,R12
std y+2,R14
std y+1,R21
std y+0,R20
ldd R18,y+21
mov R16,R22
xcall _MB90092_DisChar
.dbline 331
; if(*CChar >128) CChar+=2;
ldi R24,128
ldd R30,y+19
ldd R31,y+20
ldd R2,z+0
cp R24,R2
brsh L57
.dbline 331
movw R24,R30
adiw R24,2
std y+20,R25
std y+19,R24
xjmp L58
L57:
.dbline 332
; else CChar++;
ldd R24,y+19
ldd R25,y+20
adiw R24,1
std y+20,R25
std y+19,R24
L58:
.dbline 333
L54:
.dbline 327
inc R22
L56:
.dbline 327
cpi R22,23
brsh L59
ldd R0,y+23
cp R22,R0
brlo L53
L59:
.dbline -2
L50:
adiw R28,9
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r charaddr 20 i
.dbsym r i 22 c
.dbsym r c_color 10 c
.dbsym r b_color 12 c
.dbsym r charsize 14 c
.dbsym l len 23 c
.dbsym l Row 21 c
.dbsym l CChar 19 pc
.dbend
.dbfunc e CharToAddr _CharToAddr fi
; tmp -> R10,R11
; tmp0 -> R20
; tmp1 -> R22
; CChar -> R16,R17
.even
_CharToAddr::
xcall push_gset3
.dbline -1
.dbline 347
; }
; }
; /*********************************************************************************************************
; ** 函數(shù)名稱: CharToAddr
; ** 功能描述: 漢字內(nèi)碼轉(zhuǎn)換ROM地址函數(shù)
; ** 輸 入: cchar:要轉(zhuǎn)換的內(nèi)碼(全角半角自動(dòng)轉(zhuǎn)換)
; ** 輸 出: 對(duì)應(yīng)的uint16型的ROM內(nèi)碼
; ** 全局變量:
; ** 調(diào)用模塊:
; ** 說明:
; ** 注意:
; ** 日 期: 2005年11月12日
; ********************************************************************************************************/
;
; uint16 CharToAddr(uint8 *CChar){
.dbline 350
; uint8 tmp1,tmp0;
; uint16 tmp;
; WDR(); //喂狗
wdr
.dbline 351
; if (*CChar >= 0xb0) {
movw R30,R16
ldd R24,z+0
cpi R24,176
brlo L61
.dbline 351
.dbline 352
; tmp1=*CChar-0xa1-6;
ldd R22,z+0
subi R22,161
subi R22,6
.dbline 353
; CChar++;
subi R16,255 ; offset = 1
sbci R17,255
.dbline 354
; tmp0=*CChar-0xa1;
movw R30,R16
ldd R20,z+0
subi R20,161
.dbline 355
; }
xjmp L62
L61:
.dbline 357
; else
; if(*CChar>=0xa1 && *CChar<0xaa)
movw R30,R16
ldd R2,z+0
clr R3
mov R24,R2
cpi R24,161
brlo L63
cpi R24,170
brsh L63
.dbline 358
; {
.dbline 359
; tmp1=*CChar-0xa1;
ldd R22,z+0
subi R22,161
.dbline 360
; CChar++;
subi R16,255 ; offset = 1
sbci R17,255
.dbline 361
; tmp0=*CChar-0xa1;
movw R30,R16
ldd R20,z+0
subi R20,161
.dbline 362
; }
xjmp L64
L63:
.dbline 364
; else
; if(*CChar <127 && *CChar >0x20) {
movw R30,R16
ldd R2,z+0
clr R3
mov R24,R2
cpi R24,127
brsh L65
ldi R24,32
cp R24,R2
brsh L65
.dbline 364
.dbline 365
; tmp=(*CChar-0x20)+0xa3a0;
ldd R24,z+0
clr R25
sbiw R24,32
subi R24,96 ; offset = 41888
sbci R25,92
movw R10,R24
.dbline 366
; tmp1=(uint8)(tmp>>8)-0xa1;
movw R22,R24
mov R22,R23
clr R23
subi R22,161
.dbline 367
; tmp0=(uint8)tmp-0xa1;
mov R20,R24
subi R20,161
.dbline 368
; }
xjmp L66
L65:
.dbline 370
; else
; {
.dbline 371
; tmp0=0;
clr R20
.dbline 372
; tmp1=0;
clr R22
.dbline 373
; }
L66:
L64:
L62:
.dbline 374
; return (tmp1*94+tmp0);
ldi R24,94
mul R24,R22
movw R16,R0
mov R2,R20
clr R3
add R16,R2
adc R17,R3
.dbline -2
L60:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r tmp 10 i
.dbsym r tmp0 20 c
.dbsym r tmp1 22 c
.dbsym r CChar 16 pc
.dbend
.dbfunc e Delay_ms _Delay_ms fV
; k -> R20,R21
; i -> R22,R23
; j -> R10,R11
; ms -> R16,R17
.even
_Delay_ms::
xcall push_gset3
.dbline -1
.dbline 383
; }
;
; /*********************************************************************************************************
; ** 函數(shù)名稱: Delay_ms
; ** 功能描述: 延時(shí)ms毫秒 (不精確)
; ** 日 期: 2004年12月29日
; ********************************************************************************************************/
; void Delay_ms (uint16 ms)
; {
.dbline 385
; uint16 i,j,k;
; for(k=0; k<ms; k++)
clr R20
clr R21
xjmp L71
L68:
.dbline 386
; for(i=48; i>0; i--)
ldi R22,48
ldi R23,0
xjmp L75
L72:
.dbline 387
ldi R24,10
ldi R25,0
movw R10,R24
xjmp L79
L76:
.dbline 387
wdr
L77:
.dbline 387
movw R24,R10
sbiw R24,1
movw R10,R24
L79:
.dbline 387
tst R10
brne L76
tst R11
brne L76
X2:
L73:
.dbline 386
subi R22,1
sbci R23,0
L75:
.dbline 386
cpi R22,0
cpc R22,R23
brne L72
X3:
L69:
.dbline 385
subi R20,255 ; offset = 1
sbci R21,255
L71:
.dbline 385
cp R20,R16
cpc R21,R17
brlo L68
.dbline -2
L67:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r k 20 i
.dbsym r i 22 i
.dbsym r j 10 i
.dbsym r ms 16 i
.dbend
.dbfunc e MB90092_WriteByte _MB90092_WriteByte fV
; i -> R20
; _data -> R16
.even
_MB90092_WriteByte::
xcall push_gset1
.dbline -1
.dbline 396
; for(j=10; j>0; j--)WDR(); //喂狗;
; }
;
; /*********************************************************************************************************
; ** 函數(shù)名稱: MB90092_WriteByte
; ** 功能描述: 向MB90092 寫一個(gè)字節(jié)數(shù)據(jù)
; ** 日 期: 2004年12月29日
; ********************************************************************************************************/
; void MB90092_WriteByte (uint8 _data)
; {
.dbline 398
; uint8 i;
; Lcd_CS_Dis;
cbi 0x18,7
.dbline 399
ldi R20,8
xjmp L84
L81:
.dbline 399
; for (i=8;i>0;i--){
.dbline 400
; WDR(); //喂狗
wdr
.dbline 401
; Lcd_CLK_Dis;
cbi 0x18,6
.dbline 402
; if (_data & 0x01)
sbrs R16,0
rjmp L85
.dbline 403
; Lcd_SIN_En;
sbi 0x18,5
xjmp L86
L85:
.dbline 405
; else
; Lcd_SIN_Dis;
cbi 0x18,5
L86:
.dbline 406
sbi 0x18,6
.dbline 407
lsr R16
.dbline 408
L82:
.dbline 399
dec R20
L84:
.dbline 399
clr R2
cp R2,R20
brlo L81
.dbline 409
; Lcd_CLK_En;
; _data=_data>>1;
; }
; Lcd_CS_En;
sbi 0x18,7
.dbline -2
L80:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r _data 16 c
.dbend
.dbfunc e MB90092_ClearXY _MB90092_ClearXY fV
; byte2 -> R20
; byte1 -> R22
; y -> R10
; x -> R20
.even
_MB90092_ClearXY::
xcall push_gset3
mov R10,R18
mov R20,R16
.dbline -1
.dbline 418
; }
;
; /*********************************************************************************************************
; ** 函數(shù)名稱: MB90092_ClearXY
; ** 功能描述: 清掉屏幕上面坐標(biāo)(x,y)處的字符,y=0x00~0x0B and x=0x00~0x17 for main screen
; ** 日 期: 2004年12月29日
; ********************************************************************************************************/
; void MB90092_ClearXY (uint8 x,uint8 y)
; {
.dbline 421
ldi R24,23
cp R24,R20
brlo L90
ldi R24,11
cp R24,R10
brsh L88
L90:
.dbline 421
; uint8 byte1,byte2;
;
; if (x>0x17||y>0x0B) return; //invalid col number or row number
xjmp L87
L88:
.dbline 423
;
; byte1=((y>>2)&0x3)+0x80;
mov R22,R10
lsr R22
lsr R22
andi R22,3
subi R22,128 ; addi 128
.dbline 424
; byte2=((y<<5)&0x60)+x;
mov R24,R10
lsl R24
lsl R24
lsl R24
lsl R24
lsl R24
andi R24,96
add R24,R20
mov R20,R24
.dbline 427
;
;
; MB90092_WriteByte(byte1); //command 0,設(shè)置寫入地址,行和列
mov R16,R22
xcall _MB90092_WriteByte
.dbline 428
; MB90092_WriteByte(byte2);
mov R16,R20
xcall _MB90092_WriteByte
.dbline 430
;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -