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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

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

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

機緣巧合在網上認識一位12歲小同志,從零開始系統輔導其創客開發思維和技巧。

項目專欄:https://blog.csdn.net/m0_38106923/category_11097422.html?


小時候都玩過飛行棋吧,是不是特別喜歡擲骰子,今天就要通過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~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));   //設置一個隨機數產生源模擬口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)

注意:

  1. dataPin和clockPin要setup()的pinMode()中,設置為OUTPUT。
  2. 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));

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。