---
# System prepended metadata

title: '[基本人機介面](https://)'

---

# [基本人機介面](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://i.imgur.com/6or0wZa.jpg)


---


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