1、(1) LED编程汇编语言例 实例编号:A08 路径:ASMA08_数码管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 ;包含GP3
2、2的头文件*两个起始地址名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 Flas
3、hStartAddr ;程序起始地址start: ;复位后程序从此开始执行 ;堆栈初始化 SEI LDHX #$023F TXS JSR GP32Init ;调系统初始化子程序GP32Init ;LED口初始化 LDA #%11111111 STA LEDdata_D ;数据口为输出到LED STA LEDcs_D ;位选口为输出到LEDMainLoop: ;LEDbuf0-3中放入要显示的数字 MOV #!3,LEDbuf MOV #!5,LEDbuf+1 MOV #!6,LEDbuf+2 MOV #!8,LEDbuf+3 ;在4位共阴极LED上显示LEDbuf中的4个数据(只允许0-9)
4、MOV #%11110111,I1 ;初始位选信号(共阴极情况) MOV #!4,I2 ;显示个数 LDHX #LEDBufLEDShow: 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(本处转码
5、) *入 口: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 star
6、t ;复位向量(2) LED编程C语言例 实例编号:C08 路径:CC08_数码管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 /
7、MCU头文件/LED相关接线#define LEDdata PTA /LED数据线接口#define LEDdata_D DDRA /数据线相应方向寄存器#define LEDcs PTB /位选线接口 #define LEDcs_D DDRB /位选线相应方向寄存器/内部变量定义unsigned char LEDbuf4,CS; /LED显示缓冲区及位选信号 void LEDshow1(unsigned char cs,unsigned char num);/*主程序*/void main() unsigned char i; unsigned int j; LEDdata_D=0xFF;
8、/数据口为输出 LEDcs_D=0xFF; /位选口为输出 /LEDbuf0-3中放入要显示的数字 LEDbuf0=3; LEDbuf1=5; LEDbuf2=6; LEDbuf3=8; /在4位共阴极LED上显示LEDbuf中的4个数据(只允许0-9) CS=0b11110111; /初始位选信号(共阴极情况) while(1) for(i=0;i1; /变动位选信号 for(j=0;j5;j+); /延时 /显示码表const unsigned char Table10=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=Tablenum; /取显示码并送到LED数据线