📄 main.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 + -