冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 689|回覆: 0
打印 上一主題 下一主題

[討論] ATtiny10電子骰子

[複製鏈接]

2609

主題

0

好友

1003

積分

金牌會員

Rank: 6Rank: 6

UID
373967
帖子
9008
主題
2609
精華
0
積分
1003
楓幣
0
威望
980
存款
35891
贊助金額
0
推廣
0
GP
1205
閱讀權限
70
在線時間
460 小時
註冊時間
2023-1-12
最後登入
2024-12-22

2023端午節紀念勳章 2023中秋節紀念勳章 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-4-23 14:07:11 |只看該作者 |倒序瀏覽
製作ATtiny10電子骰子需要以下零件:

ATtiny10微控制器
6個LED燈(用於顯示骰子點數)
6個1K歐姆電阻(用於限流,避免LED燈過熱燒壞)
一個按鈕(用於控制開始和停止)
一個9V電池和一個電池座(用於供電)
杜邦線(用於連接零件)

以下是ATtiny10的引腳連接圖:


      +--------+
   1 -|1 PB5  V|-
   2 -|2 PB3  3|-
   3 -|3 PB4  4|-
   4 -|4 GND  5|-
   5 -|5 PB0  6|-
   6 -|6 PB1  7|-
      +--------+
在上述連接圖中,PB0到PB5是ATtiny10的輸出引腳,可以用來控制LED燈的亮滅。

PB3是ATtiny10的輸入引腳,用於接收按鈕的信號。

以下是ATtiny10的程式碼,用於控制電子骰子的運作。

在這個程式中,當按鈕按下時,LED燈會開始閃爍,然後在幾秒鐘後停止,並且顯示一個隨機數字(1到6之間)。


#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

int main(void)
{
    DDRB |= (1 << PB0) | (1 << PB1) | (1 << PB3) | (1 << PB4) | (1 << PB5); //設定PB0到PB5為輸出
    DDRB &= ~(1 << PB3); //設定PB3為輸入

    while (1) //持續運作
    {
        if (bit_is_clear(PINB, PB3)) //如果按鈕按下
        {
            for (int i = 0; i < 10; i++) //閃爍10次
            {
                PORTB ^= (1 << PB0) | (1 << PB1) | (1 << PB4) | (1 << PB5); //反轉PB0、PB1、PB4、PB5的狀態
                _delay_ms(50); //等待50毫秒
            }

            _delay_ms(1000); //等待1秒

            int dice_roll = (rand() % 6) + 1; //產生一個1到6之間的隨機數字

            switch (dice_roll) //根據隨機數字,點

        {
            case 1:
                PORTB = (1 << PB0); //點亮PB0
                break;
            case 2:
                PORTB = (1 << PB1); //點亮PB1
                break;
            case 3:
                PORTB = (1 << PB0) | (1 << PB1); //點亮PB0和PB1
                break;
            case 4:
                PORTB = (1 << PB4) | (1 << PB5); //點亮PB4和PB5
                break;
            case 5:
                PORTB = (1 << PB0) | (1 << PB1) | (1 << PB4) | (1 << PB5); //點亮PB0、PB1、PB4和PB5
                break;
            case 6:
                PORTB = (1 << PB0) | (1 << PB1) | (1 << PB3) | (1 << PB4) | (1 << PB5); //點亮PB0、PB1、PB3、PB4和PB5
                break;
        }

        _delay_ms(3000); //等待3秒

        PORTB = 0; //關閉所有LED燈
    }
}

return 0;
}



請注意,在編譯程式碼之前,需要安裝AVR-GCC和AVR-LibC工具套件。

在編譯完成後,可以使用AVR-ISP編程器將程式燒錄到ATtiny10微控制器中。
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1鑰匙
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-12-22 12:55

回頂部