圣源电子制作

 找回密码
 立即注册
查看: 7702|回复: 0
打印 上一主题 下一主题

自行车里程表-C51-代时钟-程序C 原理图 PCB 文件

[复制链接]
跳转到指定楼层
楼主
发表于 2011-9-6 23:08:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
转载自互联网!!!
这是一款简易的自行车里程表,核心部分是一块8051的单片机。


电路图(清晰大图

程序流程

PCB热转印图,可以直接使用



  1. 源程序:
  2. /*
  3. <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2011-04-06 write it
  4. 显示时间及字符正常版
  5. 端口已和PCB同步版
  6. 键盘已经通过测试,可以使用
  7. 时间调整已可,已经有光标显示
  8. 可以计算里程时间,已经测试
  9. R1为DS1302地址
  10. R0为DS1302数据
  11. */
  12. //液晶端口定义
  13. DISPLAY_DATA EQU P0
  14. DISPLAY_RS   BIT P2.5
  15. DISPLAY_RW   BIT P2.6
  16. DISPLAY_E    BIT P2.7
  17. //时钟芯片端口定义
  18. DS1302_DATA  BIT  P1.1  //数据传送总线
  19. DS1302_CLK   BIT  P1.0  //时钟控制总线
  20. DS1302_RST   BIT  P1.2  //复位总线
  21. //按键端口定义
  22. K1     EQU  P1.3  //时钟调整、确认按键
  23. K2     EQU  P1.4  //+按键
  24. K3     EQU  P1.5  //-按键
  25. K4     EQU  P1.6  //里程开始、停止按键
  26. K5     EQU  P1.7  //里程清零按键
  27. //距离寄存器
  28. H_METER     EQU 46H
  29. K_METER     EQU       47H
  30. M_METER     EQU       48H
  31. //保存开始时间
  32. KEEP_TIME_H EQU 49H
  33. KEEP_TIME_M EQU 4AH
  34. KEEP_TIME_S EQU 4BH
  35. //里程所用时间
  36. RESULT_TIME_H EQU 4CH
  37. RESULT_TIME_M EQU 4DH
  38. RESULT_TIME_S EQU 4EH
  39. //现在时间
  40. REAL_TIME_H EQU 42H
  41. REAL_TIME_M EQU 41H
  42. REAL_TIME_S EQU 40H
  43. //中间暂存变量
  44. M_TIME_M      EQU 60H
  45. M_TIME_H      EQU 61H
  46. M_TIME_M_FLAG EQU 62H
  47. M_TIME_H_FLAG EQU 63H
  48. COUNT_FLAG    EQU 64H
  49. //显示控制标志位
  50. DISPLAY_SWITCH EQU 4FH//第一位为时间运行显示开关
  51.                       //第二位为时间调整显示开关     
  52.                       //第三位为里程运行显示开关
  53.                       //第四位为警告显示开关
  54. DISPLAY_SWITCH_1 EQU 5EH
  55. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
  56. CLOCK_FLAG       EQU 5CH   //时间调整标志位
  57. CLOCK_FLAG_1     EQU 5DH   //时间位数标志位
  58.   
  59.       ORG  0000H
  60.       SJMP START
  61.       ORG  0003H
  62.       LJMP EX0_Interrupt
  63.       ORG  0030H

  64. START:ACALL MCU_INT
  65.       ACALL DISPLAY_INT
  66.       ACALL DS1302_INT
  67.       ACALL DAY_INT
  68.       ACALL DATA_INT

  69. MAIN: ACALL GET_TIME_DATA_YEAR
  70.       ACALL DS1302_DATA_PROCESS
  71.       LCALL KEY_SCAN

  72.       MOV A,DISPLAY_SWITCH
  73.       JNB ACC.0,CLOCK_DISPLAY_CHECK
  74.       ACALL DISPLAY_DAY
  75. CLOCK_DISPLAY_CHECK:
  76.       MOV A,DISPLAY_SWITCH
  77.       JNB ACC.1,DISTANCE_TIME_DISPLAY_CHECK      
  78.       LCALL DISPLAY_CLOCK
  79. DISTANCE_TIME_DISPLAY_CHECK:
  80.       MOV A,DISPLAY_SWITCH
  81.       JNB ACC.2,WARNING_DISPLAY_CHECK
  82.          MOV DISPLAY_SWITCH_1,#40H
  83. DISTANCE_TIME_DISPLAY_CHECK_1:        
  84.       LCALL DISPLAY_CLOCK
  85.          LCALL KEY_SCAN
  86.       LCALL DELAY_20MS
  87.          DJNZ DISPLAY_SWITCH_1,DISTANCE_TIME_DISPLAY_CHECK_1
  88.          MOV DISPLAY_SWITCH_1,#0BH
  89. DISTANCE_TIME_DISPLAY_CHECK_2:        
  90.          LCALL COUNT_TIME
  91.       LCALL DISPLAY_DISTANCE_TIME
  92.          LCALL KEY_SCAN
  93.       LCALL DELAY_20MS
  94.          DJNZ DISPLAY_SWITCH_1,DISTANCE_TIME_DISPLAY_CHECK_2
  95. WARNING_DISPLAY_CHECK:
  96.       MOV A,DISPLAY_SWITCH
  97.       JNB ACC.3,DISPLAY_END     
  98.       LCALL DISPLAY_WARNING
  99. DISPLAY_END:           
  100.       SJMP MAIN

  101. MCU_INT:
  102.       MOV SP,#70H
  103.       SETB EA
  104.       SETB EX0
  105.       RET

  106. DATA_INT:
  107.       MOV H_METER,#00H
  108.       MOV K_METER,#00H
  109.       MOV M_METER,#00H
  110.       MOV DISPLAY_SWITCH,#01H
  111.       MOV CLOCK_FLAG,#00H
  112. RET


  113. //初始化日期为2011年5月1号
  114. DAY_INT:
  115.       MOV R1,#8CH
  116.       MOV R0,#11H
  117.       ACALL DS1302_WRITE
  118.       MOV R1,#88H
  119.       MOV R0,#05H
  120.       ACALL DS1302_WRITE
  121.       MOV R1,#86H
  122.       MOV R0,#01H
  123.       ACALL DS1302_WRITE
  124.       RET
  125. DISPLAY_DAY:
  126.       MOV P0,#80H
  127.       ACALL DISPLAY_ENABLE
  128.       MOV P0,#20H
  129.       ACALL DISPLAY_WRITE

  130.       MOV P0,#81H
  131.       ACALL DISPLAY_ENABLE
  132.       MOV P0,#20H
  133.       ACALL DISPLAY_WRITE

  134.       MOV P0,#82H
  135.       ACALL DISPLAY_ENABLE
  136.       MOV P0,#20H
  137.       ACALL DISPLAY_WRITE

  138.       MOV P0,#83H
  139.       ACALL DISPLAY_ENABLE
  140.       MOV P0,#32H
  141.       ACALL DISPLAY_WRITE

  142.       MOV P0,#84H
  143.       ACALL DISPLAY_ENABLE
  144.       MOV P0,#30H
  145.       ACALL DISPLAY_WRITE

  146.       MOV P0,#85H
  147.       ACALL DISPLAY_ENABLE
  148.       CLR C
  149.       MOV A,#30H
  150.       ADD A,5BH
  151.       MOV P0,A
  152.       ACALL DISPLAY_WRITE

  153.       MOV P0,#86H
  154.       ACALL DISPLAY_ENABLE
  155.       CLR C
  156.       MOV A,#30H
  157.       ADD A,5AH
  158.       MOV P0,A
  159.       ACALL DISPLAY_WRITE

  160.       MOV P0,#87H
  161.       ACALL DISPLAY_ENABLE
  162.       MOV P0,#2DH
  163.       ACALL DISPLAY_WRITE

  164.       MOV P0,#88H
  165.       ACALL DISPLAY_ENABLE
  166.       CLR C
  167.       MOV A,#30H
  168.       ADD A,59H
  169.       MOV P0,A
  170.       ACALL DISPLAY_WRITE

  171.       MOV P0,#89H
  172.       ACALL DISPLAY_ENABLE
  173.       CLR C
  174.       MOV A,#30H
  175.       ADD A,58H
  176.       MOV P0,A
  177.       ACALL DISPLAY_WRITE

  178.       MOV P0,#8AH
  179.       ACALL DISPLAY_ENABLE
  180.       MOV P0,#2DH
  181.       ACALL DISPLAY_WRITE

  182.       MOV P0,#8BH
  183.       ACALL DISPLAY_ENABLE
  184.       CLR C
  185.       MOV A,#30H
  186.       ADD A,57H
  187.       MOV P0,A
  188.       ACALL DISPLAY_WRITE

  189.       MOV P0,#8CH
  190.       ACALL DISPLAY_ENABLE
  191.       CLR C
  192.       MOV A,#30H
  193.       ADD A,56H
  194.       MOV P0,A
  195.       ACALL DISPLAY_WRITE

  196.       MOV P0,#8DH
  197.       ACALL DISPLAY_ENABLE
  198.       MOV P0,#20H
  199.       ACALL DISPLAY_WRITE

  200.       MOV P0,#8EH
  201.       ACALL DISPLAY_ENABLE
  202.       MOV P0,#20H
  203.       ACALL DISPLAY_WRITE

  204.       MOV P0,#8FH
  205.       ACALL DISPLAY_ENABLE
  206.       MOV P0,#20H
  207.       ACALL DISPLAY_WRITE
  208. //------显示时间

  209.       MOV P0,#0C0H
  210.       ACALL DISPLAY_ENABLE
  211.       MOV P0,#20H
  212.       ACALL DISPLAY_WRITE

  213.       MOV P0,#0C1H
  214.       ACALL DISPLAY_ENABLE
  215.       MOV P0,#20H
  216.       ACALL DISPLAY_WRITE

  217.       MOV P0,#0C2H
  218.       ACALL DISPLAY_ENABLE
  219.       MOV P0,#20H
  220.       ACALL DISPLAY_WRITE

  221.       MOV P0,#0C3H
  222.       ACALL DISPLAY_ENABLE
  223.       MOV P0,#20H
  224.       ACALL DISPLAY_WRITE

  225.       MOV P0,#0C4H
  226.       ACALL DISPLAY_ENABLE
  227.       CLR C
  228.       MOV A,#30H
  229.       ADD A,55H
  230.       MOV P0,A
  231.       ACALL DISPLAY_WRITE

  232.       MOV P0,#0C5H
  233.       ACALL DISPLAY_ENABLE
  234.       CLR C
  235.       MOV A,#30H
  236.       ADD A,54H
  237.       MOV P0,A
  238.       ACALL DISPLAY_WRITE

  239.       MOV P0,#0C6H
  240.       ACALL DISPLAY_ENABLE
  241.       MOV P0,#2DH
  242.       ACALL DISPLAY_WRITE

  243.       MOV P0,#0C7H
  244.       ACALL DISPLAY_ENABLE
  245.       CLR C
  246.       MOV A,#30H
  247.       ADD A,53H
  248.       MOV P0,A
  249.       ACALL DISPLAY_WRITE

  250.       MOV P0,#0C8H
  251.       ACALL DISPLAY_ENABLE
  252.       CLR C
  253.       MOV A,#30H
  254.       ADD A,52H
  255.       MOV P0,A
  256.       ACALL DISPLAY_WRITE

  257.       MOV P0,#0C9H
  258.       ACALL DISPLAY_ENABLE
  259.       MOV P0,#2DH
  260.       ACALL DISPLAY_WRITE

  261.       MOV P0,#0CAH
  262.       ACALL DISPLAY_ENABLE
  263.       CLR C
  264.       MOV A,#30H
  265.       ADD A,51H
  266.       MOV P0,A
  267.       ACALL DISPLAY_WRITE

  268.       MOV P0,#0CBH
  269.       ACALL DISPLAY_ENABLE
  270.       CLR C
  271.       MOV A,#30H
  272.       ADD A,50H
  273.       MOV P0,A
  274.       ACALL DISPLAY_WRITE

  275.       MOV P0,#0CCH
  276.       ACALL DISPLAY_ENABLE
  277.       MOV P0,#20H
  278.       ACALL DISPLAY_WRITE

  279.       MOV P0,#0CFH
  280.       ACALL DISPLAY_ENABLE
  281.       MOV P0,#20H
  282.       ACALL DISPLAY_WRITE
  283.       RET


  284. DISPLAY_INT:
  285.       MOV DISPLAY_DATA,#01H     //清屏
  286.       ACALL DISPLAY_ENABLE
  287.       MOV DISPLAY_DATA,#01H     //清屏
  288.       ACALL DISPLAY_ENABLE
  289.       MOV DISPLAY_DATA,#38H     //显示模式设置为16字*2行
  290.       ACALL DISPLAY_ENABLE
  291.       MOV DISPLAY_DATA,#0FH     //显示光标及闪烁
  292.       ACALL DISPLAY_ENABLE
  293.       MOV DISPLAY_DATA,#06H     //显示方向正向且屏不移动
  294.       ACALL DISPLAY_ENABLE
  295. RET

  296. DISPLAY_ENABLE:
  297.       CLR  DISPLAY_RS
  298.       CLR  DISPLAY_RW
  299.       CLR  DISPLAY_E
  300.       ACALL DELAY
  301.       SETB DISPLAY_E
  302. RET
  303. DISPLAY_WRITE:
  304.       SETB DISPLAY_RS
  305.       CLR  DISPLAY_RW
  306.       CLR  DISPLAY_E
  307.       ACALL DELAY
  308.       SETB DISPLAY_E
  309. RET

  310. DELAY:MOV R6,#08H
  311.    L1:MOV R7,#0FAH
  312.    L0:DJNZ R7,L0
  313.       DJNZ R6,L1
  314. RET

  315. //DS1302初始化
  316. DS1302_INT:
  317.     CLR   DS1302_RST  //DS1302复位
  318.     CLR   DS1302_CLK
  319.     NOP
  320.     NOP
  321.     SETB  DS1302_RST

  322.     MOV  R1,#80H       //写动振荡寄存器地址
  323.     MOV  R0,#00H       //启动振荡器
  324.     LCALL DS1302_WRITE

  325. /*    MOV  R1,#90H      //写充电寄存器
  326.     MOV  R0,#0ABH
  327.     LCALL DS1302_WRITE
  328. */
  329.     MOV  R1,#8EH      //写保护寄存器
  330.     MOV  R0,#00H      //允许写入
  331.     ACALL DS1302_WRITE
  332.     RET

  333. //从DS1302获取数据
  334. GET_TIME_DATA_YEAR:
  335.     MOV  R1,#81H          //读秒
  336.     LCALL  DS1302_READ
  337.     MOV 40H,R0

  338.     MOV  R1,#83H          //读分
  339.     LCALL  DS1302_READ
  340.     MOV 41H,R0

  341.     MOV  R1,#85H          //读时
  342.     LCALL  DS1302_READ
  343.     MOV 42H,R0

  344.     MOV  R1,#87H          //读出日期
  345.     LCALL  DS1302_READ
  346.     MOV 43H,R0

  347.     MOV  R1,#89H          //读出月份
  348.     LCALL  DS1302_READ
  349.     MOV 44H,R0

  350.     MOV  R1,#8DH          //读出年
  351.     LCALL  DS1302_READ
  352.     MOV 45H,R0

  353.     RET

  354. DS1302_DATA_PROCESS:
  355. //--------处理秒数据
  356.     MOV A,40H
  357.     ANL A,#0FH
  358.     MOV 50H,A
  359.     MOV A,40H
  360.     ANL A,#0F0H
  361.     SWAP A
  362.     MOV 51H,A
  363. //--------处理分数据
  364.     MOV A,41H
  365.     ANL A,#0FH
  366.     MOV 52H,A
  367.     MOV A,41H
  368.     ANL A,#0F0H
  369.     SWAP A
  370.     MOV 53H,A
  371. //--------处理时数据
  372.     MOV A,42H
  373.     ANL A,#0FH
  374.     MOV 54H,A
  375.     MOV A,42H
  376.     ANL A,#0F0H
  377.     SWAP A
  378.     MOV 55H,A
  379. //--------处理日数据
  380.     MOV A,43H
  381.     ANL A,#0FH
  382.     MOV 56H,A
  383.     MOV A,43H
  384.     ANL A,#0F0H
  385.     SWAP A
  386.     MOV 57H,A
  387. //--------处理月数据
  388.     MOV A,44H
  389.     ANL A,#0FH
  390.     MOV 58H,A
  391.     MOV A,44H
  392.     ANL A,#0F0H
  393.     SWAP A
  394.     MOV 59H,A
  395. //---------处理年数据
  396.     MOV A,45H
  397.     ANL A,#0FH
  398.     MOV 5AH,A
  399.     MOV A,45H
  400.     ANL A,#0F0H
  401.     SWAP A
  402.     MOV 5BH,A
  403.     RET

  404. //DS1302写数据

  405. DS1302_WRITE:
  406.     CLR  DS1302_CLK
  407.     NOP
  408.     NOP
  409.     SETB  DS1302_RST
  410.     NOP
  411.     MOV  A,R1
  412.     MOV  R2,#08H
  413. DS1302_WRITE_ADDRESS:   //传输地址到DS1302
  414.     RRC  A   
  415.     NOP
  416.     NOP
  417.     CLR  DS1302_CLK
  418.     NOP
  419.     NOP         
  420.     MOV  DS1302_DATA,C
  421.     NOP
  422.     NOP         
  423.     SETB DS1302_CLK
  424.     NOP
  425.     NOP
  426.     DJNZ  R2,DS1302_WRITE_ADDRESS
  427.     CLR   DS1302_CLK
  428.     NOP
  429.     NOP
  430.     MOV  A,R0
  431.     MOV  R2,#08H
  432. DS1302_WRITE_DATA:     //传输数据到DS1302
  433.     RRC  A   
  434.     NOP
  435.     CLR  DS1302_CLK
  436.     NOP
  437.     NOP
  438.     MOV  DS1302_DATA,C
  439.     NOP
  440.     NOP
  441.     SETB DS1302_CLK
  442.     NOP
  443.     NOP
  444.     DJNZ  R2,DS1302_WRITE_DATA
  445.     CLR  DS1302_CLK
  446.     NOP
  447.     NOP
  448.     CLR  DS1302_RST
  449.     NOP
  450.     NOP

  451.     RET

  452. //DS1302读数据

  453. DS1302_READ:
  454.     CLR   DS1302_CLK
  455.     NOP
  456.     NOP
  457.     SETB  DS1302_RST
  458.     NOP
  459.     NOP
  460.     MOV  A,R1
  461.     MOV  R2,#08H
  462. DS1302_READ_ADDRESS:  //传输地址到DS1302
  463.     RRC  A
  464.     NOP               
  465.     MOV  DS1302_DATA,C
  466.     NOP
  467.     NOP
  468.     SETB DS1302_CLK
  469.     NOP
  470.     NOP
  471.     CLR  DS1302_CLK
  472.     NOP
  473.     NOP
  474.     DJNZ  R2,DS1302_READ_ADDRESS
  475.     NOP
  476.     NOP
  477.     SETB  DS1302_DATA
  478.     CLR  A
  479.     CLR  C
  480.     MOV  R2,#08H
  481. DS1302_READ_DATA:    //从DS1302接收数据
  482.     CLR  DS1302_CLK
  483.     NOP
  484.     NOP         
  485.     MOV  C,DS1302_DATA
  486.     NOP
  487.     NOP         
  488.     RRC  A
  489.     NOP
  490.     NOP         
  491.     SETB  DS1302_CLK
  492.     NOP
  493.     NOP         
  494.     DJNZ  R2,DS1302_READ_DATA
  495.     MOV  R0,A
  496.     CLR  DS1302_RST
  497.     RET

  498. DELAY_20MS:
  499.     MOV R6,#0D7H
  500. DD0:
  501.     MOV R7,#2DH
  502.     DJNZ R7,$
  503.     DJNZ R6,DD0
  504.     NOP
  505.     NOP
  506.     RET
  507. DELAY_1S:   ;误差 0us
  508.     MOV R7,#0A7H
  509. LL1:
  510.     MOV R6,#0ABH
  511. LL0:
  512.     MOV R5,#10H
  513.     DJNZ R5,$
  514.     DJNZ R6,LL0
  515.     DJNZ R7,LL1
  516.     NOP
  517.     RET
  518. KEEP_TIME_DATA:

  519. RET
  520. //键盘扫描
  521. KEY_SCAN:
  522.       JB    K1,STOP_CLOCK
  523.       LCALL DELAY_20MS
  524.       JB    K1,STOP_CLOCK
  525.       JNB   K1,$
  526. //年的十位
  527.       INC   CLOCK_FLAG
  528. STOP_CLOCK:
  529.       MOV   A,CLOCK_FLAG
  530.       CJNE  A,#01H,K1_SCAN_1
  531.       MOV   R1,#80H       //写动振荡寄存器地址
  532.       MOV   R0,#80H       //停止振荡器工作
  533.       LCALL DS1302_WRITE
  534.       MOV   DISPLAY_SWITCH,#02H//进入时间调整显示
  535.       LCALL DISPLAY_DAY

  536. K1_SCAN_1:
  537.       MOV  A,CLOCK_FLAG
  538.       CJNE A,#02H,K1_SCAN_2
  539.       LCALL DISPLAY_DAY
  540.       MOV R3,5BH
  541.       MOV CLOCK_FLAG_1,#0AH
  542.       ACALL KEY1_SCAN_C_1
  543.       MOV 5BH,R3
  544.       ACALL REVISE_YEAR
  545. K1_SCAN_2://年的个位
  546.       MOV   A,CLOCK_FLAG
  547.       CJNE A,#03H,K1_SCAN_3
  548.       MOV R3,5AH
  549.       MOV CLOCK_FLAG_1,#0AH
  550.       ACALL KEY1_SCAN_C_1
  551.       MOV 5AH,R3
  552.       ACALL REVISE_YEAR
  553. K1_SCAN_3://月
  554.       MOV   A,CLOCK_FLAG
  555.       CJNE A,#04H,K1_SCAN_4
  556.       MOV R3,44H
  557.       MOV CLOCK_FLAG_1,#13H
  558.       ACALL KEY1_SCAN_C_1
  559.       MOV 44H,R3
  560.       ACALL REVISE_MONTH
  561. K1_SCAN_4://日
  562.       MOV   A,CLOCK_FLAG
  563.       CJNE A,#05H,K1_SCAN_5
  564.       MOV R3,43H
  565.       MOV CLOCK_FLAG_1,#32H
  566.       ACALL KEY1_SCAN_C_1
  567.       MOV 43H,R3
  568.       ACALL REVISE_DAY
  569. K1_SCAN_5://时
  570.       MOV   A,CLOCK_FLAG
  571.       CJNE A,#06H,K1_SCAN_6
  572.       MOV R3,42H
  573.       MOV CLOCK_FLAG_1,#24H
  574.       ACALL KEY1_SCAN_C_1
  575.       MOV 42H,R3
  576.       ACALL REVISE_HOUR
  577. K1_SCAN_6://分的十位
  578.       MOV   A,CLOCK_FLAG
  579.       CJNE A,#07H,K1_SCAN_7
  580.       MOV R3,53H
  581.       MOV CLOCK_FLAG_1,#06H
  582.       ACALL KEY1_SCAN_C_1
  583.       MOV 53H,R3
  584.       ACALL REVISE_MINUTE
  585. K1_SCAN_7://分的个位
  586.       MOV   A,CLOCK_FLAG
  587.       CJNE A,#08H,K1_SCAN_8
  588.       MOV R3,52H
  589.       MOV CLOCK_FLAG_1,#0AH
  590.       ACALL KEY1_SCAN_C_1
  591.       MOV 52H,R3
  592.       ACALL REVISE_MINUTE
  593. K1_SCAN_8:
  594.       MOV   A,CLOCK_FLAG
  595.       CJNE A,#09H,KEY4_SCAN
  596.       MOV  CLOCK_FLAG,#00H
  597.       MOV  R1,#80H       //写动振荡寄存器地址
  598.       MOV  R0,#00H       //启动振荡器工作
  599.       MOV  CLOCK_FLAG,#00H
  600.          MOV  DISPLAY_SWITCH,#01H
  601.       LCALL DS1302_WRITE
  602. KEY4_SCAN:
  603.       MOV   A,CLOCK_FLAG
  604.       CJNE A,#00H,KEY5_SCAN
  605.       JB K4,KEY5_SCAN
  606.       LCALL  DELAY_20MS
  607.       JB K4,KEY5_SCAN
  608.       JNB K4,$
  609.       MOV KEEP_TIME_H,REAL_TIME_H
  610.       MOV KEEP_TIME_M,REAL_TIME_M
  611.       MOV KEEP_TIME_S,REAL_TIME_S
  612.          MOV DISPLAY_SWITCH,#05H
  613. KEY5_SCAN:
  614.       MOV   A,CLOCK_FLAG
  615.       CJNE A,#00H,KEY_SCAN_END
  616.       JB K5,KEY_SCAN_END
  617.       LCALL  DELAY_20MS
  618.       JB K5,KEY_SCAN_END
  619.       JNB K5,$
  620.          MOV DISPLAY_SWITCH,#01H

  621.       MOV KEEP_TIME_H,#00H
  622.       MOV KEEP_TIME_M,#00H
  623.       MOV KEEP_TIME_S,#00H

  624.       MOV RESULT_TIME_H,#00H
  625.       MOV RESULT_TIME_M,#00H
  626.       MOV RESULT_TIME_S,#00H
  627. KEY_SCAN_END:
  628.      RET

  629. KEY1_SCAN_C_1:
  630.       JB K2,KEY1_SCAN_C_2
  631.       LCALL  DELAY_20MS
  632.       JB K2,KEY1_SCAN_C_2
  633.       JNB K2,$
  634.       INC R3
  635.       MOV A,R3
  636.       CJNE A,CLOCK_FLAG_1,KEY1_SCAN_C_1_1
  637.       MOV R3,#0
  638. KEY1_SCAN_C_1_1:
  639.       MOV A,R3
  640.       CJNE A,#0AH,KEY1_SCAN_C_1_2
  641.       MOV R3,#10H
  642. KEY1_SCAN_C_1_2:
  643.       MOV A,R3
  644.       CJNE A,#1AH,KEY1_SCAN_C_1_3
  645.       MOV R3,#20H
  646. KEY1_SCAN_C_1_3:
  647.       MOV A,R3
  648.       CJNE A,#2AH,KEY1_SCAN_C_2
  649.       MOV R3,#30H
  650. KEY1_SCAN_C_2:
  651.       JB K3,KEY1_SCAN_C_END
  652.       LCALL  DELAY_20MS
  653.       JB K3,KEY1_SCAN_C_END
  654.       JNB K3,$
  655.       DEC R3
  656.       CJNE R3,#0FFH,KEY1_SCAN_C_2_1
  657.       MOV R3,CLOCK_FLAG_1
  658.       DEC R3
  659. KEY1_SCAN_C_2_1:
  660.       MOV A,R3
  661.       CJNE A,#2FH,KEY1_SCAN_C_2_2
  662.       MOV R3,#29H
  663. KEY1_SCAN_C_2_2:
  664.       MOV A,R3
  665.       CJNE A,#1FH,KEY1_SCAN_C_2_3
  666.       MOV R3,#19H
  667. KEY1_SCAN_C_2_3:
  668.       MOV A,R3
  669.       CJNE A,#0FH,KEY1_SCAN_C_END
  670.       MOV R3,#09H
  671. KEY1_SCAN_C_END:
  672. RET

  673. REVISE_YEAR:
  674.       MOV A,5BH
  675.       SWAP A
  676.       ORL A,5AH
  677.       MOV R0,A
  678.       MOV R1,#8CH
  679.       ACALL DS1302_WRITE
  680. RET
  681. REVISE_MONTH:
  682.       MOV R0,44H
  683.       MOV R1,#88H
  684.       ACALL DS1302_WRITE
  685. RET
  686. REVISE_DAY:
  687.       MOV R0,43H
  688.       MOV R1,#86H
  689.       ACALL DS1302_WRITE
  690. RET
  691. REVISE_HOUR:
  692.       MOV R0,42H
  693.       MOV R1,#84H
  694.       ACALL DS1302_WRITE
  695. RET
  696. REVISE_MINUTE:
  697.       MOV A,53H
  698.       SWAP A
  699.       ORL A,52H
  700.       MOV R0,A
  701.       MOV R1,#82H
  702.       ACALL DS1302_WRITE
  703. RET

  704. DISPLAY_CLOCK:
  705.       MOV A,CLOCK_FLAG
  706.       CJNE A,#02H,DISPLAY_CLOCK_YEAR_1
  707.       MOV P0,#85H
  708.       ACALL DISPLAY_ENABLE
  709.       LCALL DELAY_20MS
  710.       MOV P0,#85H
  711.       ACALL DISPLAY_ENABLE
  712.       CLR C
  713.       MOV A,#30H
  714.       ADD A,5BH
  715.       MOV P0,A
  716.       ACALL DISPLAY_WRITE
  717. DISPLAY_CLOCK_YEAR_1:
  718.       MOV A,CLOCK_FLAG
  719.       CJNE A,#03H,DISPLAY_CLOCK_MONTH
  720.       MOV P0,#86H
  721.       ACALL DISPLAY_ENABLE
  722.       LCALL DELAY_20MS
  723.       MOV P0,#86H
  724.       ACALL DISPLAY_ENABLE
  725.       CLR C
  726.       MOV A,#30H
  727.       ADD A,5AH
  728.       MOV P0,A
  729.       ACALL DISPLAY_WRITE
  730. DISPLAY_CLOCK_MONTH:
  731.       MOV A,CLOCK_FLAG
  732.       CJNE A,#04H,DISPLAY_CLOCK_DAY
  733.       MOV P0,#89H
  734.       ACALL DISPLAY_ENABLE
  735.       LCALL DELAY_20MS

  736.       MOV P0,#88H
  737.       ACALL DISPLAY_ENABLE
  738.       CLR C
  739.       MOV A,#30H
  740.       ADD A,59H
  741.       MOV P0,A
  742.       ACALL DISPLAY_WRITE

  743.       MOV P0,#89H
  744.       ACALL DISPLAY_ENABLE
  745.       CLR C
  746.       MOV A,#30H
  747.       ADD A,58H
  748.       MOV P0,A
  749.       ACALL DISPLAY_WRITE
  750. DISPLAY_CLOCK_DAY:
  751.       MOV A,CLOCK_FLAG
  752.       CJNE A,#05H,DISPLAY_CLOCK_HOUR
  753.       MOV P0,#8CH
  754.       ACALL DISPLAY_ENABLE
  755.       LCALL DELAY_20MS

  756.       MOV P0,#8BH
  757.       ACALL DISPLAY_ENABLE
  758.       CLR C
  759.       MOV A,#30H
  760.       ADD A,57H
  761.       MOV P0,A
  762.       ACALL DISPLAY_WRITE

  763.       MOV P0,#8CH
  764.       ACALL DISPLAY_ENABLE
  765.       CLR C
  766.       MOV A,#30H
  767.       ADD A,56H
  768.       MOV P0,A
  769.       ACALL DISPLAY_WRITE
  770. DISPLAY_CLOCK_HOUR:
  771.       MOV A,CLOCK_FLAG
  772.       CJNE A,#06H,DISPLAY_CLOCK_MIN_10
  773.       MOV P0,#0C5H
  774.       ACALL DISPLAY_ENABLE
  775.       LCALL DELAY_20MS

  776.       MOV P0,#0C4H
  777.       ACALL DISPLAY_ENABLE
  778.       CLR C
  779.       MOV A,#30H
  780.       ADD A,55H
  781.       MOV P0,A
  782.       ACALL DISPLAY_WRITE

  783.       MOV P0,#0C5H
  784.       ACALL DISPLAY_ENABLE
  785.       CLR C
  786.       MOV A,#30H
  787.       ADD A,54H
  788.       MOV P0,A
  789.       ACALL DISPLAY_WRITE
  790. DISPLAY_CLOCK_MIN_10:
  791.       MOV A,CLOCK_FLAG
  792.       CJNE A,#07H,DISPLAY_CLOCK_MIN_1
  793.       MOV P0,#0C7H
  794.       ACALL DISPLAY_ENABLE
  795.       LCALL DELAY_20MS

  796.       MOV P0,#0C7H
  797.       ACALL DISPLAY_ENABLE
  798.       CLR C
  799.       MOV A,#30H
  800.       ADD A,53H
  801.       MOV P0,A
  802.       ACALL DISPLAY_WRITE

  803. DISPLAY_CLOCK_MIN_1:
  804.       MOV A,CLOCK_FLAG
  805.       CJNE A,#08H,DISPLAY_CLOCK_EXIT
  806.       MOV P0,#0C8H
  807.       ACALL DISPLAY_ENABLE
  808.       LCALL DELAY_20MS

  809.       MOV P0,#0C8H
  810.       ACALL DISPLAY_ENABLE
  811.       CLR C
  812.       MOV A,#30H
  813.       ADD A,52H
  814.       MOV P0,A
  815.       ACALL DISPLAY_WRITE     
  816. DISPLAY_CLOCK_EXIT:
  817.       RET


  818. DISPLAY_WARNING:
  819.       MOV P0,#80H
  820.       ACALL DISPLAY_ENABLE
  821.       MOV P0,#57H                 //W
  822.       ACALL DISPLAY_WRITE

  823.       MOV P0,#81H
  824.       ACALL DISPLAY_ENABLE
  825.       MOV P0,#41H                 //A
  826.       ACALL DISPLAY_WRITE

  827.       MOV P0,#82H
  828.       ACALL DISPLAY_ENABLE
  829.       MOV P0,#52H                 //R
  830.       ACALL DISPLAY_WRITE

  831.       MOV P0,#83H
  832.       ACALL DISPLAY_ENABLE
  833.       MOV P0,#4EH                 //N
  834.       ACALL DISPLAY_WRITE

  835.       MOV P0,#84H
  836.       ACALL DISPLAY_ENABLE
  837.       MOV P0,#49H                 //I
  838.       ACALL DISPLAY_WRITE

  839.       MOV P0,#85H
  840.       ACALL DISPLAY_ENABLE
  841.       MOV P0,#4EH                 //N
  842.       ACALL DISPLAY_WRITE

  843.       MOV P0,#86H
  844.       ACALL DISPLAY_ENABLE
  845.       MOV P0,#47H                 //G
  846.       ACALL DISPLAY_WRITE

  847.       MOV P0,#87H
  848.       ACALL DISPLAY_ENABLE
  849.       MOV P0,#21H                 //!
  850.       ACALL DISPLAY_WRITE

  851.       MOV P0,#88H
  852.       ACALL DISPLAY_ENABLE
  853.       MOV P0,#20H                 //
  854.       ACALL DISPLAY_WRITE
  855.    
  856.       MOV P0,#89H
  857.       ACALL DISPLAY_ENABLE
  858.       MOV P0,#50H                 //P
  859.       ACALL DISPLAY_WRITE

  860.       MOV P0,#8AH
  861.       ACALL DISPLAY_ENABLE
  862.       MOV P0,#4CH                 //L
  863.       ACALL DISPLAY_WRITE

  864.       MOV P0,#8BH
  865.       ACALL DISPLAY_ENABLE
  866.       MOV P0,#45H                 //E
  867.       ACALL DISPLAY_WRITE

  868.       MOV P0,#8CH
  869.       ACALL DISPLAY_ENABLE
  870.       MOV P0,#41H                 //A
  871.       ACALL DISPLAY_WRITE

  872.       MOV P0,#8DH
  873.       ACALL DISPLAY_ENABLE
  874.       MOV P0,#53H                 //S
  875.       ACALL DISPLAY_WRITE

  876.       MOV P0,#8EH
  877.       ACALL DISPLAY_ENABLE
  878.       MOV P0,#45H                 //E
  879.       ACALL DISPLAY_WRITE

  880.       MOV P0,#8FH
  881.       ACALL DISPLAY_ENABLE
  882.       MOV P0,#3AH                //:
  883.       ACALL DISPLAY_WRITE
  884. //第二行
  885.       MOV P0,#0C0H
  886.       ACALL DISPLAY_ENABLE
  887.       MOV P0,#20H                 //
  888.       ACALL DISPLAY_WRITE

  889.       MOV P0,#0C1H
  890.       ACALL DISPLAY_ENABLE
  891.       MOV P0,#20H                 //
  892.       ACALL DISPLAY_WRITE

  893.       MOV P0,#0C2H
  894.       ACALL DISPLAY_ENABLE
  895.       MOV P0,#52H                 //R
  896.       ACALL DISPLAY_WRITE

  897.       MOV P0,#0C3H
  898.       ACALL DISPLAY_ENABLE
  899.       MOV P0,#45H                 //E
  900.       ACALL DISPLAY_WRITE

  901.       MOV P0,#0C4H
  902.       ACALL DISPLAY_ENABLE
  903.       MOV P0,#53H                 //S
  904.       ACALL DISPLAY_WRITE

  905.       MOV P0,#0C5H
  906.       ACALL DISPLAY_ENABLE
  907.       MOV P0,#45H                 //E
  908.       ACALL DISPLAY_WRITE

  909.       MOV P0,#0C6H
  910.       ACALL DISPLAY_ENABLE
  911.       MOV P0,#54H                 //T
  912.       ACALL DISPLAY_WRITE

  913.       MOV P0,#0C7H
  914.       ACALL DISPLAY_ENABLE
  915.       MOV P0,#20H                 //
  916.       ACALL DISPLAY_WRITE

  917.       MOV P0,#0C8H
  918.       ACALL DISPLAY_ENABLE
  919.       MOV P0,#53H                 //S
  920.       ACALL DISPLAY_WRITE

  921.       MOV P0,#0C9H
  922.       ACALL DISPLAY_ENABLE
  923.       MOV P0,#59H                 //Y
  924.       ACALL DISPLAY_WRITE
  925.    
  926.       MOV P0,#0CAH
  927.       ACALL DISPLAY_ENABLE
  928.       MOV P0,#53H                 //S
  929.       ACALL DISPLAY_WRITE

  930.       MOV P0,#0CBH
  931.       ACALL DISPLAY_ENABLE
  932.       MOV P0,#54H                 //T
  933.       ACALL DISPLAY_WRITE

  934.       MOV P0,#0CCH
  935.       ACALL DISPLAY_ENABLE
  936.       MOV P0,#45H                 //E
  937.       ACALL DISPLAY_WRITE

  938.       MOV P0,#0CDH
  939.       ACALL DISPLAY_ENABLE
  940.       MOV P0,#4DH                //M
  941.       ACALL DISPLAY_WRITE

  942.       MOV P0,#0CEH
  943.       ACALL DISPLAY_ENABLE
  944.       MOV P0,#20H                 //
  945.       ACALL DISPLAY_WRITE

  946.       MOV P0,#0CFH
  947.       ACALL DISPLAY_ENABLE
  948.       MOV P0,#20H                 //
  949.       ACALL DISPLAY_WRITE
  950. RET
  951. //显示路程
  952. DISPLAY_DISTANCE_TIME:
  953. //DISTANCE
  954.       MOV P0,#80H
  955.       LCALL DISPLAY_ENABLE
  956.       MOV P0,#44H                 //D
  957.       LCALL DISPLAY_WRITE

  958.       MOV P0,#81H
  959.       LCALL DISPLAY_ENABLE
  960.       MOV P0,#49H                 //I
  961.       LCALL DISPLAY_WRITE

  962.       MOV P0,#82H
  963.       LCALL DISPLAY_ENABLE
  964.       MOV P0,#53H                 //S
  965.       LCALL DISPLAY_WRITE

  966.       MOV P0,#83H
  967.       ACALL DISPLAY_ENABLE
  968.       MOV P0,#54H                 //T
  969.       ACALL DISPLAY_WRITE

  970.       MOV P0,#84H
  971.       LCALL DISPLAY_ENABLE
  972.       MOV P0,#41H                 //A
  973.       LCALL DISPLAY_WRITE

  974.       MOV P0,#85H
  975.       LCALL DISPLAY_ENABLE
  976.       MOV P0,#4EH                 //N
  977.       LCALL DISPLAY_WRITE

  978.       MOV P0,#86H
  979.       LCALL DISPLAY_ENABLE
  980.       MOV P0,#43H                 //C
  981.       LCALL DISPLAY_WRITE

  982.       MOV P0,#87H
  983.       LCALL DISPLAY_ENABLE
  984.       MOV P0,#45H                 //E
  985.       LCALL DISPLAY_WRITE

  986.       MOV P0,#88H
  987.       LCALL DISPLAY_ENABLE
  988.       MOV P0,#3AH                //:
  989.       LCALL DISPLAY_WRITE

  990.       MOV P0,#89H
  991.       LCALL DISPLAY_ENABLE
  992.       MOV A,M_METER
  993.       SWAP A
  994.       ANL A,#0FH
  995.       CLR C
  996.       ADD A,#30H
  997.       MOV P0,A               //M_METER_H
  998.       LCALL DISPLAY_WRITE

  999.       MOV P0,#8AH
  1000.       LCALL DISPLAY_ENABLE
  1001.       MOV A,M_METER
  1002.       ANL A,#0FH
  1003.       CLR C
  1004.       ADD A,#30H
  1005.       MOV P0,A               //M_METER_L
  1006.       LCALL DISPLAY_WRITE

  1007.       MOV P0,#8BH
  1008.       LCALL DISPLAY_ENABLE
  1009.       MOV A,K_METER
  1010.       SWAP A
  1011.       ANL A,#0FH
  1012.       CLR C
  1013.       ADD A,#30H
  1014.       MOV P0,A               //K_METER_H
  1015.       LCALL DISPLAY_WRITE

  1016.       MOV P0,#8CH
  1017.       LCALL DISPLAY_ENABLE
  1018.       MOV P0,#2EH                 //.
  1019.       LCALL DISPLAY_WRITE

  1020.       MOV P0,#8DH
  1021.       LCALL DISPLAY_ENABLE
  1022.       MOV A,K_METER
  1023.       ANL A,#0FH
  1024.       CLR C
  1025.       ADD A,#30H
  1026.       MOV P0,A               //K_METER_L
  1027.       LCALL DISPLAY_WRITE
  1028.               
  1029.       MOV P0,#8EH
  1030.       LCALL DISPLAY_ENABLE
  1031.       MOV P0,#4BH                 //K
  1032.       LCALL DISPLAY_WRITE

  1033.       MOV P0,#8FH
  1034.       LCALL DISPLAY_ENABLE
  1035.       MOV P0,#4DH                //M
  1036.       LCALL DISPLAY_WRITE                                          
  1037.               
  1038. //TIME           
  1039.       MOV P0,#0C0H
  1040.       LCALL DISPLAY_ENABLE
  1041.       MOV P0,#54H                 //T
  1042.       LCALL DISPLAY_WRITE

  1043.       MOV P0,#0C1H
  1044.       LCALL DISPLAY_ENABLE
  1045.       MOV P0,#49H                 //I
  1046.       LCALL DISPLAY_WRITE

  1047.       MOV P0,#0C2H
  1048.       LCALL DISPLAY_ENABLE
  1049.       MOV P0,#4DH                //M
  1050.       LCALL DISPLAY_WRITE

  1051.       MOV P0,#0C3H
  1052.       LCALL DISPLAY_ENABLE
  1053.       MOV P0,#45H                 //E
  1054.       LCALL DISPLAY_WRITE
  1055.                      
  1056.       MOV P0,#0C4H
  1057.       LCALL DISPLAY_ENABLE
  1058.       MOV P0,#3AH                //:
  1059.       LCALL DISPLAY_WRITE              

  1060.       MOV P0,#0C5H
  1061.       LCALL DISPLAY_ENABLE
  1062.          MOV A,RESULT_TIME_H
  1063.          SWAP A
  1064.          ANL  A,#0FH
  1065.          CLR C
  1066.          ADD A,#30H
  1067.       MOV P0,A               //
  1068.       LCALL DISPLAY_WRITE

  1069.       MOV P0,#0C6H
  1070.       LCALL DISPLAY_ENABLE
  1071.          MOV A,RESULT_TIME_H
  1072.          ANL  A,#0FH
  1073.          CLR C
  1074.          ADD A,#30H
  1075.       MOV P0,A               //
  1076.       LCALL DISPLAY_WRITE

  1077.       MOV P0,#0C7H
  1078.       LCALL DISPLAY_ENABLE
  1079.       MOV P0,#2DH                //-
  1080.       LCALL DISPLAY_WRITE
  1081.                      
  1082.       MOV P0,#0C8H
  1083.       LCALL DISPLAY_ENABLE
  1084.          MOV A,RESULT_TIME_M
  1085.          SWAP A
  1086.          ANL  A,#0FH
  1087.          CLR C
  1088.          ADD A,#30H
  1089.       MOV P0,A               //
  1090.       LCALL DISPLAY_WRITE

  1091.       MOV P0,#0C9H
  1092.       LCALL DISPLAY_ENABLE
  1093.          MOV A,RESULT_TIME_M
  1094.          ANL  A,#0FH
  1095.          CLR C
  1096.          ADD A,#30H
  1097.       MOV P0,A               //
  1098.       LCALL DISPLAY_WRITE

  1099.       MOV P0,#0CAH
  1100.       LCALL DISPLAY_ENABLE
  1101.       MOV P0,#2DH                //-
  1102.       LCALL DISPLAY_WRITE

  1103.       MOV P0,#0CBH
  1104.       LCALL DISPLAY_ENABLE
  1105.          MOV A,RESULT_TIME_S
  1106.          SWAP A
  1107.          ANL  A,#0FH
  1108.          CLR C
  1109.          ADD A,#30H
  1110.       MOV P0,A               //
  1111.       LCALL DISPLAY_WRITE

  1112.       MOV P0,#0CCH
  1113.       LCALL DISPLAY_ENABLE
  1114.          MOV A,RESULT_TIME_S
  1115.          ANL  A,#0FH
  1116.          CLR C
  1117.          ADD A,#30H
  1118.       MOV P0,A               //
  1119.       LCALL DISPLAY_WRITE
  1120.                            
  1121.       MOV P0,#0CDH
  1122.       LCALL DISPLAY_ENABLE
  1123.       MOV P0,#20H                 //
  1124.       LCALL DISPLAY_WRITE

  1125.       MOV P0,#0CEH
  1126.       LCALL DISPLAY_ENABLE
  1127.       MOV P0,#20H                 //
  1128.       LCALL DISPLAY_WRITE
  1129.             
  1130.       MOV P0,#0CFH
  1131.       LCALL DISPLAY_ENABLE
  1132.       MOV P0,#20H                 //
  1133.       LCALL DISPLAY_WRITE                                                                     
  1134. RET
  1135. COUNT_TIME:
  1136. //秒计算和调整
  1137.       CLR C
  1138.       MOV A,REAL_TIME_S
  1139.       SUBB A,KEEP_TIME_S
  1140.       MOV RESULT_TIME_S,A
  1141.       JNC S_BCD_CHECK
  1142.       MOV A,REAL_TIME_S
  1143.       CLR C
  1144.       ADD A,#60H
  1145.       MOV M_TIME_M_FLAG,#01H
  1146.       SUBB A,KEEP_TIME_S
  1147.       MOV RESULT_TIME_S,A
  1148. S_BCD_CHECK:
  1149.       MOV C,PSW.6
  1150.       JNC D_M_COUNT
  1151.       CLR C
  1152.       CLR PSW.6
  1153.       SUBB A,#06H
  1154.       MOV RESULT_TIME_S,A
  1155. D_M_COUNT://分钟计算和调整
  1156.       MOV A,M_TIME_M_FLAG
  1157.       CJNE A,#01H,M_COUNT
  1158.       MOV M_TIME_M_FLAG,#00H
  1159.       CLR C
  1160.       MOV A,REAL_TIME_M
  1161.       DEC A
  1162.       MOV M_TIME_M,A
  1163.       JNC D_M_BCB_CHECK
  1164.       MOV A,REAL_TIME_M
  1165.       CLR C
  1166.       ADD A,#60H
  1167.       MOV M_TIME_H_FLAG,#01H
  1168.       DEC A
  1169.       MOV M_TIME_M,A
  1170. D_M_BCB_CHECK:
  1171.       MOV C,PSW.6
  1172.       JNC M_M_COUNT
  1173.       CLR C
  1174.       CLR PSW.6
  1175.       SUBB A,#06H
  1176.       MOV M_TIME_M,A
  1177. M_M_COUNT:
  1178.       CLR C
  1179.       MOV A,M_TIME_M
  1180.       SUBB A,KEEP_TIME_M
  1181.       MOV RESULT_TIME_M,A
  1182.       JNC M_M_BCD_CHECK
  1183.       MOV A,M_TIME_M
  1184.       CLR C
  1185.       ADD A,#60H
  1186.       MOV M_TIME_H_FLAG,#01H
  1187.       SUBB A,KEEP_TIME_M
  1188.       MOV RESULT_TIME_M,A
  1189. M_M_BCD_CHECK:
  1190.       MOV C,PSW.6
  1191.       JNC D_H_COUNT
  1192.       CLR C
  1193.       CLR PSW.6
  1194.       SUBB A,#06H
  1195.       MOV RESULT_TIME_M,A
  1196. M_COUNT:
  1197.       CLR C
  1198.       MOV A,REAL_TIME_M
  1199.       SUBB A,KEEP_TIME_M
  1200.       MOV RESULT_TIME_M,A
  1201.       JNC M_BCD_CHECK
  1202.       MOV A,REAL_TIME_M
  1203.       CLR C
  1204.       ADD A,#60H
  1205.       MOV M_TIME_H_FLAG,#01H
  1206.       SUBB A,KEEP_TIME_M
  1207.          MOV RESULT_TIME_M,A
  1208. M_BCD_CHECK:
  1209.       MOV C,PSW.6
  1210.       JNC D_H_COUNT
  1211.       CLR C
  1212.       CLR PSW.6
  1213.       SUBB A,#06H
  1214.       MOV RESULT_TIME_M,A
  1215. //时钟
  1216. D_H_COUNT:
  1217.       MOV A,M_TIME_H_FLAG
  1218.       CJNE A,#01H,H_COUNT
  1219.       MOV M_TIME_H_FLAG,#00H
  1220.       CLR C
  1221.       MOV A,REAL_TIME_H
  1222.       DEC A
  1223.       MOV M_TIME_H,A
  1224.       JNC D_H_BCB_CHECK
  1225.       MOV COUNT_FLAG,#0FH         //错误显示
  1226. D_H_BCB_CHECK:
  1227.       MOV C,PSW.6
  1228.       JNC M_H_COUNT
  1229.       CLR C
  1230.       CLR PSW.6
  1231.       SUBB A,#06H
  1232.       MOV M_TIME_H,A
  1233. M_H_COUNT:
  1234.       CLR C
  1235.       MOV A,M_TIME_H
  1236.       SUBB A,KEEP_TIME_H
  1237.       MOV RESULT_TIME_H,A
  1238.       JNC M_H_BCD_CHECK
  1239.       MOV COUNT_FLAG,#0FH         //错误显示
  1240. M_H_BCD_CHECK:
  1241.       MOV C,PSW.6
  1242.       JNC COUNT_TIME_EXIT
  1243.       CLR C
  1244.       CLR PSW.6
  1245.       SUBB A,#06H
  1246.       MOV RESULT_TIME_H,A
  1247. H_COUNT:
  1248.       CLR C
  1249.       MOV A,REAL_TIME_H
  1250.       SUBB A,KEEP_TIME_H
  1251.       MOV RESULT_TIME_H,A
  1252.       JNC H_BCD_CHECK
  1253.       MOV COUNT_FLAG,#0EH         //错误显示
  1254. H_BCD_CHECK:
  1255.       MOV C,PSW.6
  1256.       JNC COUNT_TIME_EXIT
  1257.       CLR C
  1258.       CLR PSW.6
  1259.       SUBB A,#06H
  1260.       MOV RESULT_TIME_H,A
  1261. COUNT_TIME_EXIT:
  1262. RET
  1263. //外部中断0计算里程
  1264. EX0_Interrupt:
  1265.       PUSH ACC
  1266.       PUSH PSW
  1267.       INC H_METER
  1268.       MOV A,H_METER
  1269.       ANL A,#0FH
  1270.       CJNE A,#0AH,EXIT_EX0_Interrupt
  1271.       MOV A,H_METER
  1272.       ANL A,#0F0H
  1273.       CLR C
  1274.       ADD A,#10H
  1275.       MOV H_METER,A
  1276.       CJNE A,#60H,EXIT_EX0_Interrupt

  1277.       INC K_METER
  1278.       MOV A,K_METER
  1279.       ANL A,#0FH
  1280.       CJNE A,#0AH,EXIT_EX0_Interrupt
  1281.       MOV A,K_METER
  1282.       ANL A,#0F0H
  1283.       CLR C
  1284.       ADD A,#10H
  1285.       MOV K_METER,A
  1286.       CJNE A,#0A0H,EXIT_EX0_Interrupt

  1287.       INC M_METER
  1288.       MOV A,M_METER
  1289.       ANL A,#0FH
  1290.       CJNE A,#0AH,EXIT_EX0_Interrupt
  1291.       MOV A,M_METER
  1292.       ANL A,#0F0H
  1293.       CLR C
  1294.       ADD A,#10H
  1295.       MOV M_METER,A
  1296.       CJNE A,#0A0H,EXIT_EX0_Interrupt
  1297.       MOV M_METER,#00H
  1298.       MOV DISPLAY_SWITCH,#08H
  1299. EXIT_EX0_Interrupt:
  1300.       POP PSW
  1301.       POP ACC
  1302. RETI

  1303. END
复制代码
PCB 原理图 C.rar (126.36 KB, 下载次数: 93)

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|联系我们|闽公网安备 35012102000020号|闽ICP备11020110号-1|圣源电子

GMT+8, 2024-10-23 03:23 , Processed in 0.045674 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表