极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 迷你强

Arduino入门教程--第十八课--Arduino驱动数码管

  [复制链接]
发表于 2014-6-3 21:14:34 | 显示全部楼层
含有函数接口版的代码,感兴趣的可以封装成类哦。

  1. char num_tube_char[36] = "-0123456789ABCDEFGHIJLNOPQUY";
  2. byte num_tube_code[36] = {
  3.                             0b00000010,  /* - */
  4. 0b11111100,0b01100000,0b11011010,0b11110010,
  5. 0b01100110,0b10110110,0b10111110,0b11100000,
  6. 0b11111110,0b11110110, /*from 0 to 9*/
  7. 0b11101110,0b00111110,0b10011100,0b01111010,
  8. 0b10011110,0b10001110,0b10111101,0b01101110,
  9. 0b00001100,0b01110000,0b00011100,0b11101100,
  10. 0b00111010,0b11001110,0b11100110,0b01111100,
  11. 0b01110110  /*from A to y*/
  12.                           };
  13.     const int A_port = 9;
  14.     const int B_port = 8;
  15.     const int C_port = 2;
  16.     const int D_port = 3;
  17.     const int E_port = 4;
  18.     const int F_port = 5;
  19.     const int G_port = 6;
  20.     const int dot_port = 7;
  21.      
  22.     int port[8] = {A_port, B_port, C_port, D_port, E_port, F_port, G_port, dot_port};

  23.     void setup()
  24.     {
  25.       pinMode(A_port, OUTPUT);
  26.       pinMode(B_port, OUTPUT);
  27.       pinMode(C_port, OUTPUT);
  28.       pinMode(D_port, OUTPUT);
  29.       pinMode(E_port, OUTPUT);
  30.       pinMode(F_port, OUTPUT);
  31.       pinMode(G_port, OUTPUT);
  32.       pinMode(dot_port, OUTPUT);
  33.     }
  34.     void loop()
  35.     {
  36.       char word[] = {"HAHA0123456789"};
  37.       for(int i=0; word[i]!='\0'; i++)   Display(word[i]);
  38.     }  
  39.     /*  Write in code of charactor and display in numerical tube  

  40. */
  41.     void WriteIn(byte b)
  42.     {
  43.       for(int i=1; i<=8; i++)
  44.          digitalWrite(port[i],bitRead(b,i));
  45.     }
  46.     void Display(const char ch)
  47.    {
  48.      /*Search Index from Table and find the code of charactor ch*/
  49.      for( int i = 0; i < 36; i++)
  50.      {
  51.        if(ch == num_tube_char[i])
  52.        {
  53.          WriteIn(num_tube_code[i]);
  54.          break;
  55.        }
  56.      }
  57.    }
复制代码
回复 支持 反对

使用道具 举报

发表于 2014-7-5 01:25:05 | 显示全部楼层
搞完后没反应,原来我的数码管是共阴的!0~9显示,OK!!
回复 支持 反对

使用道具 举报

发表于 2014-7-6 15:45:00 | 显示全部楼层
刚开始学,请问digitalWrite( j, n[i][j] )是什么意思?是把什么值写进j,在函数表里也没查到[]是什么。谢谢
回复 支持 反对

使用道具 举报

发表于 2014-7-31 12:22:29 | 显示全部楼层
chaoser 发表于 2013-8-12 15:23
我用的数码管是5101BS,共阳。其实跟5011B完全一样的,不过也贴个原理图吧:

16楼说数组应该放在循环外, ...

挺好 很精炼
回复 支持 反对

使用道具 举报

发表于 2014-8-10 11:23:29 | 显示全部楼层
arduino_ykk 发表于 2013-5-18 12:54
看不懂数码管的引脚图... = =

从网上搜了一下,然后画了如下图。希望对小白有帮助。

赞一个,mark,mark,mark.
回复 支持 反对

使用道具 举报

发表于 2014-8-10 11:34:25 | 显示全部楼层
nhejequjq 发表于 2014-6-3 21:13

真好啊,学习了。mark
回复 支持 反对

使用道具 举报

发表于 2014-9-2 09:12:07 | 显示全部楼层
chaoser 发表于 2013-8-12 15:23
我用的数码管是5101BS,共阳。其实跟5011B完全一样的,不过也贴个原理图吧:

16楼说数组应该放在循环外, ...

每次看你的贴都有很多启发,牛逼!
回复 支持 反对

使用道具 举报

发表于 2014-10-11 10:50:35 | 显示全部楼层
支持,就是还要在提炼,太麻烦了,一个数组就可以搞定的东西,弄得太烦了!!!
回复 支持 反对

使用道具 举报

发表于 2014-11-26 19:19:53 | 显示全部楼层
补充一下

我的是共阴极数码管,接法,把13脚换成GND脚。

代码 digitalWrite(j,n[i][j-2]); 改成 digitalWrite(j, abs(n[i][j-2] - 1));

齐活,第一次发帖,希望多多关照
回复 支持 反对

使用道具 举报

发表于 2014-12-15 10:46:21 | 显示全部楼层
刷新显示是动态显示,它的亮度是不会有静态显示的高的
回复 支持 反对

使用道具 举报

发表于 2015-1-19 14:11:05 | 显示全部楼层
我用4片595级联4个数码管 然后用4个数字IO 接4个按键,在按下当按键的时候 数码管 显示一组数字   ,功能正常 但是在用手触摸 按键引脚的时候会出现数码管显示 变乱的情况  怎么解决
回复 支持 反对

使用道具 举报

发表于 2015-1-25 22:15:23 | 显示全部楼层
void setup() {
&#160;&#160;for(int n=2;n<=8;n++) {
&#160;&#160;&#160;&#160;pinMode(n,OUTPUT);
&#160;&#160;}
}
void loop() {
&#160;&#160;int array[18][7] = {
&#160;&#160;&#160;&#160;{1,&#160;0,&#160;1,&#160;1,&#160;0,&#160;1,&#160;1},//5
&#160;&#160;&#160;&#160;{1,&#160;1,&#160;0,&#160;1,&#160;1,&#160;0,&#160;1},//2
&#160;&#160;&#160;&#160;{1,&#160;1,&#160;1,&#160;1,&#160;1,&#160;1,&#160;0},//0
&#160;&#160;&#160;&#160;{0,&#160;1,&#160;1,&#160;0,&#160;0,&#160;0,&#160;0},//1
&#160;&#160;&#160;&#160;{1,&#160;1,&#160;1,&#160;1,&#160;0,&#160;0,&#160;1},//3
&#160;&#160;&#160;&#160;{0,&#160;1,&#160;1,&#160;0,&#160;0,&#160;0,&#160;0},//1
&#160;&#160;&#160;&#160;{0,&#160;1,&#160;1,&#160;0,&#160;0,&#160;1,&#160;1},//4
&#160;&#160;&#160;&#160;{0,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0},
&#160;&#160;&#160;&#160;{1,&#160;1,&#160;1,&#160;1,&#160;0,&#160;0,&#160;1},//3
&#160;&#160;&#160;&#160;{1,&#160;0,&#160;1,&#160;1,&#160;1,&#160;1,&#160;1},//6
&#160;&#160;&#160;&#160;{1,&#160;1,&#160;1,&#160;0,&#160;0,&#160;0,&#160;0},//7
&#160;&#160;&#160;&#160;{1,&#160;1,&#160;1,&#160;1,&#160;0,&#160;0,&#160;1},//3
&#160;&#160;&#160;&#160;{1,&#160;1,&#160;1,&#160;1,&#160;1,&#160;1,&#160;1},//8
&#160;&#160;&#160;&#160;{1,&#160;1,&#160;1,&#160;1,&#160;0,&#160;0,&#160;1},//3
&#160;&#160;&#160;&#160;{1,&#160;1,&#160;1,&#160;0,&#160;0,&#160;0,&#160;0},//7
&#160;&#160;&#160;&#160;{0,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0},
&#160;&#160;&#160;&#160;{0,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0},
&#160;&#160;&#160;&#160;{0,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0,&#160;0},
&#160;&#160;};
&#160;&#160;
&#160;&#160;for (int i = 0; i < 18; i++) {
&#160;&#160;&#160;&#160;for (int j = 0; j < 7; j++) {
&#160;&#160;&#160;&#160;&#160;&#160;digitalWrite(j + 2, array[j]);
&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;delay(1000);
&#160;&#160;}
}

共阴简单修改,自己娱乐
回复 支持 反对

使用道具 举报

发表于 2015-3-17 11:37:48 | 显示全部楼层
arduino_ykk 发表于 2013-5-18 12:54
看不懂数码管的引脚图... = =

从网上搜了一下,然后画了如下图。希望对小白有帮助。

这值得赞一个!!!
回复 支持 反对

使用道具 举报

发表于 2015-3-20 10:15:42 | 显示全部楼层
SpiderMan 发表于 2013-7-28 00:37
**** 作者被禁止或删除 内容自动屏蔽 ****

我的数码管显示时候总是显示不全,你碰到过这个情况没
回复 支持 反对

使用道具 举报

发表于 2015-4-3 21:08:01 | 显示全部楼层
<一一巛 发表于 2013-3-4 16:51
void setup() {   
   for(int n=1;n

简洁 明了           
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-3-28 23:25 , Processed in 0.045954 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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