初级会员

- 积分
- 81
- 金钱
- 81
- 注册时间
- 2017-7-17
- 在线时间
- 22 小时
|
1金钱
本帖最后由 济颠进京 于 2021-8-10 10:38 编辑
各位大神,本人写了个动态数码管(2位)显示的小程序,显示01~99数字(数码管共阳极),硬件上用PC0~7作为段码控制口,PC8 /9用作位码控制,在定时器中断中来回切个位和十位的显示但是用STLink调试的时候,出现了PC0~7写入不成功的问题,数码管一直显示10,本人确保 段码 编码没问题,说下本人的疑惑,在进入中断后,应该改写段码了,但是段码变量temp低8位就是不变,个人觉得可能是STM32的读写语句写的不对,但不知道应该怎么改.
- #define DISPLAY_GPIO_PORT GPIOC /* 数码管显示GPIO端口 */
- #define DISPLAY_GPIO_CLK RCC_APB2Periph_GPIOC /* 数码管显示GPIO端口时钟 */
- #define DISPLAY_GPIO_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|\
- GPIO_Pin_8|GPIO_Pin_9 /* 数码管显示GPIO端口时钟 */
- #define DISPLAY_UNIT_Ctrl PCout(8)
- #define DISPLAY_DECADE_Ctrl PCout(9)
- #define POWER_ON 0
- #define SHUT_DOWN 1
复制代码- //定时器3中断服务程序
- void TIM3_IRQHandler(void) //TIM3中断
- {
- u16 i,fyHz,temp=0;
- if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
- {
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志
- fyHz=1000/period;
- if(1<=fyHz&&fyHz<100) //就是显示fyHz这个数字01~99
- {
- if(Right_Flag==1) //显示十位
- {
- i=fyHz/10;
- DISPLAY_UNIT_Ctrl=SHUT_DOWN;
- DISPLAY_DECADE_Ctrl=POWER_ON;
- temp=GPIO_ReadOutputData(DISPLAY_GPIO_PORT);
- temp&=0xFF00;
- temp|=display_code[i];
- GPIO_Write(DISPLAY_GPIO_PORT,temp);
- Right_Flag=0;
- }
-
复制代码
|
|