一、任务要求
使用MSP430F247单片机实现单个8段共阳极LED数码管的显示,依次循环显示0~15的十六进制数,即依次显示“0~F”。
二、分析说明
可设置P4端口的8个引脚分别控制共阳极数码管的8段,当I/O端口输出高电平“1”或低电平“0”时,数码管对应的那一段的LED熄灭或点亮。
三、硬件电路说明
P4.1端口接共阳极数码管的a段,P4.2引脚接数码管的b段,以此类推
四、程序设计
#include "msp430f247.h"
#include "stdlib.h"
#include "string.h"
/*****************************************软件延时,主频1M*******************/
#define CPU_F1 ((double)1000000)
#define delay_us1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000000.0))
#define delay_ms1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000.0))
/****************************************************************************/
unsigned char const Led_Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
/************************************************
函数名称:主函数
函数功能:共阳极数码管显示
入口参数:无
出口参数:无
************************************************/
main()
{
unsigned char ucCounter=0;
_DINT(); //关中断
WDTCTL = WDTPW + WDTHOLD;//关看门狗
P4DIR=0xff;
P4OUT=0xff;
delay_ms1M(500);
while(1)
{
for(ucCounter=0;ucCounter<16;ucCounter++)
{
P4OUT = Led_Tab[ucCounter];
delay_ms1M(500);
}
}
}
五、程序说明
程序中,由于数字字型的编码没没有规律,可以使用数组存储这些预先定义的常数,程序中数组Led_Tab[]内有16个元素,为显示字型“0~F”的段码。当时用程序语句P4OUT = Led_Tab[ucCounter];时,即可将数组中的对应元素直接赋给P4端口。
使用关键字const定义数组,这样可以把它定义在单片机的内部FLASH中,从而节省RAM存储器。
|