找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7246|回復(fù): 1
收起左側(cè)

我的51單片機(jī)匯編語言秒表,可暫停和復(fù)位,含源碼、Proteus仿真文件和keiil文件

[復(fù)制鏈接]
ID:446990 發(fā)表于 2018-12-15 22:04 | 顯示全部樓層 |閱讀模式
本設(shè)計(jì)為一秒表,可顯示小時(shí)、分鐘、秒的功能。程序開始運(yùn)行時(shí),數(shù)碼管不顯示任何內(nèi)容。按下啟停鍵時(shí) ,開始從0時(shí)0分0秒以每秒為單位開始計(jì)時(shí),可以從00時(shí)00分00秒計(jì)時(shí)到23時(shí)59分59秒,到達(dá)時(shí)間后開始重新從00時(shí)00分00秒開始計(jì)時(shí)。每按一下啟停鍵,將在啟動(dòng)暫停之間切換。清零按鍵,無論是在運(yùn)行還是暫停情況下,按下清零鍵,將時(shí)分秒都清零。
1.png
  1. DAT                EQU 30H                ;顯示緩存首地址
  2. SCANLED        EQU 38H                ;動(dòng)態(tài)掃描位
  3. SEC                EQU 39H                ;秒
  4. MIN                EQU 3AH                ;分
  5. HOUR        EQU 3BH                ;時(shí)
  6. CLK                EQU 3CH                ;中斷次數(shù)
  7. DUAN        EQU P2.0        ;段碼鎖存
  8. WEI                EQU P2.1        ;位碼鎖存
  9. KEYS        EQU P3.2        ;啟停鍵
  10. KEYC        EQU P3.3        ;清零鍵
  11. ORG 0000H
  12. LJMP MAIN
  13. ORG 000BH
  14. LJMP T0ISR        ;50ms定時(shí)
  15. ORG 001BH
  16. LJMP T1ISR        ;掃描顯示
  17. ORG 0030H
  18. MAIN:
  19.                 MOV SP,#5FH                ;棧頂
  20.                 MOV TMOD,#11H        ;定時(shí)器模式為1
  21.                 MOV TH0,#03CH        ;50毫秒定時(shí)
  22.                 MOV TL0,#0B0H        
  23.                 MOV TH1,#0ECH        ;5毫秒定時(shí)
  24.                 MOV TL1,#078H
  25.                 SETB ET0
  26.                 SETB ET1
  27.                 SETB TR1
  28.                 SETB EA
  29.                 MOV SCANLED,#0        ;初始化變量
  30.                 MOV 30H,#10H
  31.                 MOV 31H,#10H
  32.                 MOV 32H,#10H
  33.                 MOV 33H,#10H
  34.                 MOV 34H,#10H
  35.                 MOV 35H,#10H
  36.                 MOV 36H,#10H
  37.                 MOV 37H,#10H
  38.                 MOV SEC,#0
  39.                 MOV MIN,#0
  40.                 MOV HOUR,#0
  41. LOOP:        
  42.                 JB P3.2,LOOP1        ;啟停
  43.                 LCALL DELAY                ;延時(shí)去抖
  44.                 JB P3.2,LOOP1        ;再次檢測
  45.                 JNB P3.2,[        DISCUZ_CODE_1        ]nbsp;               ;等待鍵抬起
  46.                 CPL TR0                        ;啟停計(jì)時(shí)
  47.                 SJMP LOOP
  48. LOOP1:
  49.                 JB P3.3,LOOP        ;清零
  50.                 LCALL DELAY
  51.                 JB P3.3,LOOP
  52.                 JNB P3.3,$
  53.                 MOV SEC,#0                ;清零時(shí)間變量
  54.                 MOV MIN,#0
  55.                 MOV HOUR,#0
  56.                 LCALL DISCHG
  57.                 SJMP LOOP
  58. ;------------------
  59. ;十六進(jìn)制轉(zhuǎn)換為BCD
  60. HBCD:
  61.                 MOV B,#10
  62.                 DIV AB
  63.                 SWAP A
  64.                 ORL A,B
  65.                 RET
  66. ;--------------------
  67. ;延時(shí)約10毫秒
  68. DELAY:
  69.                 MOV R3,#50
  70. DELAY1:
  71.                 MOV R4,#100
  72.                 DJNZ R4,$
  73.                 DJNZ R3,DELAY1
  74.                 RET
  75. ;--------------------
  76. ;定時(shí)器0中斷服務(wù)程序,計(jì)時(shí)功能
  77. T0ISR:
  78.                 PUSH ACC
  79.                 CLR TR0
  80.                 MOV TH0,#3CH        ;重賦初值
  81.                 MOV TL0,#0B0H
  82.                 SETB TR0
  83.                 INC CLK                        ;中斷次數(shù)加1
  84.                 MOV A,CLK
  85.                 CJNE A,#20,T0ISRE        ;20次中斷到?
  86.                 MOV CLK,#0                ;中斷次數(shù)變量清零
  87.                 INC SEC                        ;秒加1
  88.                 MOV A,SEC
  89.                 CJNE A,#60,T0ISRE        ;60秒到?
  90.                 MOV SEC,#0                        ;秒變量清零
  91.                 INC MIN                                ;分加1
  92.                 MOV A,MIN
  93.                 CJNE A,#60,T0ISRE        ;60分到?
  94.                 MOV MIN,#0                        ;分變量清零
  95.                 INC HOUR                        ;小時(shí)加1
  96.                 MOV A,HOUR        
  97.                 CJNE A,#24,T0ISRE        ;24小時(shí)到?
  98.                 MOV SEC,#0                        ;時(shí)分秒均清零
  99.                 MOV MIN,#0
  100.                 MOV HOUR,#0
  101. T0ISRE:
  102.                 LCALL DISCHG                ;將時(shí)分秒轉(zhuǎn)換為BCD碼供顯示
  103.                 POP ACC
  104.                 RETI
  105. ;--------------------
  106. DISCHG:
  107.                 MOV A,HOUR        ;小時(shí)轉(zhuǎn)換為BCD碼,存入30H31H
  108.                 LCALL HBCD
  109.                 PUSH ACC
  110.                 ANL A,#0FH
  111.                 MOV 31H,A
  112.                 POP ACC
  113.                 ANL A,#0F0H
  114.                 SWAP A
  115.                 MOV 30H,A
  116.                 MOV A,MIN        ;分轉(zhuǎn)換位BCD碼,存入33H34H
  117.                 LCALL HBCD
  118.                 PUSH ACC
  119.                 ANL A,#0FH
  120.                 MOV 34H,A
  121.                 POP ACC
  122.                 ANL A,#0F0H
  123.                 SWAP A
  124.                 MOV 33H,A
  125.                 MOV A,SEC        ;秒轉(zhuǎn)換為BCD碼存入36H37H
  126.                 LCALL HBCD
  127.                 PUSH ACC
  128.                 ANL A,#0FH
  129.                 MOV 37H,A
  130.                 POP ACC
  131.                 ANL A,#0F0H
  132.                 SWAP A
  133.                 MOV 36H,A
  134.                 MOV 32H,#11H
  135.                 MOV 35H,#11H
  136.                 RET
  137. ;--------------------
  138. ;定時(shí)器1中斷服務(wù)程序,用于動(dòng)態(tài)掃描數(shù)碼管顯示
  139. T1ISR:
  140.                 PUSH ACC
  141.                 CLR TR1
  142.                 MOV TH1,#0ECH        ;重裝初值
  143.                 MOV TL1,#78H
  144.                 SETB TR1
  145.                 MOV DPTR,#LEDTAB        ;段碼表首地址
  146. T100:
  147.                 MOV R0,#DAT                        ;取顯示緩存數(shù)據(jù)
  148.                 MOV A,SCANLED                ;取顯示當(dāng)前位置
  149.                 ADD A,R0                        ;求具體顯示地址
  150.                 MOV R0,A
  151.                 MOV P0,#00H                        ;消隱
  152.                 SETB WEI                        ;置高位鎖存
  153.                 MOV A,SCANLED                ;取當(dāng)前顯示位置
  154.                 JNZ T101
  155.                 MOV P0,#01H                        ;等于0為第一位
  156.                 SJMP T1DIS
  157. T101:
  158.                 DEC A
  159.                 JNZ T102
  160.                 MOV P0,#02H                        ;等于1為第二位
  161.                 SJMP T1DIS
  162. T102:
  163.                 DEC A
  164.                 JNZ T103
  165.                 MOV P0,#04H                        ;等于2為第三位
  166.                 SJMP T1DIS
  167. T103:
  168.                 DEC A
  169.                 JNZ T104
  170.                 MOV P0,#08H                        ;等于3為第四位
  171.                 SJMP T1DIS
  172. T104:
  173.                 DEC A
  174.                 JNZ T105
  175.                 MOV P0,#10H                        ;等于4為第五位
  176.                 SJMP T1DIS
  177. T105:
  178.                 DEC A
  179.                 JNZ T106
  180.                 MOV P0,#20H                        ;等于5為第六位
  181.                 SJMP T1DIS
  182. T106:
  183.                 DEC A
  184.                 JNZ T107
  185.                 MOV P0,#40H                        ;等于6為第七位
  186.                 SJMP T1DIS
  187. T107:
  188.                 MOV P0,#80H                        ;等于7為第八位
  189. T1DIS:
  190.                 CLR WEI                                ;位鎖存拉低
  191.                 MOV A,@R0
  192.                 MOVC A,@A+DPTR                ;取段碼
  193.                 SETB DUAN                        ;段鎖存拉高
  194.                 MOV P0,A                        ;送段碼
  195.                 CLR DUAN                        ;段鎖存拉低
  196.                 INC SCANLED                        ;顯示位地址加1
  197.                 MOV A,SCANLED
  198.                 CJNE A,#8,T1END                ;共8位
  199.                 MOV SCANLED,#0
  200. T1END:
  201.                 POP ACC
  202.                 RETI
  203. ;--------------------
  204. LEDTAB:
  205.                 DB 0C0H        ;"0"        00H
  206.                 DB 0F9H        ;"1"        01H
  207.                 DB 0A4H        ;"2"        02H
  208.                 DB 0B0H        ;"3"        03H
  209.                 DB 99H        ;"4"        04H
  210.                 DB 92H        ;"5"        05H
  211.                 DB 82H        ;"6"        06H
  212.                 DB 0F8H        ;"7"        07H
  213.                 DB 80H        ;"8"        08H
  214.                 DB 90H        ;"9"        09H
  215.                 DB 88H        ;"A"        0AH
  216.                 DB 83H        ;"B"        0BH
  217.                 DB 0C6H        ;"C"        0CH
  218.                 DB 0A1H        ;"D"        0DH
  219.                 DB 86H        ;"E"        0EH
  220.                 DB 8EH        ;"F"        0FH
  221.                 DB 0FFH        ;" "        10H
  222.                 DB 0BFH        ;'-'        11H
  223. ;--------------------
  224. END
復(fù)制代碼

全部資料51hei下載地址:
數(shù)碼管顯示秒表(有清零按鍵).zip (67.96 KB, 下載次數(shù): 87)


評分

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

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:564923 發(fā)表于 2019-6-25 19:45 | 顯示全部樓層
沒看懂這個(gè)動(dòng)態(tài)掃描
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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