日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

和12岁小同志搞创客开发:手撕代码,做一款数字骰子

發(fā)布時(shí)間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 和12岁小同志搞创客开发:手撕代码,做一款数字骰子 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

機(jī)緣巧合在網(wǎng)上認(rèn)識(shí)一位12歲小同志,從零開始系統(tǒng)輔導(dǎo)其創(chuàng)客開發(fā)思維和技巧。

項(xiàng)目專欄:https://blog.csdn.net/m0_38106923/category_11097422.html?


小時(shí)候都玩過飛行棋吧,是不是特別喜歡擲骰子,今天就要通過Arduino來做個(gè)數(shù)字骰子。

如何實(shí)現(xiàn)數(shù)字骰子效果呢?其實(shí)就是使用8段LED數(shù)碼段。

前景回顧:和12歲小同志搞創(chuàng)客開發(fā):如何驅(qū)動(dòng)LED數(shù)碼管?

另外還將用到一個(gè)新模塊:Shiftout模塊。

Shiftout模塊就是一塊74HC595串行輸入串行或并行輸出的移位寄存器芯片。如果要看懂代碼,那就需要對(duì)74HC595芯片的工作原理有個(gè)簡單認(rèn)識(shí)。

74HC595實(shí)現(xiàn)了串行輸入轉(zhuǎn)并行輸出的功能。先說下什么是串行與并行。下圖可以簡單看出串行與并行的區(qū)別。串行是一個(gè)一個(gè)數(shù)往發(fā),而并行是8位數(shù)一道往外發(fā)的。

74HC595可以將串行進(jìn)來的數(shù)據(jù)處理,讓它并行輸出。這樣的好處是,比如在我們要用到多個(gè)LED,而數(shù)字引腳又不夠用的時(shí)候,用一個(gè)74HC595,就可以同時(shí)控制多個(gè)LED了。

?一個(gè)74HC595芯片輸出正好也是8位,所以可以用74HC595的輸出正好可以控制一個(gè)8段LED數(shù)碼管。

74HC595起到的作用就是能夠通過一個(gè)數(shù)據(jù)口并行輸出8位,,不會(huì)讓LED占用8個(gè)數(shù)字引腳,當(dāng)然如果你想接8個(gè)數(shù)字口也是沒有問題的,只是占用的引腳會(huì)多一點(diǎn)而已。

那具體如何發(fā)數(shù)據(jù),發(fā)什么數(shù)據(jù)?就是由data,latch,clock這三個(gè)引腳決定的。


項(xiàng)目連線效果如下所示:

?實(shí)現(xiàn)代碼如下所示:

int latchPin = 8;  //數(shù)字口8連接到74HC595芯片的使能引腳
int clockPin = 3;  //數(shù)字口3連接到74HC595芯片的時(shí)鐘引腳
int dataPin = 9;   //數(shù)字口9連接到74HC595芯片的數(shù)據(jù)引腳
int buttonPin = 2; // 按鈕連接到數(shù)字口2 //代表數(shù)字0~9
byte 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));   //設(shè)置一個(gè)隨機(jī)數(shù)產(chǎn)生源模擬口0
}void loop(){randNumber = random(10);   //產(chǎn)生0~9之間的隨機(jī)數(shù)showNumber(randNumber);    //顯示該隨機(jī)數(shù)//一旦有按鍵按下,顯示該數(shù),并保持到松開為止while(digitalRead(buttonPin) == HIGH){  delay(100);} 
}//該函數(shù)用于數(shù)碼管顯示
void showNumber(int number){digitalWrite(latchPin, LOW);shiftOut(dataPin, clockPin, MSBFIRST, Tab[number]);digitalWrite(latchPin, HIGH);delay(80);
}

下面就來說下shiftOut()函數(shù)怎樣用?

shiftOut函數(shù)格式:

shiftOut(dataPin,clockPin,bitOrder, value)

  • dataPin:輸出每一位數(shù)據(jù)的引腳(int)
  • clockPin:時(shí)鐘引腳,當(dāng)dataPin有值時(shí)此引腳電平變化(int)
  • bitOrder:輸出位的順序,最高位優(yōu)先(MSBFIRST)或最低位優(yōu)先(LSBFIRST)
  • value:要移位輸出的數(shù)據(jù)(byte)

注意:

  1. dataPin和clockPin要setup()的pinMode()中,設(shè)置為OUTPUT。
  2. shiftOut目前只能輸出1個(gè)字節(jié)(8位),所以如果輸出值大于255需要分兩步。

代碼中,我們可以看出輸出位的順序是最高位優(yōu)先的,Tab[number]就是輸出的數(shù)據(jù)。

shiftOut(dataPin, clockPin, MSBFIRST, Tab[number]);

那我們看下Tab[number]里面是些什么?

//代表數(shù)字0~9
byte Tab[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

這些在:?前景回顧:和12歲小同志搞創(chuàng)客開發(fā):如何驅(qū)動(dòng)LED數(shù)碼管?中就講到,是數(shù)碼管的組成原理,這里不再贅述。

既然需要做數(shù)字骰子,還有一個(gè)重要的一步,如何隨機(jī)產(chǎn)生0~9之間的數(shù)字呢? Arduino提供了個(gè)好用的函數(shù)random()。

random (max)

random ()可生成隨機(jī)數(shù),生成[0, max-1]范圍內(nèi)的隨機(jī)數(shù),max是最大值。

random(10);//生成0~9之間的數(shù)

randomSeed()函數(shù)是用來設(shè)置隨機(jī)種子的,我們這里就接到了模擬口0。

randomSeed(analogRead(0));

總結(jié)

以上是生活随笔為你收集整理的和12岁小同志搞创客开发:手撕代码,做一款数字骰子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。