加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Arduino学习笔记13(A) - 4位数码管实验

(2012-08-06 13:34:49)
标签:

it

分类: Arduino学习笔记
这次我们进行的实验是使用arduino驱动一块共阳四位数码管。驱动数码管限流电阻肯定是必不可少的,限流电阻有两种接法,一种是在d1-d4阳极接,总共接4颗。这种接法好处是需求电阻比较少,但是会产生每一位上显示不同数字亮度会不一样,1最亮,8最暗。另外一种接法就是在其他8个引脚上接,这种接法亮度显示均匀,但是用电阻较多。本次实验使用8颗220Ω电阻(因为没有100Ω电阻,所以使用220Ω的代替,100欧姆亮度会比较高)。

下图为4位数码管
http://image.geek-workshop.com/forum/201108/06/160835574p1707u7884749.jpg4位数码管实验" TITLE="Arduino学习笔记13(A) 4位数码管实验" />

4位数码管总共有12个引脚,小数点朝下正放在面前时,左下角为1,其他管脚顺序为逆时针旋转。左上角为最大的12号管脚。 
http://image.geek-workshop.com/forum/201108/06/160835ljla3hcdnwlwy7yz.jpg4位数码管实验" TITLE="Arduino学习笔记13(A) 4位数码管实验" />

下图为数码管的说明手册 
http://image.geek-workshop.com/forum/201108/06/160835wxvwvxieugkf7cx6.jpg4位数码管实验" TITLE="Arduino学习笔记13(A) 4位数码管实验" />

下面是硬件连接图 
http://image.geek-workshop.com/forum/201108/06/1608362k1sphkk1088sjz6.jpg4位数码管实验" TITLE="Arduino学习笔记13(A) 4位数码管实验" />

http://image.geek-workshop.com/forum/201108/06/161254f9j22l2qlfsjscdq.jpg4位数码管实验" TITLE="Arduino学习笔记13(A) 4位数码管实验" />

