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

        返回頂部
        午夜成人精品福利网站在线观看| 日韩专区亚洲精品欧美专区| 久久中文精品无码中文字幕| 国语自产精品视频在线观看| 欧美日韩精品一区二区三区不卡| 好紧好爽太大了h视频| 四虎影视在线免费观看| 国产精品视频一区二区三区四| 精品国精品国产| 久久精品三级视频| 自拍偷自拍亚洲精品情侣| 538国产精品一区二区在线| 国产精品一区二区av不卡| 亚洲成a人片77777在线播放| 91精品最新国内在线播放| 精品水蜜桃久久久久久久| 亚洲av无码精品网站| 九九热在线精品视频| 欧美亚洲日本久久精品| 精品一区二区三区无码免费视频| 97精品国产高清自在线看超| 在线观看理论福利片| 国产精品一久久香蕉产线看| 日韩精品一二三四区| 国产精品无套内射迪丽热巴| 精品91自产拍在线观看 | 人妻精品久久久久中文字幕| 无码人妻精品一区二区三区66| 五月花精品视频在线观看| 在线观看自拍少妇精品| 国产精品视频网站| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 99久久er这里只有精品18| 久久乐国产精品亚洲综合| 国产国拍亚洲精品mv在线观看| 日本国产精品久久| 国产亚洲婷婷香蕉久久精品| 五级黄无遮挡免费看| 国产精品女人呻吟在线观看| 日韩精品内射视频免费观看| 精品国偷自产在线视频|