📄 lcd.lis
字号:
0339 ; *--------------------------------------------*/
0339 ; void LcdShGrClr(void)
0339 ; {
0339 .dbline 144
0339 ; unsigned char Px,y;//行页号,列坐标的循环变量
0339 ; Wtite_Command(0b00110110);//扩展指令,绘图开
0339 A636 lda #54
033B 87 psha
033C CD0419 jsr _Wtite_Command
033F A701 ais #1
0341 95 tsx
0342 .dbline 146
0342 ; //[清图形显示屏(清GDRAM)]
0342 ; for(y=0;y<=31;y++)
0342 7F clr ,X
0343 2020 bra L47
0345 L44:
0345 .dbline 147
0345 ; for(Px=0;Px<=15;Px++)
0345 6F01 clr 1,X
0347 2015 bra L51
0349 L48:
0349 .dbline 148
0349 450000 ldhx #0
034C 89 pshx
034D 8B pshh
034E 95 tsx
034F AF02 aix #2
0351 E601 lda 1,X
0353 87 psha
0354 F6 lda ,X
0355 87 psha
0356 CD03E3 jsr _LcdShGr16P
0359 A704 ais #4
035B 95 tsx
035C L49:
035C .dbline 147
035C 6C01 inc 1,X
035E L51:
035E .dbline 147
035E E601 lda 1,X
0360 A10F cmp #15
0362 23E5 bls L48
0364 L45:
0364 .dbline 146
0364 7C inc ,X
0365 L47:
0365 .dbline 146
0365 F6 lda ,X
0366 A11F cmp #31
0368 23DB bls L44
036A .dbline 149
036A ; LcdShGr16P(y,Px,0); //写入0为清屏
036A ; Wtite_Command(0b00110000);//基本指令
036A A630 lda #48
036C 87 psha
036D CD0419 jsr _Wtite_Command
0370 A701 ais #1
0372 95 tsx
0373 .dbline -2
0373 L43:
0373 A702 ais #2
0375 .dbline 0 ; func end
0375 81 rts
0376 .dbsym l y 0 c
0376 .dbsym l Px 1 c
0376 .dbend
0376 .dbfunc e LcdShGr1P _LcdShGr1P fV
0376 ; value -> 0,X
0376 ; x -> 5,X
0376 ; y -> 4,X
0376 _LcdShGr1P::
0376 .dbline -1
0376 A7FE ais #-2
0378 95 tsx
0379 .dbline 158
0379 ; }
0379 ;
0379 ; /*LcdShGr1P:在Lcd的指定位置上画一个点------------------*
0379 ; *功 能:在Lcd的指定位置上画一个点 *
0379 ; *参 数:y为纵坐标(0-63),x为横坐标(0-127) *
0379 ; *返 回:无 *
0379 ; *-----------------------------------------------------*/
0379 ; void LcdShGr1P(unsigned char y,unsigned char x)
0379 ; {
0379 .dbline 159
0379 ; unsigned int value=32768;//初始值为0b1000000000000000
0379 A680 lda #-128
037B F7 sta ,X
037C A600 lda #0
037E E701 sta 1,X
0380 .dbline 160
0380 ; if(y>=32) //第三四行必须调整x和y坐标
0380 E604 lda 4,X
0382 A120 cmp #32
0384 250A blo L53
0386 .dbline 161
0386 ; {y=y-32;x=x+16*8;}
0386 .dbline 161
0386 A020 sub #32
0388 E704 sta 4,X
038A .dbline 161
038A E605 lda 5,X
038C AB80 add #-128
038E E705 sta 5,X
0390 .dbline 161
0390 L53:
0390 .dbline 162
0390 ; value>>=(x-x/16*16); //写入的16位数据
0390 3F00 clr *__r0
0392 E605 lda 5,X
0394 B700 sta *__rlo
0396 4E0000 mov *__r0,*__rhi
0399 A610 lda #16
039B 87 psha
039C 4F clra
039D 87 psha
039E CD0000 jsr __divmod16s
03A1 A702 ais #2
03A3 4E0000 mov *__rhi,*__r0
03A6 4E0000 mov *__rlo,*__r1
03A9 A604 lda #4
03AB X5:
03AB 3800 lsl *__r1
03AD 3900 rol *__r0
03AF 4BFA dbnza X5
03B1 3F00 clr *__r2
03B3 E605 lda 5,X
03B5 B000 sub *__r1
03B7 B700 sta *__r1
03B9 B600 lda *__r2
03BB B200 sbc *__r0
03BD B600 lda *__r1
03BF A40F and #15
03C1 2705 beq X7
03C3 X6:
03C3 74 lsr ,X
03C4 6601 ror 1,X
03C6 4BFB dbnza X6
03C8 X7:
03C8 .dbline 163
03C8 ; LcdShGr16P(y,x/16,value);//显示相应的点
03C8 E601 lda 1,X
03CA 87 psha
03CB F6 lda ,X
03CC 87 psha
03CD E605 lda 5,X
03CF AE10 ldx #16
03D1 8C clrh
03D2 52 div
03D3 95 tsx
03D4 AF02 aix #2
03D6 87 psha
03D7 E604 lda 4,X
03D9 87 psha
03DA CD03E3 jsr _LcdShGr16P
03DD A704 ais #4
03DF 95 tsx
03E0 .dbline -2
03E0 L52:
03E0 A702 ais #2
03E2 .dbline 0 ; func end
03E2 81 rts
03E3 .dbsym l value 0 i
03E3 .dbsym l x 5 c
03E3 .dbsym l y 4 c
03E3 .dbend
03E3 .dbfunc e LcdShGr16P _LcdShGr16P fV
03E3 ; value -> 4,X
03E3 ; Px -> 3,X
03E3 ; y -> 2,X
03E3 _LcdShGr16P::
03E3 .dbline -1
03E3 95 tsx
03E4 .dbline 172
03E4 ; }
03E4 ;
03E4 ; /*LcdShGr16P:在Lcd指定位置上设置线型16个点的显示-----------*
03E4 ; *功 能:在Lcd指定位置上设置线型16个点的显示 *
03E4 ; *参 数:y为纵坐标(0-63),Px为页号(0-15),value为16位数据 *
03E4 ; *返 回:无 *
03E4 ; *---------------------------------------------------------*/
03E4 ; void LcdShGr16P(unsigned char y,unsigned char Px,int value)
03E4 ; {
03E4 .dbline 174
03E4 ; //Wtite_Command(0b00110110); //8位数据,扩展指令,绘图开
03E4 ; Wtite_Command(y|0b10000000);//设置6位绘图列地址
03E4 E602 lda 2,X
03E6 AA80 ora #-128
03E8 87 psha
03E9 CD0419 jsr _Wtite_Command
03EC A701 ais #1
03EE 95 tsx
03EF .dbline 175
03EF ; Wtite_Command(Px|0b10000000);//设置4位绘图行地址
03EF E603 lda 3,X
03F1 AA80 ora #-128
03F3 87 psha
03F4 CD0419 jsr _Wtite_Command
03F7 A701 ais #1
03F9 95 tsx
03FA .dbline 176
03FA ; Wtite_Data((unsigned char)(value>>8));//写入高8个字节
03FA E604 lda 4,X
03FC B700 sta *__r1
03FE 3F00 clr *__r0
0400 3D00 tst *__r1
0402 2A02 bpl X8
0404 3300 com *__r0
0406 X8:
0406 B600 lda *__r1
0408 87 psha
0409 CD0434 jsr _Wtite_Data
040C A701 ais #1
040E 95 tsx
040F .dbline 177
040F ; Wtite_Data((unsigned char)value); //写入低8个字节
040F E605 lda 5,X
0411 87 psha
0412 CD0434 jsr _Wtite_Data
0415 A701 ais #1
0417 95 tsx
0418 .dbline -2
0418 L55:
0418 .dbline 0 ; func end
0418 81 rts
0419 .dbsym l value 4 I
0419 .dbsym l Px 3 c
0419 .dbsym l y 2 c
0419 .dbend
0419 .dbfunc e Wtite_Command _Wtite_Command fV
0419 ; command -> 2,X
0419 _Wtite_Command::
0419 .dbline -1
0419 95 tsx
041A .dbline 188
041A ; //Wtite_Command(0b00110000); //8位数据,基本指令
041A ; }
041A ;
041A ; //===========[Lcd基本操作:包括写指令,写数据和延时]===========
041A ; /*Wtite_Command:执行参数中的给定命令-------------------*
041A ; *功 能:执行参数中的给定命令 *
041A ; *参 数:command为待执行的命令码 *
041A ; *返 回:无 *
041A ; *-----------------------------------------------------*/
041A ; void Wtite_Command(unsigned char command)
041A ; {
041A .dbline 189
041A ; LCD_CtrlPort&=~(1<<LCD_RS); //RS=0
041A 1903 bclr #4,0x3
041C .dbline 190
041C ; LCD_CtrlPort&=~(1<<LCD_RW); //RW=0
041C 1B03 bclr #5,0x3
041E .dbline 191
041E ; LCD_DataPort=command; //数据上线
041E E602 lda 2,X
0420 B701 sta 0x1
0422 .dbline 192
0422 ; LCD_CtrlPort|=(1<<LCD_E); //E=1
0422 1C03 bset #6,0x3
0424 .dbline 193
0424 ; asm("nop"); //使数据稳定
0424 9D nop
0425 .dbline 194
0425 ; asm("nop");
0425 9D nop
0426 .dbline 195
0426 ; LCD_CtrlPort&=~(1<<LCD_E); //E=0,使数据有效
0426 1D03 bclr #6,0x3
0428 .dbline 196
0428 ; delay72us; //延时>72us
0428 45001E ldhx #30
042B 89 pshx
042C 8B pshh
042D CD044F jsr _DelayTimes
0430 A702 ais #2
0432 95 tsx
0433 .dbline -2
0433 L56:
0433 .dbline 0 ; func end
0433 81 rts
0434 .dbsym l command 2 c
0434 .dbend
0434 .dbfunc e Wtite_Data _Wtite_Data fV
0434 ; data -> 2,X
0434 _Wtite_Data::
0434 .dbline -1
0434 95 tsx
0435 .dbline 205
0435 ; }
0435 ;
0435 ; /*Wtite_Data:将参数中给定的数据写入液晶控制器----------*
0435 ; *功 能:将参数中给定的数据写入液晶控制器 *
0435 ; *参 数:data为待写入的数据 *
0435 ; *返 回:无 *
0435 ; *-----------------------------------------------------*/
0435 ; void Wtite_Data(unsigned char data)
0435 ; {
0435 .dbline 206
0435 ; LCD_CtrlPort|=(1<<LCD_RS); //RS=1
0435 1803 bset #4,0x3
0437 .dbline 207
0437 ; LCD_CtrlPort&=~(1<<LCD_RW); //RW=0
0437 1B03 bclr #5,0x3
0439 .dbline 208
0439 ; LCD_DataPort=data; //数据上线
0439 E602 lda 2,X
043B B701 sta 0x1
043D .dbline 209
043D ; LCD_CtrlPort|=(1<<LCD_E); //E=1
043D 1C03 bset #6,0x3
043F .dbline 210
043F ; asm("nop"); //使数据稳定
043F 9D nop
0440 .dbline 211
0440 ; asm("nop");
0440 9D nop
0441 .dbline 212
0441 ; LCD_CtrlPort&=~(1<<LCD_E); //E=0,使数据有效
0441 1D03 bclr #6,0x3
0443 .dbline 213
0443 ; delay72us; //延时>72us
0443 45001E ldhx #30
0446 89 pshx
0447 8B pshh
0448 CD044F jsr _DelayTimes
044B A702 ais #2
044D 95 tsx
044E .dbline -2
044E L57:
044E .dbline 0 ; func end
044E 81 rts
044F .dbsym l data 2 c
044F .dbend
044F .dbfunc e DelayTimes _DelayTimes fV
044F ; i -> 0,X
044F ; tn -> 4,X
044F _DelayTimes::
044F .dbline -1
044F A7FE ais #-2
0451 95 tsx
0452 .dbline 222
0452 ; }
0452 ;
0452 ; /*DelayTimes:延时指定时间---------------*
0452 ; *功 能:延时指定的时间 *
0452 ; *入 口:tn为延时时间数(0到65535) *
0452 ; *出 口:无 *
0452 ; *--------------------------------------*/
0452 ; void DelayTimes(unsigned int tn)
0452 ; {
0452 .dbline 224
0452 6F01 clr 1,X
0454 7F clr ,X
0455 200A bra L62
0457 L59:
0457 .dbline 224
0457 L60:
0457 .dbline 224
0457 E601 lda 1,X
0459 AB01 add #1
045B E701 sta 1,X
045D F6 lda ,X
045E A900 adc #0
0460 F7 sta ,X
0461 L62:
0461 .dbline 224
0461 ; unsigned int i; //循环变量
0461 ; for(i=0;i<tn;i++);
0461 E605 lda 5,X
0463 B700 sta *__r1
0465 E604 lda 4,X
0467 B700 sta *__r0
0469 E601 lda 1,X
046B B700 sta *__r3
046D F6 lda ,X
046E B700 sta *__r2
0470 5500 ldhx *__r2
0472 7500 cphx *__r0
0474 95 tsx
0475 25E0 blo L59
0477 .dbline -2
0477 L58:
0477 A702 ais #2
0479 .dbline 0 ; func end
0479 81 rts
047A .dbsym l i 0 i
047A .dbsym l tn 4 i
047A .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -