找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2559|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)數(shù)字時(shí)鐘匯編語言程序與Proteus仿真圖 能顯示秒、分、時(shí)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是基于單片機(jī)的簡易數(shù)字時(shí)鐘,能顯示秒、分、時(shí)。其中第一個(gè)按鍵按下后是時(shí)加一,第二個(gè)按鍵按下后是分加一,第三個(gè)按鍵是清零
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)匯編語言程序:
  1. ;====================================================================
  2. ; Main.asm file generated by New Project wizard
  3. ;
  4. ; Created:   周五 5月
  5. ; Processor: 80C51
  6. ; Compiler:  ASEM-51 (Proteus)
  7. ;====================================================================

  8. $NOMOD51
  9. $INCLUDE (8051.MCU)

  10. ;====================================================================
  11. ; DEFINITIONS
  12. ;====================================================================

  13. ;====================================================================
  14. ; VARIABLES
  15. ;====================================================================

  16. ;====================================================================
  17. ; RESET and INTERRUPT VECTORS
  18. ;====================================================================

  19.       ; Reset Vector
  20.       
  21.         ORG 0000H;程序開始地址
  22.         LJMP MAIN;跳到MAIN
  23.         ORG 000BH;TO 中斷程序入口
  24.         LJMP INTT0;跳到To開始執(zhí)行程序
  25.         ORG 0100H

  26. MAIN:
  27.         MOV @R0,#70H;準(zhǔn)備7OH-79H 10個(gè)字節(jié)空間
  28.         MOV        R7,#09H

  29. XIANSHICHUSHIHUA:
  30.         MOV @R0,#00H;將70H-79H初始化為00H
  31.         INC R0
  32.         DJNZ        R7,XIANSHICHUSHIHUA
  33.         MOV TMOD,#01H;設(shè)To為16位定時(shí)器
  34.         MOV TL0,#0B0H;賦初始值
  35.         MOV TH0,#3CH
  36.         SETB EA;CPU開中斷
  37.         SETB ET0;允許To中斷
  38.         SETB TR0;啟動(dòng)To
  39.         MOV        R4,#14H;1S設(shè)定初始值

  40. LOOP:
  41.         LCALL         XIANSHI;調(diào)用顯示程序
  42.         JB P1.0,LOOP1;判斷P1.0有無按下
  43.         LCALL         HOUR_SET;調(diào)用小時(shí)設(shè)定程序
  44.         AJMP         LOOP

  45. LOOP1:
  46.         JB P1.1,LOOP2;判斷P1.1有無按下
  47.         LCALL MIN_SET;調(diào)用分設(shè)定程序
  48.         AJMP LOOP

  49. LOOP2:
  50.         JB P1.2,LOOP3;判斷P1.2有無按下
  51.         LCALL         CLR0;調(diào)用清零程序,這里只清零秒
  52.         AJMP LOOP

  53. LOOP3:
  54.         AJMP LOOP

  55. HOUR_SET:
  56.         ACALL         XIANSHI;調(diào)用顯示程序
  57.         JNB P1.0,HOUR_SET ;P1.0按下跳到調(diào)小時(shí)程序
  58.         INC 78H;小時(shí)的個(gè)位加1
  59.         MOV R6,78H
  60.         CJNE R6,#10,HOUR1 ;個(gè)位不為10跳到HOUR1
  61.         MOV 78H,#0;個(gè)位清零
  62.         INC 79H;十位加1
  63.         JMP EXIT;跳到EXIT

  64. HOUR1:
  65.         MOV R6,78H
  66.         CJNE R6,#4,EXIT;個(gè)位不為4跳到EXIT
  67.         MOV R6,79H
  68.         CJNE R6,#2,EXIT;十位不為2跳到EXIT
  69.         MOV 78H,#0;小時(shí)清零
  70.         MOV 79H,#0

  71. EXIT:
  72.         RET;調(diào)時(shí)返回

  73. MIN_SET:
  74.         CALL         XIANSHI;調(diào)用顯示程序
  75.         JNB P1.1,MIN_SET;P1.1按下跳到調(diào)分程序
  76.         INC        76H;分的個(gè)位加1
  77.         MOV        R5,76H
  78.         CJNE        R5,#10,EXIT ;個(gè)位不為10 跳到 MIS1
  79.         MOV 76H,#0;個(gè)位清零
  80.         INC         77H;十位加1
  81.         MOV        R5,77H
  82.         CJNE R5,#6,EXIT;十位不為6跳到MIS1
  83.         MOV         77H,#0;分清零
  84.         MOV         76H,#0
  85.         RET

  86. INTT0:
  87.         PUSH        ACC;入棧,保護(hù)現(xiàn)場(chǎng)
  88.         PUSH         PSw
  89.         CLR         ET0;關(guān)閉中觀允許
  90.         CLR TR0;關(guān)閉中斷
  91.         MOV         A,#0B7H;中斷響應(yīng)時(shí)間同步修正
  92.         ADD         A,TL0;低8位初值修正
  93.         MOV         TL0        ,A
  94.         MOV         A,#3CH;高8位初值修正
  95.         ADDC        A,TH0
  96.         MOV         TH0,A
  97.         SETB         TR0;開啟定時(shí)器TO
  98.         DJNZ        R4,OUT;20 次中斷未到中斷退出

  99. ADDS:
  100.         MOV        R4,#14H;20次中斷到重賦初值
  101.         MOV        R0,#71H;指向秒計(jì)時(shí)單元
  102.         ACALL         ADD1;調(diào)用ADD1
  103.         MOV         A,R3;秒數(shù)據(jù)放入A
  104.         CLR         C;清零進(jìn)位標(biāo)志
  105.         CJNE         A,#60,ADDMM;秒是否到了60.是則跳轉(zhuǎn)

  106. ADDMM:
  107.         JC         OUT;小雨60秒中斷退出
  108.         ACALL         CLR0;等于60秒調(diào)用 CLRO清零秒
  109.         MOV R0,#77H;指向分計(jì)時(shí)單元
  110.         ACALL         ADD1;調(diào)用 ADD1
  111.         MOV         A,R3;分?jǐn)?shù)據(jù)放入A
  112.         CLR         C;清零進(jìn)位標(biāo)志
  113.         CJNE         A,#60,ADDH;分是否到了60,是則跳轉(zhuǎn)

  114. ADDH:
  115.         JC         OUT;小于60分時(shí)中斷退出
  116.         ACALL         CLR0;等于60分調(diào)用 CLRO清零秒
  117.         MOV R0,#79H;指向時(shí)計(jì)時(shí)單元
  118.         ACALL         ADD1;調(diào)用ADD1
  119.         MOV         A,R3;時(shí)數(shù)據(jù)放入A
  120.         CLR C;清零進(jìn)位標(biāo)志
  121.         CJNE         A,#24H,HOUR ;時(shí)是否到了24是則跳轉(zhuǎn)

  122. HOUR:
  123.         JC         OUT;小于24時(shí)時(shí)中斷退出
  124.         ACALL         CLR0;調(diào)用 CLRO

  125. OUT:
  126.         MOV         72H,76H;將分的存儲(chǔ)地址轉(zhuǎn)移
  127.         MOV         73H,77H
  128.         MOV         74H,78H;將時(shí)的存儲(chǔ)地址轉(zhuǎn)移
  129.         MOV         75H,79H
  130.         POP PSW;恢復(fù)現(xiàn)場(chǎng)
  131.         POP ACC
  132.         SETB         ET0
  133.         RETI

  134. CLR0:
  135.         CLR         A;清零A
  136.         MOV @R0,A;清零RO存放地址中的數(shù)據(jù)
  137.         DEC R0;RO地址減1
  138.         MOV @R0,A
  139.         RET

  140. ADD1:
  141.         MOV         A,@R0;取當(dāng)前計(jì)時(shí)單元數(shù)據(jù)到A
  142.         DEC R0;指向前一地址
  143.         SWAP         A;A中數(shù)據(jù)高四位與低四位交換
  144.         ORL         A,@R0;前一地址中數(shù)據(jù)放入A中低四位
  145.         ADD         A,#01H;A加1操作
  146.         DA                A;十進(jìn)制調(diào)整
  147.         MOV         R3,A;移入R3寄存器
  148.         ANL                 A,#0FH;高四位變0
  149.         MOV         @R0,A;放回前一地址單元
  150.         MOV         A,R3;取回R3中暫存數(shù)據(jù)
  151.         INC R0;指向當(dāng)前地址單元
  152.         SWAP         A;A中數(shù)據(jù)高四位與低四位交換
  153.         ANL         A,#0FH;高四位變0
  154.         MOV @R0,A;數(shù)據(jù)放入當(dāng)削地址單元中
  155.         RET;子程序返回

  156. XIANSHI:
  157.         MOV R1,#70H;指向顯示數(shù)據(jù)首址
  158.         MOV R5,#01H;掃描控制字初值

  159. PLAY:
  160.         MOV         A,R5;掃描字放入A
  161.         MOV         P2,A;從P2口輸出
  162.         MOV A,@R1;取顯示數(shù)據(jù)到A
  163.         MOV DPTR,#TAB;取段碼表地址
  164.         MOVC         A,@A+DPTR;查顯示數(shù)據(jù)對(duì)應(yīng)段碼
  165.         MOV P0,A;段碼放入PO口
  166.         LCALL         DL1MS;顯示1MS
  167.         INC         R1;指向下一地址
  168.         MOV         A,R5;掃描控制字放入A
  169.         JB         ACC.5,ENDOUT ;ACC.5=0時(shí)一次顯示結(jié)束
  170.         RL        A;A中數(shù)據(jù)循環(huán)左移
  171.         MOV         R5,A;放回R5內(nèi)
  172.         AJMP         PLAY;跳回PLAY循環(huán)

  173. ENDOUT:
  174.         CLR         P2.5;一次顯示結(jié)束,P2口復(fù)位
  175.         RET;子程序返回

  176. TAB:
  177. DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

  178. DL1MS:        ;1毫秒延時(shí)程序
  179.         MOV R6,#14H
  180. DL1:
  181.         MOV R7,#19H
  182. DL2:
  183.         DJNZ R7,DL2
  184.         DJNZ R6,DL1
  185.         RET
  186.         END

  187. ;====================================================================
  188. ; CODE SEGMENT
  189. ;====================================================================

  190. ;====================================================================
  191.       
復(fù)制代碼

Proteus8.8仿真文件下載: 時(shí)鐘.zip (22.74 KB, 下載次數(shù): 39)

評(píng)分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表