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

📄 ledshow.lis

📁 飞思卡尔的电子钟和电子琴的课程设计,包括源代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module ledshow.c
                        .area text
                ;              i -> 0,X
                ;            str -> 3,X
 0000           _lcdshow::
 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           ; #include "clock.h"
 0003           ; //内部调用子程序
 0003           ; /*LcdShow:在HD44780显示屏上显示数据--------------------*
 0003           ; *功能描述:在HD44780显示屏上显示str中的32个数据         *
 0003           ; *参  数:str:待显示数组;以e标志结束                                 *
 0003           ; *返  回:无                                             *
 0003           ; *------------------以上为子程序说明-------------------*/
 0003           ; void lcdshow(unsigned char str[])
 0003           ;   {           
 0003           ;     unsigned char i=0;             
 0003 7F                clr ,X
 0004           ;     //调用Lcd初始化子程序
 0004           ;       //显示第1行16个字符
 0004           ;       LcdCtrl&=~(1<<LcdRS);      //RS、R/W=00,写指令
 0004 1102              bclr #0,0x2
 0006           ;       LcdCtrl&=~(1<<LcdRW);    
 0006 1302              bclr #1,0x2
 0008           ;       Lcd_Command(0b10000000); //后7位为DDRAM地址0x00 
 0008 A680              lda #-128
 000A 87                psha
 000B CD0142            jsr _Lcd_Command
 000E A701              ais #1
 0010 95                tsx
 0011           ;       LcdCtrl|=1<<LcdRS;               //RS、R/W=10,写数据到DDRAM中
 0011 1002              bset #0,0x2
 0013           ;     LcdCtrl&=~(1<<LcdRW);
 0013 1302              bclr #1,0x2
 0015 2018              bra L3
 0017           L2:
 0017 3F00              clr *__r0
 0019 F6                lda ,X
 001A EB04              add 4,X
 001C B700              sta *__r1
 001E B600              lda *__r0
 0020 E903              adc 3,X
 0022 B700              sta *__r0
 0024 5500              ldhx *__r0
 0026 F6                lda ,x
 0027 87                psha
 0028 CD0142            jsr _Lcd_Command
 002B A701              ais #1
 002D 95                tsx
 002E 7C                inc ,X
 002F           L3:
 002F           ;    	while(str[i]!='E'&&i<16)       //逐个显示
 002F 3F00              clr *__r0
 0031 F6                lda ,X
 0032 EB04              add 4,X
 0034 B700              sta *__r1
 0036 B600              lda *__r0
 0038 E903              adc 3,X
 003A B700              sta *__r0
 003C 5500              ldhx *__r0
 003E F6                lda ,x
 003F 95                tsx
 0040 A145              cmp #69
 0042 2705              beq L5
 0044 F6                lda ,X
 0045 A110              cmp #16
 0047 25CE              blo L2
 0049           L5:
 0049           ;        {Lcd_Command(str[i]);i++;}
 0049           ;     if(str[i]=='E')i++;
 0049 3F00              clr *__r0
 004B F6                lda ,X
 004C EB04              add 4,X
 004E B700              sta *__r1
 0050 B600              lda *__r0
 0052 E903              adc 3,X
 0054 B700              sta *__r0
 0056 5500              ldhx *__r0
 0058 F6                lda ,x
 0059 95                tsx
 005A A145              cmp #69
 005C 2601              bne L6
 005E 7C                inc ,X
 005F           L6:
 005F           ;     //显示第2行16个字符
 005F           ;    	LcdCtrl&=~(1<<LcdRS);    //RS、R/W=00,写指令
 005F 1102              bclr #0,0x2
 0061           ;       LcdCtrl&=~(1<<LcdRW);    
 0061 1302              bclr #1,0x2
 0063           ;       Lcd_Command(0b11000000); //后7位为DDRAM地址0x40 
 0063 A6C0              lda #-64
 0065 87                psha
 0066 CD0142            jsr _Lcd_Command
 0069 A701              ais #1
 006B 95                tsx
 006C           ;       LcdCtrl|=1<<LcdRS;               //RS、R/W=10,写数据到DDRAM中
 006C 1002              bset #0,0x2
 006E           ;       LcdCtrl&=~(1<<LcdRW);
 006E 1302              bclr #1,0x2
 0070 2018              bra L9
 0072           L8:
 0072 3F00              clr *__r0
 0074 F6                lda ,X
 0075 EB04              add 4,X
 0077 B700              sta *__r1
 0079 B600              lda *__r0
 007B E903              adc 3,X
 007D B700              sta *__r0
 007F 5500              ldhx *__r0
 0081 F6                lda ,x
 0082 87                psha
 0083 CD0142            jsr _Lcd_Command
 0086 A701              ais #1
 0088 95                tsx
 0089 7C                inc ,X
 008A           L9:
 008A           ;     while(str[i]!='E'&&i<32)       //逐个显示
 008A 3F00              clr *__r0
 008C F6                lda ,X
 008D EB04              add 4,X
 008F B700              sta *__r1
 0091 B600              lda *__r0
 0093 E903              adc 3,X
 0095 B700              sta *__r0
 0097 5500              ldhx *__r0
 0099 F6                lda ,x
 009A 95                tsx
 009B A145              cmp #69
 009D 2705              beq L11
 009F F6                lda ,X
 00A0 A120              cmp #32
 00A2 25CE              blo L8
 00A4           L11:
 00A4           L1:
 00A4 A701              ais #1
 00A6                   .dbline 0 ; func end
 00A6 81                rts
 00A7           ;              i -> 0,X
 00A7           ;             AC -> 4,X
 00A7           ;            str -> 3,X
 00A7           _lcdshow1::
 00A7 A7FF              ais #-1
 00A9 95                tsx
 00AA           ;        {Lcd_Command(str[i]);i++;}
 00AA           ;    }
 00AA           ;    
 00AA           ; void lcdshow1(unsigned char str,unsigned char AC)
 00AA           ;   {   
 00AA           ;      unsigned char i;
 00AA           ;       AC|=0b10000000;         
 00AA E604              lda 4,X
 00AC AA80              ora #-128
 00AE E704              sta 4,X
 00B0           ;     LcdCtrl|=(1<<LcdE);       //E=1
 00B0 1402              bset #2,0x2
 00B2           ;     LcdCtrl&=~(1<<LcdRS);     //RS、R/W=00,写指令
 00B2 1102              bclr #0,0x2
 00B4           ;     LcdCtrl&=~(1<<LcdRW);    
 00B4 1302              bclr #1,0x2
 00B6           ;       Lcd_Command(AC);          //后7位为DDRAM地址
 00B6 87                psha
 00B7 CD0142            jsr _Lcd_Command
 00BA A701              ais #1
 00BC 95                tsx
 00BD 7F                clr ,X
 00BE 2001              bra L16
 00C0           L13:
 00C0           L14:
 00C0 7C                inc ,X
 00C1           L16:
 00C1           ;   	    for(i=0;i<250;i++);       //延时>1.6ms
 00C1 F6                lda ,X
 00C2 A1FA              cmp #-6
 00C4 25FA              blo L13
 00C6 7F                clr ,X
 00C7 2001              bra L20
 00C9           L17:
 00C9           L18:
 00C9 7C                inc ,X
 00CA           L20:
 00CA           ;     for(i=0;i<250;i++);
 00CA F6                lda ,X
 00CB A1FA              cmp #-6

⌨️ 快捷键说明

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