小时候都玩过翱翔棋吧,是不是特殊喜好掷骰子,本日就要通过Arduino来做个数字骰子。
如何实现数字骰子效果呢?实在便是利用8段LED数码段。

前景回顾:和12岁小同道搞创客开拓:如何驱动LED数码管?

其余还将用到一个新模块:Shiftout模块。
Shiftout模块便是一块74HC595串行输入串行或并行输出的移位寄存器芯片。如果要看懂代码,那就须要对74HC595芯片的事情事理有个大略认识。
74HC595实现了串行输入转并行输出的功能。先说下什么是串行与并行。下图可以大略看出串行与并行的差异。串行是一个一个数往发,而并行是8位数一道往外发的。
74HC595可以将串行进来的数据处理,让它并行输出。这样的好处是,比如在我们要用到多个LED,而数字引脚又不足用的时候,用一个74HC595,就可以同时掌握多个LED了。
一个74HC595芯片输出恰好也是8位,以是可以用74HC595的输出恰好可以掌握一个8段LED数码管。
74HC595起到的浸染便是能够通过一个数据口并行输出8位,,不会让LED占用8个数字引脚,当然如果你想接8个数字口也是没有问题的,只是占用的引脚会多一点而已。
那详细如何发数据,发什么数据?便是由data,latch,clock这三个引脚决定的。
项目连线效果如下所示:
实当代码如下所示:
int latchPin = 8; //数字口8连接到74HC595芯片的使能引脚int clockPin = 3; //数字口3连接到74HC595芯片的时钟引脚int dataPin = 9; //数字口9连接到74HC595芯片的数据引脚int buttonPin = 2; // 按钮连接到数字口2 //代表数字0~9byte Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};int number;long randNumber;void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); randomSeed(analogRead(0)); //设置一个随机数产生源仿照口0}void loop(){ randNumber = random(10); //产生0~9之间的随机数 showNumber(randNumber); //显示该随机数 //一旦有按键按下,显示该数,并保持到松开为止 while(digitalRead(buttonPin) == HIGH){ delay(100); } }//该函数用于数码管显示void showNumber(int number){ digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, Tab[number]); digitalWrite(latchPin, HIGH); delay(80);}
下面就来说下shiftOut()函数若何用?
shiftOut函数格式:
shiftOut(dataPin,clockPin,bitOrder, value)dataPin:输出每一位数据的引脚(int)clockPin:时钟引脚,当dataPin有值时此引脚电平变革(int)bitOrder:输出位的顺序,最高位优先(MSBFIRST)或最低位优先(LSBFIRST)value:要移位输出的数据(byte)
把稳:
dataPin和clockPin要setup()的pinMode()中,设置为OUTPUT。shiftOut目前只能输出1个字节(8位),以是如果输出值大于255须要分两步。代码中,我们可以看出输出位的顺序是最高位优先的,Tab[number]便是输出的数据。
shiftOut(dataPin, clockPin, MSBFIRST, Tab[number]);
那我们看下Tab[number]里面是些什么?
//代表数字0~9 byte Tab[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
这些在: 前景回顾:和12岁小同道搞创客开拓:如何驱动LED数码管?中就讲到,是数码管的组成事理,这里不再赘述。
既然须要做数字骰子,还有一个主要的一步,如何随机产生0~9之间的数字呢? Arduino供应了个好用的函数random()。
random (max)
random ()可天生随机数,天生[0, max-1]范围内的随机数,max是最大值。
random(10);//天生0~9之间的数
randomSeed()函数是用来设置随机种子的,我们这里就接到了仿照口0。
randomSeed(analogRead(0));









