本教程详细介绍了如何使用MSP430微控制器进行数码管的动态显示编程,包括硬件连接和软件实现技巧。适合电子爱好者和技术初学者学习实践。
MSP430数码管动态显示程序
// 数码管显示 1234 日期:2011年7月21日
#include
/**************************** 定义引脚功能 **************************
P4.0----data
P5.0----data_qian (千位)
P5.1----data_bai (百位)
P5.2----data_shi (十位)
P5.3----data_ge (个位)
*********************************/
#define DATADIR P4DIR // 方向控制寄存器
#define DATAOUT P4OUT // 输出控制寄存器
#define WEIDIR P5DIR // 方向控制寄存器
#define WEIOUT P5OUT // 输出控制寄存器
typedef unsigned char uchar;
typedef unsigned int uint;
uchar segment[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x67};
uint data=6789; // 要显示的变量
void delay() {
unsigned char m,n;
for(m = 0;m < 30;m++) {
for(n = 0;n < 20;n++);
}
}
void display(uint num) {
WEIOUT=0xFE; // 控制千位显示
DATAOUT=segment[num/1000];
delay();
DATAOUT=0;
WEIOUT=0xff;
WEIOUT = 0xFD; // 百位控制
DATAOUT = segment[(num % 1000) / 100];
delay();
DATAOUT = 0;
WEIOUT = 0xff;
WEIOUT=0xFB; // 控制十位显示
DATAOUT=segment[(num%100)/10];
delay();
DATAOUT=0;
WEIOUT=0xff;
WEIOUT = 0xF7; //控制个位显示
DATAOUT = segment[num % 10];
delay();
DATAOUT = 0;
WEIOUT = 0xff;
}
void main(void) {
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
WEIDIR=0XFF;
WEIOUT=0X00;
DATADIR=0xFF;
DATAOUT=0x00;
while(1) {
display(data);
}
}