新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機時鐘匯編程序

        51單片機時鐘匯編程序

        作者: 時間:2016-12-01 來源:網絡 收藏
        終于到了……感動ing...自己也可以DIY一個電子時鐘了。

        電路板和原件要另外找,南寧市的電子元件稀少得真難找啊,弄好后焊接,看來要找個好點的焊臺,這樣焊接電路時比較方便。

        本文引用地址:http://www.104case.com/article/201612/324116.htm

        電路如下:

        ;簡單的89C2051時鐘程序
        ;顯示方式為.12:34之12小時制
        ;P1口輸出段數據,P3口輸出位數據
        ;P1.7為秒點,P3.7為PM輸出
        ;P3.4校時,P3.5校分
        ;晶振12MHz


        flash equ 31h
        sec equ 32h ;定義秒存儲位置
        min equ 33h ;定義分存儲位置
        hour equ 34h
        hourk bit p3.4 ;調時按鈕
        mink bit p3.5 ;調分按鈕
        pm bit p3.7 ;PM輸出端
        org 0000h
        ajmp start
        org 000bh
        ajmp int_t0
        org 0100h
        start: mov a,#00h ;清0
        mov 30h,a
        movflash,a
        mov sec,a ;秒清0
        mov min,#00 ;分清0
        mov hour,#12
        mov sp,#60h ;重設堆棧指針
        setb pm ;PM清0
        mov p1,#0ffh
        mov p3,#0ffh
        mov tmod,#01h ;設定定時器0工作于方式1
        mov tl0,#0b0h ;設定定時初始值50ms
        mov th0,#3ch
        setb ea ;啟動定時
        setb et0
        setb tr0
        key: lcall disp ;按鍵處理子程序
        jb hourk,mmm
        hhh: lcall disp
        jnb hourk,hhh
        inc hour ;時加1
        mov a,hour
        cjne a,#12,ppp
        cpl pm ;PM取反
        ppp: cjne a,#13,key
        mov hour,#01h ;12小時到,清零.
        mmm: jb mink,key
        nnn: lcall disp
        jnb mink,nnn
        inc min
        mov a,min
        cjne a,#60,key
        mov min,#00h ;一小時時間到
        ajmp key
        int_t0:push acc ;保護現場
        mov tl0,#0b0h ;賦定時初值
        mov th0,#3ch
        inc 30h ;20H地址加1
        mov a,30h
        cjne a,#10,reti1
        mov 30h,#00h ;半秒鐘時間到
        inc flash ;半秒加1
        mov a,flash
        cjne a,#2,reti1
        movflash,#00h
        inc sec ;秒加1
        mov a,sec
        cjne a,#60,reti1
        mov sec,#00h ;一分鐘時間到
        inc min ;分加1
        mov a,min
        cjne a,#60,reti1
        mov min,#00h ;一小時時間到
        inc hour ;時加1
        mov a,hour
        cjne a,#12,cont
        cpl pm ;PM取反
        cont: cjne a,#13,reti1
        mov hour,#01h ;12小時到,清零.
        reti1: pop acc ;恢復現場
        reti ;中斷返回
        disp: mov a,#10
        mov b,a
        mov a,hour
        div ab
        cjne a,#01,zero
        jmp normal
        zero: mov a,#10 ;消隱無效零
        normal:mov dptr,#tab
        movc a,@a+dptr
        mov p1,a
        clr p3.0
        lcall dely
        setb p3.0
        mov a,b
        mov dptr,#tab
        movc a,@a+dptr
        mov p1,a
        clr p3.1
        lcall dely
        setb p3.1
        mov a,#10
        mov b,a
        mov a,min
        div ab
        mov dptr,#tab
        movc a,@a+dptr
        mov p1,a
        clr p3.3
        lcall dely
        setb p3.3
        mov a,b
        mov dptr,#tab
        movc a,@a+dptr
        mov p1,a
        clr p3.2
        lcall dely
        setb p3.2
        mov a,flash
        cjne a,#00,light
        setb p1.7
        lcall dely
        jmp over
        light: clr p1.7
        lcall dely
        over: ret ;子程序返回
        tab: db 88h,0afh,91h,0a1h,0a6h,0e0h,0c0h,0adh,80h,0a0h,0ffh;共陽段碼表0123456789不亮
        dely: mov r6,#10
        d1: mov r7,#20
        d2: djnz r7,d2
        djnz r6,d1
        ret

        end



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 山东省| 大田县| 拉萨市| 农安县| 定襄县| 扶风县| 浮梁县| 晋宁县| 晋州市| 泉州市| 会泽县| 博乐市| 大宁县| 宜丰县| 璧山县| 冕宁县| 衡山县| 南澳县| 饶平县| 从江县| 凯里市| 紫金县| 安阳市| 喀喇沁旗| 江阴市| 房山区| 澄迈县| 龙游县| 怀安县| 精河县| 成武县| 承德市| 潞西市| 吉林市| 巴青县| 行唐县| 绍兴市| 呼玛县| 霍山县| 郓城县| 安阳县|