本文主要描述STM32控制4位数码管显示,为了节省MCU引脚,用了两个594级联,一个控制段选,一个控制位选,总共占用3个IO口。

1.74HC594简介


其中:

  • QA-QH:用来控制段选或位选

  • QH':用来级联,将它接到下一个595的DS端

  • SER:串行数据输入,级联时接上个595的Q7'

  • SCK:上升沿时数据寄存器移位

  • RCK:上升沿时移位寄存器的数据进入存储寄存器显示

2.原理图


第一个594-控制段选

第二个594-控制位选

3.程序源码


//=====大小键盘显示字母const unsigned char DISPLAY_CODE[]={  //0,   1,    2,    3,    4,    5,    6,     7,    8,    9,      0xc0,  0xf9,  0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,  0x80, 0x90,  //全灭 小数点   0xff,   0x7f,};

这里用的共阴数码管,如果是共阳,则将上面数值取反即可。

/******************************************************************** 功能:扫描显示* 输入:None* 输出:None* 返回值: None* 备注:2ms调用********************************************************************* */void PhyLed_Display (void){    unsigned short i;    unsigned long controlBit = 0;        controlBit = (~((unsigned long)phyLed_buf[phyLedStep]))&0x000000FFL+(((0x00000800L>>phyLedStep))&0x0000FF00L);        GPIO_SetBits(GPIOA, GPIO_Pin_4);   //RCK信号,上一拍为低,上升沿时输出显示    for(i = 0; i < 32; i++)    {      if(controlBit&0x80000000L)       {        GPIO_ResetBits(GPIOA, GPIO_Pin_6);  //SER信号,不断移位输出      }      else       {        GPIO_SetBits(GPIOA, GPIO_Pin_6);      }      GPIO_ResetBits(GPIOA, GPIO_Pin_5);      PhySys_UsDelay(1);      GPIO_SetBits(GPIOA, GPIO_Pin_5); //SCK信号,上升沿时移位      PhySys_UsDelay(2);      controlBit = controlBit<<1;    }    GPIO_ResetBits(GPIOA, GPIO_Pin_4);    phyLedStep++;    if(phyLedStep >= LED_DISNUM)  //LED_DISNUM=4,控制4位数码管        phyLedStep = 0;}

controlBit为32位,当前只用到16位数据,对应两个595的输入,其中低8位控制段选,用于显示数字,高8位用于位选,控制哪一个数码管显示。

phyLedStep用于位选,这里用的分时控制,2ms调用一次,每次只控制一位数码管显示,4位数码管全部显示完共需要8ms。

驱动——594驱动数码管显示相关推荐

  1. 【Multisim仿真】74LS47译码器驱动共阳数码管显示(0-8)数字显示

    [Multisim仿真]74LS47译码器驱动共阳数码管显示(0-8)数字显示 Multisim仿真演示 74ls47引脚功能 LT: 试灯输入,是为了检查数码管各段是否能正常发光而设置的.当LT=0 ...

  2. 【K210+micropython】驱动HS420561k-32四位数码管显示数字

    [K210+micropython]使用HS420561k-32四位数码管显示数字 文章目录 [K210+micropython]使用HS420561k-32四位数码管显示数字 相关知识准备 一.四位 ...

  3. 74hc164驱动数码管c语言程序,基于51单片机的74HC164驱动数码管显示程序与仿真

    基于51单片机的74HC164驱动数码管显示程序与仿真 基于51单片机的74HC164驱动一位数码管显示程序与仿真 #include #include #define uchar unsigned c ...

  4. 8051/2单片机基础 实现开关,驱动2位的共阳极数码管显示小数,驱动喇叭播放音乐

    1. 实现开关,开关2次后,LED闪烁4次  2. 实现驱动共阳极数码关显示 3.1 3. 驱动喇叭播放 ,dao,re,mi,fa,sao,la,xi C代码: /** * 8051 DEMO 2 ...

  5. FPGA 动态数码管显示实验

    参考:正点原子开拓者 FPGA 开发指南 一.数码管动态显示简介 由于一般的静态驱动操作虽然方便,但占用的I/0口较多,例如要驱动6位8段数码管,以静态驱动方式让数码管各个位显示不同的数值,如&quo ...

  6. LED计数电路,5输入按键编码器,7段数码管显示驱动集成为LED计数测试电路

    LED计数电路: 5输入按键编码器: 7段数码管显示驱动真值表: 集成:

  7. void函数调用时显示不允许使用不完整的_4位数码管显示模块驱动

    TM1637四位数码管模块是一个带时钟点的4位共阳数码管(0.36英寸)的显示模块,驱动芯片为TM1637,驱动方式为IIC,因此只需2根信号线即可使单片机控制4位8段数码管(数码管8级亮度可调). ...

  8. 键盘扫描并控制数码管C语言,CH454 数码管显示驱动和键盘扫描控制芯片

    1.概述 CH454 是数码管显示驱动和键盘扫描控制芯片.CH454内置时钟振荡电路,可以动态驱动8 只16段的数码管或者128 只LED,支持11 段.14 段.16 段×8 以及17 段×7 等; ...

  9. stm32与驱动器AS1106驱动数码管显示

    驱动器简述 驱动器就是为驱动某些显示设备,动作设备的器件,用户可通过单片机对驱动器设置驱动方式,时间等等来达到自己配置,而如何配置驱动器来达到我们想要的效果,便是要根据驱动器手册,输入相应的代码,配置 ...

最新文章

  1. ARM-CPU卷积网络的自动调谐
  2. Spring5源码 - 10 Spring事件监听机制_应用篇
  3. 标定中是什么意思_机械加工中,测头有什么作用呢?
  4. PHP判断是否有Get参数的方法
  5. CodeForces - 1520G To Go Or Not To Go?(bfs)
  6. php的全局p变量程序_php如何定义全局变量
  7. VUEJS-checkbox全选全不选
  8. 浅谈Javascript中的函数重载实现
  9. java 中以||作为split分隔符正确的写法
  10. cmd进入到python安装目录下_在python中安装basemap
  11. 栈实现队列(队列实现栈)
  12. CentOS7安装xrdp(windows远程桌面连接CentOS)
  13. 冰河木马简易使用 ——病毒木马 003
  14. XP系统电脑连不上服务器,windowsxp系统电脑连不上路由器如何解决
  15. python名人问题_Python 思考录 练习01
  16. 调用函数求三个数中的最大数
  17. 《Windows 8 权威指南》——2.2 Windows 8 Metro界面
  18. System.IO.FileNotFoundException: Could not load file or assembly ‘System.Data.SQLite.dll‘ or one of
  19. printf 打印结构体成员函数出错原因分析
  20. Docker自动部署Apache Tomcat

热门文章

  1. 投资理财这3年 | 其他
  2. Threejs实现WebVR全景小行星入场动画/鱼眼效果/球形展开效果
  3. objdump反汇编
  4. Tkinter Frame大小设置不起作用
  5. 深度强化学习资料(视频+PPT+PDF下载)
  6. 微信的解构与建构之一:微信的诞生
  7. 【Unity植物大战僵尸】太阳花功能基本完善(八)
  8. 安装bazel遇到的坑
  9. 关于正交变换和正交矩阵
  10. 如何把未压缩的.avi文件批量地转为.yuv文件(yuv420)?