把下面的代码复制下载到控制板中,看看效果。 
ARDUINO 代码复制打印

  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. int del = 100;
  17. int buttoncount = 0;
  18. int loopcount = 0;
  19.  
  20. void setup()
  21. {
  22.   pinMode(d1, OUTPUT);
  23.   pinMode(d2, OUTPUT);
  24.   pinMode(d3, OUTPUT);
  25.   pinMode(d4, OUTPUT);
  26.   pinMode(a, OUTPUT);
  27.   pinMode(b, OUTPUT);
  28.   pinMode(c, OUTPUT);
  29.   pinMode(d, OUTPUT);
  30.   pinMode(e, OUTPUT);
  31.   pinMode(f, OUTPUT);
  32.   pinMode(g, OUTPUT);
  33.   pinMode(p, OUTPUT);
  34.   digitalWrite(a, HIGH);
  35.   digitalWrite(b, HIGH);
  36.   digitalWrite(c, HIGH);
  37.   digitalWrite(d, HIGH);
  38.   digitalWrite(e, HIGH);
  39.   digitalWrite(f, HIGH);
  40.   digitalWrite(g, HIGH);
  41.   digitalWrite(p, HIGH);
  42. }
  43.  
  44. void loop()
  45. {
  46.   roulette(4) //轮转效果
  47.   delay(100);
  48.   zigzag(2)   //Z字型效果
  49.   delay(100);
  50.   circles(4)  //圈状效果
  51.   delay(100);
  52. }
  53.  
  54. void pickDigit(int x)  //定义pickDigit(x),其作用是开启dx端口
  55. {
  56.   digitalWrite(d1, LOW);
  57.   digitalWrite(d2, LOW);
  58.   digitalWrite(d3, LOW);
  59.   digitalWrite(d4, LOW);
  60.  
  61.   switch(x)
  62.   {
  63.   case 1:
  64.     digitalWrite(d1, HIGH);
  65.     break;
  66.   case 2:
  67.     digitalWrite(d2, HIGH);
  68.     break;
  69.   case 3:
  70.     digitalWrite(d3, HIGH);
  71.     break;
  72.   default:
  73.     digitalWrite(d4, HIGH);
  74.     break;
  75.   }
  76. }
  77.  
  78. void clearLEDs()  //清屏
  79. {
  80.   digitalWrite(a, HIGH);
  81.   digitalWrite(b, HIGH);
  82.   digitalWrite(c, HIGH);
  83.   digitalWrite(d, HIGH);
  84.   digitalWrite(e, HIGH);
  85.   digitalWrite(f, HIGH);
  86.   digitalWrite(g, HIGH);
  87.   digitalWrite(p, HIGH);
  88. }
  89.  
  90. void roulette(int x)  //设置轮转效果
  91. {
  92.   loopcount = 0;
  93.   while (loopcount < x)
  94.   {
  95.     digitalWrite(a, LOW);
  96.     pickDigit(1);
  97.     delay(del);
  98.     pickDigit(2);
  99.     delay(del);
  100.     pickDigit(3);
  101.     delay(del);
  102.     pickDigit(4);
  103.     delay(del);
  104.     digitalWrite(a, HIGH);
  105.     digitalWrite(b, LOW);
  106.     delay(del);
  107.     digitalWrite(b, HIGH);
  108.     digitalWrite(c, LOW);
  109.     delay(del);
  110.     digitalWrite(c, HIGH);
  111.     digitalWrite(d, LOW);
  112.     delay(del);
  113.     pickDigit(3);
  114.     delay(del);
  115.     pickDigit(2);
  116.     delay(del);
  117.     pickDigit(1);
  118.     delay(del);
  119.     digitalWrite(d, HIGH);
  120.     digitalWrite(e, LOW);
  121.     delay(del);
  122.     digitalWrite(e, HIGH);
  123.     digitalWrite(f, LOW);
  124.     delay(del);
  125.     clearLEDs();
  126.     loopcount++;
  127.   }
  128. }
  129.  
  130. void zigzag(int x)  //设置Z字形效果
  131. {
  132.   loopcount = 0;
  133.   while(loopcount < x)
  134.   {
  135.     digitalWrite(a, LOW);
  136.     pickDigit(1);
  137.     delay(del);
  138.     pickDigit(2);
  139.     delay(del);
  140.     pickDigit(3);
  141.     delay(del);
  142.     pickDigit(4);
  143.     delay(del);
  144.     digitalWrite(a, HIGH);
  145.     digitalWrite(b, LOW);
  146.     delay(del);
  147.     digitalWrite(b, HIGH);
  148.     digitalWrite(g, LOW);
  149.     delay(del);
  150.     pickDigit(3);
  151.     delay(del);
  152.     pickDigit(2);
  153.     delay(del);
  154.     pickDigit(1);
  155.     delay(del);
  156.     digitalWrite(g, HIGH);
  157.     digitalWrite(e, LOW);
  158.     delay(del);
  159.     digitalWrite(e, HIGH);
  160.     digitalWrite(d, LOW);
  161.     delay(del);
  162.     pickDigit(2);
  163.     delay(del);
  164.     pickDigit(3);
  165.     delay(del);
  166.     pickDigit(4);
  167.     delay(del);
  168.     digitalWrite(d, HIGH);
  169.     digitalWrite(c, LOW);
  170.     delay(del);
  171.     digitalWrite(c, HIGH);
  172.     digitalWrite(g, LOW);
  173.     delay(del);
  174.     pickDigit(3);
  175.     delay(del);
  176.     pickDigit(2);
  177.     delay(del);
  178.     pickDigit(1);
  179.     delay(del);
  180.     digitalWrite(g, HIGH);
  181.     digitalWrite(f, LOW);
  182.     delay(del);
  183.     clearLEDs();
  184.     loopcount++;
  185.   }
  186. }
  187.  
  188. void circles(int x)  //设置圈状效果
  189. {
  190.   loopcount = 0;
  191.   while (loopcount < x)
  192.   {
  193.     digitalWrite(a, LOW);
  194.     digitalWrite(b, LOW);
  195.     digitalWrite(f, LOW);
  196.     digitalWrite(g, LOW);
  197.     pickDigit(1);
  198.     delay(250);
  199.     digitalWrite(a, HIGH);
  200.     digitalWrite(b, HIGH);
  201.     digitalWrite(f, HIGH);
  202.     digitalWrite(c, LOW);
  203.     digitalWrite(d, LOW);
  204.     digitalWrite(e, LOW);
  205.     pickDigit(2);
  206.     delay(250);
  207.     digitalWrite(a, LOW);
  208.     digitalWrite(b, LOW);
  209.     digitalWrite(f, LOW);
  210.     digitalWrite(c, HIGH);
  211.     digitalWrite(d, HIGH);
  212.     digitalWrite(e, HIGH);
  213.     pickDigit(3);
  214.     delay(250);
  215.     digitalWrite(a, HIGH);
  216.     digitalWrite(b, HIGH);
  217.     digitalWrite(f, HIGH);
  218.     digitalWrite(c, LOW);
  219.     digitalWrite(d, LOW);
  220.     digitalWrite(e, LOW);
  221.     pickDigit(4);
  222.     delay(250);
  223.     clearLEDs();
  224.     loopcount++;
  225.   }
  226. }

上面代码效果如下,为3种花样组成。 


转载自极客工坊: http://www.geek-workshop.com
创易工作室淘宝链接:http://itead.taobao.com

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有