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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機時鐘程序(匯編)

[復制鏈接]
ID:71259 發表于 2014-12-29 19:27 | 顯示全部樓層 |閱讀模式


  1. /*
  2. 程序效果:通過六位數碼管顯示時間,通過按鍵可以調節相應的數值
  3.        KEY1的作用是:停止計數、顯示準備要改變的數字位上
  4.        (分別為:秒、分、時),開始計數。
  5.        KEY2:的作用是:對應的數值加1
  6.          KEY3:的作用是:對應的數值減1
  7. 注:程序尚有精簡的地方。
  8. */  

  9.       ORG 0000H //起始地址
  10.       LJMP START
  11.       ORG 000BH //定時器0
  12.       LJMP INT00
  13.       ORG 0030H
  14. START:   MOV 30H,#00   //賦初值時間為:
  15.       MOV 31H,#05   //
  16.       MOV 32H,#09  //
  17.       MOV 33H,#05  //
  18.       MOV 34H,#03  // 23:59:50
  19.       MOV 35H,#02  //
  20.       MOV 40H,#00  //控制定時時間,為1s
  21.       MOV 50H,#00   //計算KEY1按下的次數
  22.       MOV TMOD,#01H //工作方式1
  23.       SETB ET0  //打開分控
  24.       SETB EA  //打開總控
  25.       MOV TH0,#40H //定時時間為:50ms
  26.       MOV TL0,#00H
  27.       SETB TR0  //啟動定時器
  28. LOOP:   MOV A,40H //控制循環次數
  29.       CJNE A,#20,LOOP1  //到了20次,時間按為1s
  30.       MOV 40H,#00    //清零,為下次做準備
  31.       LCALL ADD1   //加1
  32. LOOP1:   LCALL DISPLAY //調用顯示,防止掉顯
  33.       JNB P3.5,KEY1 //判斷KEY1是否按下
  34.       JNB P3.6,KEY2 // 判斷KEY2是否按下
  35.       JNB P3.7,KE3Y  //判斷KEY3是否按下  @1
  36. KEY1:       LCALL DISPLAY //延時,消抖
  37.       JNB P3.5,KEY10 //判斷KEY1是否按下
  38.       LJMP LOOP
  39. KE3Y:      LJMP KEY3 //@1 這兩句的做就是擴大JNB的跳轉范圍

  40. KEY10:    JNB P3.5,DIS1 //檢查是否放手,防止掉顯
  41.       LJMP  DI1
  42. DIS1:        LCALL DISPLAY
  43.       LJMP KEY10
  44. //P3.5按下第一次,關閉定時器
  45. DI1:    INC 50H
  46.       MOV A,50H
  47.       CJNE A,#01,KEY11   
  48.       CLR TR0
  49.       LJMP KEY
  50. //按下第兩次,準備修改秒
  51. KEY11:     MOV A,50H
  52.       CJNE A,#02,KEY12
  53.       MOV R1,#42
  54. DE500:     LCALL DISPLAY_M
  55.       DJNZ R1,DE500
  56.       MOV R1,#42
  57. DE512:    LCALL DISPLAY_M
  58.       DJNZ R1,DE512
  59.       LJMP KEY
  60. //按下第三次,準備修改分
  61. KEY12:    MOV A,50H
  62.       CJNE A,#03,KEY13
  63.       MOV R1,#42
  64. DE513:    LCALL DISPLAY_F
  65.        DJNZ R1,DE513
  66.       MOV R1,#42
  67. DE514:    LCALL DISPLAY_F
  68.       DJNZ R1,DE514
  69.       LJMP KEY
  70. //按下第四次,準備修改時
  71. KEY13:     MOV A,50H
  72.       CJNE A,#04,KEY14
  73.       MOV R1,#42
  74. DE515:     LCALL DISPLAY_S
  75.       DJNZ R1,DE515
  76.       MOV R1,#42
  77. DE516:    LCALL DISPLAY_S
  78.       DJNZ R1,DE516
  79.       LJMP KEY
  80. //按下第五次,啟動定時器
  81. KEY14:    MOV A,50H
  82.       CJNE A,#05,KEY
  83.       MOV 50H,#00
  84.       SETB TR0   
  85. KEY:   LJMP LOOP

  86. KEY2:   LCALL DISPLAY //判斷KEY2是否按下
  87.       JNB P3.6,KEY20
  88.       LJMP LOOP
  89. KEY20:    JNB P3.6,KEY201  //
  90.       LJMP KEY202  //
  91. KEY201:  LCALL DISPLAY //
  92.       LJMP KEY20    //檢查按鍵是否松手
  93. //按鍵KEY1按下第二次,秒加1
  94. KEY202:  MOV A,50H
  95.       CJNE A,#02,KEY21  
  96.       INC 30H
  97.       MOV A,30H
  98.       CJNE A,#10,LK2P   //判斷個位是否到10
  99.       MOV 30H,#00   //清零
  100.       INC 31H    //十位加1
  101.       MOV A,31H
  102.       CJNE A,#06,LK2P  //判斷是否到6
  103.       MOV 31H,#00   //到了,清零
  104.       LJMP LOOP
  105. //按鍵KEY1按下第三次,分加1
  106. KEY21:    CJNE A,#03,KEY22
  107.       INC 32H
  108.       MOV A,32H
  109.       CJNE A,#10,LK2P
  110.       MOV 32H,#00
  111.       INC 33H
  112.       MOV A,33H
  113.       CJNE A,#06,LK2P
  114.       MOV 33H,#00
  115.       LJMP LOOP
  116. //按鍵KEY1按下第四次,時加1
  117. KEY22:    CJNE A,#04,LK2P
  118.       INC 34H
  119.       MOV A,34H
  120.       CJNE A,#04,LK2P
  121.       MOV 34H,#00
  122.       INC 35H
  123.       MOV A,35H
  124.       CJNE A,#03,LK2P
  125.       MOV 35H,#00
  126. LK2P:       LJMP LOOP

  127. KEY3:       LCALL DISPLAY
  128.       JNB P3.7,KEY30
  129.       LJMP LOOP
  130. KEY30:    JNB P3.7,KEY301   //
  131.       LJMP KEY302   //
  132. KEY301:  LCALL DISPLAY  //
  133.       LJMP KEY30    // 檢查放手
  134. //按鍵KEY1按下第二次,秒減1
  135. KEY302:  MOV A,50H
  136.       CJNE A,#02,KEY31
  137.       DEC 30H   //減1
  138.       MOV A,30H
  139.       CJNE A,#0FFH,LK3P  //減到255時
  140.       MOV 30H,#09  //賦初值
  141.       DEC 31H
  142.       MOV A,31H
  143.       CJNE A,#0FFH,LK3P
  144.       MOV 31H,#05
  145.       LJMP LOOP
  146. //按鍵KEY1按下第三次,分減1
  147. KEY31:    CJNE A,#03,KEY32
  148.       DEC 32H
  149.       MOV A,32H
  150.       CJNE A,#0FFH,LK3P
  151.       MOV 32H,#09
  152.       DEC 33H
  153.       MOV A,33H
  154.       CJNE A,#0FFH,LK3P
  155.       MOV 33H,#05
  156.       LJMP LOOP
  157. //按鍵KEY1按下第三次,時減1
  158. KEY32:    CJNE A,#04,LK3P
  159.       DEC 34H
  160.       MOV A,34H
  161.       CJNE A,#0FFH,LK3P
  162.       MOV A,35H
  163.       CJNE A,#02, KEY33
  164.       MOV 34H,#09
  165.       LJMP KEY35
  166. KEY33:  CJNE A,#01,KEY34
  167.       MOV 34H,#09
  168.       LJMP KEY35
  169. KEY34:    MOV 34H,#03
  170. KEY35:    DEC 35H
  171.       MOV A,35H
  172.       CJNE A,#0FFH,LK3P
  173.       MOV 35H,#02
  174. LK3P:      LJMP LOOP  
  175. //加1子程序
  176. ADD1:      INC 30H
  177.       MOV A,30H
  178.       CJNE A,#10,LAP
  179.       MOV 30H,#00
  180.       INC 31H
  181.       MOV A,31H
  182.       CJNE A,#06,LAP
  183.       MOV 31H,#00

  184.       INC 32H
  185.       MOV A,32H
  186.       CJNE A,#10,LAP
  187.       MOV 32H,#00
  188.       INC 33H
  189.       MOV A,33H
  190.       CJNE A,#06,LAP
  191.       MOV 33H,#00

  192.       INC 34H
  193.       MOV A,34H
  194.       CJNE A,#04,LAP
  195.       MOV 34H,#00
  196.       INC 35H
  197.       MOV A,35H
  198.       CJNE A,#03,LAP
  199.       MOV 35H,#00  
  200. LAP:   RET
  201. //六位數碼管顯示子程序
  202. DISPLAY: PUSH 00
  203.       PUSH 01
  204.       PUSH 02
  205.       MOV DPTR,#TAB
  206.       MOV R2,#04
  207.       MOV R0,#30H
  208.       MOV A,#7FH

  209.       MOV P2,A
  210.       XCH A,R1
  211.       MOV A, @R0
  212.       MOVC A,@A+DPTR
  213.       MOV P0,A
  214.       LCALL DELAY2MS
  215.       INC R0
  216.       XCH A,R1
  217.       RR A
  218.       MOV P2,A
  219.       XCH A,R1
  220.       MOV A, @R0
  221.       MOVC A,@A+DPTR
  222.       MOV P0,A
  223.       LCALL DELAY2MS
  224.       INC R0
  225.       XCH A,R1
  226.      RR A
  227.    
  228.       MOV DPTR,#TAB1
  229. LDP:   MOV P2,A
  230.       XCH A,R1
  231.       MOV A, @R0
  232.       MOVC A,@A+DPTR
  233.       MOV P0,A
  234.       LCALL DELAY2MS
  235.       INC R0
  236.       XCH A,R1
  237.       RR A
  238.       DJNZ R2,LDP
  239.       POP 02
  240.       POP 01
  241.       POP 00
  242.       RET
  243. //秒顯示,用于判斷什么時候調整秒
  244. DISPLAY_M:
  245.       PUSH 00
  246.       PUSH 01
  247.      PUSH 02
  248.       MOV DPTR,#TAB
  249.       MOV R2,#04
  250.       MOV R0,#30H
  251.       MOV A,#7FH

  252.       MOV P2,A
  253.       XCH A,R1
  254.       MOV A,#00
  255.       MOV P0,A
  256.       LCALL DELAY2MS
  257.       INC R0
  258.       XCH A,R1
  259.       RR A
  260.       MOV P2,A
  261.       XCH A,R1
  262.       MOV A,#00
  263.       MOV P0,A
  264.       LCALL DELAY2MS
  265.       INC R0
  266.       XCH A,R1
  267.       RR A
  268.    
  269.       MOV DPTR,#TAB1
  270. LDMP:   MOV P2,A
  271.       XCH A,R1
  272.       MOV A, @R0
  273.       MOVC A,@A+DPTR
  274.       MOV P0,A
  275.       LCALL DELAY2MS
  276.       INC R0
  277.       XCH A,R1
  278.       RR A
  279.       DJNZ R2,LDMP
  280.       POP 02
  281.       POP 01
  282.       POP 00
  283.       RET
  284. //秒顯示,用于判斷什么時候調整分
  285. DISPLAY_F:
  286.       PUSH 00
  287.       PUSH 01
  288.       PUSH 02
  289.       MOV DPTR,#TAB
  290.       MOV R2,#02
  291.       MOV R0,#30H
  292.       MOV A,#7FH

  293.       MOV P2,A
  294.       XCH A,R1
  295.       MOV A, @R0
  296.       MOVC A,@A+DPTR
  297.       MOV P0,A
  298.      LCALL DELAY2MS
  299.       INC R0
  300.       XCH A,R1
  301.       RR A
  302.       MOV P2,A
  303.       XCH A,R1
  304.       MOV A, @R0
  305.       MOVC A,@A+DPTR
  306.       MOV P0,A
  307.       LCALL DELAY2MS
  308.       INC R0
  309.       XCH A,R1
  310.       RR A
  311.    
  312.       MOV DPTR,#TAB1
  313.       MOV P2,A
  314.       XCH A,R1
  315.       MOV A,#00
  316.       MOV P0,A
  317.       LCALL DELAY2MS
  318.      INC R0
  319.       XCH A,R1
  320.       RR A
  321.       MOV P2,A
  322.       XCH A,R1
  323.       MOV A,#00
  324.       MOV P0,A
  325.       LCALL DELAY2MS
  326.       INC R0
  327.       XCH A,R1
  328.       RR A

  329. LDFP:   MOV P2,A
  330.       XCH A,R1
  331.       MOV A, @R0
  332.       MOVC A,@A+DPTR
  333.       MOV P0,A
  334.       LCALL DELAY2MS
  335.       INC R0
  336.       XCH A,R1
  337.       RR A
  338.       DJNZ R2,LDFP
  339.       POP 02
  340.       POP 01
  341.       POP 00
  342.       RET
  343. //秒顯示,用于判斷什么時候調整時
  344. DISPLAY_S:
  345.       PUSH 00
  346.       PUSH 01
  347.       PUSH 02
  348.       MOV DPTR,#TAB
  349.       MOV R2,#02
  350.       MOV R0,#30H
  351.       MOV A,#7FH

  352.       MOV P2,A
  353.       XCH A,R1
  354.       MOV A, @R0
  355.       MOVC A,@A+DPTR
  356.       MOV P0,A
  357.       LCALL DELAY2MS
  358.       INC R0
  359.       XCH A,R1
  360.       RR A
  361.       MOV P2,A
  362.       XCH A,R1
  363.       MOV A, @R0
  364.       MOVC A,@A+DPTR
  365.       MOV P0,A
  366.       LCALL DELAY2MS
  367.       INC R0
  368.       XCH A,R1
  369.       RR A
  370.    
  371.       MOV DPTR,#TAB1
  372. LDSP:   MOV P2,A
  373.       XCH A,R1
  374.       MOV A, @R0
  375.       MOVC A,@A+DPTR
  376.       MOV P0,A
  377.       LCALL DELAY2MS
  378.       INC R0
  379.       XCH A,R1
  380.       RR A
  381.      DJNZ R2,LDSP

  382.       MOV P2,A
  383.       XCH A,R1
  384.       MOV A,#00
  385.       MOV P0,A
  386.       LCALL DELAY2MS
  387.       INC R0
  388.       XCH A,R1
  389.       RR A
  390.       MOV P2,A
  391.      XCH A,R1
  392.       MOV A,#00
  393.       MOV P0,A
  394.       LCALL DELAY2MS
  395.       POP 02
  396.       POP 01
  397.       POP 00
  398.       RET
  399. //定時50ms
  400. INT00:      MOV TH0,#40H
  401.       MOV TL0,#00H
  402.       INC 40H
  403.       RETI
  404. TAB:   DB 3FH,06H,5BH,4FH,66H //數碼管顯示的數值   
  405.       DB  6DH,7DH,07H,7FH,6FH
  406. TAB1:   DB 0BFH,86H,0DBH,0CFH,0E6H //帶小數點的數碼管顯示的數值   
  407.       DB  0EDH,0FDH,87H,0FFH,0EFH
  408. DELAY2MS:
  409.       MOV R7,#04
  410. DEL2:      MOV R6,#250
  411. DEL1:   DJNZ R6,DEL1
  412.       DJNZ R7,DEL2
  413.       RET
  414.      END
