新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC18F452單片機(jī) 矩陣鍵盤

        PIC18F452單片機(jī) 矩陣鍵盤

        作者: 時(shí)間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
        #include //調(diào)用頭文件,可以去PICC18軟件下去查找PIC18FXX2.H
        __CONFIG(1,XT) ; //晶振為外部4M
        __CONFIG(2,WDTDIS) ; //看門狗關(guān)閉
        __CONFIG(4,LVPDIS) ; //禁止低電壓編程
        #define B7 RB7
        #define B6 RB6
        #define B5 RB5
        #define B4 RB4
        #define B3 RB3
        #define B2 RB2
        #define B1 RB1
        #define B0 RB0
        #define B PORTB
        #define D PORTD
        #define E2 RE2
        #define E1 RE1
        #define E0 RE0
        #define C7 RC7
        char shuma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
        void delayms(int x)
        {
        int i,j;
        for(i=0;i<=30;i++)
        for(j=0;j<=x;j++);
        }
        int keyscan()
        {
        B=0x7f;
        if(B3==0)
        {
        delayms(5);
        return 16;
        }
        if(B2==0)
        {
        delayms(5);
        return 12;
        }
        if(B1==0)
        {
        delayms(5);
        return 8;
        }
        if(B0==0)
        {
        delayms(5);
        return 4;
        }
        delayms(5);
        B=0xbf;
        if(B3==0)
        {
        delayms(5);
        return 15;
        }
        if(B2==0)
        {
        delayms(5);
        return 11;
        }
        if(B1==0)
        {
        delayms(5);
        return 7;
        }
        if(B0==0)
        {
        delayms(5);
        return 3;
        }
        delayms(5);
        B=0xdf;
        if(B3==0)
        {
        delayms(5);
        return 14;
        }
        if(B2==0)
        {
        delayms(5);
        return 10;
        }
        if(B1==0)
        {
        delayms(5);
        return 6;
        }
        if(B0==0)
        {
        delayms(5);
        return 2;
        }
        delayms(5);
        B=0xef;
        if(B3==0)
        {
        delayms(5);
        return 13;
        }
        if(B2==0)
        {
        delayms(5);
        return 9;
        }
        if(B1==0)
        {
        delayms(5);
        return 5;
        }
        if(B0==0)
        {
        delayms(5);
        return 1;
        }
        delayms(5);
        }
        void display(int num)
        {
        int ge,shi;
        ge=num;
        shi=num/10;
        E2=0;
        E1=1;E0=1;
        if(shi==0&&ge==0)
        D=0x00;
        else D=shuma[ge];
        delayms(2);
        E1=1;E0=0;
        if(shi==0)
        D=0x00;
        else D=shuma[shi];
        delayms(2);
        D=0x00;
        delayms(2);
        }
        void main(void)
        {
        int temp,num=0;
        ADCON1=0X06; //所有IO均為數(shù)字口,模擬量輸入禁止
        TRISB=0X0f;
        TRISD=0x00;
        TRISE=0x00;
        TRISC=0x00;
        while(1)
        {
        temp=keyscan();
        switch(temp)
        {
        case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:case 16:num=temp;C7=1;break;
        default:C7=0;break;
        }
        display(num);
        }
        }
        利用一個(gè)I/O口的輸入輸出變化,有點(diǎn)類似動(dòng)態(tài)掃描,輪流檢測每一行是否有按鍵按下
        效果:按下一個(gè)鍵,在數(shù)碼管上顯示該鍵的數(shù)字


        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 綦江县| 板桥市| 芜湖县| 嘉禾县| 佛冈县| 西乌珠穆沁旗| 辉县市| 岳池县| 山东| 昌黎县| 蒙阴县| 英德市| 宁乡县| 通河县| 太仆寺旗| 乐业县| 蒙城县| 嘉祥县| 汕头市| 滨州市| 海门市| 城市| 翁牛特旗| 子洲县| 松滋市| 文安县| 临夏县| 资溪县| 岫岩| 河源市| 博乐市| 珠海市| 航空| 锡林浩特市| 故城县| 海宁市| 渝北区| 和田市| 哈巴河县| 双江| 新昌县|