极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 弘毅

arduino学习笔记13 - 4位数码管实验

  [复制链接]
发表于 2012-10-8 17:53:59 | 显示全部楼层
我试过模拟口当数字用,可是好象不能用,电压好象才2.几伏而已, 是要加上拉电阻吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-8 18:33:30 | 显示全部楼层
hk386 发表于 2012-10-8 17:53
我试过模拟口当数字用,可是好象不能用,电压好象才2.几伏而已, 是要加上拉电阻吗

{:soso_e103:} 你是怎么使用的?我试过驱动其他传感器。。。貌似和D口没区别。直接一样用。
回复 支持 反对

使用道具 举报

发表于 2012-10-9 09:31:43 | 显示全部楼层
解决了模拟当数字使用了,都快忘记AVR的使用了,谢谢了啊
回复 支持 反对

使用道具 举报

发表于 2012-12-20 13:03:27 | 显示全部楼层
我一直觉得数码管的动态显示是个奇葩~知道什么意思从来不会写
回复 支持 反对

使用道具 举报

发表于 2013-2-9 21:43:54 | 显示全部楼层
非常用心,程式撰寫非常清楚
回复 支持 反对

使用道具 举报

发表于 2013-3-27 15:57:13 | 显示全部楼层
根据硬件连接图接了,怎么登不亮? 是不是需要接GND? 谁可以帮忙解决我的问题....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-27 21:29:02 | 显示全部楼层
Mei_Ling 发表于 2013-3-27 15:57
根据硬件连接图接了,怎么登不亮? 是不是需要接GND? 谁可以帮忙解决我的问题....

4位数码管的管脚定义有好几种。。如果买到的刚好是和帖子里不一样引脚定义的,那就按照帖子接线就没法驱动了。
回复 支持 反对

使用道具 举报

发表于 2013-3-28 13:29:45 | 显示全部楼层
谢谢!
我的数位数码管型号是CAI5461AH, 外观和帖子的一样,不知帖子里的是不是和我的型号一样?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-28 15:00:06 | 显示全部楼层
Mei_Ling 发表于 2013-3-28 13:29
谢谢!
我的数位数码管型号是CAI5461AH, 外观和帖子的一样,不知帖子里的是不是和我的型号一样?

这个需要看引脚定义,你如果有你管子的引脚定义图,可以发上来。。大家看看
回复 支持 反对

使用道具 举报

发表于 2013-3-28 22:12:15 | 显示全部楼层
没有管子的引脚定义图
我在试试看, 谢谢你了!
回复 支持 反对

使用道具 举报

发表于 2013-4-16 16:31:27 | 显示全部楼层
这样回复 能到高级会员不。。
回复 支持 反对

使用道具 举报

发表于 2013-7-6 21:45:26 | 显示全部楼层
本帖最后由 庚影! 于 2013-7-6 21:56 编辑

用楼主的秒表代码出现一个问题 就是所有数值显示为0无法变化
稍微修改了下 能运行了 时间也不用去调整了
不过我也是新人 不知道如何DEBUG所以也没找到是哪的问题。。{:soso_e142:}

  1. //设置阴极接口
  2. int a = 1;
  3. int b = 2;
  4. int c = 3;
  5. int d = 4;
  6. int e = 5;
  7. int f = 6;
  8. int g = 7;
  9. int p = 8;
  10. //设置阳极接口
  11. int d4 = 9;
  12. int d3 = 10;
  13. int d2 = 11;
  14. int d1 = 12;
  15. //设置变量
  16. long n = 0;
  17. long n10 = 0;
  18. long n100 = 0;
  19. long n1000 = 0;
  20. int x = 100;
  21. int del = 55;  //此处数值对时钟进行微调

  22. byte segs[7] = { a, b, c, d, e, f, g };

  23. byte seven_seg_digits[10][7] = { { 0,0,0,0,0,0,1 },  // = 0
  24.                                  { 1,0,0,1,1,1,1 },  // = 1
  25.                                  { 0,0,1,0,0,1,0 },  // = 2
  26.                                  { 0,0,0,0,1,1,0 },  // = 3
  27.                                  { 1,0,0,1,1,0,0 },  // = 4
  28.                                  { 0,1,0,0,1,0,0 },  // = 5
  29.                                  { 0,1,0,0,0,0,0 },  // = 6
  30.                                  { 0,0,0,1,1,1,1 },  // = 7
  31.                                  { 0,0,0,0,0,0,0 },  // = 8
  32.                                  { 0,0,0,0,1,0,0 }   // = 9
  33.                              };

  34. void setup()
  35. {
  36.   pinMode(d1, OUTPUT);
  37.   pinMode(d2, OUTPUT);
  38.   pinMode(d3, OUTPUT);
  39.   pinMode(d4, OUTPUT);
  40.   pinMode(a, OUTPUT);
  41.   pinMode(b, OUTPUT);
  42.   pinMode(c, OUTPUT);
  43.   pinMode(d, OUTPUT);
  44.   pinMode(e, OUTPUT);
  45.   pinMode(f, OUTPUT);
  46.   pinMode(g, OUTPUT);
  47.   pinMode(p, OUTPUT);
  48. }

  49. void loop()
  50. {
  51.         
  52.         long w = millis()/100;
  53. //这个是调用时间的函数
  54.         shownum(w);
  55. }

  56. void pickDigit(int x)  //定义pickDigit(x),其作用是开启dx端口
  57. {
  58.   digitalWrite(d1, LOW);
  59.   digitalWrite(d2, LOW);
  60.   digitalWrite(d3, LOW);
  61.   digitalWrite(d4, LOW);

  62.   switch(x)
  63.   {
  64.   case 1:
  65.     digitalWrite(d1, HIGH);
  66.     break;
  67.   case 2:
  68.     digitalWrite(d2, HIGH);
  69.     break;
  70.   case 3:
  71.     digitalWrite(d3, HIGH);
  72.     break;
  73.   default:
  74.     digitalWrite(d4, HIGH);
  75.     break;
  76.   }
  77. }

  78. void dispDec(int x)  //设定开启小数点
  79. {
  80.   digitalWrite(p, LOW);
  81. }

  82. void clearLEDs()  //清屏
  83. {
  84.   digitalWrite(a, HIGH);
  85.   digitalWrite(b, HIGH);
  86.   digitalWrite(c, HIGH);
  87.   digitalWrite(d, HIGH);
  88.   digitalWrite(e, HIGH);
  89.   digitalWrite(f, HIGH);
  90.   digitalWrite(g, HIGH);
  91.   digitalWrite(p, HIGH);
  92. }


  93. // 点亮对应数字的数码管
  94. void lightSegments(int x) {
  95.   for (int i = 0; i < 7; i++) {
  96.     digitalWrite(segs[i], seven_seg_digits[x][i]);
  97.   }
  98. }


  99. //这边是新加的函数 其实和楼主貌似差不多 但是为啥楼主的会出问题我也不知道
  100. void shownum (int x)
  101. {
  102.   
  103.   long x1 = x/1000%10;
  104.   long x10 = x/100%10;
  105.   long x100 = x/10%10;
  106.   long x1000 = x/1%10;
  107.   
  108.   
  109.   clearLEDs();
  110.   pickDigit(1);
  111.   lightSegments(x1);
  112.   delayMicroseconds(del);
  113.   
  114.   clearLEDs();
  115.   pickDigit(2);
  116.   lightSegments(x10);
  117.   delayMicroseconds(del);
  118.   
  119.   clearLEDs();
  120.   pickDigit(3);
  121.   dispDec(3);
  122.   lightSegments(x100);
  123.   delayMicroseconds(del);
  124.   
  125.   clearLEDs();
  126.   pickDigit(0);
  127.   lightSegments(x1000);
  128.   delayMicroseconds(del);
  129. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-7-20 13:43:08 | 显示全部楼层
注意啦 有些是共阴的,把楼主代码HIGH 和LOW 调转就可以啦

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2013-7-20 13:45:10 | 显示全部楼层
本帖最后由 enzotim 于 2013-7-20 13:46 编辑

共阴代码。。。。。。。。。
  1. //设置阴极接口

  2. int a = 1;

  3. int b = 2;

  4. int c = 3;

  5. int d = 4;

  6. int e = 5;

  7. int f = 6;

  8. int g = 7;

  9. int p = 8;

  10. //设置阳极接口

  11. int d4 = 9;

  12. int d3 = 10;

  13. int d2 = 11;

  14. int d1 = 12;

  15. //设置变量

  16. long n = 0;

  17. int x = 100;

  18. int del = 55;  //此处数值对时钟进行微调



  19. void setup()

  20. {

  21.   pinMode(d1, OUTPUT);

  22.   pinMode(d2, OUTPUT);

  23.   pinMode(d3, OUTPUT);

  24.   pinMode(d4, OUTPUT);

  25.   pinMode(a, OUTPUT);

  26.   pinMode(b, OUTPUT);

  27.   pinMode(c, OUTPUT);

  28.   pinMode(d, OUTPUT);

  29.   pinMode(e, OUTPUT);

  30.   pinMode(f, OUTPUT);

  31.   pinMode(g, OUTPUT);

  32.   pinMode(p, OUTPUT);

  33. }



  34. void loop()

  35. {

  36.   clearLEDs();

  37.   pickDigit(1);

  38.   pickNumber((n/x/1000)%10);

  39.   delayMicroseconds(del);



  40.   clearLEDs();

  41.   pickDigit(2);

  42.   pickNumber((n/x/100)%10);

  43.   delayMicroseconds(del);



  44.   clearLEDs();

  45.   pickDigit(3);

  46.   dispDec(3);

  47.   pickNumber((n/x/10)%10);

  48.   delayMicroseconds(del);



  49.   clearLEDs();

  50.   pickDigit(4);

  51.   pickNumber(n/x%10);

  52.   delayMicroseconds(del);



  53.   n++;



  54.   if (digitalRead(13) == LOW)

  55.   {

  56.     n = 0;

  57.   }

  58. }



  59. void pickDigit(int x)  //定义pickDigit(x),其作用是开启dx端口

  60. {

  61.   digitalWrite(d1, HIGH);

  62.   digitalWrite(d2, HIGH);

  63.   digitalWrite(d3, HIGH);

  64.   digitalWrite(d4, HIGH);



  65.   switch(x)

  66.   {

  67.   case 1:

  68.     digitalWrite(d1, LOW);

  69.     break;

  70.   case 2:

  71.     digitalWrite(d2, LOW);

  72.     break;

  73.   case 3:

  74.     digitalWrite(d3, LOW);

  75.     break;

  76.   default:

  77.     digitalWrite(d4, LOW);

  78.     break;

  79.   }

  80. }



  81. void pickNumber(int x)   //定义pickNumber(x),其作用是显示数字x

  82. {

  83.   switch(x)

  84.   {

  85.   default:

  86.     zero();

  87.     break;

  88.   case 1:

  89.     one();

  90.     break;

  91.   case 2:

  92.     two();

  93.     break;

  94.   case 3:

  95.     three();

  96.     break;

  97.   case 4:

  98.     four();

  99.     break;

  100.   case 5:

  101.     five();

  102.     break;

  103.   case 6:

  104.     six();

  105.     break;

  106.   case 7:

  107.     seven();

  108.     break;

  109.   case 8:

  110.     eight();

  111.     break;

  112.   case 9:

  113.     nine();

  114.     break;

  115.   }

  116. }



  117. void dispDec(int x)  //设定开启小数点

  118. {

  119.   digitalWrite(p, HIGH);

  120. }



  121. void clearLEDs()  //清屏

  122. {

  123.   digitalWrite(a, LOW);

  124.   digitalWrite(b, LOW);

  125.   digitalWrite(c, LOW);

  126.   digitalWrite(d, LOW);

  127.   digitalWrite(e, LOW);

  128.   digitalWrite(f, LOW);

  129.   digitalWrite(g, LOW);

  130.   digitalWrite(p, LOW);

  131. }



  132. void zero()  //定义数字0时阴极那些管脚开关

  133. {

  134.   digitalWrite(a, HIGH);

  135.   digitalWrite(b, HIGH);

  136.   digitalWrite(c, HIGH);

  137.   digitalWrite(d, HIGH);

  138.   digitalWrite(e, HIGH);

  139.   digitalWrite(f, HIGH);

  140.   digitalWrite(g, LOW);

  141. }



  142. void one()  //定义数字1时阴极那些管脚开关

  143. {

  144.   digitalWrite(a, LOW);

  145.   digitalWrite(b, HIGH);

  146.   digitalWrite(c, HIGH);

  147.   digitalWrite(d, LOW);

  148.   digitalWrite(e, LOW);

  149.   digitalWrite(f, LOW);

  150.   digitalWrite(g, LOW);

  151. }



  152. void two()  //定义数字2时阴极那些管脚开关

  153. {

  154.   digitalWrite(a, HIGH);

  155.   digitalWrite(b, HIGH);

  156.   digitalWrite(c, LOW);

  157.   digitalWrite(d, HIGH);

  158.   digitalWrite(e, HIGH);

  159.   digitalWrite(f, LOW);

  160.   digitalWrite(g, HIGH);

  161. }



  162. void three()  //定义数字3时阴极那些管脚开关

  163. {

  164.   digitalWrite(a, HIGH);

  165.   digitalWrite(b, HIGH);

  166.   digitalWrite(c, HIGH);

  167.   digitalWrite(d, HIGH);

  168.   digitalWrite(e, LOW);

  169.   digitalWrite(f, LOW);

  170.   digitalWrite(g, HIGH);

  171. }



  172. void four()  //定义数字4时阴极那些管脚开关

  173. {

  174.   digitalWrite(a, LOW);

  175.   digitalWrite(b, HIGH);

  176.   digitalWrite(c, HIGH);

  177.   digitalWrite(d, LOW);

  178.   digitalWrite(e, LOW);

  179.   digitalWrite(f, HIGH);

  180.   digitalWrite(g, HIGH);

  181. }



  182. void five()  //定义数字5时阴极那些管脚开关

  183. {

  184.   digitalWrite(a, HIGH);

  185.   digitalWrite(b, LOW);

  186.   digitalWrite(c, HIGH);

  187.   digitalWrite(d, HIGH);

  188.   digitalWrite(e, LOW);

  189.   digitalWrite(f, HIGH);

  190.   digitalWrite(g, HIGH);

  191. }



  192. void six()  //定义数字6时阴极那些管脚开关

  193. {

  194.   digitalWrite(a, HIGH);

  195.   digitalWrite(b, LOW);

  196.   digitalWrite(c, HIGH);

  197.   digitalWrite(d, HIGH);

  198.   digitalWrite(e, HIGH);

  199.   digitalWrite(f, HIGH);

  200.   digitalWrite(g, HIGH);

  201. }



  202. void seven()  //定义数字7时阴极那些管脚开关

  203. {

  204.   digitalWrite(a, HIGH);

  205.   digitalWrite(b, HIGH);

  206.   digitalWrite(c, HIGH);

  207.   digitalWrite(d, LOW);

  208.   digitalWrite(e, LOW);

  209.   digitalWrite(f, LOW);

  210.   digitalWrite(g, LOW);

  211. }



  212. void eight()  //定义数字8时阴极那些管脚开关

  213. {

  214.   digitalWrite(a, HIGH);

  215.   digitalWrite(b, HIGH);

  216.   digitalWrite(c, HIGH);

  217.   digitalWrite(d, HIGH);

  218.   digitalWrite(e, HIGH);

  219.   digitalWrite(f, HIGH);

  220.   digitalWrite(g, HIGH);

  221. }



  222. void nine()  //定义数字9时阴极那些管脚开关

  223. {

  224.   digitalWrite(a, HIGH);

  225.   digitalWrite(b, HIGH);

  226.   digitalWrite(c, HIGH);

  227.   digitalWrite(d, HIGH);

  228.   digitalWrite(e, LOW);

  229.   digitalWrite(f, HIGH);

  230.   digitalWrite(g, HIGH  );

  231. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-8-10 18:15:37 | 显示全部楼层
enzotim 发表于 2013-7-20 13:45
共阴代码。。。。。。。。。
//设置阴极接口


我的数码管就是共阴的,比如楼主的第一段代码,该亮的灭,该灭的亮!

感谢分享代码!
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-17 15:01 , Processed in 0.041523 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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