📄 lcd.lis
字号:
0335 L27:
0335 A709 ais #9
0337 .dbline 0 ; func end
0337 81 rts
0338 .dbsym l RC 0 I
0338 .dbsym l LC 2 I
0338 .dbsym l TBC 4 I
0338 .dbsym l i 6 c
0338 .dbsym l y 7 c
0338 .dbsym l Px 8 c
0338 .dbsym l GrE 12 c
0338 .dbsym l ln 11 c
0338 .dbend
0338 .dbfunc e LcdShGrClr _LcdShGrClr fV
0338 ; y -> 0,X
0338 ; Px -> 1,X
0338 _LcdShGrClr::
0338 .dbline -1
0338 A7FE ais #-2
033A 95 tsx
033B .dbline 149
033B ; }
033B ;
033B ; /*LcdShGrClr:在Lcd上清图形显示屏-------------------------------------------*
033B ; *功 能:在Lcd上清图形显示屏(清GDRAM) *
033B ; *参 数:无 *
033B ; *返 回:无 *
033B ; *-------------------------------------------------------------------------*/
033B ; void LcdShGrClr(void)
033B ; {
033B .dbline 151
033B ; INT8U Px,y; //行页号,列坐标的循环变量
033B ; Wtite_Command(0b00110110);//扩展指令,绘图开
033B A636 lda #54
033D 87 psha
033E CD041B jsr _Wtite_Command
0341 A701 ais #1
0343 95 tsx
0344 .dbline 153
0344 ; //[清图形显示屏(清GDRAM)]
0344 ; for(y=0;y<=31;y++)
0344 7F clr ,X
0345 2020 bra L47
0347 L44:
0347 .dbline 154
0347 ; for(Px=0;Px<=15;Px++)
0347 6F01 clr 1,X
0349 2015 bra L51
034B L48:
034B .dbline 155
034B 450000 ldhx #0
034E 89 pshx
034F 8B pshh
0350 95 tsx
0351 AF02 aix #2
0353 E601 lda 1,X
0355 87 psha
0356 F6 lda ,X
0357 87 psha
0358 CD03E5 jsr _LcdShGr16P
035B A704 ais #4
035D 95 tsx
035E L49:
035E .dbline 154
035E 6C01 inc 1,X
0360 L51:
0360 .dbline 154
0360 E601 lda 1,X
0362 A10F cmp #15
0364 23E5 bls L48
0366 L45:
0366 .dbline 153
0366 7C inc ,X
0367 L47:
0367 .dbline 153
0367 F6 lda ,X
0368 A11F cmp #31
036A 23DB bls L44
036C .dbline 156
036C ; LcdShGr16P(y,Px,0); //写入0为清屏
036C ; Wtite_Command(0b00110000);//基本指令
036C A630 lda #48
036E 87 psha
036F CD041B jsr _Wtite_Command
0372 A701 ais #1
0374 95 tsx
0375 .dbline -2
0375 L43:
0375 A702 ais #2
0377 .dbline 0 ; func end
0377 81 rts
0378 .dbsym l y 0 c
0378 .dbsym l Px 1 c
0378 .dbend
0378 .dbfunc e LcdShGr1P _LcdShGr1P fV
0378 ; value -> 0,X
0378 ; x -> 5,X
0378 ; y -> 4,X
0378 _LcdShGr1P::
0378 .dbline -1
0378 A7FE ais #-2
037A 95 tsx
037B .dbline 165
037B ; }
037B ;
037B ; /*LcdShGr1P:在Lcd的指定位置上画一个点--------------------------------------*
037B ; *功 能:在Lcd的指定位置上画一个点 *
037B ; *参 数:y为纵坐标(0-63),x为横坐标(0-127) *
037B ; *返 回:无 *
037B ; *-------------------------------------------------------------------------*/
037B ; void LcdShGr1P(INT8U y,INT8U x)
037B ; {
037B .dbline 166
037B ; INT16U value=32768; //初始值为0b1000000000000000
037B A680 lda #-128
037D F7 sta ,X
037E A600 lda #0
0380 E701 sta 1,X
0382 .dbline 167
0382 ; if(y>=32) //第三四行必须调整x和y坐标
0382 E604 lda 4,X
0384 A120 cmp #32
0386 250A blo L53
0388 .dbline 168
0388 ; {y=y-32;x=x+16*8;}
0388 .dbline 168
0388 A020 sub #32
038A E704 sta 4,X
038C .dbline 168
038C E605 lda 5,X
038E AB80 add #-128
0390 E705 sta 5,X
0392 .dbline 168
0392 L53:
0392 .dbline 169
0392 ; value>>=(x-x/16*16); //写入的16位数据
0392 3F00 clr *__r0
0394 E605 lda 5,X
0396 B700 sta *__rlo
0398 4E0000 mov *__r0,*__rhi
039B A610 lda #16
039D 87 psha
039E 4F clra
039F 87 psha
03A0 CD0000 jsr __divmod16s
03A3 A702 ais #2
03A5 4E0000 mov *__rhi,*__r0
03A8 4E0000 mov *__rlo,*__r1
03AB A604 lda #4
03AD X5:
03AD 3800 lsl *__r1
03AF 3900 rol *__r0
03B1 4BFA dbnza X5
03B3 3F00 clr *__r2
03B5 E605 lda 5,X
03B7 B000 sub *__r1
03B9 B700 sta *__r1
03BB B600 lda *__r2
03BD B200 sbc *__r0
03BF B600 lda *__r1
03C1 A40F and #15
03C3 2705 beq X7
03C5 X6:
03C5 74 lsr ,X
03C6 6601 ror 1,X
03C8 4BFB dbnza X6
03CA X7:
03CA .dbline 170
03CA ; LcdShGr16P(y,x/16,value);//显示相应的点
03CA E601 lda 1,X
03CC 87 psha
03CD F6 lda ,X
03CE 87 psha
03CF E605 lda 5,X
03D1 AE10 ldx #16
03D3 8C clrh
03D4 52 div
03D5 95 tsx
03D6 AF02 aix #2
03D8 87 psha
03D9 E604 lda 4,X
03DB 87 psha
03DC CD03E5 jsr _LcdShGr16P
03DF A704 ais #4
03E1 95 tsx
03E2 .dbline -2
03E2 L52:
03E2 A702 ais #2
03E4 .dbline 0 ; func end
03E4 81 rts
03E5 .dbsym l value 0 i
03E5 .dbsym l x 5 c
03E5 .dbsym l y 4 c
03E5 .dbend
03E5 .dbfunc e LcdShGr16P _LcdShGr16P fV
03E5 ; value -> 4,X
03E5 ; Px -> 3,X
03E5 ; y -> 2,X
03E5 _LcdShGr16P::
03E5 .dbline -1
03E5 95 tsx
03E6 .dbline 179
03E6 ; }
03E6 ;
03E6 ; /*LcdShGr16P:在Lcd指定位置上设置线型16个点的显示---------------------------*
03E6 ; *功 能:在Lcd指定位置上设置线型16个点的显示 *
03E6 ; *参 数:y为纵坐标(0-63),Px为页号(0-15),value为16位数据 *
03E6 ; *返 回:无 *
03E6 ; *-------------------------------------------------------------------------*/
03E6 ; void LcdShGr16P(INT8U y,INT8U Px,INT16S value)
03E6 ; {
03E6 .dbline 181
03E6 ; //Wtite_Command(0b00110110); //8位数据,扩展指令,绘图开
03E6 ; Wtite_Command(y|0b10000000);//设置6位绘图列地址
03E6 E602 lda 2,X
03E8 AA80 ora #-128
03EA 87 psha
03EB CD041B jsr _Wtite_Command
03EE A701 ais #1
03F0 95 tsx
03F1 .dbline 182
03F1 ; Wtite_Command(Px|0b10000000);//设置4位绘图行地址
03F1 E603 lda 3,X
03F3 AA80 ora #-128
03F5 87 psha
03F6 CD041B jsr _Wtite_Command
03F9 A701 ais #1
03FB 95 tsx
03FC .dbline 183
03FC ; Wtite_Data((INT8U)(value>>8));//写入高8个字节
03FC E604 lda 4,X
03FE B700 sta *__r1
0400 3F00 clr *__r0
0402 3D00 tst *__r1
0404 2A02 bpl X8
0406 3300 com *__r0
0408 X8:
0408 B600 lda *__r1
040A 87 psha
040B CD0436 jsr _Wtite_Data
040E A701 ais #1
0410 95 tsx
0411 .dbline 184
0411 ; Wtite_Data((INT8U)value); //写入低8个字节
0411 E605 lda 5,X
0413 87 psha
0414 CD0436 jsr _Wtite_Data
0417 A701 ais #1
0419 95 tsx
041A .dbline -2
041A L55:
041A .dbline 0 ; func end
041A 81 rts
041B .dbsym l value 4 I
041B .dbsym l Px 3 c
041B .dbsym l y 2 c
041B .dbend
041B .dbfunc e Wtite_Command _Wtite_Command fV
041B ; command -> 2,X
041B _Wtite_Command::
041B .dbline -1
041B 95 tsx
041C .dbline 195
041C ; //Wtite_Command(0b00110000); //8位数据,基本指令
041C ; }
041C ;
041C ; /*===============[Lcd基本操作:包括写指令,写数据和延时]===================*/
041C ; /*Wtite_Command:执行参数中的给定命令---------------------------------------*
041C ; *功 能:执行参数中的给定命令 *
041C ; *参 数:command为待执行的命令码 *
041C ; *返 回:无 *
041C ; *-------------------------------------------------------------------------*/
041C ; void Wtite_Command(INT8U command)
041C ; {
041C .dbline 196
041C ; LCD_CtrlPort&=~(1<<LCD_RS); //RS=0
041C 1302 bclr #1,0x2
041E .dbline 197
041E ; LCD_CtrlPort&=~(1<<LCD_RW); //RW=0
041E 1502 bclr #2,0x2
0420 .dbline 198
0420 ; LCD_DataPort=command; //数据上线
0420 E602 lda 2,X
0422 B701 sta 0x1
0424 .dbline 199
0424 ; LCD_CtrlPort|=(1<<LCD_E); //E=1
0424 1602 bset #3,0x2
0426 .dbline 200
0426 ; asm("nop"); //使数据稳定
0426 9D nop
0427 .dbline 201
0427 ; asm("nop");
0427 9D nop
0428 .dbline 202
0428 ; LCD_CtrlPort&=~(1<<LCD_E); //E=0,使数据有效
0428 1702 bclr #3,0x2
042A .dbline 203
042A ; delay72us; //延时>72us
042A 45001E ldhx #30
042D 89 pshx
042E 8B pshh
042F CD0451 jsr _DelayTimes
0432 A702 ais #2
0434 95 tsx
0435 .dbline -2
0435 L56:
0435 .dbline 0 ; func end
0435 81 rts
0436 .dbsym l command 2 c
0436 .dbend
0436 .dbfunc e Wtite_Data _Wtite_Data fV
0436 ; data -> 2,X
0436 _Wtite_Data::
0436 .dbline -1
0436 95 tsx
0437 .dbline 212
0437 ; }
0437 ;
0437 ; /*Wtite_Data:将参数中给定的数据写入液晶控制器------------------------------*
0437 ; *功 能:将参数中给定的数据写入液晶控制器 *
0437 ; *参 数:data为待写入的数据 *
0437 ; *返 回:无 *
0437 ; *-------------------------------------------------------------------------*/
0437 ; void Wtite_Data(INT8U data)
0437 ; {
0437 .dbline 213
0437 ; LCD_CtrlPort|=(1<<LCD_RS); //RS=1
0437 1202 bset #1,0x2
0439 .dbline 214
0439 ; LCD_CtrlPort&=~(1<<LCD_RW); //RW=0
0439 1502 bclr #2,0x2
043B .dbline 215
043B ; LCD_DataPort=data; //数据上线
043B E602 lda 2,X
043D B701 sta 0x1
043F .dbline 216
043F ; LCD_CtrlPort|=(1<<LCD_E); //E=1
043F 1602 bset #3,0x2
0441 .dbline 217
0441 ; asm("nop"); //使数据稳定
0441 9D nop
0442 .dbline 218
0442 ; asm("nop");
0442 9D nop
0443 .dbline 219
0443 ; LCD_CtrlPort&=~(1<<LCD_E); //E=0,使数据有效
0443 1702 bclr #3,0x2
0445 .dbline 220
0445 ; delay72us; //延时>72us
0445 45001E ldhx #30
0448 89 pshx
0449 8B pshh
044A CD0451 jsr _DelayTimes
044D A702 ais #2
044F 95 tsx
0450 .dbline -2
0450 L57:
0450 .dbline 0 ; func end
0450 81 rts
0451 .dbsym l data 2 c
0451 .dbend
0451 .dbfunc e DelayTimes _DelayTimes fV
0451 ; i -> 0,X
0451 ; tn -> 4,X
0451 _DelayTimes::
0451 .dbline -1
0451 A7FE ais #-2
0453 95 tsx
0454 .dbline 229
0454 ; }
0454 ;
0454 ; /*DelayTimes:延时指定时间--------------------------------------------------*
0454 ; *功 能:延时指定的时间 *
0454 ; *入 口:tn为延时时间数(0到65535) *
0454 ; *出 口:无 *
0454 ; *-------------------------------------------------------------------------*/
0454 ; void DelayTimes(INT16U tn)
0454 ; {
0454 .dbline 231
0454 6F01 clr 1,X
0456 7F clr ,X
0457 200A bra L62
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -