国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

51單片機-按鍵

發布時間:2011-3-22 11:39    發布者:techshare
關鍵詞: 51單片機 , 按鍵
矩陣按鍵:  
實現功能按一個鍵,相應的燈亮。  




  
左邊的是普通二極管,右邊的是發光二極管。左邊的二極管如果想導通,則右邊要比左邊電平低。如果導通就是按鍵可以控制燈亮,那么按鍵左下的都為低電平,系統復位時默認I/O是高電平,所以給垂直方向的I/O拉低,這樣如果按鍵按下,電路導通,那么垂直方向I/O的低電平會把水平方向的拉低。這樣就可以通過檢測水平方向哪個I/O為低電平來檢測哪個鍵被按下。  

開始時對程序的錯誤想法:被按下的鍵兩邊肯定都是低電平,把它們存在一個數組里,然后檢測。這樣是不對的,用一個臨時變量去存P0的值,不會有相同的,開始P0的值為oxff,這樣即使按下按鍵,那么兩邊的引腳還是高電平,所以失敗了。  
  


      #include <reg52.h>

sbit p2_0 = P2^0;
sbit p2_1 = P2^1;
sbit p2_2 = P2^2;
sbit p2_3 = P2^3;
sbit p2_4 = P2^4;
sbit p2_5 = P2^5;
sbit p2_6 = P2^6;
sbit p2_7 = P2^7;

sbit L0 = P0^0;
sbit L1 = P0^1;
sbit L2 = P0^2;
sbit L3 = P0^3;
sbit H0 = P0^4;
sbit H1 = P0^5;
sbit H2 = P0^6;
sbit H3 = P0^7;

void delay(){
        int i,j;
        for(i = 0; i < 0xff; i++)
                for(j = 0; j < 0xff; j++)
                        ;
}

void display(){
        P0 = 0xfe;                               //尋找按下的是哪個按鍵,先讓垂直的為低電平,
        if(H0 == 0){p2_0 = 0; delay(); p2_0 = 1;} //然后通過檢測水平的來確定,延時為了消抖
        if(H1 == 0){p2_1 = 0; delay(); p2_1 = 1;}
        if(H2 == 0){p2_2 = 0; delay(); p2_2 = 1;}
        if(H3 == 0){p2_3 = 0; delay(); p2_2 = 1;}
        P0 = 0xfd;
        if(H0 == 0){p2_4 = 0; delay(); p2_4 = 1;}
        if(H1 == 0){p2_5 = 0; delay(); p2_5 = 1;}
        if(H2 == 0){p2_6 = 0; delay(); p2_6 = 1;}
        if(H3 == 0){p2_7 = 0; delay(); p2_7 = 1;}
        P0 = 0xfb;
        if(H0 == 0){p2_0 = 0; delay(); p2_0 = 1;}
        if(H1 == 0){p2_1 = 0; delay(); p2_1 = 1;}
        if(H2 == 0){p2_2 = 0; delay(); p2_2 = 1;}
        if(H3 == 0){p2_3 = 0; delay(); p2_3 = 1;}
        P0 = 0xf7;
        if(H0 == 0){p2_4 = 0; delay(); p2_4 = 1;}
        if(H1 == 0){p2_5 = 0; delay(); p2_5 = 1;}
        if(H2 == 0){p2_6 = 0; delay(); p2_6 = 1;}
        if(H3 == 0){p2_7 = 0; delay(); p2_7 = 1;}

}

void main(){
        while(1){
                display();
        }        
}

  獨立按鍵:

  實現功能,按一個獨立按鍵時,一個燈亮,按另一個獨立按鍵,另一個燈亮。圖中的按鍵右下接地,

  左邊通過跳線與P1.0和P1.1想接。如果按鍵按下,則P1.0和P1.1會被拉低。復位時默認I/O口都

  是高電平。這樣可以通過檢測P1.0和P1.1的電平,來檢查按鍵是否被按下。單片機I/O口是準雙向

  口,沒有方法控制單片機的輸入輸出方向。相當于我們在每個口上都上拉了一個5V 10歐的電阻,這

  樣單片機上電復位是高電平的。除了P0口都上拉了,P0內部沒有上拉電阻,所以外部上拉。

  





  #include <reg52.h>

sbit key1 = P1^0;
sbit key2 = P1^1;
sbit led1 = P2^0;
sbit led2 = P2^1;

void delay(){
        int i,j;
        for(i = 0; i < 0xff; i++)
                for(j = 0; j < 0xff; j++)
                        ;        
}

void main(){
        while(1){
                if(key1 == 0){
                        delay();            //按鍵在閉合和斷開時,觸點處會出現抖動,消除抖動
                        if(key1 == 0)       //延時一段時間后如果還是低電平,說明不是抖動造成的,
                                led1 = "led1;  //確實是按鍵被按下了,實現燈亮滅
                }
                if(key2 == 0){
                        delay();
                        if(key2 == 0)
                                led2 = "led2;
                }
        }        
}


李萬鵬
本文地址:http://m.qingdxww.cn/thread-59321-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
hqy_huang 發表于 2011-5-3 13:49:52
g00d
williamkmcn 發表于 2011-7-7 16:56:27
好東西值得收藏
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99久久精品免费看国产四区 | 欧美黄色片在线播放 | 在线不卡一区二区 | 男人天堂2020手机在线 | 家庭教师 在线播放 | 国产一级a毛片高清 | 欧美大胆一级视频 | 九九re | 人人九九精 | 成年人免费在线播放 | 亚洲香蕉综合在人在线时看 | www.欧美com| 日韩人妖 | 欧美国产在线看 | 午夜日韩在线 | 亚洲精品视频专区 | 日本一区二区在线视频 | 日韩欧美中文字幕一区 | 丁香六月欧美 | 最新高清无码专区 | 男女污污视频在线观看 | 欧美操操| 成年女美黄网站大全免费播放 | 欧美激情亚洲激情 | 婷婷天堂 | 亚洲一区播放 | 欧美日韩视频在线播放 | 国产精品盗摄一区二区在线 | 在线视频一区二区三区三区不卡 | 国内精品手机在线观看视频 | 亚洲手机中文字幕 | 日韩在线成人 | 久久精品国产欧美日韩99热 | 成人在线看片 | 国内自拍视频网站 | 欧美日韩色视频 | 欧美日韩 国产区 在线观看 | 日韩中文在线播放 | 欧美韩国日本在线 | 岛国精品成人 | 日本不卡高清免费v |