新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機--電子時鐘(匯編)

        單片機--電子時鐘(匯編)

        作者: 時間:2016-11-22 來源:網絡 收藏
        ;消隱的匯編程序簡單的電子時鐘

        ;有些地方用十進制比較方便,并不是匯編里面都要用十六進制?

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

        ;author:helloword

        ;CLRSMG_OE;+++++++++++++++++++++++++++++++++++++++++++++++

        ;CALLDELAY;延時------->消隱

        ;SETBSMG_OE;+++++++++++++++++++++++++++++++++++++++++++++

        SMG_OEBITP1.3

        SMG_DLBITP1.4

        SMG_WLBITP1.5

        SECONDEQU40H

        MINUTEEQU41H

        HOUREQU42H

        FLAGEQU43H

        ORG0000H

        JMPSTART

        ORG000BH

        JMPINT_T0

        ORG0040H

        START:

        MOVSECOND,#0

        MOVMINUTE,#0

        MOVHOUR,#0

        MOVFLAG,#14H;14H就是十進制的20,20*50000=1s

        MOVDPTR,#DUAN

        MOVTMOD,#01H

        MOVTH0,#03CH

        MOVTL0,#0B0H

        SETBTR0

        SETBET0

        SETBEA

        S1:CALLDISPLAY

        ;-----------接下來的程序是控制時分秒的上限值------

        C1:MOVA,SECOND

        CJNEA,#60,C2;3CH就是十進制的60

        MOVSECOND,#0

        INCMINUTE

        C2:MOVA,MINUTE

        CJNEA,#60,C3;3CH就是十進制的60

        MOVMINUTE,#0

        MOVSECOND,#0

        INCHOUR

        C3:MOVA,HOUR

        CJNEA,#24,L;18H就是十進制的24

        MOVHOUR,#0

        MOVMINUTE,#0

        MOVSECOND,#0

        ;-----------判斷結束----------------------

        L:LJMPS1

        DISPLAY:;數碼管顯示子程序

        D1:;***********顯示秒的兩個數碼管********************

        SETBSMG_WL;P1.5數碼管的位選

        MOVP0,#0BFH;

        CLRSMG_WL;

        ;-----------顯示秒的高位

        SETBSMG_DL;P1.4數碼管的段選

        MOVA,SECOND

        MOVB,#10

        DIVAB;A/B,除完之后商存在A中,余數存在B中

        MOVCA,@A+DPTR;查表指令要使用MOVC

        MOVP0,A

        CLRSMG_DL

        CLRSMG_OE;++++++++++++++++++++++++++++++++++++++++++++++

        CALLDELAY;延時------->消隱

        SETBSMG_OE;+++++++++++++++++++++++++++++++++++++++++++++

        ;-----------顯示秒的低位

        SETBSMG_WL

        MOVP0,#7FH

        CLRSMG_WL

        SETBSMG_DL

        MOVA,B

        MOVCA,@A+DPTR

        MOVP0,A

        CLRSMG_DL

        CLRSMG_OE;++++++++++++++++++++++++++++++++++++++++++++++

        CALLDELAY;延時------->消隱

        SETBSMG_OE;+++++++++++++++++++++++++++++++++++++++++++++

        ;***********秒的顯示到此結束********************

        D2:;***********顯示分的兩個數碼管******************

        SETBSMG_WL;P1.5數碼管的位選

        MOVP0,#0F7H;

        CLRSMG_WL;

        ;-----------顯示分的高位

        SETBSMG_DL;P1.4數碼管的段選

        MOVA,MINUTE

        MOVB,#10

        DIVAB;A/B,除完之后商存在A中,余數存在B中

        MOVCA,@A+DPTR;查表指令要使用MOVC

        MOVP0,A

        CLRSMG_DL

        CLRSMG_OE;++++++++++++++++++++++++++++++++++++++++++++++

        CALLDELAY;延時------->消隱

        SETBSMG_OE;+++++++++++++++++++++++++++++++++++++++++++++

        ;-----------顯示分的低位

        SETBSMG_OE;+++++++++++++++++++++++++++++++++++++++++++++

        SETBSMG_WL

        MOVP0,#0EFH

        CLRSMG_WL

        SETBSMG_DL

        MOVA,B

        MOVCA,@A+DPTR

        MOVP0,A

        CLRSMG_DL

        CLRSMG_OE;++++++++++++++++++++++++++++++++++++++++++++++

        CALLDELAY;延時------->消隱

        SETBSMG_OE;+++++++++++++++++++++++++++++++++++++++++++++

        ;***********分的顯示到此結束********************

        D3:;***********顯示小時的兩個數碼管****************

        SETBSMG_WL;P1.5數碼管的位選

        MOVP0,#0FEH;

        CLRSMG_WL;

        ;-----------顯示小時的高位

        SETBSMG_DL;P1.4數碼管的段選

        MOVA,HOUR

        MOVB,#10

        DIVAB;A/B,除完之后商存在A中,余數存在B中

        MOVCA,@A+DPTR;查表指令要使用MOVC

        MOVP0,A

        CLRSMG_DL

        CLRSMG_OE;++++++++++++++++++++++++++++++++++++++++++++++

        CALLDELAY;延時------->消隱

        SETBSMG_OE;+++++++++++++++++++++++++++++++++++++++++++++

        ;-----------顯示小時的低位

        SETBSMG_WL

        MOVP0,#0FDH

        CLRSMG_WL

        SETBSMG_DL

        MOVA,B

        MOVCA,@A+DPTR

        MOVP0,A

        CLRSMG_DL

        CLRSMG_OE;++++++++++++++++++++++++++++++++++++++++++++++

        CALLDELAY;延時------->消隱

        SETBSMG_OE;+++++++++++++++++++++++++++++++++++++++++++++

        ;***********小時的顯示到此結束********************

        ;***********間隔符的顯示********************

        SETBSMG_OE;+++++++++++++++++++++++++++++++++++++++++++++

        SETBSMG_WL;P1.5數碼管的位選

        MOVP0,#0DBH;DBH=11011011點亮相應的間隔符共陰,0點亮

        CLRSMG_WL;

        SETBSMG_DL;P1.4數碼管的段選

        MOVA,#40H;40H=01000000顯示數碼管g這一段共陰,0點亮

        MOVP0,A

        CLRSMG_DL

        CLRSMG_OE;++++++++++++++++++++++++++++++++++++++++++++++

        CALLDELAY;延時

        RET

        INT_T0:

        MOVTH0,#03CH;(65536-50000)/256=60=3C

        MOVTL0,#0B0H;(65536-50000)%6=176=B0

        DJNZFLAG,RETURN

        INCSECOND

        MOVFLAG,#7H;#14H是十進制的2020*50000=1s

        RETURN:RETI

        DELAY:MOVR1,#20;延時子程序

        DELAY1:MOVR2,#20

        DJNZR2,$

        DJNZR1,DELAY1

        RET

        WEI:DB7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH

        DUAN:DB03FH,06H,05BH,4FH,66H,6DH,07DH,07H,07FH,06FH

        ENDSTART



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 兴仁县| 山阳县| 伊川县| 南乐县| 肇东市| 兴隆县| 丹棱县| 北安市| 凭祥市| 新余市| 武隆县| 安吉县| 大新县| 元阳县| 德格县| 綦江县| 洛阳市| 营山县| 南充市| 抚宁县| 视频| 阿瓦提县| 保德县| 阳原县| 白朗县| 赫章县| 福安市| 敦化市| 沽源县| 若尔盖县| 安庆市| 万全县| 渑池县| 静宁县| 宁远县| 清水河县| 沂水县| 紫阳县| 鲜城| 收藏| 库伦旗|