main.s
来自「要用到开发工具SD-H08」· S 代码 · 共 167 行
S
167 行
.module main.c
.area text
; i -> 0,X
; j -> 1,X
_main::
ais #-3
tsx
; /*-----------------------------------------------------*
; *工 程 名:LEDTest.prj *
; *硬件连接:PTA 7-0 分别接LED的数据线 h g f e d c b a *
; * PTB 3-0 分别接各LED的位选线(自左到右) *
; *程序描述:在4连排数码管上从左至右显示3568 *
; *目的:实现数码管的显示 *
; *说明:SD-HC08实验仪器未提供LED的固定接线,也未提供LED,可*
; * 自行购买,在IC扩展区接线,同时注意LCD及键盘的可能影响*
; *-------《嵌入式应用技术基础教程》教学实例------------*/
; /*[头文件]*/
; #include "GP32C.h" //MCU头文件
; //LED相关接线
; #define LEDdata PTA //LED数据线接口
; #define LEDdata_D DDRA //数据线相应方向寄存器
; #define LEDcs PTB //位选线接口
; #define LEDcs_D DDRB //位选线相应方向寄存器
; //[内部变量定义]
; unsigned char LEDbuf[4],CS; //LED显示缓冲区及位选信号
; void LEDshow1(unsigned char cs,unsigned char num);
; /*[主程序]*/
; void main()
; {
; unsigned char i;
; unsigned int j;
; LEDdata_D=0xFF; //数据口为输出
lda #-1
sta 0x4
; LEDcs_D=0xFF; //位选口为输出
lda #-1
sta 0x5
; //LEDbuf[0-3]中放入要显示的数字
; LEDbuf[0]=3;
lda #3
sta *_LEDbuf
; LEDbuf[1]=5;
lda #5
sta *_LEDbuf+1
; LEDbuf[2]=6;
lda #6
sta *_LEDbuf+2
; LEDbuf[3]=8;
lda #8
sta *_LEDbuf+3
; //在4位共阴极LED上显示LEDbuf中的4个数据(只允许0-9)
; CS=0b11110111; //初始位选信号(共阴极情况)
lda #-9
sta *_CS
bra L6
L5:
; while(1)
; {
; CS=0b11110111; //初始位选信号(共阴极情况)
lda #-9
sta *_CS
; for(i=0;i<=3;i++)
clr ,X
bra L11
L8:
; {
; LEDshow1(CS,LEDbuf[i]); //显示一个数据
clr *__r0
lda ,X
add #<_LEDbuf
sta *__r1
lda *__r0
adc #>_LEDbuf
sta *__r0
ldhx *__r0
lda ,x
psha
lda *_CS
psha
jsr _LEDshow1
ais #2
tsx
; CS=(CS>>1); //变动位选信号
lsr *_CS
clr 2,X
clr 1,X
bra L15
L12:
L13:
lda 2,X
add #1
sta 2,X
lda 1,X
adc #0
sta 1,X
L15:
lda 2,X
sta *__r1
lda 1,X
sta *__r0
ldhx *__r0
cphx #5
tsx
blo L12
L9:
inc ,X
L11:
lda ,X
cmp #3
bls L8
L6:
bra L5
X0:
L1:
ais #3
.dbline 0 ; func end
rts
.area lit
_Table::
.byte 63,6
.byte 91,'O
.byte 'f,'m
.byte 125,7
.byte 127,'o
.area text
; num -> 3,X
; cs -> 2,X
_LEDshow1::
tsx
; for(j=0;j<5;j++); //延时
; }
; }
; }
; //显示码表
; const unsigned char Table[10]={0x3F,0x06,0x5B,0x4F,0x66,\
; 0x6D,0x7D,0x07,0x7F,0x6F};
; /*LEDshow1:在1个LED上显示数字-------------------------*
; *功 能:在第cs个LED上显示数字num(本处转码) *
; *参 数:cs(LED信号,决定位选) num(要显示的数字) *
; *返 回:无 *
; *----------------------------------------------------*/
; void LEDshow1(unsigned char cs,unsigned char num)
; {
; LEDcs=cs; //送位选信号
lda 2,X
sta 0x1
; LEDdata=Table[num]; //取显示码并送到LED数据线
clr *__r0
lda 3,X
add #<_Table
sta *__r1
lda *__r0
adc #>_Table
sta *__r0
ldhx *__r0
lda ,x
tsx
sta 0
L16:
.dbline 0 ; func end
rts
.area bss
_CS::
.blkb 1
_LEDbuf::
.blkb 4
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?