📄 mb90092.s
字号:
; MB90092_WriteByte(0x88); //command1-1,定义字符颜色,背景颜色
ldi R16,136
xcall _MB90092_WriteByte
.dbline 431
; MB90092_WriteByte(0x00);
clr R16
xcall _MB90092_WriteByte
.dbline 433
;
; MB90092_WriteByte(0x90+0/128); //command2-1,写入一个空格字符,地址62为空格符点阵
ldi R16,144
xcall _MB90092_WriteByte
.dbline 434
; MB90092_WriteByte(0%128);
clr R16
xcall _MB90092_WriteByte
.dbline -2
L87:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r byte2 20 c
.dbsym r byte1 22 c
.dbsym r y 10 c
.dbsym r x 20 c
.dbend
.dbfunc e MB90092_ClearRow _MB90092_ClearRow fV
; x -> R20
; y -> R22
.even
_MB90092_ClearRow::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 443
; }
;
; /*********************************************************************************************************
; ** 函数名称: MB90092_ClearRow
; ** 功能描述: 清掉屏幕上面的第y行字符,y=0x00~0x0B for main screen
; ** 日 期: 2004年12月29日
; ********************************************************************************************************/
; void MB90092_ClearRow (uint8 y)
; {
.dbline 446
; uint8 x;
;
; if (y>0x0B) return; //invlid row number
ldi R24,11
cp R24,R22
brsh L92
.dbline 446
xjmp L91
L92:
.dbline 448
;
; for (x=0;x<0x18;x++)
clr R20
xjmp L97
L94:
.dbline 449
.dbline 450
wdr
.dbline 451
mov R18,R22
mov R16,R20
xcall _MB90092_ClearXY
.dbline 452
L95:
.dbline 448
inc R20
L97:
.dbline 448
cpi R20,24
brlo L94
.dbline -2
L91:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r x 20 c
.dbsym r y 22 c
.dbend
.dbfunc e MB90092_ClearScreen _MB90092_ClearScreen fV
; i -> R20
.even
_MB90092_ClearScreen::
xcall push_gset1
.dbline -1
.dbline 461
; {
; WDR(); //喂狗
; MB90092_ClearXY (x,y);
; }
; }
;
; /*********************************************************************************************************
; ** 函数名称: MB90092_ClearScreen
; ** 功能描述: 清屏
; ** 日 期: 2004年12月29日
; ********************************************************************************************************/
; void MB90092_ClearScreen (void)
; {
.dbline 463
; uint8 i;
; for (i=0;i<0x0C;i++)
clr R20
xjmp L102
L99:
.dbline 464
.dbline 464
wdr
.dbline 465
mov R16,R20
xcall _MB90092_ClearRow
.dbline 466
L100:
.dbline 463
inc R20
L102:
.dbline 463
cpi R20,12
brlo L99
.dbline -2
L98:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e MB90092_DisColor _MB90092_DisColor fV
; temp2 -> R20
; temp1 -> R22
; y -> R20
.even
_MB90092_DisColor::
xcall push_gset2
mov R20,R16
.dbline -1
.dbline 475
; {WDR(); //喂狗
; MB90092_ClearRow (i);
; }
; }
;
; /*********************************************************************************************************
; ** 函数名称: MB90092_DisColor
; ** 功能描述: MB90092颜色初始化
; ** 日 期: 2004年12月29日
; ********************************************************************************************************/
; void MB90092_DisColor (uint8 y)
; {
.dbline 478
; uint8 temp1,temp2;
;
; temp1=((y>>2)&0x3)+0x84;
mov R22,R20
lsr R22
lsr R22
andi R22,3
subi R22,124 ; addi 132
.dbline 479
; temp2=((y<<5)&0x60)+1;
lsl R20
lsl R20
lsl R20
lsl R20
lsl R20
andi R20,96
subi R20,255 ; addi 1
.dbline 481
;
; MB90092_WriteByte(temp1); //command 0,设置写入地址,行和列
mov R16,R22
xcall _MB90092_WriteByte
.dbline 482
; MB90092_WriteByte(temp2);
mov R16,R20
xcall _MB90092_WriteByte
.dbline 484
;
; MB90092_WriteByte(0x88); //ff控制是否特显
ldi R16,136
xcall _MB90092_WriteByte
.dbline 485
; MB90092_WriteByte(0x00); //command1-1,设置字符颜色,背景颜色
clr R16
xcall _MB90092_WriteByte
.dbline 487
;
; MB90092_WriteByte(0x90); //command2-1,设置字符点阵在外rom的地址
ldi R16,144
xcall _MB90092_WriteByte
.dbline 488
; MB90092_WriteByte(0x00);
clr R16
xcall _MB90092_WriteByte
.dbline -2
L103:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r temp2 20 c
.dbsym r temp1 22 c
.dbsym r y 20 c
.dbend
.dbfunc e MB90092_DisChar _MB90092_DisChar fV
; mc -> R22
; mb -> R12
; ma -> R14
; color -> R10
; temp2 -> R10
; temp1 -> R12
; ff -> y+18
; cc -> y+16
; bc -> y+14
; mul -> y+12
; addr -> R20,R21
; y -> R22
; x -> R10
.even
_MB90092_DisChar::
xcall push_gset5
mov R22,R18
mov R10,R16
ldd R20,y+10
ldd R21,y+11
.dbline -1
.dbline 499
; }
;
; /*********************************************************************************************************
; ** 函数名称: MB90092_DisChar
; ** 功能描述: 在屏幕坐标(x,y)处显示一个字符,该字符的点阵存储地址为addr,为一24x32的矩形区域
; ** 参 数: x,y为屏幕坐标,addr为字符点阵在外rom的存储地址,mul为字符尺寸,bc为字符背景颜色,
; cc为字符颜色,ff控制是否特显.
; ** 日 期: 2004年12月29日
; ********************************************************************************************************/
; void MB90092_DisChar (uint8 x,uint8 y,uint16 addr,uint8 mul,uint8 bc,uint8 cc,uint8 ff)
; {
.dbline 501
ldi R24,23
cp R24,R10
brlo L107
ldi R24,11
cp R24,R22
brsh L105
L107:
.dbline 501
; uint8 temp1,temp2,color,ma,mb,mc;
; if (x>0x17||y>0x0B) return; //invalid col number or row number
xjmp L104
L105:
.dbline 503
;
; MB90092_ClearXY (x,y);
mov R18,R22
mov R16,R10
xcall _MB90092_ClearXY
.dbline 505
;
; temp1=((y>>2)&0x3)+0x80;
mov R24,R22
lsr R24
lsr R24
andi R24,3
subi R24,128 ; addi 128
mov R12,R24
.dbline 506
; temp2=((y<<5)&0x60)+x;
mov R24,R22
lsl R24
lsl R24
lsl R24
lsl R24
lsl R24
andi R24,96
add R24,R10
mov R10,R24
.dbline 508
;
; MB90092_WriteByte(temp1); //command 0,设置写入地址,行和列
mov R16,R12
xcall _MB90092_WriteByte
.dbline 509
; MB90092_WriteByte(temp2);
mov R16,R10
xcall _MB90092_WriteByte
.dbline 511
;
; MB90092_WriteByte(0xB0|mul); //command 6,mul->字符尺寸控制(datasheel82),设置一整行
ldd R16,y+12
ori R16,176
xcall _MB90092_WriteByte
.dbline 512
; MB90092_WriteByte(0x20|y);
mov R16,R22
ori R16,32
xcall _MB90092_WriteByte
.dbline 514
;
; if (synchronization==SYN_EXTERNAL){
lds R24,_synchronization
cpi R24,4
brne L108
.dbline 514
.dbline 515
; cc=7;
ldi R24,7
std y+16,R24
.dbline 516
; bc=0;
clr R0
std y+14,R0
.dbline 517
; }
L108:
.dbline 518
; color=((cc<<4)&0x70)|bc;
ldd R24,y+16
andi R24,#0x0F
swap R24
andi R24,112
mov R10,R24
ldd R0,y+14
or R10,R0
.dbline 519
; mc=((addr/4096)<<3)&0x08;
ldi R18,12
ldi R19,0
movw R16,R20
xcall lsr16
mov R22,R16
lsl R22
rol R23
lsl R22
rol R23
lsl R22
rol R23
andi R22,8
andi R23,0
.dbline 520
; mb=(((addr%4096)/2048)<<1)&0x02;
ldi R18,11
ldi R19,0
movw R16,R20
andi R17,15
xcall lsr16
movw R24,R16
lsl R24
rol R25
andi R24,2
andi R25,0
mov R12,R24
.dbline 521
; ma=(((addr%2048)/1024)<<2)&0x04;
ldi R18,10
ldi R19,0
movw R16,R20
andi R17,7
xcall lsr16
movw R24,R16
lsl R24
rol R25
lsl R24
rol R25
andi R24,4
andi R25,0
mov R14,R24
.dbline 523
;
; MB90092_WriteByte(0x88|ff|ma|mb); //ff控制是否特显 MA MB在此显示控制
ldd R16,y+18
ori R16,136
or R16,R24
or R16,R12
xcall _MB90092_WriteByte
.dbline 524
; MB90092_WriteByte(color|mc); //command1-1,设置字符颜色,背景颜色
mov R16,R10
or R16,R22
xcall _MB90092_WriteByte
.dbline 525
; MB90092_WriteByte(0x90+(addr%1024)/128); //command2-1,设置字符点阵在外rom的地址
ldi R18,7
ldi R19,0
movw R16,R20
andi R17,3
xcall lsr16
subi R16,112 ; offset = 144
sbci R17,255
xcall _MB90092_WriteByte
.dbline 526
; MB90092_WriteByte(addr%128);
mov R16,R20
andi R16,127
andi R17,0
xcall _MB90092_WriteByte
.dbline -2
L104:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r mc 22 c
.dbsym r mb 12 c
.dbsym r ma 14 c
.dbsym r color 10 c
.dbsym r temp2 10 c
.dbsym r temp1 12 c
.dbsym l ff 18 c
.dbsym l cc 16 c
.dbsym l bc 14 c
.dbsym l mul 12 c
.dbsym r addr 20 i
.dbsym r y 22 c
.dbsym r x 10 c
.dbend
.dbfunc e MainScreen_Init _MainScreen_Init fV
; i -> R20
; bc -> R20
.even
_MainScreen_Init::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 534
; }
; /*********************************************************************************************************
; ** 函数名称: MainScreen_Init
; ** 功能描述: MB90092主屏初始化
; ** 日 期: 2004年12月29日
; ********************************************************************************************************/
; void MainScreen_Init (uint8 bc)
; {
.dbline 536
; uint8 i;
; Lcd_Control_DDR|=BIT(Lcd_Cs);
sbi 0x17,7
.dbline 537
; Lcd_Control_DDR|=BIT(Lcd_Sin);
sbi 0x17,5
.dbline 538
; Lcd_Control_DDR|=BIT(Lcd_Clk);
sbi 0x17,6
.dbline 539
; Lcd_Control_Port|=BIT(Lcd_Cs);
sbi 0x18,7
.dbline 540
; Lcd_Control_Port|=BIT(Lcd_Sin);
sbi 0x18,5
.dbline 541
; Lcd_Control_Port|=BIT(Lcd_Clk);
sbi 0x18,6
.dbline 542
; Lcd_CLK_En; //先将CLK脚置高
sbi 0x18,6
.dbline 543
; Delay_ms(10);
ldi R16,10
ldi R17,0
xcall _Delay_ms
.dbline 544
; Lcd_CS_Dis;
cbi 0x18,7
.dbline 545
; Delay_ms(10); //程序开始时,要输入CS四次去清除上电复位,然后所作的设置才是有效的。
ldi R16,10
ldi R17,0
xcall _Delay_ms
.dbline 546
; Lcd_CS_En;
sbi 0x18,7
.dbline 547
; Delay_ms(10);
ldi R16,10
ldi R17,0
xcall _Delay_ms
.dbline 548
; Lcd_CS_Dis;
cbi 0x18,7
.dbline 549
; Delay_ms(10);
ldi R16,10
ldi R17,0
xcall _Delay_ms
.dbline 550
; Lcd_CS_En;
sbi 0x18,7
.dbline 551
; Delay_ms(10);
ldi R16,10
ldi R17,0
xcall _Delay_ms
.dbline 552
; Lcd_CS_Dis;
cbi 0x18,7
.dbline 553
; Delay_ms(10);
ldi R16,10
ldi R17,0
xcall _Delay_ms
.dbline 554
; Lcd_CS_En;
sbi 0x18,7
.dbline 555
; Delay_ms(10);
ldi R16,10
ldi R17,0
xcall _Delay_ms
.dbline 556
; Lcd_CS_Dis;
cbi 0x18,7
.dbline 557
; Delay_ms(10);
ldi R16,10
ldi R17,0
xcall _Delay_ms
.dbline 558
; Lcd_CS_En;
sbi 0x18,7
.dbline 559
; Delay_ms(10);
ldi R16,10
ldi R17,0
xcall _Delay_ms
.dbline 561
;
; MB90092_WriteByte(0xA0); //command 4,首先选择内同步
ldi R16,160
xcall _MB90092_WriteByte
.dbline 562
; MB90092_WriteByte(0x00);
clr R16
xcall _MB90092_WriteByte
.dbline 564
;
; MB90092_WriteByte(0xAD); //command 5
ldi R16,173
xcall _MB90092_WriteByte
.dbline 565
; MB90092_WriteByte(0x10); //KID=0;APC与颜色有关;GYZ=0;W3--W0为行间距;10101 KID APC GYZ0 BH2 BH1 BH0 W3 W2 W1 W0
ldi R16,16
xcall _MB90092_WriteByte
.dbline 567
;
; MB90092_WriteByte(0xBC); //command 7
ldi R16,188
xcall _MB90092_WriteByte
.dbline 568
; MB90092_WriteByte(0x2f); //垂直开始位置设定
ldi R16,47
xcall _MB90092_WriteByte
.dbline 570
;
; MB90092_WriteByte(0xC0); //command 8
ldi R16,192
xcall _MB90092_WriteByte
.dbline 571
; MB90092_WriteByte(0x10); //水平开始位置设定
ldi R16,16
xcall _MB90092_WriteByte
.dbline 573
;
; MB90092_WriteByte(0xC8); //command 9,GRM位设置普通模式或者扩展图形模式
ldi R16,200
xcall _MB90092_WriteByte
.dbline 574
; MB90092_WriteByte(0x20);
ldi R16,32
xcall _MB90092_WriteByte
.dbline 576
;
; MB90092_WriteByte(0xD1); //command 10,设置普通模式/扩展图形模式,闪烁,字符背景,字符单色/彩色,背景单色/彩色
ldi R16,209
xcall _MB90092_WriteByte
.dbline 577
; MB90092_WriteByte(0x38|bc);
mov R16,R20
ori R16,56
xcall _MB90092_WriteByte
.dbline 579
;
; MB90092_WriteByte(0xA2|synchronization);//command 4,内/外同步选择
lds R16,_synchronization
ori R16,162
xcall _MB90092_WriteByte
.dbline 580
; MB90092_WriteByte(0x2B);
ldi R16,43
xcall _MB90092_WriteByte
.dbline 582
;
; for (i=0;i<=0x0B;i++)
clr R20
xjmp L114
L111:
.dbline 583
.dbline 584
wdr
.dbline 585
mov R16,R20
xcall _MB90092_DisColor
.dbline 586
L112:
.dbline 582
inc R20
L114:
.dbline 582
ldi R24,11
cp R24,R20
brsh L111
.dbline 587
; {
; WDR(); //喂狗
; MB90092_DisColor (i);
; }
; MB90092_ClearScreen ();
xcall _MB90092_ClearScreen
.dbline -2
L110:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r bc 20 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\公司文件\OSDDEM~1\MB90092\MB90092.C
_Lcd_Show_Buf::
.blkb 276
.dbsym e Lcd_Show_Buf _Lcd_Show_Buf A[276:6:23]i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -