📄 lcd1286418.lis
字号:
0162 01C0 xjmp L31
0164 L32:
0164 .dbline 242
0164 ; else
0164 ; return 1;
0164 01E0 ldi R16,1
0166 .dbline -2
0166 L31:
0166 .dbline 0 ; func end
0166 6991 ld R22,y+
0168 4991 ld R20,y+
016A 0895 ret
016C .dbsym r temp2 20 c
016C .dbsym r temp1 22 c
016C .dbend
016C .dbfunc e LcdClr _LcdClr fV
016C ; count -> R20
016C ; temp -> R22
.even
016C _LcdClr::
016C 4A93 st -y,R20
016E 6A93 st -y,R22
0170 .dbline -1
0170 .dbline 250
0170 ; }
0170 ;
0170 ; /*****************************************
0170 ; * FUNCTION NAME: LcdClr
0170 ; * DESCRIPTION: CLEAR LCD
0170 ; /*****************************************/
0170 ; void LcdClr(void)
0170 ; {
0170 .dbline 254
0170 ; unsigned char count;
0170 ; unsigned char temp;
0170 ; /* CLEAR LEFT&RIGHT SCREEN */
0170 ; LcdWrCmd('B',0X3E); /* LCD OFF */
0170 2EE3 ldi R18,62
0172 02E4 ldi R16,66
0174 50DF xcall _LcdWrCmd
0176 .dbline 255
0176 ; LcdWrCmd('B',0XC0); /* SET ROW */
0176 20EC ldi R18,192
0178 02E4 ldi R16,66
017A 4DDF xcall _LcdWrCmd
017C .dbline 256
017C ; for(count=0; count<8; count++)
017C 4427 clr R20
017E 10C0 xjmp L38
0180 L35:
0180 .dbline 257
0180 ; {
0180 .dbline 258
0180 ; LcdWrCmd('B',0XB8+count); /* SET PAGE */
0180 242F mov R18,R20
0182 2854 subi R18,72 ; addi 184
0184 02E4 ldi R16,66
0186 47DF xcall _LcdWrCmd
0188 .dbline 259
0188 ; LcdWrCmd('B',0X40); /* SET Y */
0188 20E4 ldi R18,64
018A 02E4 ldi R16,66
018C 44DF xcall _LcdWrCmd
018E .dbline 260
018E ; for(temp=0; temp<64; temp++)
018E 6627 clr R22
0190 04C0 xjmp L42
0192 L39:
0192 .dbline 261
0192 ; {
0192 .dbline 262
0192 ; LcdWrDat('B',0X00);
0192 2227 clr R18
0194 02E4 ldi R16,66
0196 67DF xcall _LcdWrDat
0198 .dbline 263
0198 ; }
0198 L40:
0198 .dbline 260
0198 6395 inc R22
019A L42:
019A .dbline 260
019A 6034 cpi R22,64
019C D0F3 brlo L39
019E X12:
019E .dbline 264
019E ; }
019E L36:
019E .dbline 256
019E 4395 inc R20
01A0 L38:
01A0 .dbline 256
01A0 4830 cpi R20,8
01A2 70F3 brlo L35
01A4 X13:
01A4 .dbline 265
01A4 ; LcdWrCmd('B',0X3F); /* LCD ON */
01A4 2FE3 ldi R18,63
01A6 02E4 ldi R16,66
01A8 36DF xcall _LcdWrCmd
01AA .dbline -2
01AA L34:
01AA .dbline 0 ; func end
01AA 6991 ld R22,y+
01AC 4991 ld R20,y+
01AE 0895 ret
01B0 .dbsym r count 20 c
01B0 .dbsym r temp 22 c
01B0 .dbend
01B0 .dbfunc e LcdDisplaySeg _LcdDisplaySeg fV
01B0 ; data -> R10
01B0 ; offset -> R20
01B0 ; page -> R22
.even
01B0 _LcdDisplaySeg::
01B0 0E940000 xcall push_xgsetF00C
01B4 422F mov R20,R18
01B6 602F mov R22,R16
01B8 AE80 ldd R10,y+6
01BA .dbline -1
01BA .dbline 278
01BA ; }
01BA ;
01BA ; /*****************************************
01BA ; * FUNCTION NAME: LcdDisplaySeg
01BA ; * DESCRIPTION: DISPLAY 8-BIT SEGMENT
01BA ; * <---------offset 0 to 127----------->
01BA ; * page0
01BA ; * |
01BA ; * page7
01BA ; * <---------offset 0 to 127----------->
01BA ; /*****************************************/
01BA ; void LcdDisplaySeg(unsigned char page,unsigned char offset,unsigned char data)
01BA ; {
01BA .dbline 280
01BA ; /* Display at Left Part */
01BA ; if(offset < 64)
01BA 4034 cpi R20,64
01BC 78F4 brsh L44
01BE X14:
01BE .dbline 281
01BE ; {
01BE .dbline 283
01BE ; //LcdWrCmd('L',0X3F); /* LCD ON */
01BE ; LcdWrCmd('L',0XC0); /* SET ROW */
01BE 20EC ldi R18,192
01C0 0CE4 ldi R16,76
01C2 29DF xcall _LcdWrCmd
01C4 .dbline 284
01C4 ; LcdWrCmd('L',0XB8+page); /* SET PAGE */
01C4 262F mov R18,R22
01C6 2854 subi R18,72 ; addi 184
01C8 0CE4 ldi R16,76
01CA 25DF xcall _LcdWrCmd
01CC .dbline 285
01CC ; LcdWrCmd('L',0X40+offset); /* SET Y */
01CC 242F mov R18,R20
01CE 205C subi R18,192 ; addi 64
01D0 0CE4 ldi R16,76
01D2 21DF xcall _LcdWrCmd
01D4 .dbline 286
01D4 ; LcdWrDat('L',data); /* WRITE SEGMENT */
01D4 2A2D mov R18,R10
01D6 0CE4 ldi R16,76
01D8 46DF xcall _LcdWrDat
01DA .dbline 287
01DA ; }
01DA 12C0 xjmp L45
01DC L44:
01DC .dbline 289
01DC ; else
01DC ; {
01DC .dbline 290
01DC ; LcdWrCmd('R',0X3F); /* LCD ON */
01DC 2FE3 ldi R18,63
01DE 02E5 ldi R16,82
01E0 1ADF xcall _LcdWrCmd
01E2 .dbline 291
01E2 ; LcdWrCmd('R',0XC0); /* SET ROW */
01E2 20EC ldi R18,192
01E4 02E5 ldi R16,82
01E6 17DF xcall _LcdWrCmd
01E8 .dbline 292
01E8 ; LcdWrCmd('R',0XB8+page); /* SET PAGE */
01E8 262F mov R18,R22
01EA 2854 subi R18,72 ; addi 184
01EC 02E5 ldi R16,82
01EE 13DF xcall _LcdWrCmd
01F0 .dbline 293
01F0 ; LcdWrCmd('R',0X40+offset-64); /* SET Y */
01F0 242F mov R18,R20
01F2 205C subi R18,192 ; addi 64
01F4 2054 subi R18,64
01F6 02E5 ldi R16,82
01F8 0EDF xcall _LcdWrCmd
01FA .dbline 294
01FA ; LcdWrDat('R',data); /* WRITE SEGMENT */
01FA 2A2D mov R18,R10
01FC 02E5 ldi R16,82
01FE 33DF xcall _LcdWrDat
0200 .dbline 295
0200 ; }
0200 L45:
0200 .dbline -2
0200 L43:
0200 .dbline 0 ; func end
0200 0C940000 xjmp pop_xgsetF00C
0204 .dbsym r data 10 c
0204 .dbsym r offset 20 c
0204 .dbsym r page 22 c
0204 .dbend
0204 .dbfunc e LcdDisplayDot _LcdDisplayDot fV
0204 ; temp2 -> R12
0204 ; temp1 -> R22
0204 ; a -> R10
0204 ; data -> R14
0204 ; y -> R10
0204 ; x -> y+10
.even
0204 _LcdDisplayDot::
0204 0E940000 xcall push_arg4
0208 0E940000 xcall push_xgsetF0FC
020C A22E mov R10,R18
020E EE84 ldd R14,y+14
0210 .dbline -1
0210 .dbline 309
0210 ; }
0210 ;
0210 ; /************************************************
0210 ; * FUNCTION NAME: LcdDisplayDot
0210 ; * DESCRIPTION: DISPLAY 1-BIT DOT
0210 ; * 不在单片机里面开设缓存,直接修改LCD的RAM后显示
0210 ; * <---------offset 0 to 127----------->
0210 ; * 0
0210 ; * |
0210 ; * 64
0210 ; * <---------offset 0 to 127----------->
0210 ; /*************************************************/
0210 ; void LcdDisplayDot(unsigned char x,unsigned char y,unsigned char data)
0210 ; {
0210 .dbline 311
0210 ; unsigned char temp1,temp2,a;
0210 ; if(x>127 | y>63)
0210 8FE7 ldi R24,127
0212 0A84 ldd R0,y+10
0214 8015 cp R24,R0
0216 18F4 brsh L49
0218 X15:
0218 61E0 ldi R22,1
021A 70E0 ldi R23,0
021C 02C0 xjmp L50
021E L49:
021E 6627 clr R22
0220 7727 clr R23
0222 L50:
0222 8FE3 ldi R24,63
0224 8A15 cp R24,R10
0226 18F4 brsh L51
0228 X16:
0228 41E0 ldi R20,1
022A 50E0 ldi R21,0
022C 02C0 xjmp L52
022E L51:
022E 4427 clr R20
0230 5527 clr R21
0232 L52:
0232 1B01 movw R2,R22
0234 242A or R2,R20
0236 352A or R3,R21
0238 2220 tst R2
023A 11F4 brne X17
023C 3320 tst R3
023E 09F0 breq L47
0240 X17:
0240 .dbline 312
0240 ; return;
0240 6EC0 xjmp L46
0242 L47:
0242 .dbline 313
0242 ; temp1 = y / 8; /* GET VALUE OF WHICH PAGE */
0242 6A2D mov R22,R10
0244 6695 lsr R22
0246 6695 lsr R22
0248 6695 lsr R22
024A .dbline 314
024A ; temp2 = y % 8; /* GET VALUE OF WHICH Y-OFFSET */
024A 18E0 ldi R17,8
024C 0A2D mov R16,R10
024E 0E940000 xcall mod8u
0252 C02E mov R12,R16
0254 .dbline 316
0254 ; /* IN ORDER TO NOT MODFIY NOW DISPLY VALUE */
0254 ; if(x < 64) /* GET PRE. SEGMENT VALUE */
0254 8A85 ldd R24,y+10
0256 8034 cpi R24,64
0258 00F5 brsh L53
025A X18:
025A .dbline 317
025A ; {
025A .dbline 318
025A ; LcdWrCmd('L',0XC0); /* SET ROW */
025A 20EC ldi R18,192
025C 0CE4 ldi R16,76
025E DBDE xcall _LcdWrCmd
0260 .dbline 319
0260 ; LcdWrCmd('L',0XB8+temp1); /* SET PAGE */
0260 262F mov R18,R22
0262 2854 subi R18,72 ; addi 184
0264 0CE4 ldi R16,76
0266 D7DE xcall _LcdWrCmd
0268 .dbline 320
0268 ; LcdWrCmd('L',0X40+x); /* SET X */
0268 2A85 ldd R18,y+10
026A 205C subi R18,192 ; addi 64
026C 0CE4 ldi R16,76
026E D3DE xcall _LcdWrCmd
0270 .dbline 321
0270 ; a = LcdRdDat('L'); /* READ NOW SEGMENT VALUE */
0270 0CE4 ldi R16,76
0272 42DF xcall _LcdRdDat
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -