新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 99秒馬表設計

        99秒馬表設計

        作者: 時間:2011-02-27 來源:網絡 收藏
        實驗任務

        (1. 開始時,顯示“00”,第1次按下SP1后就開始計時。

        (2. 2次按SP1后,計時停止。

        (3. 3次按SP1后,計時歸零。

        2. 電路原理圖

        4.17.1

        3. 系統板上硬件連線

        (1. 把“系統”區域中的P0.0/AD0P0.7/AD7端口用8芯排線連接到“四路靜態數碼顯示模塊”區域中的任一個ah端口上;要求:P0.0/AD0對應著aP0.1/AD1對應著b……P0.7/AD7對應著h

        (2. 把“系統”區域中的P2.0/A8P2.7/A15端口用8芯排線連接到“四路靜態數碼顯示模塊”區域中的任一個ah端口上;要求:P2.0/A8對應著aP2.1/A9對應著b……P2.7/A15對應著h

        (3. 把“系統“區域中的P3.5/T1用導線連接到”獨立式鍵盤“區域中的SP1端口上;

        4. 程序框

        T0中斷服務程序框


        4.17.2

        5. 匯編源程序

        TCNTA EQU 30H

        TCNTB EQU 31H

        SEC EQU 32H

        KEYCNT EQU 33H

        SP1 BIT P3.5

        ORG 00H

        LJMP START

        ORG 0BH

        LJMP INT_T0

        START: MOV KEYCNT,#00H

        MOV SEC,#00H

        MOV A,SEC

        MOV B,#10

        DIV AB

        MOV DPTR,#TABLE

        MOVC A,@A+DPTR

        MOV P0,A

        MOV A,B

        MOV DPTR,#TABLE

        MOVC A,@A+DPTR

        MOV P2,A

        MOV TMOD,#02H

        SETB ET0

        SETB EA

        WT: JB SP1,WT

        LCALL DELY10MS

        JB SP1,WT

        INC KEYCNT

        MOV A,KEYCNT

        CJNE A,#01H,KN1

        SETB TR0

        MOV TH0,#06H

        MOV TL0,#06H

        MOV TCNTA,#00H

        MOV TCNTB,#00H

        LJMP DKN

        KN1: CJNE A,#02H,KN2

        CLR TR0

        LJMP DKN

        KN2: CJNE A,#03H,DKN

        MOV SEC,#00H

        MOV A,SEC

        MOV B,#10

        DIV AB

        MOV DPTR,#TABLE

        MOVC A,@A+DPTR

        MOV P0,A

        MOV A,B

        MOV DPTR,#TABLE

        MOVC A,@A+DPTR

        MOV P2,A

        MOV KEYCNT,#00H

        DKN: JNB SP1,$

        LJMP WT

        DELY10MS:

        MOV R6,#20

        D1: MOV R7,#248

        DJNZ R7,$

        DJNZ R6,D1

        RET

        INT_T0:

        INC TCNTA

        MOV A,TCNTA

        CJNE A,#100,NEXT

        MOV TCNTA,#00H

        INC TCNTB

        MOV A,TCNTB

        CJNE A,#4,NEXT

        MOV TCNTB,#00H

        INC SEC

        MOV A,SEC

        CJNE A,#100,DONE

        MOV SEC,#00H

        DONE: MOV A,SEC

        MOV B,#10

        DIV AB

        MOV DPTR,#TABLE

        MOVC A,@A+DPTR

        MOV P0,A

        MOV A,B

        MOV DPTR,#TABLE

        MOVC A,@A+DPTR

        MOV P2,A

        NEXT: RETI

        TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

        END

        6. C語言源程序

        #include AT89X51.H>

        unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,

        0x66,0x6d,0x7d,0x07,

        0x7f,0x6f,0x77,0x7c,

        0x39,0x5e,0x79,0x71,0x00};

        unsigned char second;

        unsigned char keycnt;

        unsigned int tcnt;

        void main(void)

        {

        unsigned char i,j;

        TMOD=0x02;

        ET0=1;

        EA=1;

        second=0;

        P0=dispcode[second/10];

        P2=dispcode[second%10];

        while(1)

        {

        if(P3_5==0)

        {

        for(i=20;i>0;i--)

        for(j=248;j>0;j--);

        if(P3_5==0)

        {

        keycnt++;

        switch(keycnt)

        {

        case 1:

        TH0=0x06;

        TL0=0x06;

        TR0=1;

        break;

        case 2:

        TR0=0;

        break;

        case 3:

        keycnt=0;

        second=0;

        P0=dispcode[second/10];

        P2=dispcode[second%10];

        break;

        }

        while(P3_5==0);

        }

        }

        }

        }

        void t0(void) interrupt 1 using 0

        {

        tcnt++;

        if(tcnt==400)

        {

        tcnt=0;

        second++;

        if(second==100)

        {

        second=0;

        }

        P0=dispcode[second/10];

        P2=dispcode[second%10];

        }

        }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 美姑县| 磐石市| 铅山县| 瓮安县| 高陵县| 达州市| 板桥市| 东阿县| 尼勒克县| 奉贤区| 南汇区| 河南省| 兴义市| 刚察县| 吉木萨尔县| 高邑县| 清河县| 四平市| 屏东县| 安岳县| 上犹县| 务川| 曲松县| 思南县| 达拉特旗| 鹿泉市| 定边县| 瑞安市| 武定县| 全椒县| 博白县| 陵川县| 芜湖县| 柳江县| 凤冈县| 平凉市| 满洲里市| 繁昌县| 启东市| 通州市| 铁岭县|