📄 lcd.lis
字号:
.module LCD.c
.area text
; i -> 0,X
; str -> 3,X
0000 _lcdshow::
0000 A7FF ais #-1
0002 95 tsx
0003 ; #include "LCD.h"
0003 ; /*LcdShow:在HD44780显示屏上显示数据--------------------*
0003 ; *功能描述:在HD44780显示屏上显示str中的32个数据 *
0003 ; *参 数:str:待显示数组 *
0003 ; *返 回:无 *
0003 ; *------------------以上为子程序说明-------------------*/
0003 ; void lcdshow(unsigned char str[])
0003 ; {
0003 ; unsigned char i;
0003 ; LcdInit(); //调用Lcd初始化子程序
0003 CD00C3 jsr _LcdInit
0006 ; //显示第1行
0006 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
0006 1102 bclr #0,0x2
0008 ; LcdCtrl&=~(1<<LcdRW);
0008 1302 bclr #1,0x2
000A ; Lcd_Command(0b10000000); //后7位为DDRAM地址0x00
000A A680 lda #-128
000C 87 psha
000D CD0115 jsr _Lcd_Command
0010 A701 ais #1
0012 95 tsx
0013 ; LcdCtrl|=1<<LcdRS; //RS、R/W=10,写数据到DDRAM中
0013 1002 bset #0,0x2
0015 ; LcdCtrl&=~(1<<LcdRW);
0015 1302 bclr #1,0x2
0017 ; for (i=0;i<10;i++) //逐个显示
0017 7F clr ,X
0018 2018 bra L5
001A L2:
001A 3F00 clr *__r0
001C F6 lda ,X
001D EB04 add 4,X
001F B700 sta *__r1
0021 B600 lda *__r0
0023 E903 adc 3,X
0025 B700 sta *__r0
0027 5500 ldhx *__r0
0029 F6 lda ,x
002A 87 psha
002B CD0115 jsr _Lcd_Command
002E A701 ais #1
0030 95 tsx
0031 L3:
0031 7C inc ,X
0032 L5:
0032 F6 lda ,X
0033 A10A cmp #10
0035 25E3 blo L2
0037 ; Lcd_Command(str[i]);
0037 ; //显示第2行
0037 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
0037 1102 bclr #0,0x2
0039 ; LcdCtrl&=~(1<<LcdRW);
0039 1302 bclr #1,0x2
003B ; Lcd_Command(0b11000000); //后7位为DDRAM地址0x40
003B A6C0 lda #-64
003D 87 psha
003E CD0115 jsr _Lcd_Command
0041 A701 ais #1
0043 95 tsx
0044 ; LcdCtrl|=1<<LcdRS; //RS、R/W=10,写数据到DDRAM中
0044 1002 bset #0,0x2
0046 ; LcdCtrl&=~(1<<LcdRW);
0046 1302 bclr #1,0x2
0048 ; for (i=10;i<18;i++) //逐个显示
0048 A60A lda #10
004A F7 sta ,X
004B 2018 bra L9
004D L6:
004D 3F00 clr *__r0
004F F6 lda ,X
0050 EB04 add 4,X
0052 B700 sta *__r1
0054 B600 lda *__r0
0056 E903 adc 3,X
0058 B700 sta *__r0
005A 5500 ldhx *__r0
005C F6 lda ,x
005D 87 psha
005E CD0115 jsr _Lcd_Command
0061 A701 ais #1
0063 95 tsx
0064 L7:
0064 7C inc ,X
0065 L9:
0065 F6 lda ,X
0066 A112 cmp #18
0068 25E3 blo L6
006A L1:
006A A701 ais #1
006C .dbline 0 ; func end
006C 81 rts
006D ; i -> 0,X
006D ; n -> 5,X
006D ; str -> 3,X
006D _lcdshow1::
006D A7FF ais #-1
006F 95 tsx
0070 ; Lcd_Command(str[i]);
0070 ; }
0070 ; void lcdshow1(unsigned char str[],unsigned char n)
0070 ; {
0070 ; unsigned char i;
0070 ; LcdInit(); //调用Lcd初始化子程序
0070 CD00C3 jsr _LcdInit
0073 ; //显示第1行16个字符
0073 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
0073 1102 bclr #0,0x2
0075 ; LcdCtrl&=~(1<<LcdRW);
0075 1302 bclr #1,0x2
0077 ; Lcd_Command(0b10000000); //后7位为DDRAM地址0x00
0077 A680 lda #-128
0079 87 psha
007A CD0115 jsr _Lcd_Command
007D A701 ais #1
007F 95 tsx
0080 ; LcdCtrl|=1<<LcdRS; //RS、R/W=10,写数据到DDRAM中
0080 1002 bset #0,0x2
0082 ; LcdCtrl&=~(1<<LcdRW);
0082 1302 bclr #1,0x2
0084 ; for (i=0;i<n;i++) //逐个显示
0084 7F clr ,X
0085 2018 bra L14
0087 L11:
0087 3F00 clr *__r0
0089 F6 lda ,X
008A EB04 add 4,X
008C B700 sta *__r1
008E B600 lda *__r0
0090 E903 adc 3,X
0092 B700 sta *__r0
0094 5500 ldhx *__r0
0096 F6 lda ,x
0097 87 psha
0098 CD0115 jsr _Lcd_Command
009B A701 ais #1
009D 95 tsx
009E L12:
009E 7C inc ,X
009F L14:
009F F6 lda ,X
00A0 E105 cmp 5,X
00A2 25E3 blo L11
00A4 L10:
00A4 A701 ais #1
00A6 .dbline 0 ; func end
00A6 81 rts
00A7 ; str -> 2,X
00A7 _lcdshow2::
00A7 95 tsx
00A8 ; Lcd_Command(str[i]);
00A8 ; /*显示第2行16个字符
00A8 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
00A8 ; LcdCtrl&=~(1<<LcdRW);
00A8 ; Lcd_Command(0b11000000); //后7位为DDRAM地址0x40
00A8 ; LcdCtrl|=1<<LcdRS; //RS、R/W=10,写数据到DDRAM中
00A8 ; LcdCtrl&=~(1<<LcdRW);
00A8 ; for (i=16;i<32;i++) //逐个显示
00A8 ; Lcd_Command(str[i]);*/
00A8 ; }
00A8 ;
00A8 ; void lcdshow2(unsigned char str)
00A8 ; {
00A8 ; // unsigned char i;
00A8 ; //LcdInit(); //调用Lcd初始化子程序
00A8 ; //显示第2行16个字符
00A8 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
00A8 1102 bclr #0,0x2
00AA ; LcdCtrl&=~(1<<LcdRW);
00AA 1302 bclr #1,0x2
00AC ; //Lcd_Command(0b00010100); //光标右移一个字符位,AC自
00AC ; Lcd_Command(0b00000110); //光标右移一个字符位,AC自
00AC A606 lda #6
00AE 87 psha
00AF CD0115 jsr _Lcd_Command
00B2 A701 ais #1
00B4 95 tsx
00B5 ; // 动加1 // 动加1
00B5 ; LcdCtrl|=1<<LcdRS; //RS、R/W=10,写数据到DDRAM中
00B5 1002 bset #0,0x2
00B7 ; LcdCtrl&=~(1<<LcdRW);
00B7 1302 bclr #1,0x2
00B9 ; //for (i=0;i<16;i++) //逐个显示
00B9 ; Lcd_Command(str);
00B9 E602 lda 2,X
00BB 87 psha
00BC CD0115 jsr _Lcd_Command
00BF A701 ais #1
00C1 95 tsx
00C2 L15:
00C2 .dbline 0 ; func end
00C2 81 rts
00C3 ; i -> 0,X
00C3 _LcdInit::
00C3 A7FF ais #-1
00C5 95 tsx
00C6 ; }
00C6 ; /*LcdInit:初始化Lcd------------------------------------*
00C6 ; *功 能:初始化Lcd(HD44780),设置显示方式,清屏,AC自动+1 *
00C6 ; *参 数:无 *
00C6 ; *返 回:无 *
00C6 ; *-----------------------------------------------------*/
00C6 ; void LcdInit(void)
00C6 ; {
00C6 ; unsigned char i;
00C6 ; LcdData_D=0b11111111; //数据口为输出
00C6 A6FF lda #-1
00C8 B705 sta 0x5
00CA ; LcdCtrl_D|=(1<<LcdE); //控制口低三位为输出
00CA 1406 bset #2,0x6
00CC ; LcdCtrl_D|=(1<<LcdRS);
00CC 1006 bset #0,0x6
00CE ; LcdCtrl_D|=(1<<LcdRW);
00CE 1206 bset #1,0x6
00D0 ; LcdCtrl|=(1<<LcdE); //E=1
00D0 1402 bset #2,0x2
00D2 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
00D2 1102 bclr #0,0x2
00D4 ; LcdCtrl&=~(1<<LcdRW);
00D4 1302 bclr #1,0x2
00D6 ; Lcd_Command(0b00111000); //8位数据接口,2行,5*7点阵
00D6 A638 lda #56
00D8 87 psha
00D9 CD0115 jsr _Lcd_Command
00DC A701 ais #1
00DE ; Lcd_Command(0b00001000); //关显示,关光标显示,不闪烁
00DE A608 lda #8
00E0 87 psha
00E1 CD0115 jsr _Lcd_Command
00E4 A701 ais #1
00E6 ; Lcd_Command(0b00000001); //清屏
00E6 A601 lda #1
00E8 87 psha
00E9 CD0115 jsr _Lcd_Command
00EC A701 ais #1
00EE 95 tsx
00EF 7F clr ,X
00F0 2001 bra L20
00F2 L17:
00F2 L18:
00F2 7C inc ,X
00F3 L20:
00F3 ; for(i=0;i<250;i++); //延时>1.6ms
00F3 F6 lda ,X
00F4 A1FA cmp #-6
00F6 25FA blo L17
00F8 7F clr ,X
00F9 2001 bra L24
00FB L21:
00FB L22:
00FB 7C inc ,X
00FC L24:
00FC ; for(i=0;i<250;i++);
00FC F6 lda ,X
00FD A1FA cmp #-6
00FF 25FA blo L21
0101 ; Lcd_Command(0b00010100); //光标右移一个字符位,AC自
0101 A614 lda #20
0103 87 psha
0104 CD0115 jsr _Lcd_Command
0107 A701 ais #1
0109 ; // 动加1
0109 ; Lcd_Command(0b00001100); //开显示,关光标显示,不闪烁
0109 A60C lda #12
010B 87 psha
010C CD0115 jsr _Lcd_Command
010F A701 ais #1
0111 95 tsx
0112 L16:
0112 A701 ais #1
0114 .dbline 0 ; func end
0114 81 rts
0115 ; i -> 0,X
0115 ; cmd -> 3,X
0115 _Lcd_Command::
0115 A7FF ais #-1
0117 95 tsx
0118 ; }
0118 ; /*Lcd_Command:执行给定的cmd命令------------------------*
0118 ; *功 能:执行给定的cmd命令,且延时 *
0118 ; *参 数:cmd:待执行的命令 *
0118 ; *返 回:无 *
0118 ; *-----------------------------------------------------*/
0118 ; void Lcd_Command(unsigned char cmd)
0118 ; {
0118 7F clr ,X
0119 2001 bra L29
011B L26:
011B L27:
011B 7C inc ,X
011C L29:
011C ; unsigned char i;
011C ; for (i=0;i<20;i++); //等待>40us
011C F6 lda ,X
011D A114 cmp #20
011F 25FA blo L26
0121 ; LcdData=cmd; //把指令码送到Lcd数据传送口
0121 E603 lda 3,X
0123 B701 sta 0x1
0125 ; LcdCtrl|=(1<<LcdE); //Lcd开始接收数据
0125 1402 bset #2,0x2
0127 ; asm("NOP");
0127 9D NOP
0128 ; asm("NOP");
0128 9D NOP
0129 ; asm("NOP");
0129 9D NOP
012A ; LcdCtrl&=~(1<<LcdE); //Lcd结束接收数据
012A 1502 bclr #2,0x2
012C 7F clr ,X
012D 2001 bra L33
012F L30:
012F L31:
012F 7C inc ,X
0130 L33:
0130 ; for (i=0;i<20;i++); //等待>40us
0130 F6 lda ,X
0131 A114 cmp #20
0133 25FA blo L30
0135 L25:
0135 A701 ais #1
0137 .dbline 0 ; func end
0137 81 rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -