STM32驱动2位数码管

  • 数码管简介
  • 驱动
  • 实现
  • 完整代码如下

数码管简介

一般我们用的数码管是8位的,其实就是在一个模块中集成了8个LED,分别显示笔划,如下图

电路原理如下,若是将所有LED的N极连接到一起,叫共阴,若是将P连接到一起,叫共阳。

我用红字标出了每个笔划对应的定义。
2位数码管,就是有2个8段的显示,并把它们集成到了一起,其abcdefg和dp脚都连到了一起,2个公共端分别表示左边和右边的选择。


驱动

本例中我用的是共阳2段数码管,以下均以此为例。
对于1位的数码管很简单,以共阳为例,将3脚和8脚接地,其他引脚接单片机的IO口,输出低电平时,相应的笔划就会亮了。
一般来说共阳用得多些,因为许多单片机的IO口驱动能力,高低电平的最大驱动电流是不同的,灌电流时驱动能力要强些。STM32是推挽输出,不存在这个问题,共阳还是共阴随意,对于F1系列,只要总电流不超过150mA即可。(印象中是这个值,不对请指正)
但是对于2位或更多的数码管来说,这个方法就不行了,需要用到交错扫描的方式。
即先只显示第1位的要显示的数字,比如1,此时其他的位数都不亮。
再显示第2位的数字,比如9。此时其他的位数也都不亮。
再显示第1位的数字比如1
再显示第2位的数字比如9
如此循环,即可以在2位或多位数码管上显示相应信息,每位显示的时间不要太长,会发生闪烁。也不要太短,灯的亮度会变小。
为了不占用单片机的处理能力,这个扫描的工作应该放到中断中完成。

实现

所有相关管脚设置为GPIO的输出功能,推挽方式
本例中我用的是共阳2段数码管。
我把显示0~9做了一个表格,A~F请自行实现
以0为例,只有G不亮,所以G没有驱动
我的A段是接到PB3上的,其余类推

整理后如下图,只是将所有属于一个GPIO_PORT的归拢到了一起

以显示1.9为例,

  1. 左边的公共端9脚输出高电平,准备显示左边这个数码管。
    PA15和PA12需要输出低电平,也就是GPIOA->ODR & (~0x0000)。
    PB3和4为高,即GPIOB->ODR & (~0x0000)
    PD32均为低,PD1为高,即GPIOD->ODR & (~0x000c)
  2. 将dp所连的IO口PC1置低,以显示小数点。
  3. 延时10ms,此时可以显示数字1
  4. 右边的公共端输出高电平,准备显示右边数码管。
    GPIOA->ODR & (~0x0000)
    GPIOA->ODR & (~0x0000)
    GPIOA->ODR & (~0x0000)
  5. dp所连的IO口PC1置高,不显示右边的小数点。
  6. 延时10ms,显示右边的数字9
  7. 循环即可显示1.9了

定义一个二给数组,将GPIOA,B,D的数据放到数组里面。

完整代码如下

下面只给出了演示功能的代码,实际使用时,需要将代码放到定时器中断内,第一次进中断时显示第1位,第二次进中断时显示第2位,如此循环就可以了。

