打印
[DemoCode下载]

NUC131在Arduino下驱动七段数码管

[复制链接]
215|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
稳稳の幸福|  楼主 | 2024-2-28 10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*
                Servn Segment Display

                   A
                _______
             F|         |B
              |    G    |
                _______
             E|         |C
              |         |
                _______     o H
                   D

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

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

int Control[]={12,13};  /* Seven segment display 1 , 2 */
            
                     /*A,B,C,D,E,F,G,H */
int Number[10][SEG]={ {1,1,1,1,1,1,0,0},  //0
                      {0,1,1,0,0,0,0,0},  //1
                      {1,1,0,1,1,0,1,0},  //2
                      {1,1,1,1,0,0,1,0},  //3
                      {0,1,1,0,0,1,1,0},  //4
                      {1,0,1,1,0,1,1,0},  //5
                      {0,0,1,1,1,1,1,0},  //6
                      {1,1,1,0,0,0,0,0},  //7
                      {1,1,1,1,1,1,1,0},  //8
                      {1,1,1,1,0,1,1,0},  //9   
                  };
void setup() {  
  // put your setup code here, to run once:
  int i,j;
  for(i=0;i<SEG;i++)
    pinMode(Segment[i],OUTPUT);
  pinMode(Control[0],OUTPUT);  /* Even Segment Display 1 */
  pinMode(Control[1],OUTPUT);  /* Even Segment Display 2 */
}

void loop() {
  // put your main code here, to run repeatedly:
  int i,j,k,c;
  for(i=0;i<10;i++)  
  {
      for(j=0;j<10;j++)  
      {
        c=100;
        while(c--)
        {
         lightNumber(1,i);  //Select Even Segment Display 2 and disply number i
         delay(2);
         lightNumber(0,j);  //Select Even Segment Display 1 and disply number j
         delay(2);         
        }
      }
  }  
}


void lightNumber(int ctrl,int num)
{
  int i;
  if(ctrl==0)  
  {
    digitalWrite(Control[ctrl],LOW);
    digitalWrite(Control[ctrl+1],HIGH);
  }
  else
  {
    digitalWrite(Control[ctrl],LOW);
    digitalWrite(Control[ctrl-1],HIGH);
  }
  for(i=0;i<SEG;i++)
    digitalWrite(Segment[i],!Number[num][i]);  
}


使用特权

评论回复
沙发
稳稳の幸福|  楼主 | 2024-2-28 10:19 | 只看该作者
其实在KEIL下驱动数码管也是用相同的方式。

使用特权

评论回复
板凳
天灵灵地灵灵| | 2024-2-28 14:47 | 只看该作者
用Arduino入门更容易。例子也丰富。

使用特权

评论回复
地板
幸福小强| | 2024-2-28 16:23 | 只看该作者
看了半天终于看明白了,没有直接操作一个端口那种的好理解。这是一个IO一个IO的操作。

使用特权

评论回复
5
xinpian101| | 2024-2-28 20:16 | 只看该作者
这个写法挺不错,虽然效率有点低

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

162

主题

3098

帖子

8

粉丝