用stm32控制4位数码管_stm32控制共阴数码管

发布者:SerendipityGlow最新更新时间:2023-05-24 来源: elecfans关键字:stm32控制  4位数码管  共阴数码管 手机看文章 扫描二维码
随时随地手机看文章

1、stm32控制4位共阳数码管输出计数

用stm32控制4位数码管,需要用到GPIO口 PA0~PA11共12个引脚。首先我们来看看数码管的原理图。

用stm32控制4位数码管_stm32控制共阴数码管

用stm32控制4位数码管_stm32控制共阴数码管

因为是共阳所以12,9,8,6为电源输入,其他引脚均为接地,所以对于芯片来说12,9,8,6高位输出,其他设定为低位即可。

//设定下GPIO口

void GPIO_Num_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

}

这里有个要注意的,根据原理图可以看出数码管一次只能输出一位数组,所以如果是多位的必须使用扫描的方式输出,缩短切换的间隔,就可以达到不闪烁的效果。

//输出封装

void DisPlayNum(int n)

{

if (n 《 9999)

{ int i;

int s;

s = n;

i=0;

for (i=0;i《4;i++)

{

GPIO_ResetBits(GPIOA,GPIO_Pin_All);

switch (i)

{

case 0:

GPIO_SetBits(GPIOA,GPIO_Pin_5);

break;

case 1:

GPIO_SetBits(GPIOA,GPIO_Pin_7);

break;

case 2:

GPIO_SetBits(GPIOA,GPIO_Pin_8);

break;

case 3:

GPIO_SetBits(GPIOA,GPIO_Pin_11);

break;

}

switch (s % 10)

{

case 0:

GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_4);

break;

case 1:

GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_9|GPIO_Pin_10);

break;

case 2:

GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_9);

break;

case 3:

GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_9);

break;

case 4:

GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_10);

break;

case 5:

GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_6);

break;

case 6:

GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_6);

break;

case 7:

GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_9);

break;

case 8:

GPIO_SetBits(GPIOA,GPIO_Pin_2);

break;

case 9:

GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_0);

break;}

s = s / 10;

delay_ms(1);

if (s==0)

break;}}}

最后main的测试代码

int count;

int TImeCheck;

int main(void)

{

GPIO_Num_Init();

count =0;

TImeCheck = 0;

while(1)

{

DisPlayNum(count);

TImeCheck++;

delay_ms(5);

if (TImeCheck 》 100){ //每500毫秒+1

TimeCheck=0;

count++;}}}

2、stm32控制共阴数码管

共阴数码管

#include“stm32f10x.h”

u8table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};//共阴数码管对应的编码

voiddelayms(u16 time)

{

u16 i=0;

while(time--)

{

i=12000;

while(i--);

}

}

voidInitStm32()

{

GPIO_InitTypeDefGPIO_InitStructure; //定义一个管脚初始化的结构体

//开启PA口时钟

GPIO_InitTypeDef DuanAndWeiMa;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);

//配置PAO的模式

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;

DuanAndWeiMa.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1; //为什么要用一杠 0是段码,1是位码

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

DuanAndWeiMa.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

DuanAndWeiMa.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_Init(GPIOB,&DuanAndWeiMa);

}

intmain(void)

{

InitStm32();

while(1)

{

GPIO_SetBits(GPIOB,GPIO_Pin_1);

GPIO_Write(GPIOA,0xfe); //问题是:第8个数码管控制不了,一直显示的是8

GPIO_ResetBits(GPIOB,GPIO_Pin_1);

GPIO_SetBits(GPIOB,GPIO_Pin_0);

GPIO_Write(GPIOA,table[0]);

GPIO_ResetBits(GPIOB,GPIO_Pin_0);

delayms(2);

GPIO_SetBits(GPIOB,GPIO_Pin_1);

GPIO_Write(GPIOA,0xfd);

GPIO_ResetBits(GPIOB,GPIO_Pin_1);

GPIO_SetBits(GPIOB,GPIO_Pin_0);

GPIO_Write(GPIOA,table[1]);

GPIO_ResetBits(GPIOB,GPIO_Pin_0);

delayms(2);

GPIO_SetBits(GPIOB,GPIO_Pin_1);

GPIO_Write(GPIOA,0xfb);

GPIO_ResetBits(GPIOB,GPIO_Pin_1);

GPIO_SetBits(GPIOB,GPIO_Pin_0);

GPIO_Write(GPIOA,table[2]);

GPIO_ResetBits(GPIOB,GPIO_Pin_0);

delayms(2);

GPIO_SetBits(GPIOB,GPIO_Pin_1);

GPIO_Write(GPIOA,0xf7);

GPIO_ResetBits(GPIOB,GPIO_Pin_1);

GPIO_SetBits(GPIOB,GPIO_Pin_0);

GPIO_Write(GPIOA,table[2]);

GPIO_ResetBits(GPIOB,GPIO_Pin_0);

delayms(2);

}

}


关键字:stm32控制  4位数码管  共阴数码管 引用地址:用stm32控制4位数码管_stm32控制共阴数码管

上一篇:STM32CubeMX介绍、 下载与安装
下一篇:关于STM32的 I/O 复用功能

推荐阅读最新更新时间:2024-11-06 15:45

