1、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
2、 * *目的:实现数码管的显示 * *说明:SD-HC08实验仪器未提供LED的固定接线,也未提供LED,可 * * 自行购买,在IC扩展区接线,同时注意LCD及键盘的可能影响 * *-------《嵌入式应用技术基础教程》教学实例-------------* *[头文件] $include "GP32ASM.H" ;包含GP32的头文件 *[两个起始地址名] RAMstartAddr equ $0040 ;RAM的起始地址 FlashStartAddr
3、 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显
4、示缓冲区 I1 rmb 1 ;临时变量 I2 rmb 1 ;临时变量 *====================================================== *[主程序] org FlashStartAddr ;程序起始地址 start: ;复位后程序从此开始执行 ;[堆栈初始化] SEI LDHX #$023F TXS JSR GP32Init
5、 ;调系统初始化子程序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中
6、的4个数据(只允许0-9) MOV #%11110111,I1 ;初始位选信号(共阴极情况) MOV #!4,I2 ;显示个数 LDHX #LEDBuf LEDShow: PSHH ;保护数据地址 PSHX LDX ,X ;数据 LDA I1 ;位选信号 JSR LEDshow1 ;显示一个数据 LDA I1
7、 ;变动位选信号 SEC RORA STA I1 ;延时 LDHX #!10 JSR Delay_ms PULX ;恢复数据地址 PULH AIX #!1 ;指向下一个数据 DBNZ I2,LEDShow JMP MainLoop *LEDshow1:在1个LED上显示数字---------------------------* *功 能:在第A个LED上显示数字
8、X(本处转码) * *入 口:A(LED信号,决定位选) X(要显示的数字) * *出 口:无 * *------------------------------------------------------* LEDshow1: PSHH ;保护HX CLRH STA LEDcs ;送位选信号 LDA Ta
9、ble,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" *[中断向量]
10、 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的位选线(自左
11、到右) * *程序描述:在4连排数码管上从左至右显示1234 * *目的:实现数码管的显示 * *说明:SD-HC08实验仪器未提供LED的固定接线,也未提供LED,可* * 自行购买,在IC扩展区接线,同时注意LCD及键盘的可能影响* *-------《嵌入式应用技术基础教程》教学实例------------*/ /*[头文件]*/ #include "GP32C.h" //MCU头文件 //LED相关接线 #define LEDdata PTA
12、 //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() {
13、 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; //初始位选信号(共阴极情况)
14、 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,\
15、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数据线 }






