找回密碼
         注冊會員
        搜索附件  
        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.

        返回頂部
        免费精品久久久久久中文字幕| 日本精品夜色视频一区二区| 国产精品丝袜久久久久久不卡| 久久99热国产这有精品| 国产亚洲精品a在线观看app| 国产小呦泬泬99精品| 精品免费视在线观看| 国产精品99在线播放| 久久久精品无码专区不卡| 久久成人国产精品青青| 国产成人A人亚洲精品无码| 成人一区二区三区精品| 亚洲A∨精品一区二区三区| 国产午夜无码精品免费看| 51午夜精品免费视频| 国产中文在线亚洲精品官网| 亚洲精品国产成人影院| 精品久久久无码人妻中文字幕豆芽| AAA级久久久精品无码区| 亚洲国产精品成人午夜在线观看| 久久久久99精品成人片直播| 99国产精品私拍pans大尺度| 亚洲午夜福利精品无码| 91在线视频精品| 久久久久人妻一区精品果冻| 久久久精品人妻一区二区三区四| 白浆都出来了视频国产精品| 日本精品一区二区| 思思99热在线观看精品| 成人午夜精品网站在线观看 | 久久精品水蜜桃av综合天堂| 91久久精品国产91性色也| 色影音先锋色资源网站| 国产成人精品免费视| 亚洲精品无码专区久久同性男| 91麻豆国产福利精品| 日本精品视频在线观看| 国产福利视精品永久免费| 亚洲成人国产精品| 精品三级在线观看| 水蜜桃一二二区视在线|