/*真值表对应的是2位八段共阴 数码管
本程序是从PB3-PB9
如果只是IO口不同可以通过左右移解决
*/
uint32_t NTTruth[] = //数码管真值表0_F
{
0x3f0, 0x180, 0x368, 0x3c8,
0x198, 0x2d8, 0x2f8, 0x380,
0x3f8, 0x3d8,
};
uint8_t NTrefresh = 0 ; //数码管动态扫描变量
uint16_t Time1ms = 0 ; //定时器1毫秒中段定时变量,
uint16_t Time1s = 0 ; //1秒计时变量,用于显示
/*
可以在任何地方添加定时器回调函数
*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim == &htim1)
{
Time1ms++;
if(Time1ms>1000)
{
Time1ms = 0 ;
Time1s++;
}
/*清除所有段选和位选*/
HAL_GPIO_WritePin(GPIOB, NTTruth[8], GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);
NTrefresh = (NTrefresh + 1)%2 ;
switch(NTrefresh)
{
case 0 :
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6, GPIO_PIN_RESET); //使能相应的位信号
HAL_GPIO_WritePin(GPIOB, NTTruth[Time1s/10%10], GPIO_PIN_SET); //使能相应的段信号
break ;
case 1 :
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, NTTruth[Time1s%10], GPIO_PIN_SET);
break ;
default :
break ;
}
}
}
基于32单片机的数码管驱动程序
最新推荐文章于 2025-03-23 10:57:38 发布