找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2493|回复: 13
打印 上一主题 下一主题
收起左侧

有朋友用过这种集成了74HC595的数码管模块吗

  [复制链接]
回帖奖励 30 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
目前用的是单独74HC595模块+一个两位共阳数码管,实现的功能是:
按P2^0;                按键加1
按P2^1;                按键减1
按P2^2;                复位(显示01)
目前这个程序是可以正常运行的。

为了接线方便,网上买了这种集成了74HC595的数码管模块,只有5根线:

1.正极
2.负极
3.数据
4.移位时钟
5.锁存

弄了好长时间,都没在目前程序的基础上修改成功。
有用过这种模块的朋友吗,帮忙修改下。
谢谢!
  1. #include <REGX52.H>

  2. // LED字模表
  3. unsigned char LED_0F[17] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x8C, 0xBF, 0xC6, 0xA1, 0x86, 0xFF, 0xbf};

  4. sbit DIO = P1^0;                                //串行数据输入
  5. sbit RCK = P1^1;                                //锁存
  6. sbit SCK = P1^2;                                //移位

  7. sbit BIT1 = P1^3;
  8. sbit BIT0 = P1^4;
  9.        
  10. sbit KEY_UP = P2^0;                                //按键加
  11. sbit KEY_DOWN = P2^1;                        //按键减
  12. sbit KEY_RESET = P2^2;                        //复位


  13. unsigned char num=0;                                //上电初始值


  14. void Delay(unsigned int xms)
  15. {
  16.         unsigned char i, j;
  17.         while(xms)
  18.         {
  19.                 i = 2;
  20.                 j = 239;
  21.                 do
  22.                 {
  23.                         while (--j);
  24.                 } while (--i);
  25.                 xms--;
  26.         }
  27. }

  28. void LED_OUT(unsigned char X, unsigned char bitd)
  29. {
  30.         unsigned char i;
  31.        
  32.         if(bitd)
  33.         {
  34.                 BIT1=1;BIT0=0;
  35.         }
  36.         else
  37.         {
  38.                 BIT1=0;BIT0=1;
  39.         }

  40.         for(i = 8; i >= 1; i--)
  41.         {
  42.                 if(X & 0x80) DIO = 1;
  43.                 else DIO = 0;

  44.                 X <<= 1;

  45.                 SCK = 0;
  46.                 SCK = 1;
  47.         }
  48.        
  49.        
  50.         RCK = 0;
  51.         RCK = 1;

  52. //  //仿真请取消注释以下两行
  53.         Delay(10);
  54.         BIT1=0;BIT0=0;Delay(1);
  55. }



  56. void main(void)
  57. {
  58.         while(1)
  59.         {
  60.                 if(KEY_UP==0 && num<99)                //如果KEY_UP按键按下
  61.                 {
  62.                         Delay(20);                //延时消抖
  63.                         while(KEY_UP==0);        //松手检测
  64.                         Delay(20);                //延时消抖
  65.                         num++;
  66.                 }
  67.                 else if(KEY_DOWN==0 && num>0)                //如果KEY_DOWN按键按下
  68.                 {
  69.                         Delay(20);                //延时消抖
  70.                         while(KEY_DOWN==0);        //松手检测
  71.                         Delay(20);                //延时消抖
  72.                         num--;
  73.                 }
  74.                 else if(KEY_RESET==0)                //如果KEY_RESET按键按下
  75.                 {
  76.                         Delay(20);                //延时消抖
  77.                         while(KEY_RESET==0);        //松手检测
  78.                         Delay(20);                //延时消抖
  79.                         num=1;
  80.                 }
  81.                 LED_OUT(LED_0F[num/10], 1);
  82.                 LED_OUT(LED_0F[num%10], 0);
  83.         }
  84. }

复制代码




51hei图片_20230929154731.jpg (295.67 KB, 下载次数: 62)

51hei图片_20230929154731.jpg

74HC595驱动数码管.rar

142 KB, 下载次数: 11

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2023-10-29 21:23 | 只看该作者
先看看商铺提供的显示例程
回复

使用道具 举报

板凳
ID:1063563 发表于 2023-10-29 21:51 | 只看该作者
595是串入并出方式
回复

使用道具 举报

地板
ID:34149 发表于 2023-10-30 01:45 | 只看该作者
看段码,位码是不是和商家的一样。
回复

使用道具 举报

5#
ID:57657 发表于 2023-10-30 08:18 | 只看该作者
移位时钟数量=74HC595级联数量*8 不能多也不能少。
然后一个锁存时钟,先移高位后移低位,时钟上升沿触发。
回复

使用道具 举报

6#
ID:712097 发表于 2023-10-30 08:41 | 只看该作者
//以下为4位数码管HC595测试程序,STC12系列单片机,供参考

51单片机_HC595_4位数码管模块测试程序.rar

34.92 KB, 下载次数: 11

回复

使用道具 举报

