本帖最后由 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__
|