找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6247|回复: 15
收起左侧

求教怎么用74HC595控制三个4位的数码管

  [复制链接]
ID:383439 发表于 2018-8-6 14:49 | 显示全部楼层 |阅读模式
求各位大神教一下怎么用一个74HC595控制三个4位的数码管
回复

使用道具 举报

ID:383177 发表于 2018-8-6 15:58 | 显示全部楼层

评分

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

查看全部评分

回复

使用道具 举报

ID:383439 发表于 2018-8-6 17:08 | 显示全部楼层
daijun 发表于 2018-8-6 15:58
坛子里就有:http://www.51hei.com/bbs/dpj-44575-1.html

坛子里那个讨论我也看过,可是还是不懂怎么去用一个595控制三个四位的数码管
回复

使用道具 举报

ID:383439 发表于 2018-8-6 17:38 | 显示全部楼层
daijun 发表于 2018-8-6 15:58
坛子里就有:http://www.51hei.com/bbs/dpj-44575-1.html

坛子里的讨论没有说到具体的方法
回复

使用道具 举报

ID:7485 发表于 2018-8-6 18:56 | 显示全部楼层
本帖最后由 ahshmj 于 2018-8-6 18:59 编辑

看不懂你说的是什么?“三个四位的数码管”?

如果就一个数码管(就显示一位数)用一个595可以作为段驱动。如果有两位或以上,就需要两片595,一个做段驱动,一个做位驱动。
如果你是“三个四位的数码管”我可以理解成3*4=12个数码管,如果是这样,你就需要3片595,一片段驱动,两片位驱动(级联)。
回复

使用道具 举报

ID:273583 发表于 2018-8-6 20:42 | 显示全部楼层
弄懂74HC595,看这里,本人在学习中整理。其实,理解74HC595,记住它可以 锁存 数据,这样 就理解了!前一秒比如用P1口送出数据到74HC595(U1), 锁存;下一个秒用同一个P1口送到74HC595(U2);分时输出,这样就理解了

74HC595的中文资料-主要是针对时序图.docx

312.2 KB, 下载次数: 41

回复

使用道具 举报

ID:273583 发表于 2018-8-6 20:43 | 显示全部楼层
若想更明白 ,可以看 云龙单片机  ---点阵部分,讲的 透彻!
回复

使用道具 举报

ID:383652 发表于 2018-8-7 08:34 | 显示全部楼层
这个网上一搜一堆程序吧
回复

使用道具 举报

ID:285686 发表于 2018-8-7 11:37 | 显示全部楼层
我发一个完整的程序,看一下就明白了。可以直接用
  1. #include <AT89X51.H>

  2. unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  3. unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  4. unsigned char  disbuf[8]={0,0,0,0,0,0,0,0};


  5. //-----------------------------------------------------------------------------
  6. // 函数原形定义
  7. #define uchar unsigned char

  8. void main (void);                                        // 主函数
  9. void LED4_Display (void);                        // LED显示
  10. void LED_OUT(uchar X);                                // LED单字节串行移位函数

  11. unsigned char code LED_0F[];                // LED字模表

  12. sbit DIO = P1^0;                                //串行数据输入
  13. sbit RCLK  = P1^1;                                //时钟脉冲信号——上升沿有效
  14. sbit SCLK = P1^2;                                //打入信号————上升沿有效

  15. //-----------------------------------------------------------------------------
  16. // 全局变量
  17. uchar LED[8];        //用于LED的8位显示缓存


  18. //*****************************************************************************
  19. // 主程序
  20. //
  21. void main (void)
  22. {

  23.         LED[0]=1;
  24.         LED[1]=2;
  25.         LED[2]=3;
  26.         LED[3]=4;
  27.         LED[4]=5;
  28.         LED[5]=6;
  29.         LED[6]=7;
  30.         LED[7]=8;

  31.         while(1)
  32.         {
  33.                 LED4_Display ();
  34.         }
  35. }

  36. void LED4_Display (void)
  37. {
  38.         unsigned char code *led_table;          // 查表指针
  39.         uchar i;
  40.         //显示第1位
  41.         led_table = LED_0F + LED[0];
  42.         i = *led_table;

  43.         LED_OUT(i);                       
  44.         LED_OUT(0x01);               

  45.         RCLK = 0;
  46.         RCLK = 1;
  47.         //显示第2位
  48.         led_table = LED_0F + LED[1];
  49.         i = *led_table;

  50.         LED_OUT(i);               
  51.         LED_OUT(0x02);               

  52.         RCLK = 0;
  53.         RCLK = 1;
  54.         //显示第3位
  55.         led_table = LED_0F + LED[2];
  56.         i = *led_table;

  57.         LED_OUT(i);                       
  58.         LED_OUT(0x04);       

  59.         RCLK = 0;
  60.         RCLK = 1;
  61.         //显示第4位
  62.         led_table = LED_0F + LED[3];
  63.         i = *led_table;

  64.         LED_OUT(i);                       
  65.         LED_OUT(0x08);               

  66.         RCLK = 0;
  67.         RCLK = 1;
  68.         //显示第5位
  69.         led_table = LED_0F + LED[4];
  70.         i = *led_table;

  71.         LED_OUT(i);                       
  72.         LED_OUT(0x10);       

  73.         RCLK = 0;
  74.         RCLK = 1;
  75.         //显示第6位
  76.         led_table = LED_0F + LED[5];
  77.         i = *led_table;

  78.         LED_OUT(i);                       
  79.         LED_OUT(0x20);       

  80.         RCLK = 0;
  81.         RCLK = 1;
  82.         //显示第7位
  83.         led_table = LED_0F + LED[6];
  84.         i = *led_table;

  85.         LED_OUT(i);                       
  86.         LED_OUT(0x40);       

  87.         RCLK = 0;
  88.         RCLK = 1;
  89.         //显示第8位
  90.         led_table = LED_0F + LED[7];
  91.         i = *led_table;

  92.         LED_OUT(i);               
  93.         LED_OUT(0x80);       

  94.         RCLK = 0;
  95.         RCLK = 1;
  96. }

  97. void LED_OUT(uchar X)
  98. {
  99.         uchar i;
  100.         for(i=8;i>=1;i--)
  101.         {
  102.                 if (X&0x80) DIO=1; else DIO=0;
  103.                 X<<=1;
  104.                 SCLK = 0;
  105.                 SCLK = 1;
  106.         }
  107. }

  108. unsigned char code LED_0F[] =
  109. {// 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    F    -
  110.         0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
  111. };



