# HW3_Arduino 人機介面 附程式碼 >撰寫人[name=AmiYaku1049] [首頁--天空路1049號](https://skys-kid-lai.github.io/1004/) >>最後編輯[time=Tue, Mar 22, 2022 5:49 PM] ___ ## 實驗目的 了解人機介面,並進行實作 ## 實驗原理 透過設計程式碼並使用Ktduino積極體驗板及Arduino UNO 開發版,了解人機介面 ## 實驗材料 ◎Ktduino積極體驗板 x1 ◎Arduino UNO 開發版 x1 ◎杜邦線 x17 ◎跟你默契好的可愛電腦 x1 ◎USB 線 x1 ## 實驗步驟 1.在Ktduino積極體驗板及Arduino UNO 開發版連接電路 2.在電腦Aduino編譯程式碼(程式碼在下方↓) 3.確定程式碼無誤,將電路用USB線連接至電腦 4.再編譯及上傳程式碼 5.紀錄輸出 ### 程式碼(已經過改良,並非為參考文獻內原始程式碼) ```clink= const int seg[7]={6,7,8,9,10,11,12}; //顯示信號接腳 const int scan[4]={2,3,4,5}; //掃描信號接腳 const int seg_code[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //七節顯示碼 const int column[4]={A2,A3,A4,A5}; const int bz=13; //蜂鳴器 unsigned char kn; //按鍵值 int disp[4]={0,0,0,0}; //緩衝區 int doot; //顯示變數 //逼聲函數原型 void beep(int pin, int counts); //start set void setup() { for(int i=0; i<7; i++) pinMode(seg[i],OUTPUT); //設定seg為輸出的接腳 for(int i=0; i<4; i++) { pinMode(scan[i],OUTPUT); //設定scan為輸出的接腳 pinMode(column[i],INPUT); //設定column為輸入的接腳 } pinMode(bz,OUTPUT); //設定bz為輸出的接腳 } //主程式 void loop() { for(int i=3; i>=0; i--) //重複執行4個掃描週期 { for(int j=7; j>=0; j--) digitalWrite(seg[j],1); //關閉七節顯示器的訊號,防止殘影 for(int j=0; j<4; j++) digitalWrite(scan[j],1); digitalWrite(scan[i],0); //輸出七節顯示器顯示訊號 doot=seg_code[disp[i]]; for(int j=7; j>=0; j--) { if(bitRead(doot,j)) digitalWrite(seg[j],1); else digitalWrite(seg[j],0); } //按鍵 for(int col=0; col<4; col++) { if(!digitalRead(column[col])) //判斷有無按鍵 { while(!digitalRead(column[col])); //等待放開按鍵 kn=4*i+col; //計算鍵值,也就是輸出的數值 beep(bz,1); //逼聲 if(kn>=0 && kn<10) //判斷是否為數字鍵 { for(int j=0; j<3; j++) disp[3-j]=disp[2-j]; //將按鍵的值放入個位數,顯示時會顯示在個位數 disp[0]=kn; } delay(3); break; } } } } //逼聲 void beep(int pin, int counts) { for(int i=0; i<counts; i++) { tone(pin, 1000, 100); //發聲 delay(100); //靜音 } } ``` ## 實驗結果 按下Ktduino積極體驗板鍵盤,可更改七段顯示器的顯示![](https://i.imgur.com/rLPmbFI.jpg) 七段顯示器顯示結果: ![](https://i.imgur.com/8X2kYlQ.jpg) ## 實驗討論 實驗到執行的時候,依序按下1、2、3、4,會依序出現4、3、2、1,思考過後更換了電路接法,將原本連接在P6-4~P6-1的接線換順序連接,換成P6-1~P6-4後,依序按下1、2、3、4,就可依序出現1、2、3、4。 另,程式碼部分,若按照原本參考資料上之程式碼編寫,會出現第28行有錯誤之資訊。上方程式碼為改良後程式碼,將for迴圈改為倒數,則可編譯成功。 ## 實驗心得 發現原本的方式會有錯誤的時候,我超級興奮的!終於有除錯的機會了!! 實驗結果的杜邦線多到看不清楚七段顯示器的結果,下次要注意了。 ## 實驗文獻 >編者:艾迪諾 >出版日期:2017.01.06 >書名(頁數):Arduino全能微處理機實習:強效解析(p4-50~p4-55) >出版社:全華圖書 >[color=#CE0000]