新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 12. 可預置可逆4位計數器

        12. 可預置可逆4位計數器

        作者: 時間:2016-11-18 來源:網絡 收藏
        1.實驗任務
        利用AT89S51單片機的P1.0-P1.3接四個發光二極管L1-L4,用來指示當前計數的數據;用P1.4-P1.7作為預置數據的輸入端,接四個撥動開關K1-K4,用P3.6/WR和P3.7/RD端口接兩個輕觸開關,用來作加計數和減計數開關。具體的電路原理圖如下圖所示
        2.電路原理圖

        圖4.12.1

        3.系統板上硬件連線
        (1.把“單片機系統”區域中的P1.0-P1.3端口用8芯排線連接到“八路發光二極管指示模塊”區域中的L1-L4上;要求:P1.0對應著L1,P1.1對應著L2,P1.2對應著L3,P1.3對應著L4;
        (2.把“單片機系統”區域中的P3.0/RXD,P3.1/TXD,P3.2/INT0,P3.3/INT1用導線連接到“四路撥動開關”區域中的K1-K4上;
        (3.把“單片機系統”區域中的P3.6/WR,P3.7/RD用導線連接到“獨立式鍵盤”區域中的SP1和SP2上;
        4.程序設計內容
        (1.兩個獨立式按鍵識別的處理過程;
        (2.預置初值讀取的問題
        (3.LED輸出指示
        5.程序框圖















        圖4.12.2

        6.匯編源程序
        COUNTEQU30H
        ORG00H
        START:MOVA,P3
        ANLA,#0FH
        MOVCOUNT,A
        MOVP1,A
        SK2:JBP3.6,SK1
        LCALLDELY10MS
        JBP3.6,SK1
        INCCOUNT
        MOVA,COUNT
        CJNEA,#16,NEXT
        MOVA,P3
        ANLA,#0FH
        MOVCOUNT,A
        NEXT:MOVP1,A
        WAIT:JNBP3.6,WAIT
        LJMPSK2
        SK1:JBP3.7,SK2
        LCALLDELY10MS
        JBP3.7,SK2
        DECCOUNT
        MOVA,COUNT
        CJNEA,#0FFH,NEX
        MOVA,P3
        ANLA,#0FH
        MOVCOUNT,A
        NEX:MOVP1,A
        WAIT2:JNBP3.7,WAIT2
        LJMPSK2
        DELY10MS:MOVR6,#20
        MOVR7,#248
        D1:DJNZR7,$
        DJNZR6,D1
        RET
        END
        7.C語言源程序
        #include
        unsignedcharcurcount;
        voiddelay10ms(void)
        {
        unsignedchari,j;
        for(i=20;i>0;i--)
        for(j=248;j>0;j--);
        }
        voidmain(void)
        {
        curcount=P3&0x0f;
        P1=~curcount;
        while(1)
        {
        if(P3_6==0)
        {
        delay10ms();
        if(P3_6==0)
        {
        if(curcount>=15)
        {
        curcount=15;
        }
        else
        {
        curcount++;
        }
        P1=~curcount;
        while(P3_6==0);
        }
        }
        if(P3_7==0)
        {
        delay10ms();
        if(P3_7==0)
        {
        if(curcount<=0)
        {
        curcount=0;
        }
        else
        {
        curcount--;
        }
        P1=~curcount;
        while(P3_7==0);
        }
        }
        }
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 平陆县| 广元市| 绥宁县| 纳雍县| 阳曲县| 理塘县| 科尔| 留坝县| 沙洋县| 米易县| 临城县| 禄劝| 淮阳县| 乌恰县| 论坛| 搜索| 丁青县| 祥云县| 舞阳县| 武汉市| 信丰县| 车险| 拉萨市| 平昌县| 额济纳旗| 宝坻区| 宁陵县| 宣城市| 晋州市| 昌宁县| 绥中县| 滦南县| 宣恩县| 正镶白旗| 永昌县| 石狮市| 聊城市| 永和县| 丹阳市| 无锡市| 沁阳市|