新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 00-59秒計時器(利用軟件延時)

        00-59秒計時器(利用軟件延時)

        作者: 時間:2011-02-27 來源:網絡 收藏

        1. 實驗任務

        如下圖所示,在AT89S51P0P2端口分別接有兩個共陰數碼管,P0口驅動顯示秒時間的十位,而P2口驅動顯示秒時間的個位。

        2. 電路原理圖

        4.11.1

        3. 系統板上硬件連線

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

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

        4. 程序設計內容

        (1. 在設計過程中我們用一個存儲單元作為秒計數單元,當一秒鐘到來時,就讓秒計數單元加1,當秒計數達到60時,就自動返回到0,從新秒計數。

        (2. 對于秒計數單元中的數據要把它十位數和個數分開,方法仍采用對10整除和對10求余。

        (3. 在數碼上顯示,仍通過查表的方式完成。

        (4. 一秒時間的產生在這里我們采用軟件精確延時的方法來完成,經過精確計算得到1秒時間為1.002秒。

        DELY1S: MOV R5,#100

        D2: MOV R6,#20

        D1: MOV R7,#248

        DJNZ R7,$

        DJNZ R6,D1

        DJNZ R5,D2

        RET

        5. 程序框圖

        4.11.2

        6. 匯編源程序

        Second EQU 30H

        ORG 0

        START: MOV Second,#00H

        NEXT: MOV A,Second

        MOV B,#10

        DIV AB

        MOV DPTR,#TABLE

        MOVC A,@A+DPTR

        MOV P0,A

        MOV A,B

        MOVC A,@A+DPTR

        MOV P2,A

        LCALL DELY1S

        INC Second

        MOV A,Second

        CJNE A,#60,NEXT

        LJMP START

        DELY1S: MOV R5,#100

        D2: MOV R6,#20

        D1: MOV R7,#248

        DJNZ R7,$

        DJNZ R6,D1

        DJNZ R5,D2

        RET

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

        END

        7. C語言源程序

        #include AT89X51.H>

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

        0x6d,0x7d,0x07,0x7f,0x6f};

        unsigned char Second;

        void delay1s(void)

        {

        unsigned char i,j,k;

        for(k=100;k>0;k--)

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

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

        }

        void main(void)

        {

        Second=0;

        P0=table[Second/10];

        P2=table[Second%10];

        while(1)

        {

        delay1s();

        Second++;

        if(Second==60)

        {

        Second=0;

        }

        P0=table[Second/10];

        P2=table[Second%10];

        }

        }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阳新县| 绥滨县| 北辰区| 永嘉县| 桐乡市| 湛江市| 双辽市| 高州市| 正镶白旗| 雷山县| 乐都县| 图们市| 蕲春县| 浦县| 莎车县| 祁连县| 海原县| 灵台县| 万山特区| 镇坪县| 盈江县| 来凤县| 富民县| 高密市| 凌海市| 渭南市| 龙岩市| 兰溪市| 新宾| 内乡县| 榆社县| 汉源县| 灯塔市| 平顶山市| 额尔古纳市| 浑源县| 巢湖市| 类乌齐县| 博客| 华容县| 固始县|