復制代碼


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91视频大全 | 国产精品久久久久久久久久 | 在线视频第一页 | 天天草天天射 | 国产精品美女 | 中文字幕一区二区三区精彩视频 | 欧美性生活免费 | 久久中文一区二区 | 密色视频| 国产精品一区二区久久 | 日韩精品一区二区三区中文字幕 | 亚洲免费网址 | 亚洲欧美视频一区 | 中文久久 | 亚洲精品久久久久久一区二区 | 欧美一级片免费看 | 黄色成人亚洲 | 天堂中文在线观看 | 国产成人精品一区二区三 | 免费黄色av网站 | 国产成人免费视频网站视频社区 | 97精品超碰一区二区三区 | 国产精品一区二区av | 国产免费播放视频 | 久久99久久| 成人国产综合 | 国产精品久久av | 蜜桃在线一区二区三区 | 久久久精品一区 | 成人深夜福利在线观看 | 免费不卡视频 | 亚洲视频在线观看 | 成人久久久久 | 国产男女猛烈无遮掩视频免费网站 | 亚洲精品视频免费观看 | 欧美福利久久 | 国际精品鲁一鲁一区二区小说 | 2019天天操 | 羞羞视频在线网站观看 | 国产乱码精品一区二三赶尸艳谈 | 国产成人精品免高潮在线观看 |