📄 lcd.lis
字号:
0324 6C06 inc 6,X
0326 6C07 inc 7,X
0328 L42:
0328 .dbline 134
0328 E606 lda 6,X
032A A10E cmp #14
032C 23D1 bls L39
032E .dbline 139
032E ; {
032E ; LcdShGr16P(y,Px,RC); //显示右边框
032E ; LcdShGr16P(y,Px-7,LC); //显示左边框
032E ; }
032E ; Wtite_Command(0b00110000);//基本指令
032E A630 lda #48
0330 87 psha
0331 CD041D jsr _Wtite_Command
0334 A701 ais #1
0336 95 tsx
0337 .dbline -2
0337 L27:
0337 A709 ais #9
0339 .dbline 0 ; func end
0339 81 rts
033A .dbsym l RC 0 S
033A .dbsym l LC 2 S
033A .dbsym l TBC 4 S
033A .dbsym l i 6 c
033A .dbsym l y 7 c
033A .dbsym l Px 8 c
033A .dbsym l GrE 12 c
033A .dbsym l ln 11 c
033A .dbend
033A .dbfunc e LcdShGrClr _LcdShGrClr fV
033A ; y -> 0,X
033A ; Px -> 1,X
033A _LcdShGrClr::
033A .dbline -1
033A A7FE ais #-2
033C 95 tsx
033D .dbline 148
033D ; }
033D ;
033D ; /*LcdShGrClr:在Lcd上清图形显示屏-------------------------------------------*
033D ; *功 能:在Lcd上清图形显示屏(清GDRAM) *
033D ; *参 数:无 *
033D ; *返 回:无 *
033D ; *-------------------------------------------------------------------------*/
033D ; void LcdShGrClr(void)
033D ; {
033D .dbline 150
033D ; INT8U Px,y; //行页号,列坐标的循环变量
033D ; Wtite_Command(0b00110110);//扩展指令,绘图开
033D A636 lda #54
033F 87 psha
0340 CD041D jsr _Wtite_Command
0343 A701 ais #1
0345 95 tsx
0346 .dbline 152
0346 ; //[清图形显示屏(清GDRAM)]
0346 ; for(y=0;y<=31;y++)
0346 7F clr ,X
0347 2020 bra L47
0349 L44:
0349 .dbline 153
0349 ; for(Px=0;Px<=15;Px++)
0349 6F01 clr 1,X
034B 2015 bra L51
034D L48:
034D .dbline 154
034D 450000 ldhx #0
0350 89 pshx
0351 8B pshh
0352 95 tsx
0353 AF02 aix #2
0355 E601 lda 1,X
0357 87 psha
0358 F6 lda ,X
0359 87 psha
035A CD03E7 jsr _LcdShGr16P
035D A704 ais #4
035F 95 tsx
0360 L49:
0360 .dbline 153
0360 6C01 inc 1,X
0362 L51:
0362 .dbline 153
0362 E601 lda 1,X
0364 A10F cmp #15
0366 23E5 bls L48
0368 L45:
0368 .dbline 152
0368 7C inc ,X
0369 L47:
0369 .dbline 152
0369 F6 lda ,X
036A A11F cmp #31
036C 23DB bls L44
036E .dbline 155
036E ; LcdShGr16P(y,Px,0); //写入0为清屏
036E ; Wtite_Command(0b00110000);//基本指令
036E A630 lda #48
0370 87 psha
0371 CD041D jsr _Wtite_Command
0374 A701 ais #1
0376 95 tsx
0377 .dbline -2
0377 L43:
0377 A702 ais #2
0379 .dbline 0 ; func end
0379 81 rts
037A .dbsym l y 0 c
037A .dbsym l Px 1 c
037A .dbend
037A .dbfunc e LcdShGr1P _LcdShGr1P fV
037A ; value -> 0,X
037A ; x -> 5,X
037A ; y -> 4,X
037A _LcdShGr1P::
037A .dbline -1
037A A7FE ais #-2
037C 95 tsx
037D .dbline 164
037D ; }
037D ;
037D ; /*LcdShGr1P:在Lcd的指定位置上画一个点--------------------------------------*
037D ; *功 能:在Lcd的指定位置上画一个点 *
037D ; *参 数:y为纵坐标(0-63),x为横坐标(0-127) *
037D ; *返 回:无 *
037D ; *-------------------------------------------------------------------------*/
037D ; void LcdShGr1P(INT8U y,INT8U x)
037D ; {
037D .dbline 165
037D ; INT16U value=32768; //初始值为0b1000000000000000
037D A680 lda #-128
037F F7 sta ,X
0380 A600 lda #0
0382 E701 sta 1,X
0384 .dbline 166
0384 ; if(y>=32) //第三四行必须调整x和y坐标
0384 E604 lda 4,X
0386 A120 cmp #32
0388 250A blo L53
038A .dbline 167
038A ; {y=y-32;x=x+16*8;}
038A .dbline 167
038A A020 sub #32
038C E704 sta 4,X
038E .dbline 167
038E E605 lda 5,X
0390 AB80 add #-128
0392 E705 sta 5,X
0394 .dbline 167
0394 L53:
0394 .dbline 168
0394 ; value>>=(x-x/16*16); //写入的16位数据
0394 3F00 clr *__r0
0396 E605 lda 5,X
0398 B700 sta *__rlo
039A 4E0000 mov *__r0,*__rhi
039D A610 lda #16
039F 87 psha
03A0 4F clra
03A1 87 psha
03A2 CD0000 jsr __divmod16s
03A5 A702 ais #2
03A7 4E0000 mov *__rhi,*__r0
03AA 4E0000 mov *__rlo,*__r1
03AD A604 lda #4
03AF X5:
03AF 3800 lsl *__r1
03B1 3900 rol *__r0
03B3 4BFA dbnza X5
03B5 3F00 clr *__r2
03B7 E605 lda 5,X
03B9 B000 sub *__r1
03BB B700 sta *__r1
03BD B600 lda *__r2
03BF B200 sbc *__r0
03C1 B600 lda *__r1
03C3 A40F and #15
03C5 2705 beq X7
03C7 X6:
03C7 74 lsr ,X
03C8 6601 ror 1,X
03CA 4BFB dbnza X6
03CC X7:
03CC .dbline 169
03CC ; LcdShGr16P(y,x/16,value);//显示相应的点
03CC E601 lda 1,X
03CE 87 psha
03CF F6 lda ,X
03D0 87 psha
03D1 E605 lda 5,X
03D3 AE10 ldx #16
03D5 8C clrh
03D6 52 div
03D7 95 tsx
03D8 AF02 aix #2
03DA 87 psha
03DB E604 lda 4,X
03DD 87 psha
03DE CD03E7 jsr _LcdShGr16P
03E1 A704 ais #4
03E3 95 tsx
03E4 .dbline -2
03E4 L52:
03E4 A702 ais #2
03E6 .dbline 0 ; func end
03E6 81 rts
03E7 .dbsym l value 0 i
03E7 .dbsym l x 5 c
03E7 .dbsym l y 4 c
03E7 .dbend
03E7 .dbfunc e LcdShGr16P _LcdShGr16P fV
03E7 ; value -> 4,X
03E7 ; Px -> 3,X
03E7 ; y -> 2,X
03E7 _LcdShGr16P::
03E7 .dbline -1
03E7 95 tsx
03E8 .dbline 178
03E8 ; }
03E8 ;
03E8 ; /*LcdShGr16P:在Lcd指定位置上设置线型16个点的显示---------------------------*
03E8 ; *功 能:在Lcd指定位置上设置线型16个点的显示 *
03E8 ; *参 数:y为纵坐标(0-63),Px为页号(0-15),value为16位数据 *
03E8 ; *返 回:无 *
03E8 ; *-------------------------------------------------------------------------*/
03E8 ; void LcdShGr16P(INT8U y,INT8U Px,INT16S value)
03E8 ; {
03E8 .dbline 180
03E8 ; //Wtite_Command(0b00110110); //8位数据,扩展指令,绘图开
03E8 ; Wtite_Command(y|0b10000000);//设置6位绘图列地址
03E8 E602 lda 2,X
03EA AA80 ora #-128
03EC 87 psha
03ED CD041D jsr _Wtite_Command
03F0 A701 ais #1
03F2 95 tsx
03F3 .dbline 181
03F3 ; Wtite_Command(Px|0b10000000);//设置4位绘图行地址
03F3 E603 lda 3,X
03F5 AA80 ora #-128
03F7 87 psha
03F8 CD041D jsr _Wtite_Command
03FB A701 ais #1
03FD 95 tsx
03FE .dbline 182
03FE ; Wtite_Data((INT8U)(value>>8));//写入高8个字节
03FE E604 lda 4,X
0400 B700 sta *__r1
0402 3F00 clr *__r0
0404 3D00 tst *__r1
0406 2A02 bpl X8
0408 3300 com *__r0
040A X8:
040A B600 lda *__r1
040C 87 psha
040D CD0438 jsr _Wtite_Data
0410 A701 ais #1
0412 95 tsx
0413 .dbline 183
0413 ; Wtite_Data((INT8U)value); //写入低8个字节
0413 E605 lda 5,X
0415 87 psha
0416 CD0438 jsr _Wtite_Data
0419 A701 ais #1
041B 95 tsx
041C .dbline -2
041C L55:
041C .dbline 0 ; func end
041C 81 rts
041D .dbsym l value 4 S
041D .dbsym l Px 3 c
041D .dbsym l y 2 c
041D .dbend
041D .dbfunc e Wtite_Command _Wtite_Command fV
041D ; command -> 2,X
041D _Wtite_Command::
041D .dbline -1
041D 95 tsx
041E .dbline 194
041E ; //Wtite_Command(0b00110000); //8位数据,基本指令
041E ; }
041E ;
041E ; /*===============[Lcd基本操作:包括写指令,写数据和延时]===================*/
041E ; /*Wtite_Command:执行参数中的给定命令---------------------------------------*
041E ; *功 能:执行参数中的给定命令 *
041E ; *参 数:command为待执行的命令码 *
041E ; *返 回:无 *
041E ; *-------------------------------------------------------------------------*/
041E ; void Wtite_Command(INT8U command)
041E ; {
041E .dbline 195
041E ; LCD_CtrlPort&=~(1<<LCD_RS); //RS=0
041E 1302 bclr #1,0x2
0420 .dbline 196
0420 ; LCD_CtrlPort&=~(1<<LCD_RW); //RW=0
0420 1502 bclr #2,0x2
0422 .dbline 197
0422 ; LCD_DataPort=command; //数据上线
0422 E602 lda 2,X
0424 B701 sta 0x1
0426 .dbline 198
0426 ; LCD_CtrlPort|=(1<<LCD_E); //E=1
0426 1602 bset #3,0x2
0428 .dbline 199
0428 ; asm("nop"); //使数据稳定
0428 9D nop
0429 .dbline 200
0429 ; asm("nop");
0429 9D nop
042A .dbline 201
042A ; LCD_CtrlPort&=~(1<<LCD_E); //E=0,使数据有效
042A 1702 bclr #3,0x2
042C .dbline 202
042C ; delay72us; //延时>72us
042C 45001E ldhx #30
042F 89 pshx
0430 8B pshh
0431 CD0453 jsr _DelayTimes
0434 A702 ais #2
0436 95 tsx
0437 .dbline -2
0437 L56:
0437 .dbline 0 ; func end
0437 81 rts
0438 .dbsym l command 2 c
0438 .dbend
0438 .dbfunc e Wtite_Data _Wtite_Data fV
0438 ; data -> 2,X
0438 _Wtite_Data::
0438 .dbline -1
0438 95 tsx
0439 .dbline 211
0439 ; }
0439 ;
0439 ; /*Wtite_Data:将参数中给定的数据写入液晶控制器------------------------------*
0439 ; *功 能:将参数中给定的数据写入液晶控制器 *
0439 ; *参 数:data为待写入的数据 *
0439 ; *返 回:无 *
0439 ; *-------------------------------------------------------------------------*/
0439 ; void Wtite_Data(INT8U data)
0439 ; {
0439 .dbline 212
0439 ; LCD_CtrlPort|=(1<<LCD_RS); //RS=1
0439 1202 bset #1,0x2
043B .dbline 213
043B ; LCD_CtrlPort&=~(1<<LCD_RW); //RW=0
043B 1502 bclr #2,0x2
043D .dbline 214
043D ; LCD_DataPort=data; //数据上线
043D E602 lda 2,X
043F B701 sta 0x1
0441 .dbline 215
0441 ; LCD_CtrlPort|=(1<<LCD_E); //E=1
0441 1602 bset #3,0x2
0443 .dbline 216
0443 ; asm("nop"); //使数据稳定
0443 9D nop
0444 .dbline 217
0444 ; asm("nop");
0444 9D nop
0445 .dbline 218
0445 ; LCD_CtrlPort&=~(1<<LCD_E); //E=0,使数据有效
0445 1702 bclr #3,0x2
0447 .dbline 219
0447 ; delay72us; //延时>72us
0447 45001E ldhx #30
044A 89 pshx
044B 8B pshh
044C CD0453 jsr _DelayTimes
044F A702 ais #2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -