Arduino(二)——数码管显示(不同程序)

——这节,我们要用一位数码管显示0~9

但是在学习前,我们需要了解一些东西:

1.与 的运算

与运算
0&0=00&1=01&1=11&0=0

即   两个同时为1 结果才为1,否则为0

2.或 的运算

或运算
0|0=00|1=11|1=11|0=1

一个1 就是1,否则为0

3

十六位进制,二进制的对应关系
000004010081000c1100
100015010191001d1101
2001060110a1010e1110
3001170111b1011f1111

我们接下来先来看一串代码

//显示数字3
int value = 0x4F;
void setup()
{
 for (int i = 2 ; i < 9; i++)
{
 pinMode(i , OUTPUT);
}
}

void loop(){
for (int i = 2 ; i < 9; i++ )
{
 digitalWrite(i,value&0x01);
 value >>= 1;
}
}

分析:

对于 void setup()  :  我们使用一个for循环把d2 到 d8 口全部都打开

!!!!!

对于 void loop()  :  我们对循环体内的说明

value & 0x01 是什么含义? 首先,value 01001111(0x4F,8进制)0x01 为 00000001

我们上面学过&运算 全部都是 1 为1,所以这个运算,我们把他理解为取最低位值的运算

>>为位移运算符,在这就是右移运算符,而  >>= 10100111(1),把括号内的移掉,然后在左边的空位上补0

所以第一个循环中 i = 2;输出值为1 所以为高电平;

       第二个循环中 i  =3;输出值为1 所以为高电平;

  ....

       第五个循环中 i =6;输出值为0 所以为高电平;

...

       第七个循环中 i =8;输出值为0 所以为高电平;

      所以得到

abcdefgh
11110010
D2D3D4D5D6D7D8D9

所以 a b c d g 是亮的,

 所以我们显示的是数字 3,所以我们的代码abcdefg是从右到左的顺序开始的

接下来我们对数字的段码进行分析:

一位共阴数码管
对应数码管h g f e    d c b a 对应
00 0 1 1   1 1 1 10x3F
10 0 0 0   0 1 1 00x06
20 1 0 1   1 0 1 10xx8
30 1 0 0   1 0 1 10x4F
40 1 1 0   0 1 1 00x66
50 1 1 0   1 1 0 10x6D
60 1 1 1   1 1 0 10x7D
70 0 0 0   0 1 1 1 0x07
80 1 1 1   1 1 1 1 0x7F
90 1 1 0   1 1 1 1 0x6F
void sendData1( int value)// 数字段码
{
  for( int i = 2 ; i<=9 ; i++)
  {
    digitalWrite(i,value & 0x01);
    value >>= 1;
  }
  delay(500);
}

void setup() {
  for(int i=2 ; i<=9 ; i++)
  {
   pinMode(i,OUTPUT);
  }
}

void loop() {
  //过去
  sendData1(0x3F);
  sendData1(0x06);
  sendData1(0x5B);
  sendData1(0x4F);
  sendData1(0x66);
  sendData1(0x6D);
  sendData1(0x7D);
  sendData1(0x07);
  sendData1(0x7F);
  sendData1(0x6F);
//回来
  sendData1(0x6F);
  sendData1(0x7F);
  sendData1(0x07);
  sendData1(0x7D);
  sendData1(0x6D);
  sendData1(0x66);
  sendData1(0x4F);
  sendData1(0x5B);
  sendData1(0x06);
  sendData1(0x3F);

}

我们接着来看这段代码,里面有一个非常重要的函数  delay()

!!!  如果没有delay()会发生什么呢? 

在这个代码中,我们的数码管 只会显示 0,为什么?  我们把  delay 理解为延时函数,而我的个人理解,就是执行的时长(我们在这以毫秒为单位),如果没有  delay(),我们的函数就会一直执行下去,也就是我的输入的  sendData1(0x3F) ,这样的话,如果一直让他输入,那我们后面的输入就不会出现,所以一直是 0

当我们使用 delay()后,我们这为0.5秒,也就是我们把    sendData(0x3F)  执行0.5秒,当我们执行完了以后,就会跳到下一个sendData(0x06);以此类推 这样我们就能实现 数码管从 0~9~0 的一个变换。

但是上述做法采用的依旧是堆叠的手段,我们如何让我们的代码变得更简单一点呢?

因此我们引入了 —— 数组

 我们采取数组,就可以把代码给简单化了

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WanGxxxx.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值