看到特高科的數(shù)碼管骰子的太極品了,忍不住改一下。這個應(yīng)該是非常簡單的代碼了,歡迎挑戰(zhàn)更短寫法(一行多語句的不算)。
電路連接
由于數(shù)碼管品種多樣,還有共陰共陽的,下面我們使用一個數(shù)碼管段碼生成器(在文章結(jié)尾)去解決不同數(shù)碼管的問題:
本例作者利用手頭現(xiàn)有的一位不知品牌的共陽數(shù)碼管:型號D5611 A/B,在Eagle找了一個類似的型號SA56-11,引腳功能一樣可以直接代換。所以下面電路圖使用SA56-11做引腳說明。
222514ufdg9iz3lrair99o.jpg (14.94 KB, 下載次數(shù): 205)
下載附件
2016-4-14 04:16 上傳
注意:
1. 將數(shù)碼管的a~g段,分別接到Arduino的D0~D6上面。如果你手上的數(shù)碼管未知的話,可以通過通電測量它哪個引腳對應(yīng)哪個字段,然后找出a~g即可。
2. 分清共陰還是共陽。共陰的話,接220Ω電阻到電源負極;共陽的話,接220Ω電阻到電源+5v。3. 220Ω電阻視數(shù)碼管實際工作亮度與手頭現(xiàn)有原件而定,不一定需要準確。
4. 按下按鈕即停。
222509eets16mhhcpdib5c.gif (10.92 KB, 下載次數(shù): 189)
下載附件
2016-4-14 04:16 上傳
源代碼
由于我是按照段碼生成器默認接法接的,所以不用修改段碼生成器了,直接在段碼生成器選擇共陽極,再按“自動”生成數(shù)組就搞定。
222512pxv4ivxx4tx9hsph.gif (18.61 KB, 下載次數(shù): 182)
下載附件
2016-4-14 04:16 上傳
下面是源代碼,由于偷懶不用寫循環(huán),使用了部分AVR語句。
PORTD這個是AVR的端口輸出控制語句,8位對應(yīng)D7~D0,PORTD=00001001就是D3和D0是高電平。
PORTD = a;就是找出相應(yīng)的段碼輸出到D7~D0。
DDRD這個是AVR語句中控制引腳作為輸出/輸入的語句。DDRD = 0xFF;就是D0~D7全部作為輸出腳了。
- /*
- Arduino單數(shù)碼管骰子
- Ansifa 2011-12-28
- */
- //定義段碼表,表中十個元素由LED段碼生成器生成,選擇了共陽極。
- int a[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
- void setup()
- {
- DDRD = 0xFF; //AVR定義PortD的低七位全部用作輸出使用。即0xFF=B11111111對應(yīng)D7~D0
- pinMode(12, INPUT); //D12用來做骰子暫停的開關(guān)
- }
- void loop()
- {
- for(int i = 0; i < 10; i++)
- {
- //將段碼輸出PortD的低7位,即Arduino的引腳D0~D6,這樣需要取出PORTD最高位,即D7的狀態(tài),與段碼相加,之后再輸出。
- PORTD = a[i];
- delay(50); //延時50ms
- while(digitalRead(12)) {} //如果D12引腳高電平,則在此死循環(huán),暫停LED跑動
- }
- }
復(fù)制代碼
實物演示視頻
夜間攝像頭拍攝的,質(zhì)量可能比較差。僅供感性認識參考
還有,筆者錄視頻的時候手頭沒有220Ω電阻,隨便抓了一個LED做電阻降壓,效果一樣,湊合看吧。
下面是段碼生成器以及本例源代碼:
LED數(shù)碼管段碼生成器以及本例源代碼.rar
(317.26 KB, 下載次數(shù): 14)
2016-4-14 04:05 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
- /*
- Arduino單數(shù)碼管骰子
- */
- 。
- int a[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
- void setup()
- {
- DDRD = 0xFF;
- pinMode(12, INPUT);
- }
- void loop()
- {
- for(int i = 0; i < 10; i++)
- {
- PORTD = a[i];
- delay(50);
- while(digitalRead(12)) {}
- }
- }
復(fù)制代碼
|