All pastes #994405 Raw Edit

Someone

public c v1 · immutable
#994405 ·published 2008-04-23 11:50 UTC
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);    }}