📄 数码管动态扫描显示.c
字号:
//
// 显示器整个同时改变
//
//******************************************/
#include <msp430x44x.h>
#define LED_IN_USE 6
/*****************************************************/
/* 数据定义 */
/*****************************************************/
const unsigned char NUM_LED[]=
{
0xd7,0x14,0xcd,0x5d,0x1E, // 0 ~ 4
0x5b,0xdb,0x15,0xdf,0x5f, // 5 ~ 9
0x9f,0xda,0xc3,0xdc,0xcb, // a ~ e
0x8b,0x00,0x40,0x8,
0xf7,0x34,0xed,0x7d,0x3E, // 0 ~ 4
0x7b,0xfb,0x35,0xff,0x7f, // 5 ~ 9
0xbf,0xfa,0xe3,0xfc,0xcb, // a ~ e
0x8b,0x00,0x40,0x8,
}; //f,0x00使LED不显示
unsigned char led_Buf[LED_IN_USE]; // LED显示缓冲区 ,
// 存放要显示数据
void delay(unsigned long v)
{
while(v!=0)v--;
}
/*******************************************************
* 模块初始化
*******************************************************/
void init_LED(void){
char tmpv;
P3DIR = 0xff; // 设置 p3 输出
P3OUT = 0x00; // 设置 初始值为0
P4DIR |= 0x03; // 设置 p4.0,p4.1 输出
P4OUT &= 0xfc; // 设置初始值
for(tmpv=0;tmpv<LED_IN_USE;tmpv++)
{ // 初始化缓冲区
led_Buf[tmpv] = 0x13;
}
}
/****************************************************
* LED 显示 ,该函数可以放到定时器中断中
****************************************************/
void led_Display(){
unsigned tmp ,i ;
tmp = 0x01;
for(i=0;i<6;i++)
{
P3OUT = NUM_LED[led_Buf[i]]; // 设置显示值
P4OUT |= 0x02; // 打开数据锁存器
P4OUT &= 0XFD; // 关闭数据锁存
P3OUT = ~(tmp<<i); // 设置那只LED显示
P4OUT |= 0x01; // 打开控制锁存
P4OUT &= 0XFE; // 关闭控制锁存
delay(300);
}
}
/******************************************/
void main(void)
{
char i=1,j;
unsigned tmpv ;
WDTCTL = WDTHOLD + WDTPW; //关闭看门狗
init_LED();
while(1)
{ //循环
for(tmpv=0;tmpv<LED_IN_USE;tmpv++)
led_Buf[tmpv] = i;
i++;
if(i==40)
i=0;
for(j=0;j<100;j++)
led_Display();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -