# [基本人機介面](https://)
---
## [材料:](https://)
### 1. KTdunio積極體驗板
### 2. 多色dobunto公對公連接線
---
## 實驗方法:
1. P14-2 -> 13腳(驅動蜂鳴器)
2. P11A-7 ~ P11A-1 -> 126腳(將七節顯示器GA接入微控板)
3. P11B-5 ~ P11B-1 -> P4-1 ~ P4-5(擴充接點之用)
4. P4-2 ~ P4-5 -> 5~2腳
5. P4-2 ~ P4-5 -> P6-4 ~ P6-1(共用掃描信號)
6. P4-1 -> A1腳(將DD接入微控板)
7. P6-5 ~ P6-8 -> A2 ~ A5腳(將4x4鍵盤接入微控板)
---
## [程式碼:](https://)
```c=
/*宣告顯示信號接腳(SEG)*/
const int SEG[7] = {6,7,8,9,10,11,12};
/*宣告掃描信號接腳(SCAN)*/
const int SCAN[4] = {2,3,4,5};
/*塞個七節顯示碼陣列*/
const int SEG_CODE[10] = {
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90
};
/*keyin port*/
const int COLUMN[4] = {A2,A3,A4,A5};
/*蜂鳴器設定*/
const int BZ = 13;
/*案件值*/
unsigned char KN;
/*宣告顯示緩衝區陣列(DISP)*/
int DISP[4] = {0,0,0,0};
/*宣告顯示變數(DISPP)*/
int DISPP;
/*宣告嗶聲函數*/
void beep(int pin, int counts);
/*初始設定*/
void setup(){
/*設定顯示信號街角為輸出接腳*/
for(int i=0;i<7;i++)
pinMode(SEG[i],OUTPUT);
/*設定顯示掃描接腳為輸出接腳*/
for(int j=0;j<4;j++){
pinMode(SCAN[j],OUTPUT);
/*設定行接腳為輸入接腳*/
pinMode(COLUMN[j],INPUT);
}
/*設定蜂鳴器接腳為輸出接腳*/
pinMode(BZ,OUTPUT);
}
/*主程式*/
void loop() {
/*掃描週期*/
for(int i=0;i<4;i++){
for(int j=0;j<7;j++) /*輸出顯示信號1(關閉)*/
digitalWrite(SEG[j],1);
/*輸出掃描線*/
for(int j=0;j<4;j++)
/*掃描信號全部為1*/
digitalWrite(SCAN[j],1);
digitalWrite(SCAN[i],0); /*輸出掃描線*/
/*輸出七節顯示器顯示信號*/
DISPP=SEG_CODE[DISP[i]]; /*讀取顯示訊號*/
for(int j=0;j<7;j++){ /*並列資料串列輸出*/
if(bitRead(DISPP,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){ /*測試鍵值*/
/*若是數字,先移位再將鍵值放入個位數*/
/*DISP[3]:千位數,DISP[2]:百位數*/
/*DISP[1]:十位數,DISP[0]:個位數*/
for(int j=0;j<3;j++)
DISP[3-j]=DISP[2-j]; /*移位*/
DISP[0]=KN; /*鍵值放入個位數*/
}
delay(3); /*延遲 3ms*/
break; /*跳出*/
}
}
}
}
/*嗶聲函數*/
void beep(int pin,int counts){
for(int i=0;i<counts;i++){ /*執行 counts 次*/
tone(pin,1000,100); /*發聲(1kHz0.1秒)*/
delay(100); /*靜音(0.1秒)*/
}
}
```
---
## [實驗結果:](https://)

---
## [實驗心得:](https://)
一開始看到一堆程式碼時我覺得好難,打完了才發現有很多的bug,在debug 上就花了很多的時間,後來
又有一個j<8那裡要改7程式才沒有bug也可能是沒顯示而已,最後換了一張板子,終於顯示出來了,感覺
程式好難,感覺那天特別累,幸好最後有結果出來,不然可能會在那等多耗更久的時間。