新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 匯編電子鐘的設計

        匯編電子鐘的設計

        作者: 時間:2012-09-17 來源:網絡 收藏

        8.jpg寫在前面: ­
        前天晚上斷網之后閑來無事忽然心血來潮想起和誰說過以我現在的水平做個時鐘沒有什么問題,就準備將它實現了。借用老師的學習板子,一直搞到凌晨2點做出了一個24小時的計數器顯示,因為沒有學過按鍵的使用方法,昨天實驗課下課后問了老師,她給出了查詢方式。昨晚搞了下,可以置數,但是不能實現0~60范圍加,只能0~99加。今天上午在老師的指導下,終于可以了,總算沒有食言啊。呵呵,下面貼出程序了。
        先來個效果圖:

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


        mini_second equ 30h ;設置0.05秒、秒、分、時的地址 ­

        second equ 31h ­

        minute equ 32h ­

        clock equ 33h ­

        k1 equ p3.2 ;設置按鍵地址,為外部中斷口int0和int1 ­

        k2 equ p3.3 ­

        ­

        org 0000h ­

        ljmp start ­

        org 000bh ­

        ljmp t0_x ;使用中斷計時 ­

        org 0050h ­

        start: mov mini_second,#00h ;清零 ­

        mov second,#00h ­

        mov minute,#00h ­

        mov clock,#00h ­

        mov tmod,#01h ;置工作方式1,開定時器 ­

        mov th0,#3ch ­

        mov tl0,#0b0h ­

        setb ea ­

        setb et0 ­

        setb tr0 ­

        start1: lcall show_led ;主程序跳轉程序顯示 ­

        lcall key_d ;置數程序 ­

        ljmp start1 ;一直循環顯示 ­

        t0_x: ­

        push acc ;保護現場 ­

        push psw ­

        mov th0,#3ch ;置初值,這個不是很準確, ­

        mov tl0,#0b4h ;估計一分鐘慢個2~3秒 ­

        inc mini_second ­

        mov a,mini_second ­

        cjne a,#20,ret0 ;20次為1秒,沒有20次均跳出中斷重新跳 ­

        mov mini_second, #00h ­

        mov a,second ­

        add a,#01h ­

        da a ­

        mov second,a ­

        cjne a,#60h,ret0 ;1秒后出循環,每秒后秒清零,跳到分計時加1 ­

        mov second,#00h ­

        mov a,minute ­

        add a,#01h ;分同秒 ­

        da a ­

        mov minute,a ­

        cjne a,#60h,ret0 ­

        mov minute,#00h ­

        mov a,clock ­

        add a,#01h ­

        da a ­

        mov clock,a ­

        cjne a,#24h,ret0 ­

        mov clock,#00h ­

        ret0: pop psw ;結束保護,跳出 ­

        pop acc ­

        reti ­

        nop ­

        nop ­

        nop ­

        ;======================================顯示子程序 ­

        show_led: ­

        mov a,second ;個位秒顯示 ­

        anl a,#0fh ­

        mov 40h,a ­

        clr p1.5 ;片選數碼管 ­

        clr p1.6 ­

        setb p1.7 ­

        mov a,40h ­

        lcall led_x ­

        lcall delay ­

        mov a,second ;十位秒顯示 ­

        anl a,#0f0h ­

        swap a ­

        mov 41h,a ­

        setb p1.5 ­

        clr p1.6 ­

        setb p1.7 ­

        mov a,41h ­

        lcall led_x ­

        lcall delay ­

        ­

        mov a,minute ;個位分顯示 ­

        anl a,#0fh ­

        mov 42h,a ­

        setb p1.5 ­

        setb p1.6 ­

        setb p1.7 ­

        mov a,42h ­

        lcall led_x ­

        lcall delay ­

        mov a,minute ;十位分顯示 ­

        anl a,#0f0h ­

        swap a ­

        mov 43h,a ­

        clr p1.5 ­

        clr p1.6 ­

        clr p1.7 ­

        mov a,43h ­

        lcall led_x ­

        lcall delay ­

        ­

        mov a,clock ;個位時顯示 ­

        anl a,#0fh ­

        mov 44h,a ­

        clr p1.5 ­

        setb p1.6 ­

        clr p1.7 ­

        mov a,44h ­

        lcall led_x ­

        lcall delay ­

        mov a,clock ;十位時顯示 ­

        anl a,#0f0h ­

        swap a ­

        mov 45h,a ­

        setb p1.5 ­

        setb p1.6 ­

        clr p1.7 ­

        mov a,45h ­

        lcall led_x ­

        lcall delay ­

        ret ­

        ­

        led_x: mov dptr,#led_data ­

        movc a,@a+dptr ­

        mov p0,a ­

        ret ­

        ;====================================延遲子程序 ­

        delay: mov r7,#10 ­

        de1: mov r6,#100 ;延時1ms多一點,因為晶振為11.0592MHZ ­

        djnz r6,$ ­

        djnz r7,de1 ­

        ret ­

        ;===================================數碼管的段選碼 ­

        led_data: db 0c0h,0f9h,0a4h,0b0h,099h,92h,82h,0f8h,80h,90h ­

        ;=====================================置數子程序 ­

        key_d: jnb k1,key1 ­

        jnb k2,key2 ­

        ret ­

        key1: mov a,minute ;查詢方式 ————> 分位置數 ­

        clr c ;清零進位,防止干擾da和cjne指令的操作 ­

        inc a ;累加器自加一 ,此為加法置數 ­

        da a ;十進制處理 ­

        cjne a, #60h, k_01 ;判斷是否為60,為60清零,跳出 ­

        mov a,#00h ­

        k_01: mov minute,a ­

        jnb k1,$ ­

        ret ­

        ­

        key2: mov a,clock ;時位 置數同上 ­

        clr c ­

        inc a ­

        da a ­

        cjne a, #24h,k_11 ­

        mov a,#00h ­

        k_11: mov clock,a ­

        jnb k2,$ ­

        ret ­
        本程序如有雷同,純屬不可能 ?

        我的不夠成熟或稱之為幼稚的編程,鄭文老師的獨特學習板子(顯示數碼管是p0口,片選竟然是用p1口3個I/O口接138,——!這個獨特焊接方式讓我程序寫得這么長),鄭子含老師對我置數程序的修改,才出來的程序,雖然不是什么成功,至少是一個開始,我會繼續瘋下去的。這個時鐘的弊端挺多的,比如置數的時候,會有閃屏現象,程序我會再改進的。 ?

        后記:對于院系電子競賽我的失敗我得向我的組員道歉,雖然我知道那些所謂成功的幾組也比我們好不到哪里去(看過答辯了),但是我會繼續我們的課題,加油吧 ?

        編譯工具:wave6000 ?

        燒制工具:stc-isp(話說國產的stc公司要統一全球51市場,呵呵) 、RS232串口



        關鍵詞: 設計 電子鐘 匯編

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 增城市| 汶上县| 临潭县| 昌江| 永顺县| 余江县| 酉阳| 库伦旗| 巩义市| 高碑店市| 峨边| 晋城| 闸北区| 嵊州市| 长宁区| 上蔡县| 永修县| 封开县| 荥阳市| 汤原县| 清河县| 阿坝| 兴义市| 洪雅县| 铅山县| 临汾市| 平凉市| 陆河县| 黄浦区| 仁布县| 吉首市| 汉沽区| 英山县| 新和县| 修水县| 确山县| 中江县| 马尔康县| 呼和浩特市| 巴中市| 乌鲁木齐市|