首页 » 互联网 » 和12岁小同志搞创客开拓:手撕代码做一款数字骰子_数字_引脚

和12岁小同志搞创客开拓:手撕代码做一款数字骰子_数字_引脚

南宫静远 2024-11-09 14:26:44 0

扫一扫用手机浏览

文章目录 [+]

小时候都玩过翱翔棋吧,是不是特殊喜好掷骰子,本日就要通过Arduino来做个数字骰子。

如何实现数字骰子效果呢?实在便是利用8段LED数码段。

和12岁小同志搞创客开拓:手撕代码做一款数字骰子_数字_引脚 和12岁小同志搞创客开拓:手撕代码做一款数字骰子_数字_引脚 互联网

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

和12岁小同志搞创客开拓:手撕代码做一款数字骰子_数字_引脚 和12岁小同志搞创客开拓:手撕代码做一款数字骰子_数字_引脚 互联网
(图片来自网络侵删)

其余还将用到一个新模块: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));

标签:

相关文章

倒装芯片凸点工艺技能_焊料_芯片

2)布局完成后,通过回流焊或热压键合工艺进行键合;3)互连形成后,在芯片周围滴涂底填料,底填料会通过毛细浸染填满芯片与基板之间的间...

互联网 2025-01-22 阅读0 评论0

BIOS究竟是什么呢?_年夜众_模式

常常听到大家说BIOS、BIOS、BIOS。开机直接进BIOS,装系统要先改BIOS里的选项,刷新BIOS,诸如此类......以...

互联网 2025-01-22 阅读0 评论0

岚图“失落声”_幻想_春风

前几日,华为智能汽车办理方案BU CEO余承东与魏牌CEO李瑞峰吵得火热,而“增程式”这一动力模式也随之被抬到了话题高峰,媒体、大...

互联网 2025-01-22 阅读0 评论0