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

        返回頂部
        亚洲精品国产精品国自产观看| 99re这里只有精品6| 国产成人精品免费午夜app| 97久久超碰国产精品旧版| 国产精品久久波多野结衣| 91人前露出精品国产| 久久国产成人亚洲精品影院| 又爽又黄又无遮挡的视频| 亚洲国产精品无码久久SM| 999精品视频| 国产成人亚洲精品91专区手机| 欧美日韩成人精品久久久免费看| 中文无码久久精品| 国产乱码精品一区二区三区四川人| 国产精品一区二区三区免费| 男女免费视频观看| 99精品国产一区二区三区| 国产精品自产拍在线观看花钱看| 色老头在线官方网站| 国产成人久久精品一区二区三区| 久久伊人精品青青草原高清| 久久www免费人成精品香蕉| 亚洲精品视频免费| 国产探花在线精品一区二区| 四虎精品影院永久在线播放| 亚洲精品成人a在线观看| 国产日产韩国精品视频| 国产精品无码v在线观看| 大桥未久磁力迅雷链接中文字幕 | 下载天堂国产AV成人无码精品网站| 亚洲精品中文字幕无码蜜桃| 久久精品中文字幕久久| 亚洲国产精品人人做人人爱| 国产精品无码一区二区三级 | 久久成人免费观看草草影院| 麻豆精品成人免费国产片| 午夜国产精品无套| 6一12呦女精品| 日韩美女18网站久久精品| 2022国产精品福利在线观看| 无码日韩精品一区二区人妻 |