OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4774|回复: 3

动态数码管显示,但是GPIO写入段码不成功

[复制链接]

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2017-7-17
在线时间
22 小时
发表于 2021-8-10 09:51:57 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 济颠进京 于 2021-8-10 10:38 编辑

各位大神,本人写了个动态数码管(2位)显示的小程序,显示01~99数字(数码管共阳极),硬件上用PC0~7作为段码控制口,PC8 /9用作位码控制,在定时器中断中来回切个位和十位的显示但是用STLink调试的时候,出现了PC0~7写入不成功的问题,数码管一直显示10,本人确保 段码 编码没问题,说下本人的疑惑,在进入中断后,应该改写段码了,但是段码变量temp低8位就是不变,个人觉得可能是STM32的读写语句写的不对,但不知道应该怎么改.
  1. #define DISPLAY_GPIO_PORT          GPIOC                /* 数码管显示GPIO端口 */
  2. #define DISPLAY_GPIO_CLK            RCC_APB2Periph_GPIOC              /* 数码管显示GPIO端口时钟 */
  3. #define DISPLAY_GPIO_PIN            GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|\
  4.                                                     GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|\
  5.                                                     GPIO_Pin_8|GPIO_Pin_9                                          /* 数码管显示GPIO端口时钟 */

  6. #define DISPLAY_UNIT_Ctrl             PCout(8)
  7. #define DISPLAY_DECADE_Ctrl        PCout(9)  

  8. #define POWER_ON                    0
  9. #define SHUT_DOWN                  1
复制代码
  1. //定时器3中断服务程序
  2. void TIM3_IRQHandler(void)   //TIM3中断
  3. {
  4.         u16 i,fyHz,temp=0;        
  5.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
  6.                  {
  7.                        TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志                                
  8.                        fyHz=1000/period;
  9.                        if(1<=fyHz&&fyHz<100)           //就是显示fyHz这个数字01~99
  10.                         {
  11.                           if(Right_Flag==1)     //显示十位
  12.                           {
  13.                                  i=fyHz/10;
  14.                                  DISPLAY_UNIT_Ctrl=SHUT_DOWN;
  15.                                  DISPLAY_DECADE_Ctrl=POWER_ON;
  16.                                  temp=GPIO_ReadOutputData(DISPLAY_GPIO_PORT);
  17.                                  temp&=0xFF00;
  18.                                  temp|=display_code[i];               
  19.                                  GPIO_Write(DISPLAY_GPIO_PORT,temp);                        
  20.                                  Right_Flag=0;
  21.                            }
  22.                      
复制代码
                        
  1.                       else                                
复制代码





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

912

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4509
金钱
4509
注册时间
2019-9-4
在线时间
914 小时
发表于 2021-8-10 09:58:46 | 显示全部楼层
回复

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2021-8-10 10:08:25 | 显示全部楼层
没用过数码管,帮顶
回复

使用道具 举报

11

主题

2147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4894
金钱
4894
注册时间
2015-1-10
在线时间
612 小时
发表于 2021-8-10 11:12:46 | 显示全部楼层
段码不变的话那你是怎么显示10的呢,应该是两个都是1或者两个都是0啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 11:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表