📄 mb90092.lis
字号:
0196 .dbline 235
0196 ; {
0196 .dbline 236
0196 ; WDR(); //喂狗
0196 A895 wdr
0198 .dbline 237
0198 ; for (j=0;j<Lcd_Characters;j++)
0198 AA24 clr R10
019A 14C0 xjmp L49
019C L46:
019C .dbline 238
019C .dbline 239
019C A895 wdr
019E .dbline 245
019E 2224 clr R2
01A0 2886 std y+8,R2
01A2 87E0 ldi R24,7
01A4 8E83 std y+6,R24
01A6 81E0 ldi R24,1
01A8 8C83 std y+4,R24
01AA 82E0 ldi R24,2
01AC 8A83 std y+2,R24
01AE FA01 movw R30,R20
01B0 2190 ld R2,Z+
01B2 3190 ld R3,Z+
01B4 AF01 movw R20,R30
01B6 3982 std y+1,R3
01B8 2882 std y+0,R2
01BA 869F mul R24,R22
01BC 202D mov R18,R0
01BE 0A2D mov R16,R10
01C0 26D1 xcall _MB90092_DisChar
01C2 .dbline 246
01C2 L47:
01C2 .dbline 237
01C2 A394 inc R10
01C4 L49:
01C4 .dbline 237
01C4 8A2D mov R24,R10
01C6 8731 cpi R24,23
01C8 48F3 brlo L46
01CA .dbline 247
01CA L43:
01CA .dbline 234
01CA 6395 inc R22
01CC L45:
01CC .dbline 234
01CC 6630 cpi R22,6
01CE 18F3 brlo L42
01D0 .dbline 248
01D0 L40:
01D0 .dbline -2
01D0 L39:
01D0 2996 adiw R28,9
01D2 0E940000 xcall pop_gset3
01D6 .dbline 0 ; func end
01D6 0895 ret
01D8 .dbsym r Buf 20 pi
01D8 .dbsym r i 22 c
01D8 .dbsym r j 10 c
01D8 .dbend
01D8 .dbfunc e M90092_DisRow _M90092_DisRow fV
01D8 ; charaddr -> R20,R21
01D8 ; i -> R22
01D8 ; c_color -> R10
01D8 ; b_color -> R12
01D8 ; charsize -> R14
01D8 ; len -> y+23
01D8 ; Row -> y+21
01D8 ; CChar -> y+19
.even
01D8 _M90092_DisRow::
01D8 0E940000 xcall push_arg4
01DC 0E940000 xcall push_gset5
01E0 2997 sbiw R28,9
01E2 E98C ldd R14,y+25
01E4 CB8C ldd R12,y+27
01E6 AD8C ldd R10,y+29
01E8 .dbline -1
01E8 .dbline 322
01E8 ; {
01E8 ; WDR(); //喂狗
01E8 ; // charaddr=CharToAddr(Buf);
01E8 ; // if (*Buf > 127)
01E8 ; // Buf+=2;
01E8 ; // else
01E8 ; // Buf++;
01E8 ; MB90092_DisChar (j,i*2,*Buf++,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
01E8 ; }
01E8 ; }
01E8 ; }
01E8 ; }
01E8 ; /*
01E8 ; void Tft_Show_Update(void){
01E8 ; uint8 i,j=0;
01E8 ; uint8 *Buf=(uint8 *)Lcd_Show_Buf;
01E8 ; uint16 charaddr;
01E8 ; if(Tft_Enable_Show_Flag)
01E8 ; {
01E8 ; Tft_Enable_Show_Flag=FALSE;
01E8 ; for(i=0;i<Lcd_Lines;i++)
01E8 ; {
01E8 ; for (j=0;j<Lcd_Characters/2;j++)
01E8 ; {
01E8 ; charaddr=CharToAddr(Buf);
01E8 ; if (*Buf > 127)
01E8 ; Buf+=2;
01E8 ; else
01E8 ; Buf++;
01E8 ; MB90092_DisChar (j,i*2,charaddr,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
01E8 ; }
01E8 ; }
01E8 ; }
01E8 ; }
01E8 ; */
01E8 ; /*
01E8 ; void Tft_Show_Update(void){
01E8 ; uint8 i,j=0;
01E8 ; uint8 *Buf;
01E8 ; uint16 charaddr;
01E8 ; for(i=0;i<0x06;i++)
01E8 ; {
01E8 ; if(len!=0){
01E8 ; for (j=0;j<23 && len!=0;j++)
01E8 ; {
01E8 ; charaddr=CharToAddr(Buf);
01E8 ; if (*Buf > 127)
01E8 ; Buf+=2;
01E8 ; else
01E8 ; Buf++;
01E8 ; MB90092_DisChar (j,i*2,charaddr,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
01E8 ; len--;
01E8 ; }
01E8 ; for (;j<23 && len==0;j++)
01E8 ; MB90092_DisChar (j,i*2,0,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
01E8 ; }
01E8 ; else
01E8 ; {
01E8 ; for(j=0;j<23;j++)
01E8 ; MB90092_DisChar (j,i*2,0,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
01E8 ; }
01E8 ; }
01E8 ; }
01E8 ;
01E8 ;
01E8 ; */
01E8 ;
01E8 ; /*********************************************************************************************************
01E8 ; ** 函数名称:M90092_DisRow
01E8 ; ** 功能描述: 显示一行字符
01E8 ; ** 输 入: CChar:要新显示的数据,计算机内码非90092内码
01E8 ; ** Row:指定显示行
01E8 ; ** len:显示数据长度,全角半角都算一个
01E8 ; ** charsize:显示字体大小 00:standard 01:double width 02:double width double hight 03:quadruple width double hight
01E8 ; ** b_color:指定显示行背景色
01E8 ; ** c_color:指定显示行前景色
01E8 ; ** 全局变量:
01E8 ; ** 调用模块: CharToAddr():显示数据内码转换
01E8 ; ** 说明:
01E8 ; ** 注意:
01E8 ; ** 日 期: 2005年11月21日
01E8 ; ********************************************************************************************************/
01E8 ;
01E8 ; void M90092_DisRow(uint8 *CChar,uint8 Row,uint8 len,uint8 charsize, uint8 b_color,uint8 c_color)
01E8 ; {
01E8 .dbline 325
01E8 ; uint8 i;
01E8 ; uint16 charaddr;
01E8 ; if (Row>0x0B) return; //invlid row number
01E8 8BE0 ldi R24,11
01EA 0D88 ldd R0,y+21
01EC 8015 cp R24,R0
01EE 08F4 brsh L51
01F0 .dbline 325
01F0 2AC0 xjmp L50
01F2 L51:
01F2 .dbline 326
01F2 ; charaddr=CharToAddr(CChar);
01F2 0B89 ldd R16,y+19
01F4 1C89 ldd R17,y+20
01F6 2CD0 xcall _CharToAddr
01F8 A801 movw R20,R16
01FA .dbline 327
01FA 6627 clr R22
01FC 1FC0 xjmp L56
01FE L53:
01FE .dbline 327
01FE ; for (i=0;i<0x17 && i<len;i++){
01FE .dbline 328
01FE ; WDR(); //喂狗
01FE A895 wdr
0200 .dbline 329
0200 ; MB90092_ClearXY (i,Row);
0200 2D89 ldd R18,y+21
0202 062F mov R16,R22
0204 9ED0 xcall _MB90092_ClearXY
0206 .dbline 330
0206 ; MB90092_DisChar(i,Row,charaddr,charsize,b_color,c_color,0);
0206 2224 clr R2
0208 2886 std y+8,R2
020A AE82 std y+6,R10
020C CC82 std y+4,R12
020E EA82 std y+2,R14
0210 5983 std y+1,R21
0212 4883 std y+0,R20
0214 2D89 ldd R18,y+21
0216 062F mov R16,R22
0218 FAD0 xcall _MB90092_DisChar
021A .dbline 331
021A ; if(*CChar >128) CChar+=2;
021A 80E8 ldi R24,128
021C EB89 ldd R30,y+19
021E FC89 ldd R31,y+20
0220 2080 ldd R2,z+0
0222 8215 cp R24,R2
0224 28F4 brsh L57
0226 .dbline 331
0226 CF01 movw R24,R30
0228 0296 adiw R24,2
022A 9C8B std y+20,R25
022C 8B8B std y+19,R24
022E 05C0 xjmp L58
0230 L57:
0230 .dbline 332
0230 ; else CChar++;
0230 8B89 ldd R24,y+19
0232 9C89 ldd R25,y+20
0234 0196 adiw R24,1
0236 9C8B std y+20,R25
0238 8B8B std y+19,R24
023A L58:
023A .dbline 333
023A L54:
023A .dbline 327
023A 6395 inc R22
023C L56:
023C .dbline 327
023C 6731 cpi R22,23
023E 18F4 brsh L59
0240 0F88 ldd R0,y+23
0242 6015 cp R22,R0
0244 E0F2 brlo L53
0246 L59:
0246 .dbline -2
0246 L50:
0246 2996 adiw R28,9
0248 0E940000 xcall pop_gset5
024C 2496 adiw R28,4
024E .dbline 0 ; func end
024E 0895 ret
0250 .dbsym r charaddr 20 i
0250 .dbsym r i 22 c
0250 .dbsym r c_color 10 c
0250 .dbsym r b_color 12 c
0250 .dbsym r charsize 14 c
0250 .dbsym l len 23 c
0250 .dbsym l Row 21 c
0250 .dbsym l CChar 19 pc
0250 .dbend
0250 .dbfunc e CharToAddr _CharToAddr fi
0250 ; tmp -> R10,R11
0250 ; tmp0 -> R20
0250 ; tmp1 -> R22
0250 ; CChar -> R16,R17
.even
0250 _CharToAddr::
0250 0E940000 xcall push_gset3
0254 .dbline -1
0254 .dbline 347
0254 ; }
0254 ; }
0254 ; /*********************************************************************************************************
0254 ; ** 函数名称: CharToAddr
0254 ; ** 功能描述: 汉字内码转换ROM地址函数
0254 ; ** 输 入: cchar:要转换的内码(全角半角自动转换)
0254 ; ** 输 出: 对应的uint16型的ROM内码
0254 ; ** 全局变量:
0254 ; ** 调用模块:
0254 ; ** 说明:
0254 ; ** 注意:
0254 ; ** 日 期: 2005年11月12日
0254 ; ********************************************************************************************************/
0254 ;
0254 ; uint16 CharToAddr(uint8 *CChar){
0254 .dbline 350
0254 ; uint8 tmp1,tmp0;
0254 ; uint16 tmp;
0254 ; WDR(); //喂狗
0254 A895 wdr
0256 .dbline 351
0256 ; if (*CChar >= 0xb0) {
0256 F801 movw R30,R16
0258 8081 ldd R24,z+0
025A 803B cpi R24,176
025C 48F0 brlo L61
025E .dbline 351
025E .dbline 352
025E ; tmp1=*CChar-0xa1-6;
025E 6081 ldd R22,z+0
0260 615A subi R22,161
0262 6650 subi R22,6
0264 .dbline 353
0264 ; CChar++;
0264 0F5F subi R16,255 ; offset = 1
0266 1F4F sbci R17,255
0268 .dbline 354
0268 ; tmp0=*CChar-0xa1;
0268 F801 movw R30,R16
026A 4081 ldd R20,z+0
026C 415A subi R20,161
026E .dbline 355
026E ; }
026E 28C0 xjmp L62
0270 L61:
0270 .dbline 357
0270 ; else
0270 ; if(*CChar>=0xa1 && *CChar<0xaa)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -