[DemoCode下载] NUC131在Arduino下驱动七段数码管

[复制链接]
 楼主| 稳稳の幸福 发表于 2024-2-28 10:18 | 显示全部楼层 |阅读模式
  1. /*
  2.                 Servn Segment Display

  3.                    A
  4.                 _______
  5.              F|         |B
  6.               |    G    |
  7.                 _______
  8.              E|         |C
  9.               |         |
  10.                 _______     o H
  11.                    D

  12.                 This example code is in the public domain.
  13. */
  14. #define SEG 8

  15. /* SegA,SegB,SegC,SegD,SegE,SegF,SegG,SegH */
  16. /* Note : SegE and SegF does not supported on NuEdu-NUC131 */
  17. int Segment[]={18,19,20,21,22,23,10,11};

  18. int Control[]={12,13};  /* Seven segment display 1 , 2 */
  19.             
  20.                      /*A,B,C,D,E,F,G,H */
  21. int Number[10][SEG]={ {1,1,1,1,1,1,0,0},  //0
  22.                       {0,1,1,0,0,0,0,0},  //1
  23.                       {1,1,0,1,1,0,1,0},  //2
  24.                       {1,1,1,1,0,0,1,0},  //3
  25.                       {0,1,1,0,0,1,1,0},  //4
  26.                       {1,0,1,1,0,1,1,0},  //5
  27.                       {0,0,1,1,1,1,1,0},  //6
  28.                       {1,1,1,0,0,0,0,0},  //7
  29.                       {1,1,1,1,1,1,1,0},  //8
  30.                       {1,1,1,1,0,1,1,0},  //9   
  31.                   };
  32. void setup() {  
  33.   // put your setup code here, to run once:
  34.   int i,j;
  35.   for(i=0;i<SEG;i++)
  36.     pinMode(Segment[i],OUTPUT);
  37.   pinMode(Control[0],OUTPUT);  /* Even Segment Display 1 */
  38.   pinMode(Control[1],OUTPUT);  /* Even Segment Display 2 */
  39. }

  40. void loop() {
  41.   // put your main code here, to run repeatedly:
  42.   int i,j,k,c;
  43.   for(i=0;i<10;i++)  
  44.   {
  45.       for(j=0;j<10;j++)  
  46.       {
  47.         c=100;
  48.         while(c--)
  49.         {
  50.          lightNumber(1,i);  //Select Even Segment Display 2 and disply number i
  51.          delay(2);
  52.          lightNumber(0,j);  //Select Even Segment Display 1 and disply number j
  53.          delay(2);         
  54.         }
  55.       }
  56.   }  
  57. }


  58. void lightNumber(int ctrl,int num)
  59. {
  60.   int i;
  61.   if(ctrl==0)  
  62.   {
  63.     digitalWrite(Control[ctrl],LOW);
  64.     digitalWrite(Control[ctrl+1],HIGH);
  65.   }
  66.   else
  67.   {
  68.     digitalWrite(Control[ctrl],LOW);
  69.     digitalWrite(Control[ctrl-1],HIGH);
  70.   }
  71.   for(i=0;i<SEG;i++)
  72.     digitalWrite(Segment[i],!Number[num][i]);  
  73. }


 楼主| 稳稳の幸福 发表于 2024-2-28 10:19 | 显示全部楼层
其实在KEIL下驱动数码管也是用相同的方式。
天灵灵地灵灵 发表于 2024-2-28 14:47 | 显示全部楼层
用Arduino入门更容易。例子也丰富。
幸福小强 发表于 2024-2-28 16:23 | 显示全部楼层
看了半天终于看明白了,没有直接操作一个端口那种的好理解。这是一个IO一个IO的操作。
xinpian101 发表于 2024-2-28 20:16 | 显示全部楼层
这个写法挺不错,虽然效率有点低
您需要登录后才可以回帖 登录 | 注册

本版积分规则

203

主题

3409

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部