资源描述
(1) LED编程汇编语言例
实例编号:A08 路径:\ASM\A08_数码管LED (LEDMain.asm)
*------------------------------------------------------*
*文 件 名:LEDMain.asm *
*硬件连接: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 "GP32ASM.H" ;包含GP32的头文件
*[两个起始地址名]
RAMstartAddr equ $0040 ;RAM的起始地址
FlashStartAddr equ $8000 ;程序开始地址
*[LED相关信号口]
LEDdata equ PTA ;LED数据线接口
LEDdata_D equ DDRA ;数据线相应方向寄存器
LEDcs equ PTB ;位选线接口
LEDcs_D equ DDRB ;位选线相应方向寄存器
*[内存变量]
org RAMstartAddr ;RAM的起始地址
CS rmb 1 ;位选信号
LEDbuf rmb 4 ;LED显示缓冲区
I1 rmb 1 ;临时变量
I2 rmb 1 ;临时变量
*======================================================
*[主程序]
org FlashStartAddr ;程序起始地址
start: ;复位后程序从此开始执行
;[堆栈初始化]
SEI
LDHX #$023F
TXS
JSR GP32Init ;调系统初始化子程序GP32Init
;[LED口初始化]
LDA #%11111111
STA LEDdata_D ;数据口为输出到LED
STA LEDcs_D ;位选口为输出到LED
MainLoop:
;LEDbuf[0-3]中放入要显示的数字
MOV #!3,LEDbuf
MOV #!5,{LEDbuf+1}
MOV #!6,{LEDbuf+2}
MOV #!8,{LEDbuf+3}
;在4位共阴极LED上显示LEDbuf中的4个数据(只允许0-9)
MOV #%11110111,I1 ;初始位选信号(共阴极情况)
MOV #!4,I2 ;显示个数
LDHX #LEDBuf
LEDShow:
PSHH ;保护数据地址
PSHX
LDX ,X ;数据
LDA I1 ;位选信号
JSR LEDshow1 ;显示一个数据
LDA I1 ;变动位选信号
SEC
RORA
STA I1
;延时
LDHX #!10
JSR Delay_ms
PULX ;恢复数据地址
PULH
AIX #!1 ;指向下一个数据
DBNZ I2,LEDShow
JMP MainLoop
*LEDshow1:在1个LED上显示数字---------------------------*
*功 能:在第A个LED上显示数字X(本处转码) *
*入 口:A(LED信号,决定位选) X(要显示的数字) *
*出 口:无 *
*------------------------------------------------------*
LEDshow1:
PSHH ;保护HX
CLRH
STA LEDcs ;送位选信号
LDA Table,X ;取显示码
STA LEDdata ;送到LED数据线
PULH ;恢复H
RTS
*[显示码表] 0 1 2 3 4 5 6 7 8 9
Table: FCB $3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F
*[外部子程序存放处,这些子程序都在当前目录中]
$INCLUDE "GP32init.asm"
$INCLUDE "Delay.asm"
*[中断向量]
ORG $FFFE
DW start ;复位向量
(2) LED编程C语言例
实例编号:C08 路径:\C\C08_数码管LED (LEDTest.prj)
/*-----------------------------------------------------*
*工 程 名:LEDTest.prj *
*硬件连接:PTA 7-0 分别接LED的数据线 h g f e d c b a *
* PTB 3-0 分别接各LED的位选线(自左到右) *
*程序描述:在4连排数码管上从左至右显示1234 *
*目的:实现数码管的显示 *
*说明: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; //数据口为输出
LEDcs_D=0xFF; //位选口为输出
//LEDbuf[0-3]中放入要显示的数字
LEDbuf[0]=3;
LEDbuf[1]=5;
LEDbuf[2]=6;
LEDbuf[3]=8;
//在4位共阴极LED上显示LEDbuf中的4个数据(只允许0-9)
CS=0b11110111; //初始位选信号(共阴极情况)
while(1)
{
for(i=0;i<=3;i++)
{
LEDshow1(CS,LEDbuf[i]); //显示一个数据
CS=CS>>1; //变动位选信号
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; //送位选信号
LEDdata=Table[num]; //取显示码并送到LED数据线
}
展开阅读全文