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