📄 lcdshow.lis
字号:
0126 ;
0126 ; /*LcdInit:初始化Lcd------------------------------------*
0126 ; *功 能:初始化Lcd(HD44780),设置显示方式,清屏,AC自动+1 *
0126 ; *参 数:无 *
0126 ; *返 回:无 *
0126 ; *-----------------------------------------------------*/
0126 ;
0126 ; void LcdInit(void)
0126 ; {
0126 ; unsigned char i;
0126 ; LcdData_D=0b11111111; //数据口为输出
0126 A6FF lda #-1
0128 B705 sta 0x5
012A ; LcdCtrl_D|=(1<<LcdE); //控制口低三位为输出
012A 1406 bset #2,0x6
012C ; LcdCtrl_D|=(1<<LcdRS);
012C 1006 bset #0,0x6
012E ; LcdCtrl_D|=(1<<LcdRW);
012E 1206 bset #1,0x6
0130 ; LcdCtrl|=(1<<LcdE); //E=1
0130 1402 bset #2,0x2
0132 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
0132 1102 bclr #0,0x2
0134 ; LcdCtrl&=~(1<<LcdRW);
0134 1302 bclr #1,0x2
0136 ; Lcd_Command(0b00111000); //8位数据接口,2行,5*7点阵
0136 A638 lda #56
0138 87 psha
0139 CD0175 jsr _Lcd_Command
013C A701 ais #1
013E ; Lcd_Command(0b00001000); //关显示,关光标显示,不闪烁
013E A608 lda #8
0140 87 psha
0141 CD0175 jsr _Lcd_Command
0144 A701 ais #1
0146 ; Lcd_Command(0b00000001); //清屏
0146 A601 lda #1
0148 87 psha
0149 CD0175 jsr _Lcd_Command
014C A701 ais #1
014E 95 tsx
014F 7F clr ,X
0150 2001 bra L25
0152 L22:
0152 L23:
0152 7C inc ,X
0153 L25:
0153 ; for(i=0;i<250;i++); //延时>1.6ms
0153 F6 lda ,X
0154 A1FA cmp #-6
0156 25FA blo L22
0158 7F clr ,X
0159 2001 bra L29
015B L26:
015B L27:
015B 7C inc ,X
015C L29:
015C ; for(i=0;i<250;i++);
015C F6 lda ,X
015D A1FA cmp #-6
015F 25FA blo L26
0161 ; Lcd_Command(0b00010100); //光标右移一个字符位,AC自
0161 A614 lda #20
0163 87 psha
0164 CD0175 jsr _Lcd_Command
0167 A701 ais #1
0169 ; // 动加1 (是否错误?)
0169 ; Lcd_Command(0b00001100); //开显示,关光标显示,不闪烁
0169 A60C lda #12
016B 87 psha
016C CD0175 jsr _Lcd_Command
016F A701 ais #1
0171 95 tsx
0172 L21:
0172 A701 ais #1
0174 .dbline 0 ; func end
0174 81 rts
0175 ; i -> 0,X
0175 ; cmd -> 3,X
0175 _Lcd_Command::
0175 A7FF ais #-1
0177 95 tsx
0178 ; }
0178 ; /*Lcd_Command:执行给定的cmd命令------------------------*
0178 ; *功 能:执行给定的cmd命令,且延时 *
0178 ; *参 数:cmd:待执行的命令 *
0178 ; *返 回:无 *
0178 ; *-----------------------------------------------------*/
0178 ; void Lcd_Command(unsigned char cmd)
0178 ; {
0178 7F clr ,X
0179 2001 bra L34
017B L31:
017B L32:
017B 7C inc ,X
017C L34:
017C ; unsigned char i;
017C ; for (i=0;i<20;i++); //等待>40us
017C F6 lda ,X
017D A114 cmp #20
017F 25FA blo L31
0181 ; LcdData=cmd; //把指令码送到Lcd数据传送口
0181 E603 lda 3,X
0183 B701 sta 0x1
0185 ; LcdCtrl|=(1<<LcdE); //Lcd开始接收数据
0185 1402 bset #2,0x2
0187 ; asm("NOP");
0187 9D NOP
0188 ; asm("NOP");
0188 9D NOP
0189 ; asm("NOP");
0189 9D NOP
018A ; LcdCtrl&=~(1<<LcdE); //Lcd结束接收数据
018A 1502 bclr #2,0x2
018C 7F clr ,X
018D 2001 bra L38
018F L35:
018F L36:
018F 7C inc ,X
0190 L38:
0190 ; for (i=0;i<20;i++); //等待>40us
0190 F6 lda ,X
0191 A114 cmp #20
0193 25FA blo L35
0195 L30:
0195 A701 ais #1
0197 .dbline 0 ; func end
0197 81 rts
0198 _left::
0198 ; }
0198 ;
0198 ;
0198 ;
0198 ; void left(void) ////进入左移时间模式
0198 ; {
0198 ;
0198 ; if(flat>10)
0198 B600 lda *_flat
019A A10A cmp #10
019C 2311 bls L40
019E ; {
019E ; flat--;
019E 3A00 dec *_flat
01A0 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
01A0 1102 bclr #0,0x2
01A2 ; LcdCtrl&=~(1<<LcdRW);
01A2 1302 bclr #1,0x2
01A4 ; Lcd_Command(0b00010000); //后7位为DDRAM地址0x10
01A4 A610 lda #16
01A6 87 psha
01A7 CD0175 jsr _Lcd_Command
01AA A701 ais #1
01AC 95 tsx
01AD ;
01AD ; }
01AD 202C bra L41
01AF L40:
01AF ; else if(flat==10)
01AF B600 lda *_flat
01B1 A10A cmp #10
01B3 2611 bne L42
01B5 ; {
01B5 ; flat--;
01B5 3A00 dec *_flat
01B7 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
01B7 1102 bclr #0,0x2
01B9 ; LcdCtrl&=~(1<<LcdRW);
01B9 1302 bclr #1,0x2
01BB ; Lcd_Command(0b10001100); //后7位为DDRAM地址0x4c
01BB A68C lda #-116
01BD 87 psha
01BE CD0175 jsr _Lcd_Command
01C1 A701 ais #1
01C3 95 tsx
01C4 ; }
01C4 2015 bra L43
01C6 L42:
01C6 ; else if(flat>0)
01C6 B600 lda *_flat
01C8 A100 cmp #0
01CA 230F bls L44
01CC ; {
01CC ; flat--;
01CC 3A00 dec *_flat
01CE ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
01CE 1102 bclr #0,0x2
01D0 ; LcdCtrl&=~(1<<LcdRW);
01D0 1302 bclr #1,0x2
01D2 ; Lcd_Command(0b00010000); //后7位为DDRAM地址0x10
01D2 A610 lda #16
01D4 87 psha
01D5 CD0175 jsr _Lcd_Command
01D8 A701 ais #1
01DA 95 tsx
01DB ; }
01DB L44:
01DB L43:
01DB L41:
01DB ; Lcd_Command(0b00001111); //开显示,开光标显示,闪烁
01DB A60F lda #15
01DD 87 psha
01DE CD0175 jsr _Lcd_Command
01E1 A701 ais #1
01E3 95 tsx
01E4 L39:
01E4 .dbline 0 ; func end
01E4 81 rts
01E5 _right::
01E5 ; }
01E5 ; void right(void) ////进入右移时间模式
01E5 ; {
01E5 ; if(flat<9)
01E5 B600 lda *_flat
01E7 A109 cmp #9
01E9 2411 bhs L47
01EB ; {
01EB ; flat++;
01EB 3C00 inc *_flat
01ED ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
01ED 1102 bclr #0,0x2
01EF ; LcdCtrl&=~(1<<LcdRW);
01EF 1302 bclr #1,0x2
01F1 ; Lcd_Command(0b00010100); //
01F1 A614 lda #20
01F3 87 psha
01F4 CD0175 jsr _Lcd_Command
01F7 A701 ais #1
01F9 95 tsx
01FA ;
01FA ; }
01FA 202C bra L48
01FC L47:
01FC ; else if(flat==9)
01FC B600 lda *_flat
01FE A109 cmp #9
0200 2611 bne L49
0202 ; {
0202 ; flat++;
0202 3C00 inc *_flat
0204 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
0204 1102 bclr #0,0x2
0206 ; LcdCtrl&=~(1<<LcdRW);
0206 1302 bclr #1,0x2
0208 ; Lcd_Command(0b11000100); //后7位为DDRAM地址0x44
0208 A6C4 lda #-60
020A 87 psha
020B CD0175 jsr _Lcd_Command
020E A701 ais #1
0210 95 tsx
0211 ; }
0211 2015 bra L50
0213 L49:
0213 ; else if(flat<17)
0213 B600 lda *_flat
0215 A111 cmp #17
0217 240F bhs L51
0219 ; {
0219 ; flat++;
0219 3C00 inc *_flat
021B ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
021B 1102 bclr #0,0x2
021D ; LcdCtrl&=~(1<<LcdRW);
021D 1302 bclr #1,0x2
021F ; Lcd_Command(0b00010100); //后7位为DDRAM地址0x03
021F A614 lda #20
0221 87 psha
0222 CD0175 jsr _Lcd_Command
0225 A701 ais #1
0227 95 tsx
0228 ; }
0228 L51:
0228 L50:
0228 L48:
0228 L46:
0228 .dbline 0 ; func end
0228 81 rts
0229 ; i -> 0,X
0229 ; j -> 1,X
0229 _down::
0229 A7FE ais #-2
022B 95 tsx
022C ;
022C ; }
022C ;
022C ; void down(void) ////进入左移时间模
022C ; {
022C ; unsigned char i,j;
022C ; j=flat;
022C B600 lda *_flat
022E E701 sta 1,X
0230 ; i=(unsigned char)datestr[j]-0x30;
0230 3F00 clr *__r0
0232 AB00 add #<_datestr
0234 B700 sta *__r1
0236 B600 lda *__r0
0238 A900 adc #>_datestr
023A B700 sta *__r0
023C 5500 ldhx *__r0
023E F6 lda ,x
023F 95 tsx
0240 A030 sub #48
0242 F7 sta ,X
0243 ; i++;
0243 7C inc ,X
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -