求大佬帮我看看,为何我的数码管理都不理我,设置io口为低电平竟然变成高电平

CNASANDY_LIU 2019-03-14 07:43:50
麻烦站内大佬帮我看看程序,是不是哪里出错了

#include "stm32f10x_gpio.h"
#include "stm32f10x.h"
#include "SMG.h"
#include "SysTickDelay.h"
void lcd_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;
GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_ResetBits(GPIOC,GPIO_Pin_4|GPIO_Pin_5);


GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;
GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_SetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8);

RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);

}

void Display(int n)
{
if (n<99)
{
int i;
for (i=0;i<2;i++)
{
switch(i)
{
case 0:
GPIO_ResetBits(GPIOC,GPIO_Pin_5);
break;
case 1:
GPIO_ResetBits(GPIOC,GPIO_Pin_4);
break;
}
switch(n%10)
{
case 0:
GPIO_ResetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
GPIO_ResetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8);
break;
case 1:
GPIO_ResetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14);
break;
case 2:
GPIO_ResetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_15);
GPIO_ResetBits(GPIOC,GPIO_Pin_7|GPIO_Pin_8);
break;
case 3:
GPIO_ResetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8);
GPIO_ResetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_15);
break;
case 4:
GPIO_ResetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7);
GPIO_ResetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13);
break;
case 5:
GPIO_ResetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7);
GPIO_ResetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_15);
break;
case 6:
GPIO_ResetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7);
GPIO_ResetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
break;
case 7:
GPIO_ResetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8);
break;
case 8:
GPIO_ResetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8);
GPIO_ResetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
break;
case 9:
GPIO_ResetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8);
GPIO_ResetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_15);
break;
}
n=n/10;
delay_ms(10);
if(n==0)
break;
}
}
}
int main(void)
{
int count;
int timecheck;
lcd_init();
count=0;
timecheck=0;
while(1)
{
Display(count);
timecheck++;
delay_ms(20);
if (timecheck>100)
{
timecheck=0;
count++;
}
}
}
...全文
176 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly 100% 2019-03-16
  • 打赏
  • 举报
回复
量一量是否保持住了
dceacho 2019-03-15
  • 打赏
  • 举报
回复
你指abcdefg那几个脚? 三极管那有点问题,STM32是3.3V的
yishumei 2019-03-15
  • 打赏
  • 举报
回复
楼主用的数码管是共阴极还是共阳极?1楼指出的三极管的供电问题也需要修改。
本指南详细阐述如何利用STM32微控制器作为系统管理总线主设备,与MLX90614非接触式红外测温模块建立数据通信。STM32系列芯片内置多种外设接口,其中系统管理总线作为一种低速率、节能型双线制串行协议,适用于设备监控与传感器信息采集等场景。 MLX90614模块通过红外技术检测目标物体及周边环境温度,其兼容I²C与系统管理总线标准,可广泛应用于智能设备、医疗监护等领域。借助总线通信,能够从该传感器获取高精度的温度数值。 实施连接需按以下环节操作: **一、硬件配置** - 选用支持系统管理总线或I²C接口的STM32评估板(如STM32F103C8T6型号)。 - 将传感器的串行数据线与串行时钟线分别接入微控制器对应的通信引脚。 - 安排外部供电线路并设置保护电路,保障传感器稳定运行。 **二、软件开发环境搭建** - 使用STM32CubeMX工具创建工程,选定对应处理器型号与开发板,在配置界面激活系统管理总线接口,设定时钟频率并分配引脚功能。 - 基于HAL库编写底层驱动:调用库函数初始化总线,配置时序参数包括传输速率、时钟信号保持时间等。 **三、传感器通信规约解析** - 查阅MLX90614技术文档,掌握其设备地址(默认7位地址为0x5A)、指令编码及数据帧结构。通过访问不同存储单元可读取温度信息。 - 依据系统管理总线规范设计读写流程,实现命令发送、数据接收及应答信号处理的相关函数。 **四、温度信息获取流程** - 向传感器特定存储地址(例如0x2D或0x31)发送读取指令。 - 接收返回的16位二进制温度数据,该数据包含整数与小数部分,需按规范转换为摄氏温度值。 **五、异常状态管理** - 在通信函数中加入超时检测、应答失败判断等异常处理机制。 - 在主程序循环中实施定期状态监控,确保系统长期可靠工作。 **六、程序实现参考** - 典型驱动文件包含总线通信功能模块与温度解析函数,可调用HAL库中的主设备发送与接收函数完成数据传输。 完成上述步骤后,即可建立STM32与MLX90614间的稳定通信链路。实际部署时还需综合考虑电源优化、中断响应、数据存储与显示等扩展功能。建议编程时采用模块化设计并添加详尽注释,以提升代码可维护性与可扩展性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

27,519

社区成员

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

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