一、HAL库进行设置,将中断打开,使用tim6中断,在中断中完成对数码管的滚动显示
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(TIM6 == htim->Instance)
{
HAL_GPIO_WritePin (GPIOE,0XFF,GPIO_PIN_SET);
HAL_GPIO_WritePin (GPIOE,num,GPIO_PIN_RESET);
num=num<<1;
if(num==0x100)
{
num=0x01;
}
}
}
二、滚动数码管的实现依赖于for循环的实现
for(int i=0;i<8;i++)
{
HAL_Delay (1);
}
三、数码管的显示,每个数码管都有七段数显。
1.先将数码管的显示全部清空
2.在送进段码,也就是你要将在数码管上显示的数字
3.送完段码需要将位码送进,位码则是你需要数字显示的位置
//0.清除数码管所有显示
HAL_GPIO_WritePin (GPIOA,0xFF,GPIO_PIN_SET);
//1.送段码
HAL_GPIO_WritePin (GPIOA,~LED_Val[LED[i]],GPIO_PIN_RESET );
//2.送位码
switch(i) //即用PB也用PC所以可用switch
{
case 0:
HAL_GPIO_WritePin (GPIOC,GPIO_PIN_9,GPIO_PIN_RESET );
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_10,GPIO_PIN_SET );
break;
case 1:
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_10,GPIO_PIN_RESET );
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_11,GPIO_PIN_SET );
break;
case 2:
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_11,GPIO_PIN_RESET );
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_12,GPIO_PIN_SET );
break;
case 3:
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_12,GPIO_PIN_RESET );
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_13,GPIO_PIN_SET );
break;
case 4:
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_13,GPIO_PIN_RESET );
HAL_GPIO_WritePin (GPIOC,GPIO_PIN_6,GPIO_PIN_SET );
break;
case 5:
HAL_GPIO_WritePin (GPIOC,GPIO_PIN_6,GPIO_PIN_RESET );
HAL_GPIO_WritePin (GPIOC,GPIO_PIN_7,GPIO_PIN_SET );
break;
case 6:
HAL_GPIO_WritePin (GPIOC,GPIO_PIN_7,GPIO_PIN_RESET );
HAL_GPIO_WritePin (GPIOC,GPIO_PIN_8,GPIO_PIN_SET );
break;
case 7:
HAL_GPIO_WritePin (GPIOC,GPIO_PIN_8,GPIO_PIN_RESET );
HAL_GPIO_WritePin (GPIOC,GPIO_PIN_9,GPIO_PIN_SET );
break;
}
四、定义两个数组分别为数码管的段码数组和用于显示移位的数组
uint8_t LED_Val[]= {0xC0,/*0*/0xF9,/*1*/0xA4,/*2*/0xB0,/*3*/0x99,/*4*/0x92,/*5*/0x82,/*6*/0xF8,/*7*/};
uint16_t LED[]={0,1,2,3,4,5,6,7};
五、使用stm32的io口都要进行初始化
七段数码管的显示滚动显示-嵌入式文档类资源-CSDN文库https://download.csdn.net/download/ming_chen_jing/86249296