找回密碼
         注冊會員
        搜索附件  
        MCU資訊論壇 附件中心 單片機論壇 51單片機論壇 數(shù)字鐘.rar

        數(shù)字鐘.rar

         

        經典電子鐘!!!帶仿真效果圖!!:
        本部分設定了隱藏,您已回復過了,以下是隱藏的內容
        這是一個經典的電子鐘,用數(shù)碼管設計
        實驗任務
        (1. 開機時,顯示12:00:00的時間開始計時;
        (2. P0.0/AD0控制“秒”的調整,每按一次加1秒;
        (3. P0.1/AD1控制“分”的調整,每按一次加1分;
        (4. P0.2/AD2控制“時”的調整,每按一次加1個小時;
        C語言源程序
        #include <AT89X51.H>
        unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
        unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f};
        unsigned char dispbuf[8]={0,0,16,0,0,16,2,1}; //初始化使顯示時間的位全為12:00:00,其他都不點亮;
        當將dispbitcode[2] 和dispbitcode[3]對應的16改為X(10~15中的一個),并將其指向dispcode[16]即0x00改為dispcode[X]即0x40。時分秒的間隔就為“—”。
        unsigned char dispbitcnt;
        unsigned char second;
        unsigned char minite;
        unsigned char hour;
        unsigned int tcnt;
        unsigned char mstcnt;
        unsigned char i,j;
        void main(void)
        {
        TMOD=0x02;
        TH0=0x06;
        TL0=0x06;
        TR0=1;
        ET0=1;
        EA=1;
        hour=12;
        while(1)
        {
        if(P0_0==0)
        {
        for(i=5;i>0;i--)
        for(j=248;j>0;j--);
        if(P0_0==0)
        {
        second++;
        if(second==60)
        {
        second=0;
        }
        dispbuf[0]=second%10;
        dispbuf[1]=second/10;
        while(P0_0==0);
        }
        }
        if(P0_1==0)
        {
        for(i=5;i>0;i--)
        for(j=248;j>0;j--);
        if(P0_1==0)
        {
        minite++;
        if(minite==60)
        {
        minite=0;
        }
        dispbuf[3]=minite%10;
        dispbuf[4]=minite/10;
        while(P0_1==0);
        }
        }
        if(P0_2==0)
        {
        for(i=5;i>0;i--)
        for(j=248;j>0;j--);
        if(P0_2==0)
        {
        hour++;
        if(hour==24)
        {
        hour=0;
        }
        dispbuf[6]=hour%10;
        dispbuf[7]=hour/10;
        while(P0_2==0);
        }
        }
        }
        }
        void t0(void) interrupt 1 using 0
        {
        mstcnt++;
        if(mstcnt==8)
        {
        mstcnt=0;
        P3=0xff; //關閉所有顯示
        P1=dispcode[dispbuf[dispbitcnt]];
        P3=dispbitcode[dispbitcnt];
        dispbitcnt++;
        if(dispbitcnt==8)
        {
        dispbitcnt=0;
        }
        }
        tcnt++;
        if(tcnt==4000)
        {
        tcnt=0;
        second++;
        if(second==60)
        {
        second=0;
        minite++;
        if(minite==60)
        {
        minite=0;
        hour++;
        if(hour==24)
        {
        hour=0;
        }
        }
        }
        dispbuf[0]=second%10;
        dispbuf[1]=second/10;
        dispbuf[3]=minite%10;
        dispbuf[4]=minite/10;
        dispbuf[6]=hour%10;
        dispbuf[7]=hour/10;
        }
        }
        匯編源程序
        SECOND EQU 30H
        MINITE EQU 31H
        HOUR EQU 32H
        HOURK BIT P0.2
        MINITEK BIT P0.1
        SECONDK BIT P0.0
        DISPBUF EQU 40H
        DISPBIT EQU 48H
        T2SCNTA EQU 49H
        T2SCNTB EQU 4AH
        TEMP EQU 4BH

        ORG 00H
        LJMP START
        ORG 0BH
        LJMP INT_T0
        START: MOV SECOND,#00H
        MOV MINITE,#00H
        MOV HOUR,#12
        MOV DISPBIT,#00H
        MOV T2SCNTA,#00H
        MOV T2SCNTB,#00H
        MOV TEMP,#0FEH
        LCALL DISP ;2KB范圍內長調用
        MOV TMOD,#01H
        MOV TH0,#(65536-2000) / 256 ;2ms
        MOV TL0,#(65536-2000) MOD 256
        SETB TR0
        SETB ET0
        SETB EA
        WT: JB SECONDK,NK1 ;SECONDK是1轉NK1,即按鍵SP1按下時轉.
        LCALL DELY10MS
        JB SECONDK,NK1
        INC SECOND
        MOV A,SECOND
        CJNE A,#60,NS60
        MOV SECOND,#00H
        NS60: LCALL DISP
        JNB SECONDK,$
        NK1: JB MINITEK,NK2
        LCALL DELY10MS
        JB MINITEK,NK2
        INC MINITE
        MOV A,MINITE
        CJNE A,#60,NM60
        MOV MINITE,#00H
        NM60: LCALL DISP
        JNB MINITEK,$
        NK2: JB HOURK,NK3
        LCALL DELY10MS
        JB HOURK,NK3
        INC HOUR
        MOV A,HOUR
        CJNE A,#24,NH24
        MOV HOUR,#00H
        NH24: LCALL DISP
        JNB HOURK,$
        NK3: LJMP WT
        DELY10MS:
        MOV R6,#10
        D1: MOV R7,#248
        DJNZ R7,$
        DJNZ R6,D1
        RET
        DISP: ;將得出的時間存入40H (DISPBUF)之后的地址
        MOV A,#DISPBUF
        ADD A,#8
        DEC A
        MOV R1,A
        MOV A,HOUR
        MOV B,#10
        DIV AB
        MOV @R1,A ;累加器送內部RAM單元
        @R1與R1區(qū)分?:@R1——R1為地址,@R1指向其內容。
        R1 ——R1為變量,
        DEC R1
        MOV A,B
        MOV @R1,A
        DEC R1
        MOV A,#10 ;輸出符號“—”
        MOV@R1,A
        DEC R1
        MOV A,MINITE
        MOV B,#10
        DIV AB
        MOV @R1,A
        DEC R1
        MOV A,B
        MOV @R1,A
        DEC R1
        MOV A,#10
        MOV@R1,A
        DEC R1
        MOV A,SECOND
        MOV B,#10
        DIV AB
        MOV @R1,A
        DEC R1
        MOV A,B
        MOV @R1,A
        DEC R1
        RET
        INT_T0:
        MOV TH0,#(65536-2000) / 256
        MOV TL0,#(65536-2000) MOD 256
        MOV A, #0FFH
        MOV P3,A
        MOV A,#DISPBUF
        ADD A,DISPBIT ;地址加,并將時間的各位送到P1。
        MOV R0,A
        MOV A,@R0
        MOV DPTR,#TABLE
        MOVC A,@A+DPTR
        MOV P1,A
        MOV A,DISPBIT
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV P3,A
        INC DISPBIT
        MOV A,DISPBIT
        CJNE A,#08H,KNA
        MOV DISPBIT,#00H
        KNA: INC T2SCNTA ;******時間的增加與進位******
        MOV A,T2SCNTA
        CJNE A,#100,DONE
        MOV T2SCNTA,#00H
        INC T2SCNTB
        MOV A,T2SCNTB
        CJNE A,#05H,DONE
        MOV T2SCNTB,#00H
        INC SECOND
        MOV A,SECOND
        CJNE A,#60,NEXT
        MOV SECOND,#00H
        INC MINITE
        MOV A,MINITE
        CJNE A,#60,NEXT
        MOV MINITE,#00H
        INC HOUR
        MOV A,HOUR
        CJNE A,#24,NEXT
        MOV HOUR,#00H
        NEXT: LCALL DISP
        DONE: RETI
        TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H ;40H代表符號“—”
        TAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
        END


        仿真截圖見附件!




        QQ|手機版|MCU資訊論壇 ( 京ICP備18035221號-2 )|網站地圖

        GMT+8, 2025-5-4 05:33 , Processed in 0.039869 second(s), 8 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2025 Discuz! Team.

        返回頂部
        中文字幕一区二区三匹| 久久夜色精品国产噜噜麻豆| 人妻精品久久无码区| 又湿又紧又大又爽a视频| 亚洲精品乱码久久久久久按摩 | 国产精品区AV一区二区| 精品亚洲国产成AV人片传媒| 亚洲精品和日本精品| 久久精品国内一区二区三区| 日韩精品无码久久久久久| 成人精品视频99在线观看免费 | 黄页网站三级视频在线播放| 国产三级精品三级| 久久精品国产亚洲网站| 国产精品美女久久久免费| 一本色道久久88综合日韩精品| 精品国产日韩亚洲一区| 91亚洲国产成人久久精品| 国语精品一区二区三区| 亚洲精品国产精品乱码视色| AAA级久久久精品无码片| 国产精品亚洲高清一区二区| 亚洲国产品综合人成综合网站| 四虎国产精品免费久久| 精品久久国产一区二区三区香蕉 | 国产精品狼人久久久久影院| 台湾妹子中文娱乐网| 动漫精品专区一区二区三区不卡| 亚洲精品国产成人片| 青青青青久久精品国产| 天天视频国产精品| 999国内精品永久免费观看| 精品亚洲一区二区三区在线播放| 亚洲色精品aⅴ一区区三区| 国产超在线视频公开个人| 国产福利91精品一区二区三区| 精品无码国产自产拍在线观看蜜 | 国产亚洲精品xxx| 国产成人精品免费视频大| 久久精品无码一区二区app| 久久精品国产一区二区|