7#
ID:213173 发表于 2023-10-30 09:25 | 只看该作者
需要知道模块电路的连接关系,或者从卖家提供的示例代码推断模块电路的连接关系才能正确编写驱动程序。
回复

使用道具 举报

8#
ID:1007932 发表于 2023-10-30 09:39 | 只看该作者
直接用他的LED字模表就行了,用的话就只管输入什么显示什么就行
自己做要看数码管共阴共阳,595的引脚分配
回复

使用道具 举报

9#
ID:1064915 发表于 2023-10-30 10:07 | 只看该作者
画出来段码位码的接线图,计算LED字模表
回复

使用道具 举报

10#
ID:213173 发表于 2023-10-30 11:04 | 只看该作者
这个数码管模块是用两块595用作静态显示。代码修改如下,如果显示的个位十位颠倒,就把代码个位十位调一下。
  1. #include <REG51.H>

  2. // LED字模表
  3. unsigned char LED_0F[17] = {
  4. 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
  5. 0x80, 0x90, 0x8C, 0xBF, 0xC6, 0xA1, 0x86, 0xFF, 0xbf};

  6. sbit DIO = P1^0;                                //串行数据输入
  7. sbit RCK = P1^1;                                //锁存
  8. sbit SCK = P1^2;                                //移位

  9. sbit BIT1 = P1^3;
  10. sbit BIT0 = P1^4;
  11.       
  12. sbit KEY_UP = P2^0;                          //按键加
  13. sbit KEY_DOWN = P2^1;                        //按键减
  14. sbit KEY_RESET = P2^2;                        //复位

  15. bit sign;
  16. unsigned char num=0;                          //上电初始值
  17. unsigned int count;

  18. void Delay(unsigned int xms)//@12.000MHz
  19. {
  20.         unsigned char i, j;
  21.         while(xms)
  22.         {
  23.                 i = 2;
  24.                 j = 239;
  25.                 do
  26.                 {
  27.                         while (--j);
  28.                 } while (--i);
  29.                 xms--;
  30.         }
  31. }

  32. void LED_OUT(unsigned char X, unsigned char bitd)
  33. {
  34.         unsigned char i;
  35.         if(bitd)
  36.         {
  37.                 BIT1=1;BIT0=0;
  38.         }
  39.         else
  40.         {
  41.                 BIT1=0;BIT0=1;
  42.         }
  43.         for(i=0;i<8;i++)
  44.         {
  45.                 X<<=1;
  46.                 DIO = CY;
  47.                 SCK = 1;
  48.                 SCK = 0;
  49.         }
  50.         RCK = 1;
  51.         RCK = 0;
  52. }

  53. void main(void)
  54. {
  55.         LED_OUT(LED_0F[num/10], 1);
  56.         LED_OUT(LED_0F[num%10], 0);
  57.         LED_OUT(LED_0F[num/10], 1);
  58.         LED_OUT(LED_0F[num%10], 0);
  59.         while(1)
  60.         {
  61.                 if(!KEY_UP || !KEY_DOWN || !KEY_RESET)
  62.                 {
  63.                         if(++count>=10 && sign==0)
  64.                         {
  65.                                 sign=1;
  66.                                 if(!KEY_UP && num<99)num++;
  67.                                 if(!KEY_DOWN && num>0)num--;
  68.                                 if(!KEY_RESET)num=0;
  69.                                 LED_OUT(LED_0F[num/10], 1);
  70.                                 LED_OUT(LED_0F[num%10], 0);
  71.                         }
  72.                 }
  73.                 else
  74.                 {
  75.                         sign=0;
  76.                         count=0;
  77.                 }
  78.                 Delay(1);
  79.         }
  80. }


复制代码

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

11#
ID:996773 发表于 2023-10-30 15:06 | 只看该作者


这种595很好用,三线控制,串和并扩展可以很多,也算是显示类的编程技术起步敲门砖,

我开始收音机编程几天就熟练了。也就那一回事,一个使能拉低,时钟拉高,,大同小异
回复

使用道具 举报

12#
ID:598611 发表于 2023-10-30 19:25 | 只看该作者
这不是一个8位串行输入、并行输出的位移缓存器吗
回复

使用道具 举报

13#
ID:1045846 发表于 2023-10-30 20:29 | 只看该作者
感谢各位老师的指导,就不一一感谢了。
附件是商家提供的例程,试了下是从0-9,一直循环。

上面老师提供的建议,我再来研究下,有结果了再回来报告。

559数码管模块资料.7z

1.23 MB, 下载次数: 13

回复

使用道具 举报

14#
ID:1045846 发表于 2023-12-10 20:57 | 只看该作者
wulin 发表于 2023-10-30 11:04
这个数码管模块是用两块595用作静态显示。代码修改如下,如果显示的个位十位颠倒,就把代码个位十位调一下 ...

感谢,这个代码试过了,可以实现我的需求。

1.png (216.58 KB, 下载次数: 70)

1.png

2.png (239.14 KB, 下载次数: 64)

2.png
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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