官术网_书友最值得收藏!

3.12 K1~K4按鍵狀態顯示

在本例執行過程中,按下K1或K2鍵時LED1或LED2點亮,松開時對應的LED熄滅,當按下K3或K4后釋放時,LED3或LED4點亮,再次按下并釋放時熄滅,如此重復。不同于上一案例的是本例對各按鍵和LED均單獨進行sbit定義,這樣便于對它們單獨控制。

本例電路如圖3-10所示。

圖3-10 K1~K4按鍵狀態顯示電路

程序設計調試與實訓:

由于LED1,LED2是否導通與K1,K2是否按下完全保持一致,因此代碼中有語句D1 = K1和D2 = K2,而LED3、LED4是在K3、K4按下并釋放后切換顯示,因此用K3或K4是否等于0來判斷是否按下,用while(K3 == 0)和while(K4 == 0)來等待釋放按鍵,在釋放后LED3和LED4分別取反,實現切換顯示。

讀者可稍加修改代碼,使K3或K4按下時隨即實現LED切換顯示。對于上一案例,讀者也可修改代碼,使用本例方法對按鍵進行判斷。

源程序代碼:

        //-----------------------------------------------------------------
        //  名稱: K1~K4按鍵狀態顯示
        //-----------------------------------------------------------------
        //  說明: K1,K2按下時LED點亮,松開時熄滅,
        //       K3,K4按下并釋放時LED點亮,再次按下并釋放時熄滅。
        //-----------------------------------------------------------------
        #include <reg51.h>
        #define uchar unsigned char
        #define uint  unsigned int
        sbit  LED1 = P0^0;
        sbit  LED2 = P0^1;
        sbit  LED3 = P0^2;
        sbit  LED4 = P0^3;
        sbit  K1 = P1^0;
        sbit  K2 = P1^1;
        sbit  K3 = P1^2;
        sbit  K4 = P1^3;
        //-----------------------------------------------------------------
        // 延時
        //-----------------------------------------------------------------
        void DelayMS(uint x)
        {
          uchar i;
          while(x--) for(i = 0; i < 120; i++);
        }
        //-----------------------------------------------------------------
        // 主程序
        //-----------------------------------------------------------------
        void main()
        {
          P1 = 0xFF;
          P0 = 0xFF;
          while(1)
          {
            LED1 = K1;
            LED2 = K2;
            if( K3 == 0)
            {
                while (K3==0);           //等待釋放按鍵
                LED3 = ~LED3;
            }
            if( K4 == 0)
            {
                while (K4==0);           //等待釋放按鍵
                LED4 = ~LED4;
            }
            DelayMS(10);
          }
        }
主站蜘蛛池模板: 永宁县| 昌图县| 盐城市| 绥滨县| 儋州市| 祁门县| 阳春市| 金昌市| 松原市| 普宁市| 泾阳县| 龙胜| 林西县| 桐乡市| 东阿县| 上林县| 汉川市| 安义县| 南昌县| 桐柏县| 长泰县| 万载县| 淮安市| 依安县| 阿克苏市| 巴林右旗| 盖州市| 西城区| 三亚市| 阿拉善左旗| 谷城县| 开原市| 彭山县| 鹿邑县| 阿拉善右旗| 深水埗区| 墨竹工卡县| 白银市| 长宁县| 灵丘县| 蒲江县|