標(biāo)題: 用單片機(jī)匯編語(yǔ)言寫(xiě)的數(shù)字鐘 按鍵調(diào)節(jié)時(shí)分秒不能用 求幫助 [打印本頁(yè)]

作者: DPJDN    時(shí)間: 2020-7-6 21:31
標(biāo)題: 用單片機(jī)匯編語(yǔ)言寫(xiě)的數(shù)字鐘 按鍵調(diào)節(jié)時(shí)分秒不能用 求幫助
可以通過(guò)按鍵調(diào)節(jié)時(shí)分秒,用8255擴(kuò)展了IO口,并且擴(kuò)展了RAM和ROM各8KB


單片機(jī)源程序如下:
  1.                 ORG 0000H
  2.                 AJMP MAIN
  3.                 ORG 000BH
  4.                 LJMP INTT0
  5.                 ORG 0100H
  6. ;/**********主程序***********/
  7. MAIN:
  8.                 MOV SP,#60H ;確立堆棧區(qū)
  9.                 MOV PSW,#00H
  10.                 MOV R0,#20H   ;RAM區(qū)首地址
  11.                 MOV R7,#5FH ;RAM區(qū)單元個(gè)數(shù)
  12. QL:
  13.                 MOV @R0,#00H ;RAM清零        
  14.                 INC R0
  15.                 DJNZ R7,QL

  16.                 MOV IP,#02H ;IP初始化,優(yōu)先定時(shí)器0
  17.                 MOV IE,#82H ;IE初始化
  18.                 MOV TMOD,#01H ;定時(shí)器0方式1工作
  19.                 LCALL PP ;調(diào)P.子程序
  20. NEXT:
  21.                 LCALL KEY ;按鍵檢測(cè)子程序
  22.                 JB ACC.0,RUNF ;A鍵按下運(yùn)行
  23.                 LCALL DISP ;調(diào)用顯示子程序
  24.                 SJMP NEXT
  25. RUNF:
  26.                 LCALL OUTT ;調(diào)傳送子程序
  27.                 LCALL TIME ;開(kāi)電子鐘
  28. JK:
  29.                 LCALL DISP
  30.                 LCALL KEY
  31.                 JZ JK
  32.                 LCALL ANKEY        ;調(diào)用鍵功能子程序
  33.                 LCALL DISP
  34.                 SJMP JK
  35. ;/***P點(diǎn)顯示的8LED段碼初始化子程序***/
  36. PP:
  37.                 MOV 37H,#12 ;P點(diǎn)編碼送寄存器,對(duì)應(yīng)最左LED  (共陽(yáng)極,0CH )
  38.                 MOV R0,#30H ;第8個(gè)LED,最右LED,段碼存儲(chǔ)的地址
  39.                 MOV R7,#07H         ;第8到第2個(gè)LED,共7個(gè),初始化段碼顯示空白
  40. PPP:
  41.                 MOV @R0,#10  ;顯示空白
  42.                 INC R0
  43.                 DJNZ R7,PPP
  44.                 RET
  45. ;/*********鍵掃描子程序***********/
  46. KEY:
  47.                 LCALL KEYS ;調(diào)用鍵值處理子程序
  48.                 JZ EXIT ;沒(méi)有鍵按下轉(zhuǎn)到返回
  49.                 LCALL DISP
  50.                 LCALL DISP ;調(diào)用顯示去抖動(dòng)
  51.                 LCALL KEYS
  52.                 JZ EXIT
  53.                 MOV B,20H ;保存鍵值
  54. KEYSF:
  55.                 LCALL KEYS
  56.                 JZ KEYY ;鍵釋放,轉(zhuǎn)到恢復(fù)鍵值
  57.                 LCALL DISP ;調(diào)顯示子程序延時(shí)
  58.                 AJMP KEYSF ;等到鍵釋放
  59. KEYY:
  60.                 MOV A,B ;鍵值送A
  61. EXIT:        RET
  62. KEYS:
  63.                 ;MOV P1,#0FFH ;先向P1口寫(xiě)1
  64.                 ;MOV A,P1 ;P1口值送A         (有按鍵按下,對(duì)應(yīng)0,取反后1)
  65.                 ;CPL A
  66.                 ;ANL A,#0FH ;保存P1口的低4位
  67.                 ;MOV 20H,A ;A值送20H保存
  68.                 ;RET
  69.                                 ;MOV A,#82H
  70.                                 ;MOV DPTR,#0003H
  71.                                 ;MOVX @DPTR,A
  72.                                 ;MOV DPTR,#0001H
  73.                                 ;MOVX A,@DPTR
  74.                                 ;CPL A
  75.                                 ;ANL A,#0FH
  76.                                 ;MOV 20H,A
  77.                                 ;RET
  78.                 CLR A
  79.                 MOV A,P3
  80.                 CPL A
  81.                 ANL A,#0FH
  82.                 MOV 20H,A
  83.                 RET
  84. ;/********鍵功能子程序********/
  85. ANKEY:
  86.                 CLR EA ;關(guān)中斷
  87. CHECK:
  88.                 JB TR0,YXZ ;判斷是否運(yùn)行
  89. K0:
  90.                 CJNE A,#01H,K1
  91.                 AJMP RUN ;A鍵按下,恢復(fù)運(yùn)行,轉(zhuǎn)運(yùn)行
  92. K1:
  93.                 CJNE A,#02H,K2
  94.                 AJMP KEY1 ;轉(zhuǎn)時(shí)調(diào)整
  95. K2:
  96.                 CJNE A,#04H,K3
  97.                 AJMP KEY2 ;轉(zhuǎn)分調(diào)整
  98. K3:
  99.                 CJNE A,#08H,OUT          ;轉(zhuǎn)
  100.                 AJMP KEY3 ;轉(zhuǎn)秒調(diào)整
  101. YXZ:
  102.                 JB ACC.0,STOP        ;A鍵按下,暫停
  103.                 AJMP OUT
  104. KEY1:
  105.                 MOV R0,#45H ;時(shí)調(diào)整
  106.                 LCALL ADD1 ;調(diào)加一子程序
  107.                 CLR C
  108.                 CJNE A,#24H,OUTT ;轉(zhuǎn)傳送顯示數(shù)據(jù)子程序
  109.                 ACALL CLR0 ;調(diào)時(shí)間清理子程序
  110.                 AJMP OUTT
  111. KEY2:
  112.                 MOV R0,#43H ;分調(diào)整
  113.                 LCALL ADD1
  114.                 CLR C
  115.                 CJNE A,#60H,OUTT
  116.                 ACALL CLR0
  117.                 AJMP OUTT
  118. KEY3:
  119.                 MOV R0,#41H ;秒調(diào)整
  120.                 ACALL ADD1
  121.                 CLR C
  122.                 CJNE A,#60H,OUTT
  123.                 ACALL CLR0
  124. ;/*****傳送顯示數(shù)據(jù)子程序*****/
  125. OUTT:
  126.                 MOV 30H,40H ;秒顯示單元40H-41H
  127.                 MOV 31H,41H
  128.                 MOV 32H,#11 ;"-"
  129.                 MOV 33H,42H ;分顯示單元42H-43H
  130.                 MOV 34H,43H
  131.                 MOV 35H,#11 ;"-"
  132.                 MOV 36H,44H ;時(shí)顯示單元44H-45H               
  133.                 MOV 37H,45H
  134.                 RET
  135. STOP:
  136.                 CLR TR0
  137.                 RET
  138. RUN:
  139.                 LCALL TIME ;調(diào)運(yùn)行電子鐘子程序
  140. OUT:
  141.                 SETB EA ;無(wú)鍵按下或完成功能跳出
  142.                 RET
  143. ;/*****運(yùn)行電子鐘子程序*****/                                                                        
  144. TIME:
  145.                 SETB EA
  146.                 MOV TL0,#0B0H  ;3CB0H
  147.                 MOV TH0,#3CH
  148.                 MOV R4,#20  ;50ms,20次循環(huán)
  149.                 SETB TR0 ;啟動(dòng)定時(shí)器0
  150.                 RET
  151. ;/******定時(shí)器0中斷處理子程序******/
  152. INTT0:
  153.                 PUSH ACC
  154.                 PUSH PSW
  155.                 CLR ET0
  156.                 CLR TR0                                                                        
  157.                 MOV TL0,#0B0H  ;重新設(shè)置定時(shí)初值
  158.                 MOV TH0,#3CH
  159.                 SETB TR0
  160.                 DJNZ R4,OUTT0  ;r4-1 != 0 1秒未到,轉(zhuǎn)OUTTO
  161. ADDSS:
  162.                 MOV R4,#14H  ;20次計(jì)數(shù)
  163.                 MOV R0,#41H  ;秒十位
  164.                 ACALL ADD1
  165.                 CLR C
  166.                 CJNE A,#60H,ADDMM ;1分到
  167. ADDMM:
  168.                 JC OUTT0         ;1分,60秒未到
  169.                 ACALL CLR0         ;1分到,清零
  170.                 MOV R0,#43H         ;分十位
  171.                 ACALL ADD1
  172.                 CLR C
  173.                 CJNE A,#60H,ADDHH ;1小時(shí)到
  174. ADDHH:
  175.                 JC OUTT0
  176.                 ACALL CLR0
  177.                 MOV R0,#45H          ;時(shí)十位
  178.                 ACALL ADD1
  179.                 CLR C
  180.                 CJNE A,#24H,HOUR ;1天到
  181. HOUR:
  182.                 JC OUTT0
  183.                 ACALL CLR0
  184. OUTT0:
  185.                 MOV 30H,40H ;秒顯示單元40H-41H
  186.                 MOV 31H,41H
  187.                 MOV 32H,#11 ;"-"
  188.                 MOV 33H,42H ;分顯示單元42H-43H
  189.                 MOV 34H,43H
  190.                 MOV 35H,#11 ;"-"
  191.                 MOV 36H,44H ;時(shí)顯示單元44H-45H               
  192.                 MOV 37H,45H
  193.                 POP PSW
  194.                 POP ACC
  195.                 SETB ET0
  196.                 RETI
  197. ;/*****時(shí)間清理子程序*****/
  198. CLR0:
  199.                 CLR A
  200.                 MOV @R0,A
  201.                 DEC R0
  202.                 MOV @R0,A
  203.                 RET
  204. ;/*****加一子程序*****/
  205. ADD1:
  206.                 MOV A ,@R0  ;取十位
  207.                 DEC R0
  208.                 SWAP A
  209.                 ORL A,@R0  ;組合十位與個(gè)位           
  210.                 ADD A,#01H  ;加1
  211.                 DA A ;十進(jìn)制調(diào)整
  212.                 MOV R3,A  ;暫存
  213.                 ANL A,#0FH  ;屏蔽十位
  214.                 MOV @R0,A  ;放入個(gè)位單元
  215.                 MOV A,R3  ;取值
  216.                 INC R0
  217.                 SWAP A
  218.                 ANL A,#0FH  ;屏蔽個(gè)位
  219.                 MOV @R0,A  ;放入十位單元
  220.                 MOV A,R3  ;數(shù)值放入A中等待判斷
  221.                 RET
  222. ;/*****顯示子程序*****/
  223. ……………………

  224. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
匯編語(yǔ)言數(shù)字鐘.zip (64.58 KB, 下載次數(shù): 4)



作者: yycnnba    時(shí)間: 2021-1-2 20:45
你代碼呢




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1