u16 dpy_value[10][3] = {0x9000, 0x0008, 0x000e,0x0000, 0x0000, 0x000c,0x8000, 0x0018, 0x0006,0x0000, 0x0018, 0x000e,0x1000, 0x0010, 0x000c,0x1000, 0x0018, 0x000a,0x9000, 0x0018, 0x000a,0x0000, 0x0008, 0x000c,0x9000, 0x0018, 0x000e,0x1000, 0x0018, 0x000e};void dpy_display(u8 dpyL, u8 dot, u8 dpyR)
{DPY_L(1); // 左边显示DPY_R(0);GPIOA->ODR |= 0x9000;    //先将所有连接到数码管的引脚全部拉高GPIOB->ODR |= 0x0018;GPIOD->ODR |= 0x000e;GPIOA->ODR &= ~dpy_value[dpyL][0]; //再将相关的引脚拉低GPIOB->ODR &= ~dpy_value[dpyL][1];GPIOD->ODR &= ~dpy_value[dpyL][2];if(dot==0)DPY_DP(1);elseDPY_DP(0);HAL_Delay(5);DPY_L(0); // 右边显示DPY_R(1);GPIOA->ODR |= 0x9000;GPIOB->ODR |= 0x0018;GPIOD->ODR |= 0x000e;GPIOA->ODR &= ~dpy_value[dpyR][0];GPIOB->ODR &= ~dpy_value[dpyR][1];GPIOD->ODR &= ~dpy_value[dpyR][2];DPY_DP(1);HAL_Delay(5);}

如下图

STM32驱动2位数码管相关推荐

  1. c语言595驱动数码管,74hc595驱动4位数码管程序解析 - 74hc595驱动4位数码管电路连接图及程序解析...

    74hc595驱动4位数码管程序解析 //MCU:AT89S52 //晶振:11.0592M. //采用4位共阳极数码管 #include <regx51.h> //#include &l ...

  2. c语言595驱动数码管,74hc595驱动4位数码管电路连接图及程序解析 - 全文

    本设计使用了一个4位的数码管,为共阳型,为了节省单片机的IO口,使用了两片74HC595作为数码管的驱动芯片,共占用3个IO口.74HC595部分电路图如下: 与单片机相连接的三个脚分别为: HC_D ...

  3. 74HC595驱动2位数码管代码实现和注意事项

    74HC595驱动2位数码管 驱动芯片:74HC595,74LS595, 单片机:AT89C52,或者STC89C52都可以 实例代码 #include <STC89C5xRC.H> // ...

  4. c语言控制4位数码管,用stm32控制4位数码管_stm32控制共阴数码管

    描述 1.stm32控制4位共阳数码管输出计数 用stm32控制4位数码管,需要用到GPIO口 PA0~PA11共12个引脚.首先我们来看看数码管的原理图. 因为是共阳所以12,9,8,6为电源输入, ...

  5. Arduino驱动4位数码管

    文章目录 Arduino驱动4位数码管 基本原理 静态(只能保存单个数码管) 动态显示 数码管引脚及接线 引脚定义 保存显示的数组 初始化 显示 单个管教及其显示 多个数码管同时亮(最多支持4个) 动 ...

  6. K_A02_004 基于单片机驱动8位数码管模块(74HC595) 0-7滚动+ 时钟显示

    目录 一.程序功能说明 二.基本参数 1.参数 2.芯片引脚说明 3.模块引脚说明 三.通信协议说明 时序: 代码: 四.部分代码说明 1.接线说明 1.1.STC89C52RC+8位数码管模块(74 ...

  7. K_A02_001 基于单片机驱动4位数码管模块(74HC595) 0-3滚动+ 时钟显示

    目录 一.程序功能说明 二.基本参数 1.参数 2.芯片引脚说明 3.模块引脚说明 三.通信协议说明 时序: 代码: 四.部分代码说明 接线说明 1.1.STC89C52RC+4位数码管模块(74HC ...

  8. K_A02_003 基于单片机驱动8位数码管模块(MAX7219) 0-7静态显示+滚动显示

    目录 一.资源说明 二.基本参数 1.电气参数 2.引脚说明 三.通信协议说明 工作时序 对应程序 四.部分代码说明 1.接线说明 1.1.STC89C52RC+8位数码管模块 1.2.STM32F1 ...

  9. 2个8位移位寄存器驱动4位数码管

    一.相关芯片 1.74HC595N * 2 2. Arduino Uno 3. 4位8段数码管 二.关于引脚 1.74HC595N引脚 基本上引脚就是如此,两块级联的方法是,第一块的9脚(串行输出)接 ...

最新文章

  1. EasyUI Pagination 分页的两种做法
  2. curl重写php file_get_contents
  3. linux下find,xargs命令详解和实例
  4. USTC English Club Note20171020
  5. 2012_Houdini_ShowReel.
  6. 三星WP7手机MANGO一分钟完美越狱
  7. error: 'NULL' was not declared in this scope
  8. Enterprise Library 4.0 - May 2008 发布了
  9. mapxtreme 查找指定位置的图元
  10. 有哪些免费不收费的文件数据恢复软件?
  11. 2005世界五百强排名
  12. hurst代码 python_python中的Hurst指数
  13. 5.3.1 Unique Binary Sear Trees
  14. 关于webpack下载loader出现的问题(ERROR in ./src/img/timg.jpg Module build failed: ValidationError: File Loade)
  15. 实现华为M6平板、e人e本、iPad手写办公系统签批电脑端(Surface)显示和操作一致
  16. dopra linux 补全shell,HS8546V5光猫补全Shell 改华为原厂界面
  17. eap方法 华为手机怎么连wifi_怎样为WLAN选择最佳的EAP?
  18. 服务器内存延迟,内存、延迟等性能全面测试
  19. LInux查看系统信息命令
  20. 用鸿蒙开发AI应用(五)HDF 驱动补光灯

热门文章

  1. java冷门知识点整理
  2. 面试系列(十六):58同城 后台开发
  3. 用在生产中的裸金属Ironic
  4. 第二章 大教堂与市集
  5. spring boot +mybatis plus +html 最佳实践项目
  6. Python爬虫爬取链家网上的房源信息练习
  7. 计算机专业这么多课程怎么学?
  8. spring security技术分享
  9. Hyper-v虚拟机Centos构建CNS服务器与青龙面板
  10. [转]Half Life 2 Source 引擎介绍