新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 學習單片機的日記

        學習單片機的日記

        作者: 時間:2016-11-30 來源:網絡 收藏
        void display(uchar aa,uchar bb,uchar cc,uchar bai ,uchar shi,uchar ge)

        {
        dula=1;
        P0=table[aa];
        dula=0;
        P2=0;
        delay(5);

        dula=1;
        P0=table[bb];
        dula=0;
        P2=1;
        delay(5);
        dula=1;
        P0=table[cc];
        dula=0;
        P2=2;
        delay(5);
        dula=1;
        P0=table[bai];
        dula=0;
        P2=3;
        delay(5);

        dula=1;
        P0=table[shi];
        dula=0;
        P2=4;
        delay(5);
        dula=1;
        P0=table[ge];
        dula=0;
        P2=5;
        delay(5);


        }

        void delay(uint z)
        {
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);

        }



        三月31日:今天學完矩陣鍵盤,終于會編了,弄了好久。。。。(今天開始記錄思想,幫我加強記憶并自己再理解一遍)

        #include /reg52.h是頭文件,包含了下列關鍵字
        #define uint unsigned int /定義無符號型整數
        #define uchar unsigned char /定義無符號型字符型
        sbit dula=P3^7; /數碼管的段是由P3.7引腳控制,位聲明下
        sbit wela=P2; /數碼管的位選是由P2引腳控制,東流電子的板子位選是由譯碼器控制
        uchar temp,num;

        void delay(uint z); /延時函數聲明

        uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, /數碼管的數組
        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

        void main() /主函數
        {
        dula=1; /首先將數碼管不顯示,段選是由鎖存器控制,將鎖存器賦值1打開鎖存器,
        P0=0; / 往里面輸入數據再賦值0關閉鎖存器
        dula=0;
        P2=0; /我的板子的數碼管是由譯碼器控制,通過向P2口輸入不同的值進而控制不同數碼管,0代表第一個數碼管
        while(1) /主循環,while語句當()里的值為1是一直循環{ }里的語句,不為1則跳出語句
        {
        P1=0xfe; /如上圖所示P1指的是第一行鍵盤,矩陣鍵盤的檢測是給除了第一行賦值0外全部賦值為1,也就是111111
        temp=P1; 10,再將P1值賦給temp,讓后temp和0xf0(11110000)與(邏輯與)原理是:先掃描第一行,將其他端
        temp=temp&0xf0; /口賦值1,當有按鍵按下時有一列為0,列是在高四位如果是第一個鍵按下就是0111 0111和0xf0與下就不為0xf0
        if(temp!=0xf0) /如果temp不為0xfo(就相當于有按鍵被按下)
        {
        delay(10); 延時消抖
        temp=P1; 再將P1值賦給temp
        temp=temp&0xf0; 再和0xf0邏輯與
        if(temp!=0xf0) 再判斷是否按鍵
        {
        temp=P1; 將P1值重新賦給temp
        switch(temp) swith語句是多條件語句,()中temp是表達式,case(表達式):對應語句,。break是停止
        { switch語句跳出
        case 0xee:num=1; 如果是按第一個鍵就在數碼管上顯示0(為啥不是1?下面解釋)
        break;
        case 0xde:num=2; 如果按第一行第二個鍵在數碼管上顯示1
        break;
        case 0xbe:num=3;
        break;
        case 0x7e:num=4;
        break;
        }
        dula=1;
        P0=table[num-1]; 數碼管顯示[ ]中是上面聲明數組中的值,num-1對應數組的值(num為1則代表數組的0)
        dula=0;
        }
        }
        P1=0xfd;
        temp=P1; 以下就是不同行數的檢測,檢測第二行就給P1.2賦值0,改變下P1的值和num值就可以進行第
        temp=temp&0xf0; 二行以及第三第四行的鍵盤是否按下
        if(temp!=0xf0)
        {
        delay(10);
        temp=P1;
        temp=temp&0xf0;
        if(temp!=0xfe)
        {
        temp=P1;
        switch(temp)
        {
        case 0xed:num=5;
        break;
        case 0xdd:num=6;
        break;
        case 0xbd:num=7;
        break;
        case 0x7d:num=8;
        break;
        }
        dula=1;
        P0=table[num-1];
        dula=0;
        }
        }
        P1=0xfb;
        temp=P1;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
        delay(10);
        temp=P1;
        temp=temp&0xf0;
        if(temp!=0xfe)
        {
        temp=P1;
        switch(temp)
        {
        case 0xeb:num=9;
        break;
        case 0xdb:num=10;
        break;
        case 0xbb:num=11;
        break;
        case 0x7b:num=12;
        break;
        }
        dula=1;
        P0=table[num-1];
        dula=0;
        }
        }
        P1=0xf7;
        temp=P1;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
        delay(10);
        temp=P1;
        temp=temp&0xf0;
        if(temp!=0xfe)
        {
        temp=P1;
        switch(temp)
        {
        case 0xe7:num=13;
        break;
        case 0xd7:num=14;
        break;
        case 0xb7:num=15;
        break;
        case 0x77:num=16;
        break;
        }
        dula=1;
        P0=table[num-1];
        dula=0;
        }

        關鍵詞: 單片機日

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 兴山县| 高青县| 玉屏| 淅川县| 大庆市| 印江| 自贡市| 蒲江县| 电白县| 邮箱| 北辰区| 雷山县| 神池县| 江陵县| 衡阳县| 随州市| 宽城| 都兰县| 扎囊县| 綦江县| 濮阳市| 武胜县| 平顶山市| 禹城市| 浦东新区| 鄱阳县| 延吉市| 丹阳市| 龙岩市| 太仆寺旗| 屏边| 张家界市| 富裕县| 合川市| 中阳县| 钟祥市| 余庆县| 囊谦县| 体育| 喀喇沁旗| 库车县|