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

📄 lcdshow.lis

📁 可以显示年月日,时间等,也可以设置闹钟,设定时间
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module lcdshow.c
                        .area data
 0000           _flat::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data
                        .area text
                ;              i -> 0,X
                ;            str -> 3,X
 0000           _lcdshow2::
 0000 A7FF              ais #-1
 0002 95                tsx
 0003           ; /*文件描述:本文件包含了用HD44780显示相关的3个子程序    *
 0003           ; *         1. LCDShow:在LCD上显示32个字符               *
 0003           ; *         2. LcdInit:初始化Lcd                         *
 0003           ; *         3. Lcd_Command:执行给定的cmd命令             *
 0003           ; *-------------《嵌入式应用技术基础教程》--------------*/
 0003           ; //[以下为子程序源代码]
 0003           ; //[头文件]
 0003           ; #include "GP32C.h"         //包含头文件
 0003           ; #define LcdData PTB        //Lcd显示数据传送口
 0003           ; #define LcdData_D  DDRB    //数据口方向寄存器
 0003           ; #define LcdCtrl PTC        //Lcd控制信号传送口
 0003           ; #define LcdCtrl_D  DDRC    //控制口方向寄存器
 0003           ; #define  LcdRS 0           //Lcd寄存器选择信号PTC0
 0003           ; #define  LcdRW 1           //读写信号接PTC1
 0003           ; #define  LcdE  2           //Lcd使能信号接PTC2
 0003           ; //内部调用子程序
 0003           ; void Lcd_Command(unsigned char cmd); //命令执行子程序
 0003           ; void LcdInit(void);                  //Lcd初始化子程序
 0003           ; unsigned char flat=0;   
 0003           ; extern unsigned char clockstr[8]; /*时间显示的LCD显示*/
 0003           ; extern unsigned char alartstr[5]; /*闹钟显示的LCD显示*/
 0003           ; extern unsigned char datestr[10]; /*日期显示LCD显示*/    
 0003           ; unsigned char data[3];time[3]; 
 0003           ; /*LcdShow:在HD44780显示屏上显示数据--------------------*
 0003           ; *功能描述:在HD44780显示屏上显示str中的32个数据         *
 0003           ; *参  数:str:待显示数组                                 *
 0003           ; *返  回:无                                             *
 0003           ; *------------------以上为子程序说明-------------------*/
 0003           ; void lcdshow2(unsigned char str[])
 0003           ;   {           
 0003           ;     unsigned char i;
 0003           ;     LcdInit();               //调用Lcd初始化子程序
 0003 CD0123            jsr _LcdInit
 0006           ;       //显示第1行16个字符
 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 CD0175            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<16;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 CD0175            jsr _Lcd_Command
 002E A701              ais #1
 0030 95                tsx
 0031           L3:
 0031 7C                inc ,X
 0032           L5:
 0032 F6                lda ,X
 0033 A110              cmp #16
 0035 25E3              blo L2
 0037           ;        Lcd_Command(str[i]);
 0037           ;     //显示第2行16个字符
 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 CD0175            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=16;i<32;i++)      //逐个显示
 0048 A610              lda #16
 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 CD0175            jsr _Lcd_Command
 0061 A701              ais #1
 0063 95                tsx
 0064           L7:
 0064 7C                inc ,X
 0065           L9:
 0065 F6                lda ,X
 0066 A120              cmp #32
 0068 25E3              blo L6
 006A           L1:
 006A A701              ais #1
 006C                   .dbline 0 ; func end
 006C 81                rts
 006D           ;              i -> 0,X
 006D           ;          strl2 -> 5,X
 006D           ;          strl1 -> 3,X
 006D           _lcdshow::
 006D A7FF              ais #-1
 006F 95                tsx
 0070           ;         Lcd_Command(str[i]);
 0070           ;    }
 0070           ; void lcdshow(unsigned char strl1[],unsigned char strl2[])
 0070           ;   {           
 0070           ;     unsigned char i;
 0070           ;     LcdInit();               //调用Lcd初始化子程序
 0070 CD0123            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(0b10000011); //后7位为DDRAM地址0x03 
 0077 A683              lda #-125
 0079 87                psha
 007A CD0175            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<16;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 CD0175            jsr _Lcd_Command
 009B A701              ais #1
 009D 95                tsx
 009E           L12:
 009E 7C                inc ,X
 009F           L14:
 009F F6                lda ,X
 00A0 A110              cmp #16
 00A2 25E3              blo L11
 00A4           ;        Lcd_Command(strl1[i]);
 00A4           ;     //显示第2行16个字符
 00A4           ;       LcdCtrl&=~(1<<LcdRS);    //RS、R/W=00,写指令
 00A4 1102              bclr #0,0x2
 00A6           ;       LcdCtrl&=~(1<<LcdRW);    
 00A6 1302              bclr #1,0x2
 00A8           ;       Lcd_Command(0b11000100); //后7位为DDRAM地址0x44 
 00A8 A6C4              lda #-60
 00AA 87                psha
 00AB CD0175            jsr _Lcd_Command
 00AE A701              ais #1
 00B0 95                tsx
 00B1           ;       LcdCtrl|=1<<LcdRS;               //RS、R/W=10,写数据到DDRAM中
 00B1 1002              bset #0,0x2
 00B3           ;       LcdCtrl&=~(1<<LcdRW);
 00B3 1302              bclr #1,0x2
 00B5           ;     for (i=16;i<32;i++)      //逐个显示
 00B5 A610              lda #16
 00B7 F7                sta ,X
 00B8 2018              bra L18
 00BA           L15:
 00BA 3F00              clr *__r0
 00BC F6                lda ,X
 00BD EB06              add 6,X
 00BF B700              sta *__r1
 00C1 B600              lda *__r0
 00C3 E905              adc 5,X
 00C5 B700              sta *__r0
 00C7 5500              ldhx *__r0
 00C9 F6                lda ,x
 00CA 87                psha
 00CB CD0175            jsr _Lcd_Command
 00CE A701              ais #1
 00D0 95                tsx
 00D1           L16:
 00D1 7C                inc ,X
 00D2           L18:
 00D2 F6                lda ,X
 00D3 A120              cmp #32
 00D5 25E3              blo L15
 00D7           L10:
 00D7 A701              ais #1
 00D9                   .dbline 0 ; func end
 00D9 81                rts
 00DA           ;              i -> 0,X
 00DA           ;           data -> 5,X
 00DA           ;              y -> 4,X
 00DA           ;              x -> 3,X
 00DA           _lcdshow1::
 00DA A7FF              ais #-1
 00DC 95                tsx
 00DD           ;         Lcd_Command(strl2[i]);
 00DD           ;    }
 00DD           ;    
 00DD           ; void lcdshow1(unsigned char x,unsigned char y,unsigned char data)
 00DD           ;   {           
 00DD           ;     unsigned char i;
 00DD           ;       LcdCtrl&=~(1<<LcdRS);      //RS、R/W=00,写指令
 00DD 1102              bclr #0,0x2
 00DF           ;       LcdCtrl&=~(1<<LcdRW);    
 00DF 1302              bclr #1,0x2
 00E1           ;       Lcd_Command(0b10000000|(x*0x40+y)); //DDRAM地址 
 00E1 E603              lda 3,X
 00E3 62                nsa
 00E4 A4F0              and #-16
 00E6 48                lsla
 00E7 48                lsla
 00E8 EB04              add 4,X
 00EA AA80              ora #-128
 00EC 87                psha
 00ED CD0175            jsr _Lcd_Command
 00F0 A701              ais #1
 00F2 95                tsx
 00F3           ;       LcdCtrl|=1<<LcdRS;               //RS、R/W=10,写数据到DDRAM中
 00F3 1002              bset #0,0x2
 00F5           ;     LcdCtrl&=~(1<<LcdRW);
 00F5 1302              bclr #1,0x2
 00F7           ;     Lcd_Command(data);
 00F7 E605              lda 5,X
 00F9 87                psha
 00FA CD0175            jsr _Lcd_Command
 00FD A701              ais #1
 00FF 95                tsx
 0100           L19:
 0100 A701              ais #1
 0102                   .dbline 0 ; func end
 0102 81                rts
 0103           ;              y -> 3,X
 0103           ;              x -> 2,X
 0103           _guangbiao::
 0103 95                tsx
 0104           ;    }
 0104           ; 
 0104           ; void guangbiao(unsigned char x,unsigned char y)
 0104           ;   {           
 0104           ;       LcdCtrl&=~(1<<LcdRS);      //RS、R/W=00,写指令
 0104 1102              bclr #0,0x2
 0106           ;       LcdCtrl&=~(1<<LcdRW);    
 0106 1302              bclr #1,0x2
 0108           ;       Lcd_Command(0b10000000|(x*0x40+y)); //DDRAM地址 0x03
 0108 E602              lda 2,X
 010A 62                nsa
 010B A4F0              and #-16
 010D 48                lsla
 010E 48                lsla
 010F EB03              add 3,X
 0111 AA80              ora #-128
 0113 87                psha
 0114 CD0175            jsr _Lcd_Command
 0117 A701              ais #1
 0119           ;       Lcd_Command(0b00001111);
 0119 A60F              lda #15
 011B 87                psha
 011C CD0175            jsr _Lcd_Command
 011F A701              ais #1
 0121 95                tsx
 0122           L20:
 0122                   .dbline 0 ; func end
 0122 81                rts
 0123           ;              i -> 0,X
 0123           _LcdInit::
 0123 A7FF              ais #-1
 0125 95                tsx
 0126           ; 
 0126           ;    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -