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 + -
显示快捷键?