proteus8.6仿真STM32按键控制LED灯程序
proteus8.6 按键控制LED灯闪烁情况 单片机源程序如下: #include led.h #include exti.h #include delay.h int main(void) { LED_Init(); //初始化与LED连接的硬件接口 EXTIX_Init();//外部中断初始化 while(1); }
[单片机]
proteus8.6仿真<font color='red'>STM32</font>按键<font color='red'>控制</font>LED灯程序
ST推出新款超低功耗STM32控制
同级最高的闪存容量,最大容量高达512KB。 中国,2014年3月26日 ——意法半导体STM32 L1系列超低功耗ARM® Cortex®-M3 32位微控制器新增一款512KB闪存产品。目前L1系列共有三个产品线合70余款产品,其超低功耗和存储容量的组合在市场上堪称独一无二,闪存和RAM最大容量分别高达512KB和80KB。 新产品采用意法半导体独有的超低泄漏电流的110纳米CMOS制造工艺和优化的系统架构,工作能耗极低,目标应用瞄准高成本效益的嵌入式设计,适用于健身、医疗、穿戴式设备和工业/电表等电池供电的联网产品。 L1系列的主要特性: · 高性能ARM Cortex-M3 32位内核:在32
[单片机]
ST推出新款超低功耗<font color='red'>STM32</font>微<font color='red'>控制</font>器
STM32——pwm控制LED
pwm.c #include pwm.h /******************************************************************************* * 函 数 名 : TIM3_CH1_PWM_Init * 函数功能 : TIM3通道1 PWM初始化函数 * 输 入 : per:重装载值 psc:分频系数 * 输 出 : 无 *******************************************************************************/ void TIM3_CH1_PWM_Init(u1
[单片机]
基于STM32的自动气象站控制模块设计
1、引  言 随着居民生活水平的提高和气象意识的增强,近年来自动气象站得到了大力的发展。自动气象站需要可视化的人机界面,既能发布动态的气象数据,也能对气象站发送控制指令。因此,自动气象站拥有可视化的液晶显示控制模块是非常重要的。 为了节约硬件资源,采用STM32F103VET6单片机驱动7寸触摸屏作为显示控制模块的硬件平台。为实现多任务处理,移植经过裁剪和修改的UC/OS-II操作系统。同时移植可裁剪的界面设计软件接口UCGUI,实现可视化人机界面。构建软硬件可裁剪的自动气象站控制模块,即能满足自动气象站工作现场的任务需求,也减少了软硬件资源的浪费,充分发挥了嵌入式产品在工控现场的优势。 2、系统整体框图 采用STM32
[单片机]
基于<font color='red'>STM32</font>的自动气象站<font color='red'>控制</font>模块设计
STM32单片机如何通过定时器的控制输出PWM
STM32F103ZET6里共有8个定时器,其中高级定时器有TIM1-TIM5、TIM8,共6个。 我这里输出PWM的定时器是TIM2,空闲的定时器是TIM3。以TIM2为主定时器,TIM3为从定时器对TIM2的输出脉冲数进行计数。 查表可知,TIM3为从定时器选择TIM2为触发源,需要配置TS=001,即选择ITR1。 实现通过定时器控制输出PWM个数的功能,可以有如下一种配置方式: void TIM2_Mas te r__TIM3_Slave_Configuration(u32 PulseFrequency) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OC
[单片机]
<font color='red'>STM32</font>单片机如何通过定时器的<font color='red'>控制</font>输出PWM
STM32按键控制开关灯
1.按键操作的原理 1.在stm32f103rc中,存在三个按键(不包括复位),分别为key0(PC5),key1(PA15),wkup(PA0),按下key0和key1时对应的io口输出低电平,按下wkup对应io口输出高电平 2.所以可以采用库函数读取io口的电平,从而用不同的情况来控制灯的开闭 GPIO_ReadInputDataBit(GPIOX,GPIO_PIN_a)读取相应接口电平 #define KEY0 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5) #define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) #defi
[单片机]
STM32 直流减速电机控制
在直流减速电机控制中,最常用的方法就是通过PWM来控制直流电机的转速。在控制小车走直线的过程中,需要两者的转速一置(如果要走得很直,还需要在短时间内保证两者的行程大致相当,这可以用PID算法来控制)。 因此,在检测到两者转速不一样时,需要动态调整其中一个或两个轮子的PWM的点空比(简单点的就以一个轮为基准,调整另外一个轮子即可;如果以一个固定的标准的话,需要调整两个轮子的PWM占空比)。 1 程序第一步:设置GPIO,略(输出PWM的管脚用Mode_AF_PP即可) 2 3 程序第二步:设置定时器,(保证产生两路PWM即可,我用的是TIM4) 4 5 void TIM4_Configuration(void) 6 {
[单片机]
基于STM32的红光治疗仪控制系统
介绍了基于STM32的红光治疗仪控制系统STM32具有性价比高、外设丰富、集成度高、功耗低、开发方便等优点,因此STM32在单片机领域及嵌入式应用具有一定的优势,并逐渐成为产品开发的主流。红光治疗仪主要由红光LED灯、24电流可控开关电源、水循环冷却系统、安全系统、人机交互界面等组成如何实现红光LED灯的光强调节、治疗时间调节、水循环冷却系统、人机交互界面等问题,成为研究的重点。对普通24 V开光电源进行改进,使开光电源实现了以模拟电压方式调节电源的电流输出。本控制系统应用STM32103VCT6的优异DAC外设功能控制红光LED电源的功率,实现红光治疗仪红光强度,不需要专门的DAC芯片,节约了制作控制饭的成本。应用STM321
[单片机]
基于<font color='red'>STM32</font>的红光治疗仪<font color='red'>控制</font>系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved