📄 lcd12864.lis
字号:
021A ; }
021A ; }
021A L65:
021A .dbline 216
021A ; CSA_CLR;
021A AF98 cbi 0x15,7
021C .dbline 217
021C ; CSB_CLR;
021C AE98 cbi 0x15,6
021E .dbline -2
021E L45:
021E 0E940000 xcall pop_gset4
0222 .dbline 0 ; func end
0222 0895 ret
0224 .dbsym r q 20 pkc
0224 .dbsym r i 22 c
0224 .dbsym l ascii 8 c
0224 .dbsym r y 12 c
0224 .dbsym r x 10 c
0224 .dbend
0224 .dbfunc e disp_word _disp_word fV
0224 ; q -> R20,R21
0224 ; i -> R22
0224 ; word -> y+8
0224 ; y -> R12
0224 ; x -> R10
.even
0224 _disp_word::
0224 0E940000 xcall push_gset4
0228 C22E mov R12,R18
022A A02E mov R10,R16
022C .dbline -1
022C .dbline 221
022C ; }
022C ;
022C ; /*在指定位置显示一个汉字*/
022C ; void disp_word(unsigned char x, unsigned char y, unsigned char word) {
022C .dbline 223
022C ;
022C ; unsigned char i = 0x00;
022C 6627 clr R22
022E .dbline 226
022E ; const unsigned char *q; /*取字库指针*/
022E ;
022E ; q = &CHINESE_FONT[word * 32]; /*定位指针地址*/
022E 80E2 ldi R24,32
0230 0884 ldd R0,y+8
0232 809D mul R24,R0
0234 A001 movw R20,R0
0236 80E0 ldi R24,<_CHINESE_FONT
0238 90E0 ldi R25,>_CHINESE_FONT
023A 480F add R20,R24
023C 591F adc R21,R25
023E .dbline 229
023E ;
023E ; /*显示高16位*/
023E ; i = 0x00;
023E .dbline 230
023E ; if (x < 64) { /*地址在左半屏范围内*/
023E 8A2D mov R24,R10
0240 8034 cpi R24,64
0242 A0F4 brsh L71
0244 .dbline 230
0244 .dbline 231
0244 ; LCD0_write_com(y | 0xB8);
0244 0C2D mov R16,R12
0246 086B ori R16,184
0248 F5DE xcall _LCD0_write_com
024A .dbline 232
024A ; LCD0_write_com(x | 0x40);
024A 0A2D mov R16,R10
024C 0064 ori R16,64
024E F2DE xcall _LCD0_write_com
0250 0BC0 xjmp L74
0252 L73:
0252 .dbline 233
0252 ; while (i < 16) {
0252 .dbline 234
0252 ; LCD0_write_data(*q);
0252 FA01 movw R30,R20
0254 0491 lpm R16,Z
0256 0EDF xcall _LCD0_write_data
0258 .dbline 235
0258 ; q ++;
0258 4F5F subi R20,255 ; offset = 1
025A 5F4F sbci R21,255
025C .dbline 236
025C ; x ++;
025C A394 inc R10
025E .dbline 237
025E ; i ++;
025E 6395 inc R22
0260 .dbline 238
0260 ; if (x > 63) { /*判断地址是否越界*/
0260 8FE3 ldi R24,63
0262 8A15 cp R24,R10
0264 08F4 brsh L76
0266 .dbline 238
0266 .dbline 239
0266 ; break;
0266 02C0 xjmp L75
0268 L76:
0268 .dbline 241
0268 L74:
0268 .dbline 233
0268 6031 cpi R22,16
026A 98F3 brlo L73
026C L75:
026C .dbline 242
026C ; }
026C ; }
026C ; }
026C L71:
026C .dbline 243
026C ; if (i < 16) { /*地址进入左半屏范围*/
026C 6031 cpi R22,16
026E 80F4 brsh L78
0270 .dbline 243
0270 .dbline 244
0270 ; LCD1_write_com(y | 0xB8);
0270 0C2D mov R16,R12
0272 086B ori R16,184
0274 EFDE xcall _LCD1_write_com
0276 .dbline 245
0276 ; LCD1_write_com(x | 0x40);
0276 0A2D mov R16,R10
0278 0064 ori R16,64
027A ECDE xcall _LCD1_write_com
027C 07C0 xjmp L81
027E L80:
027E .dbline 246
027E .dbline 247
027E FA01 movw R30,R20
0280 0491 lpm R16,Z
0282 08DF xcall _LCD1_write_data
0284 .dbline 248
0284 4F5F subi R20,255 ; offset = 1
0286 5F4F sbci R21,255
0288 .dbline 249
0288 A394 inc R10
028A .dbline 250
028A 6395 inc R22
028C .dbline 251
028C L81:
028C .dbline 246
028C ; while (i < 16) {
028C 6031 cpi R22,16
028E B8F3 brlo L80
0290 .dbline 252
0290 ; LCD1_write_data(*q);
0290 ; q ++;
0290 ; x ++;
0290 ; i ++;
0290 ; }
0290 ; }
0290 L78:
0290 .dbline 255
0290 ;
0290 ; /*显示低16位*/
0290 ; i = 0x00;
0290 6627 clr R22
0292 .dbline 256
0292 ; x -= 16;
0292 8A2D mov R24,R10
0294 8051 subi R24,16
0296 A82E mov R10,R24
0298 .dbline 257
0298 ; if (x < 64) { /*地址在左半屏范围内*/
0298 8034 cpi R24,64
029A A8F4 brsh L83
029C .dbline 257
029C .dbline 258
029C ; LCD0_write_com((y+1) | 0xB8);
029C 0C2D mov R16,R12
029E 0F5F subi R16,255 ; addi 1
02A0 086B ori R16,184
02A2 C8DE xcall _LCD0_write_com
02A4 .dbline 259
02A4 ; LCD0_write_com(x | 0x40);
02A4 0A2D mov R16,R10
02A6 0064 ori R16,64
02A8 C5DE xcall _LCD0_write_com
02AA 0BC0 xjmp L86
02AC L85:
02AC .dbline 260
02AC ; while (i < 16) {
02AC .dbline 261
02AC ; LCD0_write_data(*q);
02AC FA01 movw R30,R20
02AE 0491 lpm R16,Z
02B0 E1DE xcall _LCD0_write_data
02B2 .dbline 262
02B2 ; q ++;
02B2 4F5F subi R20,255 ; offset = 1
02B4 5F4F sbci R21,255
02B6 .dbline 263
02B6 ; x ++;
02B6 A394 inc R10
02B8 .dbline 264
02B8 ; i ++;
02B8 6395 inc R22
02BA .dbline 265
02BA ; if (x > 63) { /*判断地址是否越界*/
02BA 8FE3 ldi R24,63
02BC 8A15 cp R24,R10
02BE 08F4 brsh L88
02C0 .dbline 265
02C0 .dbline 266
02C0 ; break;
02C0 02C0 xjmp L87
02C2 L88:
02C2 .dbline 268
02C2 L86:
02C2 .dbline 260
02C2 6031 cpi R22,16
02C4 98F3 brlo L85
02C6 L87:
02C6 .dbline 269
02C6 ; }
02C6 ; }
02C6 ; }
02C6 L83:
02C6 .dbline 270
02C6 ; if (i < 16) { /*地址进入左半屏范围*/
02C6 6031 cpi R22,16
02C8 88F4 brsh L90
02CA .dbline 270
02CA .dbline 271
02CA ; LCD1_write_com((y+1) | 0xB8);
02CA 0C2D mov R16,R12
02CC 0F5F subi R16,255 ; addi 1
02CE 086B ori R16,184
02D0 C1DE xcall _LCD1_write_com
02D2 .dbline 272
02D2 ; LCD1_write_com(x | 0x40);
02D2 0A2D mov R16,R10
02D4 0064 ori R16,64
02D6 BEDE xcall _LCD1_write_com
02D8 07C0 xjmp L93
02DA L92:
02DA .dbline 273
02DA .dbline 274
02DA FA01 movw R30,R20
02DC 0491 lpm R16,Z
02DE DADE xcall _LCD1_write_data
02E0 .dbline 275
02E0 4F5F subi R20,255 ; offset = 1
02E2 5F4F sbci R21,255
02E4 .dbline 276
02E4 A394 inc R10
02E6 .dbline 277
02E6 6395 inc R22
02E8 .dbline 278
02E8 L93:
02E8 .dbline 273
02E8 ; while (i < 16) {
02E8 6031 cpi R22,16
02EA B8F3 brlo L92
02EC .dbline 279
02EC ; LCD1_write_data(*q);
02EC ; q ++;
02EC ; x ++;
02EC ; i ++;
02EC ; }
02EC ; }
02EC L90:
02EC .dbline 280
02EC ; CSA_CLR;
02EC AF98 cbi 0x15,7
02EE .dbline 281
02EE ; CSB_CLR;
02EE AE98 cbi 0x15,6
02F0 .dbline -2
02F0 L70:
02F0 0E940000 xcall pop_gset4
02F4 .dbline 0 ; func end
02F4 0895 ret
02F6 .dbsym r q 20 pkc
02F6 .dbsym r i 22 c
02F6 .dbsym l word 8 c
02F6 .dbsym r y 12 c
02F6 .dbsym r x 10 c
02F6 .dbend
02F6 .dbfunc e disp_char_str _disp_char_str fV
02F6 ; str -> R20,R21
02F6 ; y -> R22
02F6 ; x -> R10
.even
02F6 _disp_char_str::
02F6 0E940000 xcall push_gset3
02FA 622F mov R22,R18
02FC A02E mov R10,R16
02FE 2197 sbiw R28,1
0300 4F81 ldd R20,y+7
0302 5885 ldd R21,y+8
0304 .dbline -1
0304 .dbline 285
0304 ; }
0304 ;
0304 ; /*显示一串字符*/
0304 ; void disp_char_str(unsigned char x, unsigned char y, unsigned char *str) {
0304 0BC0 xjmp L97
0306 L96:
0306 .dbline 287
0306 .dbline 288
0306 FA01 movw R30,R20
0308 2080 ldd R2,z+0
030A 2882 std y+0,R2
030C 262F mov R18,R22
030E 0A2D mov R16,R10
0310 1DDF xcall _disp_char
0312 .dbline 289
0312 8A2D mov R24,R10
0314 885F subi R24,248 ; addi 8
0316 A82E mov R10,R24
0318 .dbline 290
0318 4F5F subi R20,255 ; offset = 1
031A 5F4F sbci R21,255
031C .dbline 291
031C L97:
031C .dbline 287
031C ;
031C ; while (*str != 0) {
031C FA01 movw R30,R20
031E 2080 ldd R2,z+0
0320 2220 tst R2
0322 89F7 brne L96
0324 .dbline -2
0324 L95:
0324 2196 adiw R28,1
0326 0E940000 xcall pop_gset3
032A .dbline 0 ; func end
032A 0895 ret
032C .dbsym r str 20 pc
032C .dbsym r y 22 c
032C .dbsym r x 10 c
032C .dbend
032C .dbfunc e disp_init _disp_init fV
.even
032C _disp_init::
032C .dbline -1
032C .dbline 295
032C ; disp_char(x, y, *str);
032C ; x += 8;
032C ; str ++;
032C ; }
032C ; }
032C ;
032C ; /*显示屏初始化函数*/
032C ; void disp_init(void) {
032C .dbline 297
032C ;
032C ; DDRA = 0xFF; /*I/O口方向设置*/
032C 8FEF ldi R24,255
032E 8ABB out 0x1a,R24
0330 .dbline 298
0330 ; DDRC = 0xFF;
0330 84BB out 0x14,R24
0332 .dbline 300
0332 ;
0332 ; RST_CLR;
0332 AD98 cbi 0x15,5
0334 .dbline 301
0334 ; delay_ms(10);
0334 0AE0 ldi R16,10
0336 6FDE xcall _delay_ms
0338 .dbline 302
0338 ; RST_SET;
0338 AD9A sbi 0x15,5
033A .dbline 304
033A ;
033A ; LCD0_write_com(0xC0); /*显示起行设置*/
033A 00EC ldi R16,192
033C 7BDE xcall _LCD0_write_com
033E .dbline 305
033E ; LCD1_write_com(0xC0);
033E 00EC ldi R16,192
0340 89DE xcall _LCD1_write_com
0342 .dbline 307
0342 ;
0342 ; LCD0_write_com(0x3F); /*开显示设置*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -