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

📄 main.lis

📁 摩托罗拉单片机的数码管LED的原代码
💻 LIS
字号:
                        .module main.c
                        .area text
                ;              i -> 0,X
                ;              j -> 1,X
 0000           _main::
 0000 A7FD              ais #-3
 0002 95                tsx
 0003           ; /*-----------------------------------------------------*
 0003           ; *工 程 名:LEDTest.prj                                  *
 0003           ; *硬件连接:PTA 7-0 分别接LED的数据线 h g f e d c b a    *
 0003           ; *         PTB 3-0 分别接各LED的位选线(自左到右)        *
 0003           ; *程序描述:在4连排数码管上从左至右显示3568              *
 0003           ; *目的:实现数码管的显示                                 *
 0003           ; *说明:SD-HC08实验仪器未提供LED的固定接线,也未提供LED,可*
 0003           ; *   自行购买,在IC扩展区接线,同时注意LCD及键盘的可能影响* 
 0003           ; *-------《嵌入式应用技术基础教程》教学实例------------*/
 0003           ; /*[头文件]*/
 0003           ; #include "GP32C.h"         //MCU头文件
 0003           ; //LED相关接线
 0003           ; #define LEDdata PTA        //LED数据线接口
 0003           ; #define LEDdata_D DDRA     //数据线相应方向寄存器
 0003           ; #define LEDcs PTB          //位选线接口 
 0003           ; #define LEDcs_D DDRB       //位选线相应方向寄存器
 0003           ; //[内部变量定义]
 0003           ; unsigned char  LEDbuf[4],CS; //LED显示缓冲区及位选信号                        
 0003           ; void LEDshow1(unsigned char cs,unsigned char num);
 0003           ; /*[主程序]*/
 0003           ; void main()
 0003           ;   {
 0003           ;     unsigned char i;
 0003           ;     unsigned int j;
 0003           ;     LEDdata_D=0xFF;      //数据口为输出
 0003 A6FF              lda #-1
 0005 B704              sta 0x4
 0007           ;     LEDcs_D=0xFF;        //位选口为输出
 0007 A6FF              lda #-1
 0009 B705              sta 0x5
 000B           ;     //LEDbuf[0-3]中放入要显示的数字
 000B           ;     LEDbuf[0]=3;
 000B A603              lda #3
 000D B701              sta *_LEDbuf
 000F           ;     LEDbuf[1]=5;
 000F A605              lda #5
 0011 B702              sta *_LEDbuf+1
 0013           ;     LEDbuf[2]=6;
 0013 A606              lda #6
 0015 B703              sta *_LEDbuf+2
 0017           ;     LEDbuf[3]=8;
 0017 A608              lda #8
 0019 B704              sta *_LEDbuf+3
 001B           ;     //在4位共阴极LED上显示LEDbuf中的4个数据(只允许0-9)
 001B           ;     CS=0b11110111;       //初始位选信号(共阴极情况)
 001B A6F7              lda #-9
 001D B700              sta *_CS
 001F 204B              bra L6
 0021           L5:
 0021           ;     while(1)
 0021           ;     {
 0021           ;        CS=0b11110111;    //初始位选信号(共阴极情况)
 0021 A6F7              lda #-9
 0023 B700              sta *_CS
 0025           ;        for(i=0;i<=3;i++)
 0025 7F                clr ,X
 0026 203F              bra L11
 0028           L8:
 0028           ;          {
 0028           ;           LEDshow1(CS,LEDbuf[i]);  //显示一个数据
 0028 3F00              clr *__r0
 002A F6                lda ,X
 002B AB01              add #<_LEDbuf
 002D B700              sta *__r1
 002F B600              lda *__r0
 0031 A901              adc #>_LEDbuf
 0033 B700              sta *__r0
 0035 5500              ldhx *__r0
 0037 F6                lda ,x
 0038 87                psha
 0039 B600              lda *_CS
 003B 87                psha
 003C CD0071            jsr _LEDshow1
 003F A702              ais #2
 0041 95                tsx
 0042           ;           CS=(CS>>1);              //变动位选信号
 0042 3400              lsr *_CS
 0044 6F02              clr 2,X
 0046 6F01              clr 1,X
 0048 200C              bra L15
 004A           L12:
 004A           L13:
 004A E602              lda 2,X
 004C AB01              add #1
 004E E702              sta 2,X
 0050 E601              lda 1,X
 0052 A900              adc #0
 0054 E701              sta 1,X
 0056           L15:
 0056 E602              lda 2,X
 0058 B700              sta *__r1
 005A E601              lda 1,X
 005C B700              sta *__r0
 005E 5500              ldhx *__r0
 0060 650005            cphx #5
 0063 95                tsx
 0064 25E4              blo L12
 0066           L9:
 0066 7C                inc ,X
 0067           L11:
 0067 F6                lda ,X
 0068 A103              cmp #3
 006A 23BC              bls L8
 006C           L6:
 006C 20B3              bra L5
 006E           X0:
 006E           L1:
 006E A703              ais #3
 0070                   .dbline 0 ; func end
 0070 81                rts
                        .area lit
 0000           _Table::
 0000 3F06              .byte 63,6
 0002 5B4F              .byte 91,'O
 0004 666D              .byte 'f,'m
 0006 7D07              .byte 125,7
 0008 7F6F              .byte 127,'o
                        .area text
                ;            num -> 3,X
                ;             cs -> 2,X
 0071           _LEDshow1::
 0071 95                tsx
 0072           ;         for(j=0;j<5;j++);          //延时   
 0072           ;          }  
 0072           ;      }
 0072           ;   }
 0072           ; //显示码表
 0072           ; const unsigned char Table[10]={0x3F,0x06,0x5B,0x4F,0x66,\
 0072           ;                0x6D,0x7D,0x07,0x7F,0x6F}; 
 0072           ; /*LEDshow1:在1个LED上显示数字-------------------------*
 0072           ; *功  能:在第cs个LED上显示数字num(本处转码)            *
 0072           ; *参  数:cs(LED信号,决定位选) num(要显示的数字)        *
 0072           ; *返  回:无                                            *
 0072           ; *----------------------------------------------------*/
 0072           ; void LEDshow1(unsigned char cs,unsigned char num)
 0072           ;       {
 0072           ;         LEDcs=cs;              //送位选信号
 0072 E602              lda 2,X
 0074 B701              sta 0x1
 0076           ;         LEDdata=Table[num];    //取显示码并送到LED数据线
 0076 3F00              clr *__r0
 0078 E603              lda 3,X
 007A AB00              add #<_Table
 007C B700              sta *__r1
 007E B600              lda *__r0
 0080 A900              adc #>_Table
 0082 B700              sta *__r0
 0084 5500              ldhx *__r0
 0086 F6                lda ,x
 0087 95                tsx
 0088 B700              sta 0
 008A           L16:
 008A                   .dbline 0 ; func end
 008A 81                rts
                        .area bss
 0000           _CS::
 0000                   .blkb 1
 0001           _LEDbuf::
 0001                   .blkb 4

⌨️ 快捷键说明

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