新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)按鍵掃描C程序

        51單片機(jī)按鍵掃描C程序

        作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
        大二上學(xué)期做過(guò)8051單片機(jī)的按鍵程序,當(dāng)時(shí)項(xiàng)目要求實(shí)現(xiàn)按鍵控制LED屏顯示并且接收GPRS傳來(lái)的數(shù)據(jù)。當(dāng)時(shí)為了節(jié)省成本,就去大西電子市場(chǎng)買(mǎi)來(lái)8*8的LED塊,然后自己一點(diǎn)一點(diǎn)的拼接成128*16的。做完之后雖然可以運(yùn)行,但是很勉強(qiáng),尤其是按鍵掃描程序沒(méi)有下面這位哥寫(xiě)得簡(jiǎn)潔縝密,所以就貼過(guò)來(lái),以后用到的時(shí)候直接研究:
        unsignedcharkey,key_h,kpush;
        unsignedintkey_l;

        //按鍵連接到p1.0、p1.1、p1.2

        voidint_t0(void)interrupt1{
        unsignedchardd,i;
        TL0=TL0+30;TH0=0xfb;//800
        /*按鍵判別*/
        if((P1&0x7)==0x7){
        if((key_l>30)&&(key_l<800)&&(key_h>30)){//釋放按鍵,如果之前按鍵時(shí)間少于1秒,讀入鍵值
        key=kpush;
        }
        if((++key_h)>200)key_h=200;
        key_l=0;
        if(key>=0x80)key=0;//如果之前的按鍵為1秒,清除鍵值
        }else{
        kpush=P1&0x7;
        key_l++;
        if((key_l>800)&&(key_h>30)){//如果按鍵超過(guò)1秒,鍵值加0x80標(biāo)志鍵
        key=kpush|0x80;
        key_h=0;
        key_l=0;
        }
        }
        }
        voidmain(void){
        TMOD=0x1;TR0=1;ET0=1;EA=1;
        while(1){
        while(!key){}
        switch(key){
        case1:break;
        case2:break;
        }
        }
        }


        評(píng)論


        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 建昌县| 迁安市| 调兵山市| 桂平市| 万州区| 抚远县| 随州市| 长岛县| 湄潭县| 潜山县| 灵山县| 武山县| 祁阳县| 和平区| 武邑县| 西华县| 文山县| 绥阳县| 丰镇市| 琼结县| 宽甸| 自治县| 安乡县| 西乌珠穆沁旗| 肇州县| 和平区| 商丘市| 侯马市| 惠来县| 拜泉县| 贡觉县| 霍林郭勒市| 东光县| 德保县| 浑源县| 射阳县| 太仓市| 剑川县| 平山县| 台中县| 任丘市|