# [基本人機介面](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也可能是沒顯示而已,最後換了一張板子,終於顯示出來了,感覺 程式好難,感覺那天特別累,幸好最後有結果出來,不然可能會在那等多耗更久的時間。