新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 課程設計,鍵盤掃描顯示程序(c51)

        課程設計,鍵盤掃描顯示程序(c51)

        作者: 時間:2016-11-18 來源:網絡 收藏
        //課程設計鍵盤掃描顯示程序

        //由于開發板中使用了鎖存器,在proteus中仿真的話,加上鎖存器的話,會出現亂碼,并且//不成功,所以,就不貼圖了,不過以下代碼,在事物板上測試成功

        本文引用地址:http://www.104case.com/article/201611/315824.htm

        //實驗代碼為實現按鍵掃描,并顯示在數碼管上

        //實驗班上共有4個按鍵,分別接在p3.4,p3,5,p3.6.p3.7上,因此并沒有用到矩陣鍵盤掃描,//控制起來比較簡單,6數碼管觀通過鎖存器接在P0口上。

        #include

        #define uchar unsigned char

        #define uint unsigned int

        sbit dula=P2^6; //數碼管段選控制位

        sbit wela=P2^7; //數碼管位選控制位

        uchar key=8;

        //共陰數碼管段碼(不叫特殊的編碼)

        uchar code table[]=

        {

        0xed, 0x48, 0xf4, 0xb5, 0x99,

        0x3d, 0x7d, 0x85, 0xfd, 0xbd,

        0xdd, 0x79, 0x6c, 0xf1, 0x7c,

        0x5c, 0x10, 0x00,

        };

        //位選編碼

        uchar code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

        //函數聲明

        void display(uchar Duan_value,uchar Wei_value); //數碼管掃描函數

        void delay(uchar t); //延時函數

        void key_scan(); //按鍵掃描函數

        void delay(uchar t)

        {

        uchar x,y;

        for(x=t;t>0;t--)

        for(y=111;y>0;y--);

        }

        //顯示對應位選的數碼管按鍵值

        void display(uchar Duan_value,uchar Wei_value)

        {

        dula=1;

        P0=table[Duan_value];

        dula=0;

        wela=1;

        P0=table1[Wei_value];

        wela=0;

        delay(3);

        }

        void key_scan()

        {

        uchar temp;

        P3=0xff; //P3口寫1,用于讀取數據

        temp=P3&0xf0; //只取高四位

        if(temp!=0xf0)

        {

        delay(10); //延時,去除抖動

        temp=P3&0xf0;

        if(temp!=0xf0)

        {

        switch(temp)

        {

        case 0xe0:key=0;break;

        case 0xd0:key=1;break;

        case 0xb0:key=2;break;

        case 0x70:key=3;break;

        default:

        key=8;break;

        }

        do{ //消除按起抖動

        temp=P3;

        temp&=0Xf0;

        }while(temp!=0xf0);

        }

        }

        }

        void main()

        {

        while(1)

        {

        display(key,5); //用開發板上最后一位顯示按鍵值

        key_scan();

        }

        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 出国| 宁国市| 中山市| 甘泉县| 忻城县| 徐州市| 西吉县| 龙江县| 翁源县| 谢通门县| 饶阳县| 利辛县| 耒阳市| 增城市| 定边县| 化隆| 五峰| 千阳县| 剑川县| 乐至县| 临泉县| 武乡县| 花莲市| 贺州市| 四平市| 宜良县| 定陶县| 乐都县| 汝南县| 城固县| 安达市| 洪湖市| 射洪县| 涿鹿县| 建德市| 舞阳县| 汉源县| 辰溪县| 南充市| 新丰县| 慈利县|