关于stm32直接I/O口操作驱动4位数码管0到9999显示的问题

要昵称干嘛 2017-12-12 11:15:09
我的main函数里是
while(1)
{
j=1;
digitron_put_buf(DIGITRON_0, j % 10);
digitron_put_buf(DIGITRON_1, j / 10 % 10);
digitron_put_buf(DIGITRON_2, j / 100 % 10);
digitron_put_buf(DIGITRON_3, j / 1000 % 10);
digitron_dynamic_display();
}

(中间程序省略。。。。。。。。。。。)

选择数码管
static void digitron_select(enum DIGITRON numb)
{
unsigned char n;

for(n = 0; n < NUM_DIGITRONS; n++) /**< 关闭所有数码管 */
{
HAL_GPIO_WritePin(digitron[n].port, digitron[n].pin, GPIO_PIN_RESET);
}

if(numb != DIGITRON_NULL)
{
HAL_GPIO_WritePin(digitron[numb].port, digitron[numb].pin, GPIO_PIN_SET); /**< 点亮数码管 */
}

显示数字
static void digitron_data(unsigned char dat)
{

led_on(DIGITRON_MAP[dat]);
}

调试的时候有个警告,
..\..\src\digitron.c(94): warning: #223-D: function "led_on" declared implicitly
led_on(DIGITRON_MAP[dat]);
数码管显示第一回合是对的 0 0 0 1,按理说应该是一直在0 0 0 1 的,但第一回合后就一直是 0 0 0 0 了,还有赋值其他数时都显示不对,但串口打印是对的。
求大神帮忙找找问题


...全文
3921 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
要昵称干嘛 2017-12-14
  • 打赏
  • 举报
回复
引用 3 楼 91program 的回复:
[quote=引用 2 楼 qq_40557957 的回复:] 已解决。。。。。
LZ 能说一下怎么解决的吗?[/quote]就是在led_on之前没有关闭led,我加了个led_off,至于警告,我在h文件里再次声明了一下就行了,
91program 2017-12-14
  • 打赏
  • 举报
回复
引用 2 楼 qq_40557957 的回复:
已解决。。。。。
LZ 能说一下怎么解决的吗?
要昵称干嘛 2017-12-14
  • 打赏
  • 举报
回复
已解决。。。。。
要昵称干嘛 2017-12-12
  • 打赏
  • 举报
回复

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