极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23093|回复: 3

2片74HC595驱动4位数码管,怎么不成功?

[复制链接]
发表于 2013-12-30 12:55:28 | 显示全部楼层 |阅读模式
本帖最后由 万马奔腾 于 2013-12-30 13:17 编辑
  1. /*
  2. 2片595驱动4位共阴极数码管调试程序
  3. */



  4. int clockPin = 2;
  5. int latchPin =3;
  6. int dataPin = 5; //这里定义了那三个脚
  7. //-----------------------------------设置变量
  8. unsigned long i,j,v;         //计时用的变量
  9. long t=1000,x=60000,k=0,l=0,del=1000,jg=55;  //t表示秒(初始值为了开头能够看到60:00)  x表示分钟 del为减时间间隔  调整jg参数
  10. // 调整jg数值实现时间精度调整

  11. void setup()
  12. {               
  13.   //数码管接口(74HC595)管脚定义
  14.   pinMode(latchPin,OUTPUT);
  15.   pinMode(clockPin,OUTPUT);
  16.   pinMode(dataPin,OUTPUT); //让三个脚都是输出状态
  17.   delay(4000);
  18. }

  19. void loop()
  20. {
  21.   //-----------------------第1位显示数字
  22.   clearLEDs();
  23.   pick1Number(x/10000);
  24.   delayMicroseconds(jg);
  25.   //----------------------第2位显示数字
  26.   clearLEDs();
  27.   pick2Number(x%10000/1000);
  28.   delayMicroseconds(jg);
  29.   //-------------------时钟点:显示
  30.   clearLEDs();
  31.   dispDec();
  32.   delayMicroseconds(jg);
  33.   //--------------------第3位
  34.   clearLEDs();
  35.   pick3Number(t/10000);
  36.   delayMicroseconds(jg);
  37.   //--------------------第4位
  38.   clearLEDs();
  39.   pick4Number(t%10000/1000);
  40.   delayMicroseconds(jg);


  41.   //-------------时间计算值
  42.   if(t>=0 || x!=0)     t--;       //秒钟减1并自动循环
  43.   if(t<0&& x!=0)   t=60000;
  44.   if(t==60000&&x!=0)  x-=1000;      //分钟数减1

  45. }
  46. void pick1Number(int x)   //定义pickNumber(x),其作用是显示数字x
  47. {
  48.   switch(x)
  49.   {
  50.   default:
  51.     digitalWrite(latchPin,LOW);
  52.     shiftOut(dataPin,clockPin,MSBFIRST,B00011110);  //阴极Q7----Q0
  53.     shiftOut(dataPin,clockPin,MSBFIRST,B00111111);  //阳极Q7----Q0
  54.     digitalWrite(latchPin,HIGH);
  55.     break;
  56.   case 1:
  57.     digitalWrite(latchPin,LOW);
  58.     shiftOut(dataPin,clockPin,MSBFIRST,B00011110);  //阴极Q7----Q0
  59.     shiftOut(dataPin,clockPin,MSBFIRST,B00000110);  //阳极Q7----Q0
  60.     digitalWrite(latchPin,HIGH);
  61.     break;
  62.   case 2:
  63.     digitalWrite(latchPin,LOW);
  64.     shiftOut(dataPin,clockPin,MSBFIRST,B00011110);  //阴极Q7----Q0
  65.     shiftOut(dataPin,clockPin,MSBFIRST,B01011011);  //阳极Q7----Q0
  66.     digitalWrite(latchPin,HIGH);
  67.     break;
  68.   case 3:
  69.     digitalWrite(latchPin,LOW);
  70.     shiftOut(dataPin,clockPin,MSBFIRST,B00011110);  //阴极Q7----Q0
  71.     shiftOut(dataPin,clockPin,MSBFIRST,B01001111);  //阳极Q7----Q0
  72.     digitalWrite(latchPin,HIGH);
  73.     break;
  74.   case 4:
  75.     digitalWrite(latchPin,LOW);
  76.     shiftOut(dataPin,clockPin,MSBFIRST,B00011110);  //阴极Q7----Q0
  77.     shiftOut(dataPin,clockPin,MSBFIRST,B01100110);  //阳极Q7----Q0
  78.     digitalWrite(latchPin,HIGH);
  79.     break;
  80.   case 5:
  81.     digitalWrite(latchPin,LOW);
  82.     shiftOut(dataPin,clockPin,MSBFIRST,B00011110);  //阴极Q7----Q0
  83.     shiftOut(dataPin,clockPin,MSBFIRST,B01101101);  //阳极Q7----Q0
  84.     digitalWrite(latchPin,HIGH);
  85.     break;
  86.   case 6:
  87.     digitalWrite(latchPin,LOW);
  88.     shiftOut(dataPin,clockPin,MSBFIRST,B00011110);  //阴极Q7----Q0
  89.     shiftOut(dataPin,clockPin,MSBFIRST,B01111101);  //阳极Q7----Q0
  90.     digitalWrite(latchPin,HIGH);
  91.     break;
  92.   case 7:
  93.     digitalWrite(latchPin,LOW);
  94.     shiftOut(dataPin,clockPin,MSBFIRST,B00011110);  //阴极Q7----Q0
  95.     shiftOut(dataPin,clockPin,MSBFIRST,B00000111);  //阳极Q7----Q0
  96.     digitalWrite(latchPin,HIGH);
  97.     break;
  98.   case 8:
  99.     digitalWrite(latchPin,LOW);
  100.     shiftOut(dataPin,clockPin,MSBFIRST,B00011110);  //阴极Q7----Q0
  101.     shiftOut(dataPin,clockPin,MSBFIRST,B01111111);  //阳极Q7----Q0
  102.     digitalWrite(latchPin,HIGH);
  103.     break;
  104.   case 9:
  105.     digitalWrite(latchPin,LOW);
  106.     shiftOut(dataPin,clockPin,MSBFIRST,B00011110);  //阴极Q7----Q0
  107.     shiftOut(dataPin,clockPin,MSBFIRST,B01101111);  //阳极Q7----Q0
  108.     digitalWrite(latchPin,HIGH);
  109.     break;
  110.   }
  111. }
  112. void pick2Number(int x)   //定义pickNumber(x),其作用是显示数字x
  113. {
  114.   switch(x)
  115.   {
  116.   default:
  117.     digitalWrite(latchPin,LOW);
  118.     shiftOut(dataPin,clockPin,MSBFIRST,B00011101);  //阴极Q7----Q0
  119.     shiftOut(dataPin,clockPin,MSBFIRST,B00111111);  //阳极Q7----Q0
  120.     digitalWrite(latchPin,HIGH);
  121.     break;
  122.   case 1:
  123.     digitalWrite(latchPin,LOW);
  124.     shiftOut(dataPin,clockPin,MSBFIRST,B00011101);  //阴极Q7----Q0
  125.     shiftOut(dataPin,clockPin,MSBFIRST,B00000110);  //阳极Q7----Q0
  126.     digitalWrite(latchPin,HIGH);
  127.     break;
  128.   case 2:
  129.     digitalWrite(latchPin,LOW);
  130.     shiftOut(dataPin,clockPin,MSBFIRST,B00011101);  //阴极Q7----Q0
  131.     shiftOut(dataPin,clockPin,MSBFIRST,B01011011);  //阳极Q7----Q0
  132.     digitalWrite(latchPin,HIGH);
  133.     break;
  134.   case 3:
  135.     digitalWrite(latchPin,LOW);
  136.     shiftOut(dataPin,clockPin,MSBFIRST,B00011101);  //阴极Q7----Q0
  137.     shiftOut(dataPin,clockPin,MSBFIRST,B01001111);  //阳极Q7----Q0
  138.     digitalWrite(latchPin,HIGH);
  139.     break;
  140.   case 4:
  141.     digitalWrite(latchPin,LOW);
  142.     shiftOut(dataPin,clockPin,MSBFIRST,B00011101);  //阴极Q7----Q0
  143.     shiftOut(dataPin,clockPin,MSBFIRST,B01100110);  //阳极Q7----Q0
  144.     digitalWrite(latchPin,HIGH);
  145.     break;
  146.   case 5:
  147.     digitalWrite(latchPin,LOW);
  148.     shiftOut(dataPin,clockPin,MSBFIRST,B00011101);  //阴极Q7----Q0
  149.     shiftOut(dataPin,clockPin,MSBFIRST,B01101101);  //阳极Q7----Q0
  150.     digitalWrite(latchPin,HIGH);
  151.     break;
  152.   case 6:
  153.     digitalWrite(latchPin,LOW);
  154.     shiftOut(dataPin,clockPin,MSBFIRST,B00011101);  //阴极Q7----Q0
  155.     shiftOut(dataPin,clockPin,MSBFIRST,B01111101);  //阳极Q7----Q0
  156.     digitalWrite(latchPin,HIGH);
  157.     break;
  158.   case 7:
  159.     digitalWrite(latchPin,LOW);
  160.     shiftOut(dataPin,clockPin,MSBFIRST,B00011101);  //阴极Q7----Q0
  161.     shiftOut(dataPin,clockPin,MSBFIRST,B00000111);  //阳极Q7----Q0
  162.     digitalWrite(latchPin,HIGH);
  163.     break;
  164.   case 8:
  165.     digitalWrite(latchPin,LOW);
  166.     shiftOut(dataPin,clockPin,MSBFIRST,B00011101);  //阴极Q7----Q0
  167.     shiftOut(dataPin,clockPin,MSBFIRST,B01111111);  //阳极Q7----Q0
  168.     digitalWrite(latchPin,HIGH);
  169.     break;
  170.   case 9:
  171.     digitalWrite(latchPin,LOW);
  172.     shiftOut(dataPin,clockPin,MSBFIRST,B00011101);  //阴极Q7----Q0
  173.     shiftOut(dataPin,clockPin,MSBFIRST,B01101111);  //阳极Q7----Q0
  174.     digitalWrite(latchPin,HIGH);
  175.     break;
  176.   }
  177. }
  178. void pick3Number(int x)   //定义pickNumber(x),其作用是显示数字x
  179. {
  180.   switch(x)
  181.   {
  182.   default:
  183.     digitalWrite(latchPin,LOW);
  184.     shiftOut(dataPin,clockPin,MSBFIRST,B00011011);  //阴极Q7----Q0
  185.     shiftOut(dataPin,clockPin,MSBFIRST,B00111111);  //阳极Q7----Q0
  186.     digitalWrite(latchPin,HIGH);
  187.     break;
  188.   case 1:
  189.     digitalWrite(latchPin,LOW);
  190.     shiftOut(dataPin,clockPin,MSBFIRST,B00011011);  //阴极Q7----Q0
  191.     shiftOut(dataPin,clockPin,MSBFIRST,B00000110);  //阳极Q7----Q0
  192.     digitalWrite(latchPin,HIGH);
  193.     break;
  194.   case 2:
  195.     digitalWrite(latchPin,LOW);
  196.     shiftOut(dataPin,clockPin,MSBFIRST,B00011011);  //阴极Q7----Q0
  197.     shiftOut(dataPin,clockPin,MSBFIRST,B01011011);  //阳极Q7----Q0
  198.     digitalWrite(latchPin,HIGH);
  199.     break;
  200.   case 3:
  201.     digitalWrite(latchPin,LOW);
  202.     shiftOut(dataPin,clockPin,MSBFIRST,B00011011);  //阴极Q7----Q0
  203.     shiftOut(dataPin,clockPin,MSBFIRST,B01001111);  //阳极Q7----Q0
  204.     digitalWrite(latchPin,HIGH);
  205.     break;
  206.   case 4:
  207.     digitalWrite(latchPin,LOW);
  208.     shiftOut(dataPin,clockPin,MSBFIRST,B00011011);  //阴极Q7----Q0
  209.     shiftOut(dataPin,clockPin,MSBFIRST,B01100110);  //阳极Q7----Q0
  210.     digitalWrite(latchPin,HIGH);
  211.     break;
  212.   case 5:
  213.     digitalWrite(latchPin,LOW);
  214.     shiftOut(dataPin,clockPin,MSBFIRST,B00011011);  //阴极Q7----Q0
  215.     shiftOut(dataPin,clockPin,MSBFIRST,B01101101);  //阳极Q7----Q0
  216.     digitalWrite(latchPin,HIGH);
  217.     break;
  218.   case 6:
  219.     digitalWrite(latchPin,LOW);
  220.     shiftOut(dataPin,clockPin,MSBFIRST,B00011011);  //阴极Q7----Q0
  221.     shiftOut(dataPin,clockPin,MSBFIRST,B01111101);  //阳极Q7----Q0
  222.     digitalWrite(latchPin,HIGH);
  223.     break;
  224.   case 7:
  225.     digitalWrite(latchPin,LOW);
  226.     shiftOut(dataPin,clockPin,MSBFIRST,B00011011);  //阴极Q7----Q0
  227.     shiftOut(dataPin,clockPin,MSBFIRST,B00000111);  //阳极Q7----Q0
  228.     digitalWrite(latchPin,HIGH);
  229.     break;
  230.   case 8:
  231.     digitalWrite(latchPin,LOW);
  232.     shiftOut(dataPin,clockPin,MSBFIRST,B00011011);  //阴极Q7----Q0
  233.     shiftOut(dataPin,clockPin,MSBFIRST,B01111111);  //阳极Q7----Q0
  234.     digitalWrite(latchPin,HIGH);
  235.     break;
  236.   case 9:
  237.     digitalWrite(latchPin,LOW);
  238.     shiftOut(dataPin,clockPin,MSBFIRST,B00011011);  //阴极Q7----Q0
  239.     shiftOut(dataPin,clockPin,MSBFIRST,B01101111);  //阳极Q7----Q0
  240.     digitalWrite(latchPin,HIGH);
  241.     break;
  242.   }
  243. }
  244. void pick4Number(int x)   //定义pickNumber(x),其作用是显示数字x
  245. {
  246.   switch(x)
  247.   {
  248.   default:
  249.     digitalWrite(latchPin,LOW);
  250.     shiftOut(dataPin,clockPin,MSBFIRST,B00010111);  //阴极Q7----Q0
  251.     shiftOut(dataPin,clockPin,MSBFIRST,B00111111);  //阳极Q7----Q0
  252.     digitalWrite(latchPin,HIGH);
  253.     break;
  254.   case 1:
  255.     digitalWrite(latchPin,LOW);
  256.     shiftOut(dataPin,clockPin,MSBFIRST,B00010111);  //阴极Q7----Q0
  257.     shiftOut(dataPin,clockPin,MSBFIRST,B00000110);  //阳极Q7----Q0
  258.     digitalWrite(latchPin,HIGH);
  259.     break;
  260.   case 2:
  261.     digitalWrite(latchPin,LOW);
  262.     shiftOut(dataPin,clockPin,MSBFIRST,B00010111);  //阴极Q7----Q0
  263.     shiftOut(dataPin,clockPin,MSBFIRST,B01011011);  //阳极Q7----Q0
  264.     digitalWrite(latchPin,HIGH);
  265.     break;
  266.   case 3:
  267.     digitalWrite(latchPin,LOW);
  268.     shiftOut(dataPin,clockPin,MSBFIRST,B00010111);  //阴极Q7----Q0
  269.     shiftOut(dataPin,clockPin,MSBFIRST,B01001111);  //阳极Q7----Q0
  270.     digitalWrite(latchPin,HIGH);
  271.     break;
  272.   case 4:
  273.     digitalWrite(latchPin,LOW);
  274.     shiftOut(dataPin,clockPin,MSBFIRST,B00010111);  //阴极Q7----Q0
  275.     shiftOut(dataPin,clockPin,MSBFIRST,B01100110);  //阳极Q7----Q0
  276.     digitalWrite(latchPin,HIGH);
  277.     break;
  278.   case 5:
  279.     digitalWrite(latchPin,LOW);
  280.     shiftOut(dataPin,clockPin,MSBFIRST,B00010111);  //阴极Q7----Q0
  281.     shiftOut(dataPin,clockPin,MSBFIRST,B01101101);  //阳极Q7----Q0
  282.     digitalWrite(latchPin,HIGH);
  283.     break;
  284.   case 6:
  285.     digitalWrite(latchPin,LOW);
  286.     shiftOut(dataPin,clockPin,MSBFIRST,B00010111);  //阴极Q7----Q0
  287.     shiftOut(dataPin,clockPin,MSBFIRST,B01111101);  //阳极Q7----Q0
  288.     digitalWrite(latchPin,HIGH);
  289.     break;
  290.   case 7:
  291.     digitalWrite(latchPin,LOW);
  292.     shiftOut(dataPin,clockPin,MSBFIRST,B00010111);  //阴极Q7----Q0
  293.     shiftOut(dataPin,clockPin,MSBFIRST,B00000111);  //阳极Q7----Q0
  294.     digitalWrite(latchPin,HIGH);
  295.     break;
  296.   case 8:
  297.     digitalWrite(latchPin,LOW);
  298.     shiftOut(dataPin,clockPin,MSBFIRST,B00010111);  //阴极Q7----Q0
  299.     shiftOut(dataPin,clockPin,MSBFIRST,B01111111);  //阳极Q7----Q0
  300.     digitalWrite(latchPin,HIGH);
  301.     break;
  302.   case 9:
  303.     digitalWrite(latchPin,LOW);
  304.     shiftOut(dataPin,clockPin,MSBFIRST,B00010111);  //阴极Q7----Q0
  305.     shiftOut(dataPin,clockPin,MSBFIRST,B01101111);  //阳极Q7----Q0
  306.     digitalWrite(latchPin,HIGH);
  307.     break;
  308.   }
  309. }
  310. void dispDec()  //设定开启时钟点:
  311. {
  312.   digitalWrite(latchPin,LOW);
  313.   shiftOut(dataPin,clockPin,MSBFIRST,B00001111);  //阴极Q7----Q0
  314.   shiftOut(dataPin,clockPin,MSBFIRST,B10000000);  //阳极Q7----Q0
  315.   digitalWrite(latchPin,HIGH);
  316. }
  317. void clearLEDs()  //清屏
  318. {
  319.   digitalWrite(latchPin,LOW);
  320.   shiftOut(dataPin,clockPin,MSBFIRST,B00011111);  //阴极Q7----Q0
  321.   shiftOut(dataPin,clockPin,MSBFIRST,B00000000);  //阳极Q7----Q0
  322.   digitalWrite(latchPin,HIGH);
  323. }


复制代码
主要表现:
1.显示的数值不对 乱码。
2.屏幕闪得比较厉害。

接线示意图:
靠近ARDUINO的595接数码管
Q0----A  Q1---B  Q2----C  Q3---D Q4---E Q5----F Q6---G  Q7---时钟的阳极)
另一片595接数码管的管脚
Q0--d1  Q1---d2 Q2----d3  Q3---d4 Q4---d5(时钟点的阴极)

问题是不是驱动电流不够啊!需要ULN2803?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-12-30 15:49:21 | 显示全部楼层
没搞过,不过建议你先驱动一根根管子试试看能不能找到一定的条件
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-30 17:59:26 | 显示全部楼层
一根试过了~
回复 支持 反对

使用道具 举报

发表于 2013-12-30 22:26:49 | 显示全部楼层
本帖最后由 pww999 于 2013-12-30 22:30 编辑

我试过这个可以

http://www.geek-workshop.com/for ... thread&tid=7415
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 04:27 , Processed in 0.058116 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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