找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3099|回复: 3
收起左侧

发一个优信74HC595的 8X8的的驱动模块DEMO

[复制链接]
ID:98880 发表于 2018-7-7 00:04 | 显示全部楼层 |阅读模式
刚学STM32,原来粗略懂一些51,在网上买了很多模块,现在想用STM32驱动起来。原来只有51的驱动DEMO,但在网上找了很多74HC595的驱动好像都不太好用,这次我就参考了他们的代码。自己修改了一个。效果还不错。因为经验不足,有一些地方可以改进的,希望大家提出。以下是部份代码
IMG_20180706_232632.jpg
  1. /****************************************Copyright (c)**************************************************
  2. **                                
  3. **        项目名称:                        74HC595驱动电路
  4. **        文件名称:                        74HC595.c
  5. **        模块功能:                        驱动程序
  6. **
  7. **------------------------------------------------------------------------------------------------------

  8. **         创 建 者:                        李*
  9. **        E-mail  :                        lidezhong@163.com
  10. **        QQ                :                        13151999
  11. **        Mobile        :                        15870966330
  12. **        创建时间:                        2018-07-02
  13. **        版    本:                        v1.0.0
  14. **        描    述:                        基础程序
  15. **
  16. ********************************************************************************************************/

  17. #include "74HC595.h"

  18. //以下为74HC595_N376RIX2_DIP显示位表
  19. //unsigned char  wei[8]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};
  20. //以下为优信2X8数码管显示位表
  21. unsigned char wei[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


  22. /********************************************************************************************************
  23. **         函数名称:                        void HC595Init(void)
  24. **        功能描述:                        初始化74HC595
  25. **        入口参数:                        void
  26. **        创 建 者:                        李德忠
  27. **        创建时间:                        2014-07-3 0:10
  28. **        版    本:                        v1.0.0
  29. ********************************************************************************************************/

  30. void HC595Init(void)
  31. {
  32.         GPIO_InitTypeDef GPIO_InitStructure;
  33.         
  34.         RCC_APB2PeriphClockCmd(HC595_CLK_GPIO_CLK | HC595_DATA_GPIO_CLK | HC595_CS_GPIO_CLK, ENABLE);
  35.         
  36.         GPIO_InitStructure.GPIO_Pin = HC595_CLK_PIN;
  37.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  38.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  39.         GPIO_Init(HC595_CLK_GPIO, &GPIO_InitStructure);
  40.         
  41.         GPIO_InitStructure.GPIO_Pin = HC595_DATA_PIN;
  42.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  43.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  44.         GPIO_Init(HC595_DATA_GPIO, &GPIO_InitStructure);

  45.         GPIO_InitStructure.GPIO_Pin = HC595_CS_PIN;
  46.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  47.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  48.         GPIO_Init(HC595_CS_GPIO, &GPIO_InitStructure);
  49.         
  50.         HC595_CLK_H();
  51.         HC595_DATA_H();
  52.         HC595_CS_H();
  53.         
  54. }
  55. void HC595Send(u8 data)
  56. {
  57.         u8 i;
  58.          for(i=0;i<8;i++)
  59.          {
  60.                          HC595_CLK_L();
  61.                   if((data & 0x80)== 0x80)                                                
  62.                   {
  63.                           HC595_DATA_H(); //串行数据输出
  64.                   }
  65.                   else
  66.                   {
  67.                           HC595_DATA_L();
  68.                   }
  69.                  data<<=1;
  70.                  HC595_CLK_H(); //移位输入时钟,上升沿输入
  71.                 HC595_CLK_L();
  72.          }
  73. }

  74. /********************************************************************************************************
  75. **         函数名称:                        bit         DispNum(uchar * N)
  76. **        功能描述:                        刷新优信74HC595 8X8显示数字
  77. **        入口参数:                        *N:                显示的字符数组
  78. **        出口参数:                        void
  79. **        创 建 者:                        李德忠
  80. **        创建时间:                        2018-07-05 22:38
  81. **        版    本:                        v1.0.0
  82. **  -----------------------------------------------------------------------------------------------------
  83. ********************************************************************************************************/
  84. void         DispNum(unsigned char * N)
  85. {
  86.         unsigned char i,Nnow[8];

  87.         for(i=0;i<8;i++)
  88.         {
  89.                 switch(*(N+i))
  90.                 {
  91.                                 //以下为74HC595_N376RIX2_DIP显示码表
  92. //                        case        '0':        Nnow[i]        =        0x3F;        break;
  93. //                        case        '1':        Nnow[i]        =        0x06;        break;
  94. //                        case        '2':        Nnow[i]        =        0x5B;        break;
  95. //                        case        '3':        Nnow[i]        =        0x4F;        break;
  96. //                        case        '4':        Nnow[i]        =        0x66;        break;
  97. //                        case        '5':        Nnow[i]        =        0x6D;        break;
  98. //                        case        '6':        Nnow[i]        =        0x7D;        break;
  99. //                        case        '7':        Nnow[i]        =        0x07;        break;
  100. //                        case        '8':        Nnow[i]        =        0x7F;        break;
  101. //                        case        '9':        Nnow[i]        =        0x6F;        break;
  102. //                        case        'a':        Nnow[i]        =        0x77;        break;
  103. //                        case        'f':        Nnow[i]        =        0x71;        break;
  104. //                        case        'c':        Nnow[i]        =        0x39;        break;
  105. //                        case        'h':        Nnow[i]        =        0x76;        break;
  106. //                        case        '-':        Nnow[i]        =        0x40;        break;
  107. //                        case        ' ':        Nnow[i]        =        0x00;        break;
  108. //                        default:                Nnow[i]        =        0xFF;
  109.                                 
  110.                         //以下为优信8位数码管显示码表                        
  111.                         case        '0':        Nnow[i]        =        0xC0;        break;
  112.                         case        '1':        Nnow[i]        =        0xF9;        break;
  113.                         case        '2':        Nnow[i]        =        0xA4;        break;
  114.                         case        '3':        Nnow[i]        =        0xB0;        break;
  115.                         case        '4':        Nnow[i]        =        0x99;        break;
  116.                         case        '5':        Nnow[i]        =        0x92;        break;
  117.                         case        '6':        Nnow[i]        =        0x82;        break;
  118.                         case        '7':        Nnow[i]        =        0xF8;        break;
  119.                         case        '8':        Nnow[i]        =        0x80;        break;
  120.                         case        '9':        Nnow[i]        =        0x90;        break;
  121.                         case        'a':        Nnow[i]        =        0x8C;        break;
  122.                         case        'b':        Nnow[i]        =        0xBF;        break;
  123.                         case        'c':        Nnow[i]        =        0xC6;        break;
  124.                         case        'd':        Nnow[i]        =        0xA1;        break;
  125.                         case        'e':        Nnow[i]        =        0x86;        break;
  126.                         case        'f':        Nnow[i]        =        0xFF;        break;
  127.                         case        '-':        Nnow[i]        =        0xbf;        break;
  128.                         case        ' ':        Nnow[i]        =        0x00;        break;
  129.                         default:                Nnow[i]        =        0xFF;                        
  130.                 }
  131.                 /*74HC595_N376RIX2_DIP驱动顺序*/
  132. //                 HC595Send(0x00);  //先传段表
  133. //                 HC595Send(Nnow[i]);
  134. //                 HC595Send(wei[i]);  //位表
  135.                
  136.                 /*优信8位LED数码管驱动顺序*/        
  137.                  HC595Send(wei[i]);  //位表
  138.                  HC595Send(Nnow[i]);

  139.                  HC595_CS_L();
  140.                  HC595_CS_H();
  141.                  HC595_CS_L();

  142.         }
  143.                         
  144. }
  145.          

复制代码

全部资料51hei下载地址:
ALIENTEK MINISTM32_74HC595.rar (286.38 KB, 下载次数: 18)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:16255 发表于 2018-7-7 09:27 | 显示全部楼层
驱动8位数码管有专用芯片的,MAX7219就可以。只需要把要显示的内容传送到7219,芯片会自动扫描数码管,这样单片机就不用操心数码管显示的事情了。
(优信电子也有相应的7219模块出售的。)
回复

使用道具 举报

ID:98880 发表于 2018-7-7 15:17 | 显示全部楼层
mengsiu 发表于 2018-7-7 09:27
驱动8位数码管有专用芯片的,MAX7219就可以。只需要把要显示的内容传送到7219,芯片会自动扫描数码管,这样 ...

对的。我现在讲的就是74HC595.
回复

使用道具 举报

ID:192297 发表于 2018-10-29 22:41 | 显示全部楼层
谢谢楼主!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表