先明白数码管的编码方式:LED数码管与单片机相连,一般将数码管的个笔端引脚a,b...,g,dp按照某一顺序接到单片机对应配置的一个并行I/O口上,当配置I/O口一定的数值时候,就可以使LED数码管显示固定的字符。
按照公共端链接方式分为共阴极和共阳极,以下为共阴和共阳分别八段编码管:
数码管显示方式有静态显示和动态扫描,我们采用动态扫描,即把每一个数码管的a,b...连接在一起,一共八段,由一个八位I/O口进行控制,而每一位的公共端由宁外一个I/O口进行控制。
则就有控制数码管的位选码啦~
位选码的配置需要根据电路原理图进行配置~
数码管驱动函数
1.数码管显示初始化
void smgInit()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOG, ENABLE);//使能GPIOF时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_12|GPIO_Pin_11|GPIO_Pin_10|GPIO_Pin_8|GPIO_Pin_9;//对应在stm32f103zet6开发板中,PE口的第八位另有其他作用,比如设置外部中断,所以不打开所有的I/O口
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //速度50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //速度50MHz
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //速度50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //速度50MHz
GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化}
2.数码管显示函数
void smgShow()
{
while(1)
{
GPIO_Write(GPIOE,0x7FFF);//选中第一个数码管
GPIO_Write(GPIOC,0xc0);//送第一个数字的段码
delay_ms(1000);//延时一段时间
GPIO_Write(GPIOE,0xBFFF);//选中第2个数码管
GPIO_Write(GPIOC,0xf9);//送第2个数字的段码
delay_ms(1000);//延时一段时间
GPIO_Write(GPIOE,0xDFFF);//选中第3个数码管
GPIO_Write(GPIOC,0xa4);//送第3个数字的段码
delay_ms(1000);//延时一段时间
GPIO_Write(GPIOE,0xEFFF);//选中第4个数码管
GPIO_Write(GPIOC,0xb0);//送第4个数字的段码
delay_ms(1000);//延时一段时间
GPIO_Write(GPIOE,0xF7FF);//选中第5个数码管
GPIO_Write(GPIOC,0x99);//送第5个数字的段码
delay_ms(1000);//延时一段时间
GPIO_Write(GPIOE,0xFBFF);//选中第6个数码管
GPIO_Write(GPIOC,0x92);//送第6个数字的段码
delay_ms(1000);//延时一段时间
}
}
在数码管文件中定义
extern u8 hour,minute,second;//全局变量
u8 smgduan[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x82,0xf8,0x80,0x90};
u16 smgwei[6]={0x7fff,0xbfff,0xdfff,0xefff,0xf7ff,0xfbff};
在数码管显示函数中我们可以推出
显示时间的函数(考虑到时间情况有两位数,则我们可以采用取余的方法进行分离)
GPIO_Write(GPIOE,smgwei[0]);//选中第1个数码管
GPIO_Write(GPIOC,smgduan[hour/10]);//送第5个数字的段码
delay_ms(1000);//延时一段时间GPIO_Write(GPIOE,smgwei[1]);//选中第2个数码管
GPIO_Write(GPIOC,smgduan[hour%10]);//送第5个数字的段码
delay_ms(1000);//延时一段时间
z这样就可以显示小时对应的数字,同理分和秒。