rendered paste body//實驗二 掃描控制 7-segment#include "8052.h"/*-----------------------------------------------------------------*\ * 禮拜二實驗二進階題 * * 先按四個數字 * * 然後按 C 會顯示 該四位數的 16 進位 * * 按完 C 之後除了 D 可以按下外 其他按鍵按了都沒有反應 * * 按下 D 後會把數字清掉 並且可以繼續輸入數字 *\*-----------------------------------------------------------------*//*******************************************//* keyboard's infomation *//*******************************************/code char ser[]={0xfe,0xfd,0xfb,0xf7};code int key[]={1,2,3,12,4,5,6,13,7,8,9,14,10,0,11,15};code char keymsg[]={0xee,0xed,0xeb,0xe7, 0xde,0xdd,0xdb,0xd7, 0xbe,0xbd,0xbb,0xb7, 0x7e,0x7d,0x7b,0x77 };/*******************************************//* 7-seg *//*******************************************/code char table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0xb9,0x5e,0x79,0x71 }; //字形,陰極void delay (int t);int getkey();void show();int showvalue[]={0,0,0,0};void main () { int i=0,digitNum=0,lock=0; int listValue = 0; P0 = 0x01; P3 = 0x00; while (1) { i=getkey(); /* * 按下數字鍵會把數字往左推 (在沒有 lock 的情況下) * */ if (i>-1 && i<10 && lock == 0) { showvalue[3]=showvalue[2]; showvalue[2]=showvalue[1]; showvalue[1]=showvalue[0]; showvalue[0]=i; } /* * 按下 C 會把數字換成 16 進位 轉換完後鎖住鍵盤 * */ if (i == 12 && lock == 0) { digitNum = showvalue[3]*1000 + showvalue[2]*100 +showvalue[1]*10 +showvalue[0]; showvalue[3] = digitNum/16/16/16; digitNum %= (16*16*16); showvalue[2] = digitNum/16/16; digitNum %= (16*16); showvalue[1] = digitNum/16; digitNum %= 16; showvalue[0] = digitNum; // 鎖住鍵盤 lock = 1; } /* * 按下 D 會把所有數字清掉並解除鍵盤 * */ if (i == 13) { showvalue[3]=showvalue[2]=showvalue[1]=showvalue[0]=0; // 解除鍵盤鎖定 lock = 0; } }}int getkey() { int i,k=-1; while (1) { for (i=0;i<4;i++) { P1=ser[i]; if (P1!=ser[i]) { if (P1==keymsg[i]) k=key[i]; else if (P1==keymsg[i+4]) k=key[i+4]; else if (P1==keymsg[i+8]) k=key[i+8]; else if (P1==keymsg[i+12]) k=key[i+12]; } // 鍵盤沒按按鍵也要顯示數字 show(); if (k!=-1) break ; } if (k!=-1) while (1) { P1=ser[i]; // 鍵盤按下鍵也要顯示數字 show(); if (P1==ser[i]) return k; } }}void delay (int t) { int x; for (x=0;x<t;x++);}void show () { int i; for (i=0;i<4;i++) { P3 = table[showvalue[i]]; P0 = ser[i]; delay(100); }}