复制代码
回复

使用道具 举报

ID:101726 发表于 2018-8-13 12:10 | 显示全部楼层
danpianji3501 发表于 2018-8-6 20:43
若想更明白 ,可以看 云龙单片机  ---点阵部分,讲的 透彻!

我下载了,在 016-LED点阵驱动原理及应用 没有看到595啊介绍啊
回复

使用道具 举报

ID:384109 发表于 2018-8-13 13:46 | 显示全部楼层
laoguang 发表于 2018-8-13 12:10
我下载了,在 016-LED点阵驱动原理及应用 没有看到595啊介绍啊

你需要看595的数据手册,595是串行数据输入,并行数据输出,8个输出引脚,数码管一般说的是8段的数码管,就是显示一个8字加小数点。多位的数码管一般用动态显示的方式驱动,可以找动态显示的资料。如果使用595连接数码管的段引脚,那就需要一个其他的芯片连接数码管的位引脚。595主要是用来减少使用单片机引脚的数量。
回复

使用道具 举报

ID:340820 发表于 2018-8-13 15:08 | 显示全部楼层
Q0--Q7: 八位并行输出端,可以直接控制数码管的8个段。
Q7': 级联输出端。将它接下一个595的DS端。
DS: 串行数据输入端,级联的话接上一级的Q7'。
回复

使用道具 举报

ID:111634 发表于 2018-8-13 18:31 | 显示全部楼层
本帖最后由 zl2168 于 2018-8-14 17:59 编辑

介绍你几个参考案例,自己去对照研究。
实例59  74LS595串行选通8LED数码管动态显示
实例59 74LS595×2选通8位LED动态显示.rar (45.12 KB, 下载次数: 45)
回复

使用道具 举报

ID:383439 发表于 2018-8-16 14:24 | 显示全部楼层
ahshmj 发表于 2018-8-6 18:56
看不懂你说的是什么?“三个四位的数码管”?

如果就一个数码管(就显示一位数)用一个595可以作为段驱 ...

是总共十二个数码管把读取到的数字动态显示,用三个74hc595能做到吗?
回复

使用道具 举报

ID:386381 发表于 2018-8-16 17:50 来自手机 | 显示全部楼层
看595PDF有详细介绍,典型应用电路
回复

使用道具 举报

ID:386692 发表于 2018-8-16 21:13 | 显示全部楼层
Bryant1 发表于 2018-8-16 14:24
是总共十二个数码管把读取到的数字动态显示,用三个74hc595能做到吗?

两只595控12个com,一只595控ABCDEFGH,不过估计动态显示效果一般。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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