本帖最后由 dong_abc 于 2011-10-23 19:05 编辑
M0驱动4位数码管,PA是段码,PB是位选。
led.c文件#include "led.h"
//数码显示缓冲区
uint32_t Seg7DataBuf[4];
//数码位数
volatile uint32_t led_num;
//待显示的字符集
uint32_t Seg7Code[]={
0xc0, //0
0xf9, //1
0xa4, //2
0xb0, //3
0x99, //4
0x92, //5
0x82, //6
0xf8, //7
0x80, //8
0x90, //9
0xff //所有段都不显示
};
//-------------------------------------------------------------------
//函数功能:系统主函数。
//入口参数:无。
//返 回:无。
//备 注:无。
//-------------------------------------------------------------------
void Seg7_Init(void)
{
GPIOA->MD.PMD0 = 1 ;
GPIOA->MD.PMD1 = 1 ;
GPIOA->MD.PMD2 = 1 ;
GPIOA->MD.PMD3 = 1 ;
GPIOA->MD.PMD4 = 1 ;
GPIOA->MD.PMD5 = 1 ;
GPIOA->MD.PMD6 = 1 ;
GPIOA->MD.PMD7 = 1 ;
GPIOB->MD.PMD0 = 1 ;
GPIOB->MD.PMD1 = 1 ;
GPIOB->MD.PMD2 = 1 ;
GPIOB->MD.PMD3 = 1 ;
Seg7DataBuf[0]=0;
Seg7DataBuf[1]=1;
Seg7DataBuf[2]=2;
Seg7DataBuf[3]=3;
}
//-------------------------------------------------------------------
//函数功能:系统主函数。
//入口参数:无。
//返 回:无。
//备 注:无。
//-------------------------------------------------------------------
void Seg7_Fresh(void)
{
GPIOB->DOUT|=0x000f;
switch(++led_num)
{
case 1:
GPIOB->DOUT&=0xfffe;
GPIOA->DOUT=Seg7Code[Seg7DataBuf[0]];
break;
case 2:
GPIOB->DOUT&=0xfffd;
GPIOA->DOUT=Seg7Code[Seg7DataBuf[1]];
break;
case 3:
GPIOB->DOUT&=0xfffb;
GPIOA->DOUT=Seg7Code[Seg7DataBuf[2]];
break;
case 4:
GPIOB->DOUT&=0xfff7;
GPIOA->DOUT=Seg7Code[Seg7DataBuf[3]];
break;
default :
led_num=0;
break;
}
}
//-------------------------------------------------------------------
//函数功能:系统主函数。
//入口参数:无。
//返 回:无。
//备 注:无。
//-------------------------------------------------------------------
void Seg7_UpdateBuf(void)
{
}
led.h文件#include "main.h"
#ifndef __NUC1xxLed_H__
#define __NUC1xxLed_H__
void Seg7_Init(void);
void Seg7_Fresh(void);
void Seg7_UpdateBuf(void);
#endif //__NUC1xxLed_H__
led.rar
(856 Bytes)
|