共阳就是共正极,也就是正极全部接在一起。
共阴就是共负极,也就是负极全部接在一起。
我目前使用这款PZ6806L,使用了一个共阳数码管。
共阴与共阳在码表上其实就是正好取反就可以了,所以可以共用一个码表。
数码管显示程序主要分为 2 大块:
(1)使能数码管端口时钟、初始化GPIO。
(2)主函数控制(将数值段码发送到对应端口上)。
main.c
#include "system.h"
#include "led.h"
#include "SysTick.h"
#include "beep.h"
#include "DigitalTube.h"
/*0-F的共阴码表,共16个字符*/
u8 DigitalSegment [16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, //0,1,2,3,4,5
0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, //6,7,8,9,A.B
0x39, 0x5e, 0x79, 0x71 }; //C,D,E,F,
int main()
{
u8 i;
SysTick_Init(72);
// LED_Init();
// BEEP_Init();
DigitalTube_Init();
while(1)
{
for(i=0; i<16;i++)
{
GPIO_Write(DigitalTube_PORT,(u16)~(DigitalSegment [i]));//u16是为配合形参要求强制转换;取反是将共阴码表转成共阳
delay_ms(1000);
delay_ms(1000);
}
}
}
DigitalTube.h
#ifndef _DigitalTube_H
#define _DigitalTube_H
#include "system.h"
#define DigitalTube_PORT_RCC RCC_APB2Periph_GPIOC
#define DigitalTube_PIN (GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7)
#define DigitalTube_PORT GPIOC
void DigitalTube_Init(void);
#endif
DigitalTube.c
#include "DigitalTube.h"
void DigitalTube_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(DigitalTube_PORT_RCC,ENABLE);
GPIO_InitStructure.GPIO_Pin=DigitalTube_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(DigitalTube_PORT,&GPIO_InitStructure);
}
实验成功!