📄 lcd.lis
字号:
0126 8052 subi R24,32
0128 A82E mov R10,R24
012A .dbline 75
012A ; CMD = LCD_MODE_1;
012A 82E0 ldi R24,2
012C 80930280 sts 32770,R24
0130 .dbline 76
0130 ; DAT = front;
0130 0884 ldd R0,y+8
0132 00920380 sts 32771,R0
0136 .dbline 77
0136 ; CMD = LCD_MODE_2;
0136 84E0 ldi R24,4
0138 80930280 sts 32770,R24
013C .dbline 78
013C ; DAT = back;
013C 2A84 ldd R2,y+10
013E 3B84 ldd R3,y+11
0140 20920380 sts 32771,R2
0144 .dbline 79
0144 ; CMD = LCD_MODE_0+LCD_DOT8;
0144 81E0 ldi R24,1
0146 80930280 sts 32770,R24
014A .dbline 80
014A ; for(j=y;j<y+24;j++)
014A 622F mov R22,R18
014C 2CC0 xjmp L27
014E L24:
014E .dbline 81
014E .dbline 82
014E 60930180 sts 32769,R22
0152 .dbline 83
0152 00930080 sts 32768,R16
0156 .dbline 84
0156 1801 movw R2,R16
0158 232C mov R2,R3
015A 3324 clr R3
015C 20920080 sts 32768,R2
0160 .dbline 85
0160 242E mov R2,R20
0162 3324 clr R3
0164 4F5F subi R20,255 ; addi 1
0166 80E3 ldi R24,48
0168 8A9D mul R24,R10
016A 2001 movw R4,R0
016C 80E0 ldi R24,<_Cdot1624
016E 90E0 ldi R25,>_Cdot1624
0170 480E add R4,R24
0172 591E adc R5,R25
0174 E22D mov R30,R2
0176 FF27 clr R31
0178 E40D add R30,R4
017A F51D adc R31,R5
017C E691 elpm R30,Z
017E E0930380 sts 32771,R30
0182 .dbline 86
0182 242E mov R2,R20
0184 3324 clr R3
0186 4F5F subi R20,255 ; addi 1
0188 80E3 ldi R24,48
018A 8A9D mul R24,R10
018C 2001 movw R4,R0
018E 80E0 ldi R24,<_Cdot1624
0190 90E0 ldi R25,>_Cdot1624
0192 480E add R4,R24
0194 591E adc R5,R25
0196 E22D mov R30,R2
0198 FF27 clr R31
019A E40D add R30,R4
019C F51D adc R31,R5
019E E691 elpm R30,Z
01A0 E0930380 sts 32771,R30
01A4 .dbline 87
01A4 L25:
01A4 .dbline 80
01A4 6395 inc R22
01A6 L27:
01A6 .dbline 80
01A6 822F mov R24,R18
01A8 885E subi R24,232 ; addi 24
01AA 6817 cp R22,R24
01AC 80F2 brlo L24
01AE .dbline -2
01AE L23:
01AE 0E940000 xcall pop_gset3
01B2 .dbline 0 ; func end
01B2 0895 ret
01B4 .dbsym r k 20 c
01B4 .dbsym r j 22 c
01B4 .dbsym l back 10 i
01B4 .dbsym l front 8 c
01B4 .dbsym r dat 10 c
01B4 .dbsym r y 18 c
01B4 .dbsym r x 16 i
01B4 .dbend
01B4 .dbfunc e Dis_Chinese _Dis_Chinese fV
01B4 ; k -> R20
01B4 ; j -> R22
01B4 ; back -> y+14
01B4 ; front -> y+12
01B4 ; dat -> R12,R13
01B4 ; y -> R14
01B4 ; x -> R10,R11
.even
01B4 _Dis_Chinese::
01B4 0E940000 xcall push_gset5
01B8 E22E mov R14,R18
01BA 5801 movw R10,R16
01BC CA84 ldd R12,y+10
01BE DB84 ldd R13,y+11
01C0 .dbline -1
01C0 .dbline 90
01C0 ; {
01C0 ; Y_ADDR = j;
01C0 ; X_ADDR = x;
01C0 ; X_ADDR = x/256;
01C0 ; DAT = Cdot1624[dat][k++];
01C0 ; DAT = Cdot1624[dat][k++];
01C0 ; }
01C0 ; }
01C0 ; void Dis_Chinese(unsigned int x,unsigned char y,unsigned int dat,unsigned char front,unsigned back)
01C0 ; {
01C0 .dbline 92
01C0 ; unsigned char j,k;
01C0 ; k = 0;
01C0 4427 clr R20
01C2 .dbline 93
01C2 ; CMD = LCD_MODE_1;
01C2 82E0 ldi R24,2
01C4 80930280 sts 32770,R24
01C8 .dbline 94
01C8 ; DAT = front;
01C8 0C84 ldd R0,y+12
01CA 00920380 sts 32771,R0
01CE .dbline 95
01CE ; CMD = LCD_MODE_2;
01CE 84E0 ldi R24,4
01D0 80930280 sts 32770,R24
01D4 .dbline 96
01D4 ; DAT = back;
01D4 2E84 ldd R2,y+14
01D6 3F84 ldd R3,y+15
01D8 20920380 sts 32771,R2
01DC .dbline 97
01DC ; CMD = LCD_MODE_0+LCD_DOT8;
01DC 81E0 ldi R24,1
01DE 80930280 sts 32770,R24
01E2 .dbline 98
01E2 ; for(j=y;j<y+16;j++)
01E2 6E2D mov R22,R14
01E4 32C0 xjmp L32
01E6 L29:
01E6 .dbline 99
01E6 .dbline 100
01E6 60930180 sts 32769,R22
01EA .dbline 101
01EA A0920080 sts 32768,R10
01EE .dbline 102
01EE 1501 movw R2,R10
01F0 232C mov R2,R3
01F2 3324 clr R3
01F4 20920080 sts 32768,R2
01F8 .dbline 103
01F8 242E mov R2,R20
01FA 3324 clr R3
01FC 4F5F subi R20,255 ; addi 1
01FE 02E2 ldi R16,34
0200 10E0 ldi R17,0
0202 9601 movw R18,R12
0204 0E940000 xcall empy16s
0208 2801 movw R4,R16
020A 80E0 ldi R24,<_Cdotlib+2
020C 90E0 ldi R25,>_Cdotlib+2
020E 480E add R4,R24
0210 591E adc R5,R25
0212 E22D mov R30,R2
0214 FF27 clr R31
0216 E40D add R30,R4
0218 F51D adc R31,R5
021A E691 elpm R30,Z
021C E0930380 sts 32771,R30
0220 .dbline 104
0220 242E mov R2,R20
0222 3324 clr R3
0224 4F5F subi R20,255 ; addi 1
0226 02E2 ldi R16,34
0228 10E0 ldi R17,0
022A 9601 movw R18,R12
022C 0E940000 xcall empy16s
0230 2801 movw R4,R16
0232 80E0 ldi R24,<_Cdotlib+2
0234 90E0 ldi R25,>_Cdotlib+2
0236 480E add R4,R24
0238 591E adc R5,R25
023A E22D mov R30,R2
023C FF27 clr R31
023E E40D add R30,R4
0240 F51D adc R31,R5
0242 E691 elpm R30,Z
0244 E0930380 sts 32771,R30
0248 .dbline 105
0248 L30:
0248 .dbline 98
0248 6395 inc R22
024A L32:
024A .dbline 98
024A 8E2D mov R24,R14
024C 805F subi R24,240 ; addi 16
024E 6817 cp R22,R24
0250 08F4 brsh X0
0252 C9CF xjmp L29
0254 X0:
0254 .dbline -2
0254 L28:
0254 0E940000 xcall pop_gset5
0258 .dbline 0 ; func end
0258 0895 ret
025A .dbsym r k 20 c
025A .dbsym r j 22 c
025A .dbsym l back 14 i
025A .dbsym l front 12 c
025A .dbsym r dat 12 i
025A .dbsym r y 14 c
025A .dbsym r x 10 i
025A .dbend
025A .dbfunc e Display _Display fV
025A ; uLen -> R20
025A ; i -> R22
025A ; dat -> R10,R11
025A ; back -> R12
025A ; front -> R14
025A ; font -> y+18
025A ; ptr -> y+16
025A ; y -> R4
025A ; x -> R6,R7
.even
025A _Display::
025A 0E940000 xcall push_gset5
025E 422E mov R4,R18
0260 3801 movw R6,R16
0262 2697 sbiw R28,6
0264 EC88 ldd R14,y+20
0266 CE88 ldd R12,y+22
0268 .dbline -1
0268 .dbline 126
0268 ; {
0268 ; Y_ADDR = j;
0268 ; X_ADDR = x;
0268 ; X_ADDR = x/256;
0268 ; DAT = Cdotlib[dat].Msk[k++];
0268 ; DAT = Cdotlib[dat].Msk[k++];
0268 ; }
0268 ; }
0268 ; /*
0268 ; 显示dat[32]数组中的汉字
0268 ; 输入:显示汉字位置,汉字点阵指针、着色
0268 ; 输入:无
0268 ; 编者:赫树开
0268 ; 日期:二○○六年三月十一日
0268 ; */
0268 ;
0268 ;
0268 ; /*=============================================================================
0268 ; ASCII(8*16) 及 汉字(16*16) 混合字符串显示函数
0268 ; 输入参数约定:
0268 ; x,y显示字符串的左上角xy坐标.x..8点一字节位置; y..一条扫描线定位
0268 ; *ptr...字符串指针,本函数所指的是flash字串
0268 ; cursor 为光标标志,1 为光标 0 为不是光标
0268 ; 返回参数:输出字串长度,留意汉字一个算两个
0268 ; 其它假定:调用时汉字必须在字库数组中已经存在,否则将输出不正确的结果
0268 ; ==============================================================================*/
0268 ; void Display(unsigned int x,unsigned char y,unsigned char *ptr,unsigned char font,unsigned char front,unsigned char back)
0268 ; {
0268 .dbline 127
0268 ; unsigned char uLen,i=0;
0268 6627 clr R22
026A .dbline 129
026A ; unsigned int dat;
026A ; uLen=0;
026A 4427 clr R20
026C 01C0 xjmp L37
026E L36:
026E .dbline 130
026E .dbline 130
026E 4395 inc R20
0270 .dbline 130
0270 L37:
0270 .dbline 130
0270 ; while ( (unsigned char)ptr[uLen] >= 0x10 ){uLen++;}; //探测字串长度
0270 E42F mov R30,R20
0272 FF27 clr R31
0274 0888 ldd R0,y+16
0276 1988 ldd R1,y+17
0278 E00D add R30,R0
027A F11D adc R31,R1
027C 8081 ldd R24,z+0
027E 8031 cpi R24,16
0280 B0F7 brsh L36
0282 .dbline 130
0282 B3C0 xjmp L40
0284 L39:
0284 .dbline 133
0284 ; //uLen = strlen(ptr);
0284 ; while(i<uLen)
0284 ; {
0284 .dbline 135
0284 ;
0284 ; if((unsigned char)ptr[i]<128) //ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
0284 E62F mov R30,R22
0286 FF27 clr R31
0288 0888 ldd R0,y+16
028A 1988 ldd R1,y+17
028C E00D add R30,R0
028E F11D adc R31,R1
0290 8081 ldd R24,z+0
0292 8038 cpi R24,128
0294 08F0 brlo X1
0296 4DC0 xjmp L42
0298 X1:
0298 .dbline 136
0298 ; { //此字符为ascii
0298 .dbline 137
0298 ; if(font == BIG)
0298 8A89 ldd R24,y+18
029A 8130 cpi R24,1
029C 21F5 brne L44
029E .dbline 138
029E ; {
029E .dbline 139
029E ; Dis_Ascii_Big(x,y,ptr[i],front,back);
029E 2C2C mov R2,R12
02A0 3324 clr R3
02A2 3D82 std y+5,R3
02A4 2C82 std y+4,R2
02A6 EA82 std y+2,R14
02A8 E62F mov R30,R22
02AA FF27 clr R31
02AC E00D add R30,R0
02AE F11D adc R31,R1
02B0 2080 ldd R2,z+0
02B2 2882 std y+0,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -