OpenEdv-开源电子网

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

STM32控制4位数码管的问题

[复制链接]

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-3-21
在线时间
0 小时
发表于 2014-3-21 15:02:04 | 显示全部楼层 |阅读模式
   在学习完流水灯后,想点亮数码管。PD0~PD7控制段选,PE0~PE3控制位选,
   1 请问怎么实现1到100的计数
   2  不同数码管 同时变化显示不同的数字应该怎么做
   我尝试用 直接操作ODR寄存器,单个数码管显示没问题,但是两个以上的数码管,就不行了,这个扫描应该怎么做,感觉和51的相差很大哦
   请大家给个思路 指引下 搞了两三个小时
   谢谢了
 
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-3-21 15:05:37 | 显示全部楼层
32和51不同的地方还是蛮多的,但原理相同,精确计数还是用定时器,数码管的扫描方式也是相同的。

只是单个可以显示的话就是你的程序扫描部分的逻辑不对
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-3-21
在线时间
0 小时
 楼主| 发表于 2014-3-21 15:14:54 | 显示全部楼层
回复【2楼】745021926:
---------------------------------
    我以前用51的时候是 选通一位 送段码,在选通二选,送段码,但是我操作STM32 他只显示一个,是不是我寄存器用错了,我直接操作ODR寄存器 
  GPIOE->ODR=0x0fe;  选第一位
               GPIOD->ODR=code[num/10];
  GPIOE->ODR=0x0ff;   关闭位选
  GPIOE->ODR=0xfd;    选第二位
  GPIOD->ODR=code[num%10];
  delay_ms(1000);
回复 支持 反对

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-3-21 15:23:50 | 显示全部楼层
while(1)
{
GPIOE->ODR=0x0fe;  选第一位 
  GPIOD->ODR=code[num/10]; 
delay_ms(100);
  GPIOE->ODR=0x0ff;   关闭位选 
  GPIOE->ODR=0xfd;    选第二位 
  GPIOD->ODR=code[num%10]; 
  delay_ms(100);
}这样试试
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-3-21
在线时间
0 小时
 楼主| 发表于 2014-3-21 16:52:29 | 显示全部楼层
回复【4楼】745021926:
while(1) { GPIOE->ODR=0x0fe;  选第一位    GPIOD->ODR=code[num/10];  delay_ms(100);   GPIOE->ODR=0x0ff;   关闭位选    GPIOE->ODR=0xfd;    选第二位    GPIOD->ODR=code[num%10];    delay_ms(100); }这样试试
---------------------------------有闪烁 我改成delay_ms(5)没问题了 非常感谢 ,这个问题是不是主要是关闭位选之前的一个延时啊,为什么不能直接关闭呢,要延时再关闭呢
还有个问题 我段的编码没错,就是有2 .5 .6这三个数字显示不正确是什么原因
回复 支持 反对

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-3-21 17:27:49 | 显示全部楼层
不延时一会的话时间太短暂,眼睛看不到

编码你可以自己试试,可以直接手算的
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

12

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-9-1
在线时间
0 小时
发表于 2015-1-5 15:31:16 | 显示全部楼层
回复【6楼】745021926:
---------------------------------
四位数码管的延时delay 怎样改成中断服务函数里面的延时来做
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2017-6-17
在线时间
24 小时
发表于 2017-7-1 10:28:32 | 显示全部楼层
我想问一下,就是你们操作数码管的时候一般都是怎么操作的,都直接操作IO口吗?数量很多怎么办?74Hc595?
回复 支持 反对

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2017-8-17
在线时间
23 小时
发表于 2017-11-30 10:49:57 | 显示全部楼层
同问。32和51在数码管这种位选确实要麻烦很多。我看网上的最小系统一般都不带数码管直接上液晶。我看过别人代码好像也是单个IO直接操作(注释:库函数版本)。
回复 支持 反对

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2015-3-27
在线时间
98 小时
发表于 2017-11-30 11:05:00 | 显示全部楼层
stm32sport 发表于 2017-11-30 10:49
同问。32和51在数码管这种位选确实要麻烦很多。我看网上的最小系统一般都不带数码管直接上液晶。我看过别人 ...

32和51是有一点区别,因为STM32不能操作单个位(除非使用位带操作),但是可以适用库函数操作单独的某个IO口,其实就是读数据,改数据,写数据的过程。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 23:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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