数码管控制原理位控制
用GPIO_Write函数位操作都是从每个大类(A.B.C.D)中从零号引脚开始从低位向高位操作进行选位时要注意
#define NUM_STATIC_GPIO 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 NUM_STATIC_BIT GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7
//段选位
u8 table13[10]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//不用小数点0-8
u8 table2[10]={0x40,0x4f,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//使用小数点0-8
u8 weima[8]={0x20,0x40,0x80};//位选码
void SMG_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//段码设置
GPIO_InitStructure.GPIO_Pin=NUM_STATIC_GPIO;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);//GPIOA初始化
//位码设置
GPIO_InitStructure.GPIO_Pin=NUM_STATIC_BIT;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);//GPIOB初始化
}
void SMG_Sdf(float high)
{
int i,p,j,k,hih,hij,y;
float hig,hip;
SMG_Init();
hig=high/10;
hih=(int)high;
hip=high*10;
hij=(int)hip;
j=hij%100;
k=j%10;//小数位
p=hih%10;//个位
i=(int)hig;//十位
for(y=0;y<3;y++)
{
if(y==0)
{
GPIO_Write(GPIOB,weima[y]);
GPIO_Write(GPIOA,table13[i]);
delay_ms(10);
}
if(y==1)
{
GPIO_Write(GPIOB,weima[y]);
GPIO_Write(GPIOA,table2[p]);
delay_ms(10);
}
if(y==2)
{
GPIO_Write(GPIOB,weima[y]);
GPIO_Write(GPIOA,table13[k]);
delay_ms(15);
}
}
GPIO_Write(GPIOB,0x00);
GPIO_Write(GPIOA,0x00);
}
以上代码是有关配置,本来想写在自定义的smg.c文件里的,但在调用时出了错,索性就直接放在main.c里了