⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.lis

📁 freescale单片机电子时钟
💻 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 + -