久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2529|回復: 0
收起左側

單片機數字時鐘匯編語言程序與Proteus仿真圖 能顯示秒、分、時

[復制鏈接]
ID:1023916 發表于 2022-5-5 23:42 | 顯示全部樓層 |閱讀模式
這是基于單片機的簡易數字時鐘,能顯示秒、分、時。其中第一個按鍵按下后是時加一,第二個按鍵按下后是分加一,第三個按鍵是清零
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif 2.png 1.png

單片機匯編語言程序:
  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開始執行程序
  25.         ORG 0100H

  26. MAIN:
  27.         MOV @R0,#70H;準備7OH-79H 10個字節空間
  28.         MOV        R7,#09H

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

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

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

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

  53. LOOP3:
  54.         AJMP LOOP

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

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

  71. EXIT:
  72.         RET;調時返回

  73. MIN_SET:
  74.         CALL         XIANSHI;調用顯示程序
  75.         JNB P1.1,MIN_SET;P1.1按下跳到調分程序
  76.         INC        76H;分的個位加1
  77.         MOV        R5,76H
  78.         CJNE        R5,#10,EXIT ;個位不為10 跳到 MIS1
  79.         MOV 76H,#0;個位清零
  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;入棧,保護現場
  88.         PUSH         PSw
  89.         CLR         ET0;關閉中觀允許
  90.         CLR TR0;關閉中斷
  91.         MOV         A,#0B7H;中斷響應時間同步修正
  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;開啟定時器TO
  98.         DJNZ        R4,OUT;20 次中斷未到中斷退出

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

  106. ADDMM:
  107.         JC         OUT;小雨60秒中斷退出
  108.         ACALL         CLR0;等于60秒調用 CLRO清零秒
  109.         MOV R0,#77H;指向分計時單元
  110.         ACALL         ADD1;調用 ADD1
  111.         MOV         A,R3;分數據放入A
  112.         CLR         C;清零進位標志
  113.         CJNE         A,#60,ADDH;分是否到了60,是則跳轉

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

  122. HOUR:
  123.         JC         OUT;小于24時時中斷退出
  124.         ACALL         CLR0;調用 CLRO

  125. OUT:
  126.         MOV         72H,76H;將分的存儲地址轉移
  127.         MOV         73H,77H
  128.         MOV         74H,78H;將時的存儲地址轉移
  129.         MOV         75H,79H
  130.         POP PSW;恢復現場
  131.         POP ACC
  132.         SETB         ET0
  133.         RETI

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

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

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

  159. PLAY:
  160.         MOV         A,R5;掃描字放入A
  161.         MOV         P2,A;從P2口輸出
  162.         MOV A,@R1;取顯示數據到A
  163.         MOV DPTR,#TAB;取段碼表地址
  164.         MOVC         A,@A+DPTR;查顯示數據對應段碼
  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時一次顯示結束
  170.         RL        A;A中數據循環左移
  171.         MOV         R5,A;放回R5內
  172.         AJMP         PLAY;跳回PLAY循環

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

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

  178. DL1MS:        ;1毫秒延時程序
  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.       
復制代碼
51hei.png
Proteus8.8仿真文件下載: 時鐘.zip (22.74 KB, 下載次數: 39)

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 插插宗合网 | 性在线| 天天干成人网 | 久久精品久久综合 | 欧美中文字幕在线观看 | 99精品视频在线 | 亚洲高清在线观看 | 中文日韩字幕 | 视频二区国产 | 久久久久国产一区二区 | 亚洲一区在线播放 | 国产精品一区在线观看 | 国内自拍真实伦在线观看 | 久久四虎| 天天干天天操天天爽 | 久久免费精彩视频 | 色综合久久天天综合网 | av天天看 | 麻豆国产精品777777在线 | 久久1区 | 国产在线一区二区 | 免费精品视频在线观看 | 欧美日韩a | 精品三区 | 亚洲欧美男人天堂 | 少妇精品久久久久久久久久 | 中文字幕1区2区 | 中文字幕一区二区三区日韩精品 | 一级做a爰片性色毛片 | 在线欧美日韩 | 久久成 | 欧美视频免费在线观看 | 亚洲欧美日本国产 | 激情网五月天 | 精品日韩一区 | 国产精品污www一区二区三区 | 亚洲一区在线播放 | 超碰成人在线观看 | 婷婷色在线播放 | 狠狠干天天干 | 91在线视频免费观看 |