微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 液晶显示万年历汇编源码

液晶显示万年历汇编源码

时间:10-02 整理:3721RD 点击:
最近看大家都在做万年历,我也做了一个,用纯汇编写的,有丰富注释。大家轻喷。
基于AT89S52+LCD12832+AD7416(温度传感器)+DS1388(实时芯片)

  1. ORG 0000H
  2. LJMP START
  3. ORG 0020H       
  4.                                         ;液晶管脚定义:
  5. RS        EQU P2.3                //寄存器选择端,H数据,L指令
  6. RW        EQU P2.4                //H读,L写
  7. EEE        EQU P2.5                //串口模式下为读写操作使能端。E的下降沿锁定数据
  8. RES        EQU P2.6
  9. PSB        EQU P2.7                //H并,L串
  10.                                         ;实时芯片管脚定义
  11. RST        EQU P1.5       
  12. SCL        EQU P1.4                //SERIAL CLOCK INPUT
  13. SDA        EQU P1.3                //SERIAL DATA OUTPUT内部寄存器的地址

  14.                                         ;温度传感器管脚定义
  15. SCLL        EQU P2.0       
  16. SDAA        EQU P2.1

  17. IICADD EQU 38H                //IIC器件(DS1388) 内部寄存器的地址
  18. IICDAT EQU 39H                //IIC器件(DS1388) 内部寄存器的内容(读出或写入)
  19. IICNUM EQU 3AH                //IIC器件(DS1388) 的地址

  20. START:
  21.         LCALL INIT
  22. MAIN:
  23.         LCALL READ_TIME
  24.         CLR 7FH             ;BUTTON1按过与否的标志
  25.         MOV 2EH, #0         ;BUTTON2未按下
  26.         LJMP BUTTON
  27. ;=========================================================================
  28. ;初始化时间数值、时钟芯片、温度传感器、液晶
  29. ;=========================================================================       
  30. INIT:                                        ;初始化时间,30-37H分别存放着时间的数据
  31.         MOV 30H, #00H                ;1/100s
  32.         MOV 31H, #00H                ;s
  33.         MOV 32H, #54H                ;min
  34.         MOV 33H, #08H                ;h
  35.         MOV 34H, #07H                ;day of week
  36.         MOV 35H, #08H                ;date
  37.         MOV 36H, #07H                ;month
  38.         MOV 37H, #12H                ;year
  39. ;        MOV PSW, #18H
  40.         ;CLR 7FH             //小时:分钟:秒 中的冒号显示与否的标志
  41.        
  42.         ;============================================
  43.                                                 ;DS1388's initialization
  44.         SETB SCL
  45.         SETB SDA
  46.         CLR RST
  47.         NOP
  48.         SETB RST
  49.         NOP
  50.        
  51.         MOV IICNUM,#11010000B        //DS1388's address
  52.         MOV R0, #30H
  53.         MOV R1, #00H
  54.         MOV R2, #08H
  55. TIME_INIT:
  56.         MOV IICADD, R1
  57.         MOV IICDAT, @R0
  58.         LCALL IIC_WRITE
  59.         LCALL DEL0
  60.         INC R0
  61.         INC R1
  62.         DJNZ R2, TIME_INIT
  63.                  
  64. LCD_INIT:        CLR RES
  65.                 LCALL DEL0
  66.                 SETB RES
  67.                 LCALL DEL0
  68.                 SETB PSB
  69.                 LCALL DEL0
  70.                 MOV A,#30H
  71.                 LCALL WRITE_COM
  72.                 LCALL DEL0
  73.                 MOV A,#30H
  74.                 LCALL WRITE_COM
  75.                 LCALL DEL0
  76.                 MOV A,#0CH
  77.                 LCALL WRITE_COM
  78.                 LCALL DEL0
  79.                 MOV A,#01H
  80.                 LCALL WRITE_COM
  81.                 LCALL DEL0
  82.                 MOV A,#06H
  83.                 LCALL WRITE_COM
  84.                 LCALL DEL0
  85.                 ;LCD_INIT FINISHED
  86.                 RET
  87. ;================================================================
  88. ;读取时间值并显示
  89. ;================================================================
  90. READ_TIME:               
  91.         MOV R0, #30H                        //读出DS1388的时间
  92.         MOV R1, #00H
  93.         MOV R2, #08H       
  94. READ_TIME1:
  95.         MOV IICADD, R1
  96.         LCALL IIC_READ
  97.         MOV @R0, IICDAT
  98.         INC R0
  99.         INC R1
  100.         DJNZ R2, READ_TIME1
  101.         MOV A, #80H
  102.         LCALL WRITE_COM
  103.         LCALL DEL0
  104.         MOV A, 37H                                        //年份+"/"
  105.         LCALL NUMSHOW
  106.         MOV A, #2FH
  107.         LCALL WRITE_DATA
  108.         LCALL DEL0
  109.        
  110.         MOV A, 36H                                        //月份+"/"
  111.         LCALL NUMSHOW
  112.         MOV A, #2FH
  113.         LCALL WRITE_DATA
  114.         LCALL DEL0
  115.        
  116.         MOV A, 35H                                        //日期+"/"
  117.         LCALL NUMSHOW

  118.         MOV A, #20H
  119.         LCALL WRITE_DATA
  120.         LCALL DEL0
  121.        
  122.         MOV A, #20H
  123.         LCALL WRITE_DATA
  124.         LCALL DEL0
  125.         MOV A, #85H
  126.         LCALL WRITE_COM
  127.         LCALL DEL0
  128.        
  129.         MOV DPTR,#TIME_WORD_1
  130.         MOV R7, #4
  131.         MOV R6, #0
  132.         LCALL SHOW_CHINESE
  133.        
  134.         MOV DPTR, #TIME_WORD_2
  135.         MOV R7, #2
  136.         MOV R6,34H                                        //日期的数据传给R6
  137.         DEC R6                                                //减一是因为要从0开始数
  138.         MOV A, R6                                        //乘以2,因为每个汉字占两位
  139.         ADD A, R6
  140.         MOV R6, A
  141.         LCALL SHOW_CHINESE
  142.        
  143.         MOV A, #91H                                        //小时+":"
  144.         LCALL WRITE_COM
  145.         LCALL DEL0
  146.         MOV A, 33H
  147.         LCALL NUMSHOW
  148.         MOV A, #3AH
  149.         LCALL WRITE_DATA
  150.        
  151.         MOV A, 32H                                        //分钟+":"
  152.         LCALL NUMSHOW
  153.         MOV A, #3AH
  154.         LCALL WRITE_DATA
  155.        
  156.         MOV A, 31H                                        //秒
  157.         LCALL NUMSHOW
  158.        
  159.         RET       
  160. ;===========================================================================       
  161. ;显示温度
  162. ;===========================================================================
  163. SHOW_TEM:               
  164.                 MOV A, #80H
  165.                 LCALL WRITE_COM
  166.                 LCALL DEL0
  167.                
  168.                 MOV DPTR, #TEM_WORD_1
  169.                 MOV R6, #0
  170.                 MOV R7, #10
  171.                 LCALL SHOW_CHINESE
  172.                
  173.                 MOV A, #85H
  174.                 LCALL WRITE_COM
  175.                 LCALL DEL0
  176.                 LCALL IIC_READ2
  177.                 MOV        B,#10
  178.                 div        AB
  179.                 ANL        A,#0FH
  180.                 SWAP        A
  181.                 ADD        A,B
  182.                 LCALL        NUMSHOW
  183.                
  184.                 MOV DPTR, #TEM_WORD_2
  185.                 MOV R6, #0
  186.                 MOV R7, #2
  187.                 LCALL SHOW_CHINESE
  188.                
  189.                 MOV A, #87H
  190.                 LCALL WRITE_COM
  191.                 LCALL DEL0
  192.                
  193.                 MOV A, #20H
  194.                 LCALL WRITE_DATA
  195.                 LCALL DEL0
  196.                 MOV A, #20H
  197.                 LCALL WRITE_DATA
  198.                 LCALL DEL0
  199.                 MOV A, 90H
  200.                 LCALL WRITE_COM
  201.                 LCALL DEL0
  202.                 MOV R6, #16
  203. TEM_CLR:               
  204.                 MOV A, #20H
  205.                 LCALL WRITE_DATA
  206.                 LCALL DEL0
  207.                 DJNZ R6, TEM_CLR
  208.                 DJNZ R5, SHOW_TEM
  209.                 LJMP MAIN
  210. ;===============================================================================
  211. ;按键处理
  212. ;===============================================================================
  213. BUTTON:
  214.         MOV P3, #0FFH
  215.         MOV A, P3
  216.         CPL A
  217.         JB ACC.3, BUTTON1
  218.         JB ACC.5, BUTTON2
  219.         JB ACC.6, BUTTON3
  220.         JB ACC.7, BUTTON4
  221.         MOV A,2EH
  222.         CJNE A, #0,BUTTON
  223.         SJMP TO_MAIN
  224. BUTTON1: SJMP BUTTON1_0
  225. BUTTON2: SJMP BUTTON2_0
  226. BUTTON3: AJMP BUTTON3_0
  227. BUTTON4: AJMP BUTTON4_0

  228. BUTTON1_0:
  229.         LCALL DEL0
  230.         MOV C, P3.3
  231.         CPL C
  232.         JNC TO_MAIN
  233. BUTTON1_1:   
  234.         MOV C, P3.3
  235.         JNC BUTTON1_1                ;等待按键松开
  236.         JB 7FH, TO_MAIN
  237.         SETB 7FH                        ;标记BUTTON1被按过
  238.         MOV 2EH, #1                        ;YEAR_SET的标记
  239.         SJMP TO_YEAR_SET
  240. TO_MAIN:LJMP MAIN
  241. TO_YEAR_SET: LCALL YEAR_SET
  242.         JB 7FH, BUTTON
  243.         SJMP TO_MAIN
  244. TO_SHOW_TEM:
  245.         MOV R5, #40
  246.         LJMP SHOW_TEM
  247. ;=================================================
  248. BUTTON2_0:
  249.         LCALL DEL0
  250.         MOV C, P3.5
  251.         CPL C
  252.         JNC TO_MAIN
  253. BUTTON2_1:   
  254.         MOV C, P3.5
  255.         JNC BUTTON2_1                ;等待按键松开
  256.         JNB 7FH, TO_SHOW_TEM
  257.         MOV A, 2EH
  258.        
  259.         CJNE A, #1, JUDGE1
  260.         MOV 2EH, #2
  261.         LCALL MON_SET
  262.         LJMP BUTTON
  263. JUDGE1:
  264.         CJNE A, #2,JUDGE2
  265.         MOV 2EH, #3
  266.         LCALL DATE_SET
  267.         LJMP BUTTON
  268. JUDGE2:
  269.         CJNE A, #3,JUDGE3
  270.         MOV 2EH, #4
  271.         LCALL DAY_SET
  272.         LJMP BUTTON
  273. JUDGE3:
  274.         CJNE A, #4,JUDGE4
  275.         MOV 2EH, #5
  276.         LCALL HOUR_SET
  277.         LJMP BUTTON
  278. JUDGE4:
  279.         CJNE A, #5,JUDGE5
  280.         MOV 2EH, #6
  281.         LCALL MIN_SET
  282.         LJMP BUTTON
  283. JUDGE5:
  284.         CJNE A, #6,JUDGE6
  285.         MOV 2EH, #7
  286.         LCALL SEC_SET
  287.         LJMP BUTTON
  288. JUDGE6:
  289.         MOV 2EH, #1
  290.         LCALL YEAR_SET
  291.         LJMP BUTTON

  292. ;===============================================================================

  293. BUTTON3_0:
  294.         LCALL DEL0
  295.         MOV C, P3.6
  296.         CPL C
  297.         JNC TO_MAIN
  298.        
  299. BUTTON3_1:   
  300.         MOV C, P3.6
  301.         JNC BUTTON3_1                ;等待按键松开
  302.         JNB 7FH, TO_SHOW_STORY
  303.         MOV A, 2EH
  304.         CJNE A, #1, JUDGE11
  305.         MOV A,37H
  306.         CJNE A, #99H,ADD_37_1
  307.         MOV 37H, #00H
  308.         SJMP ADD_37_3
  309. ADD_37_1:
  310.         ANL A,#0FH
  311.         CJNE A, #09H,ADD_37_2
  312.         MOV A, 37H
  313.         ANL A, #0F0H
  314.         ADD A,#10H
  315.         MOV 37H, A
  316.         SJMP ADD_37_3
  317. TO_SHOW_STORY:
  318.         MOV R5, #80
  319.         LJMP SHOW_STORY
  320. ADD_37_2:
  321.         INC 37H
  322. ADD_37_3:
  323.         MOV IICADD, #07H
  324.         MOV IICDAT, 37H
  325.         LCALL IIC_WRITE
  326.         LCALL YEAR_SET
  327. JUDGE11:
  328.         MOV A, 2EH
  329.         CJNE A, #2, JUDGE22
  330.         MOV A, 36H
  331.         CJNE A, #12H, ADD_36_1
  332.         MOV 36H, #01H
  333.         SJMP ADD_36_3
  334. ADD_36_1:
  335.         CJNE A, #09H, ADD_36_2
  336.         MOV 36H, #10H
  337.         SJMP ADD_36_3
  338. ADD_36_2:
  339.         INC 36H
  340.         SJMP ADD_36_3
  341. ADD_36_3:
  342.         MOV IICADD, #06H
  343.         MOV IICDAT, 36H
  344.         LCALL IIC_WRITE
  345.         LCALL MON_SET
  346. JUDGE22:
  347.         MOV A, 2EH
  348.         CJNE A, #3, JUDGE33
  349.         MOV A,35H
  350.         CJNE A, #31H,ADD_35_1
  351.         MOV 35H, #01H
  352.         SJMP ADD_35_3
  353. ADD_35_1:
  354.         ANL A, #0FH
  355.         CJNE A, #09H, ADD_35_2
  356.         MOV A, 35H
  357.         ANL A,#0F0H
  358.         ADD A, #10H
  359.         MOV 35H, A
  360.         SJMP ADD_35_3
  361. ADD_35_2:
  362.         INC 35H
  363. ADD_35_3:
  364.         MOV IICADD, #05H
  365.         MOV IICDAT, 35H
  366.         LCALL IIC_WRITE
  367.         LCALL DATE_SET
  368. JUDGE33:
  369.         MOV A, 2EH
  370.         CJNE A, #4, JUDGE44
  371.         MOV A, 34H
  372.         CJNE A, #07H, ADD_34_1
  373.         MOV 34H, #01H
  374.         SJMP ADD_34_2
  375. ADD_34_1:
  376.         INC 34H
  377. ADD_34_2:
  378.         MOV IICADD, #04H
  379.         MOV IICDAT, 34H
  380.         LCALL IIC_WRITE
  381.         LCALL DAY_SET
  382. JUDGE44:
  383.         MOV A, 2EH
  384.         CJNE A, #5, JUDGE55
  385.         MOV A, 33H
  386.         CJNE A, #23H, ADD_33_1
  387.         MOV 33H, #00H
  388.         SJMP ADD_33_3
  389. ADD_33_1:
  390.         ANL A, #0FH
  391.         CJNE A, #09H, ADD_33_2
  392.         MOV A, 33H
  393.         ANL A, #0F0H
  394.         ADD A, #10H
  395.         MOV 33H, A
  396.         SJMP ADD_33_3
  397. ADD_33_2:
  398.         INC 33H
  399. ADD_33_3:
  400.         MOV IICADD, #03H
  401.         MOV IICDAT, 33H
  402.         LCALL IIC_WRITE
  403.         LCALL HOUR_SET
  404. JUDGE55:
  405.         MOV A, 2EH
  406.         CJNE A, #6, JUDGE66
  407.         MOV A, 32H
  408.         CJNE A, #59H, ADD_32_1
  409.         MOV 32H, #00H
  410.         SJMP ADD_32_3
  411. ADD_32_1:
  412.         ANL A, #0FH
  413.         CJNE A,#09H, ADD_32_2
  414.         MOV A, 32H
  415.         ANL A, #0F0H
  416.         ADD A, #10H
  417.         MOV 32H, A
  418.         SJMP ADD_32_2
  419. ADD_32_2:
  420.         INC 32H
  421. ADD_32_3:
  422.         MOV IICADD, #02H
  423.         MOV IICDAT, 32H
  424.         LCALL IIC_WRITE
  425.         LCALL MIN_SET
  426. JUDGE66:
  427.         MOV A, 2EH
  428.         CJNE A, #7, TO_BUTTON
  429.         MOV 31H, #0
  430.         MOV IICADD, #01H
  431.         MOV IICDAT, 31H
  432.         LCALL IIC_WRITE
  433.         LCALL SEC_SET
  434.        
  435. TO_BUTTON:LJMP BUTTON
  436. ;===============================================================================
  437. BUTTON4_0:
  438.         LCALL DEL0
  439.         MOV C, P3.7
  440.         CPL C
  441.         JNC TO_MAIN1
  442.        
  443. BUTTON4_1:   
  444.         MOV C, P3.7
  445.         JNC BUTTON4_1                ;等待按键松开
  446.         JNB 7FH, TO_SHOW_VISION
  447.         MOV A, 2EH
  448.         CJNE A, #1, JUDGE111
  449.         MOV A,37H
  450.         CJNE A, #00H,DEC_37_1
  451.         MOV 37H, #99H
  452.         SJMP DEC_37_3
  453. DEC_37_1:
  454.         ANL A,#0FH
  455.         CJNE A, #00H,DEC_37_2
  456.         MOV A, 37H
  457.         SUBB A, #07H
  458.         MOV 37H, A
  459.         SJMP DEC_37_3
  460. TO_SHOW_VISION:
  461.         MOV R5, #80
  462.         LJMP SHOW_VISION
  463. TO_MAIN1: LJMP MAIN
  464. DEC_37_2:
  465.         DEC 37H
  466. DEC_37_3:
  467.         MOV IICADD, #07H
  468.         MOV IICDAT, 37H
  469.         LCALL IIC_WRITE
  470.         LCALL YEAR_SET
  471. JUDGE111:
  472.         MOV A, 2EH
  473.         CJNE A, #2, JUDGE222
  474.         MOV A, 36H
  475.         CJNE A, #01H, DEC_36_1
  476.         MOV 36H, #12H
  477.         SJMP DEC_36_3
  478. DEC_36_1:
  479.         CJNE A, #09H, DEC_36_2
  480.         MOV A, 36H
  481.         SUBB A, #07H
  482.         MOV 36H, A
  483.         SJMP DEC_36_3
  484. DEC_36_2:
  485.         DEC 36H
  486.         SJMP DEC_36_3
  487. DEC_36_3:
  488.         MOV IICADD, #06H
  489.         MOV IICDAT, 36H
  490.         LCALL IIC_WRITE
  491.         LCALL MON_SET
  492. JUDGE222:
  493.         MOV A, 2EH
  494.         CJNE A, #3, JUDGE333
  495.         MOV A,35H
  496.         CJNE A, #01H,DEC_35_1
  497.         MOV 35H, #31H
  498.         SJMP DEC_35_3
  499. DEC_35_1:
  500.         ANL A, #0FH
  501.         CJNE A, #00H, DEC_35_2
  502.         MOV A, 35H
  503.         SUBB A, #07H
  504.         MOV 35H, A
  505.         SJMP DEC_35_3
  506. DEC_35_2:
  507.         DEC 35H
  508. DEC_35_3:
  509.         MOV IICADD, #05H
  510.         MOV IICDAT, 35H
  511.         LCALL IIC_WRITE
  512.         LCALL DATE_SET
  513. JUDGE333:
  514.         MOV A, 2EH
  515.         CJNE A, #4, JUDGE444
  516.         MOV A, 34H
  517.         CJNE A, #01H, DEC_34_1
  518.         MOV 34H, #07H
  519.         SJMP DEC_34_2
  520. DEC_34_1:
  521.         DEC 34H
  522. DEC_34_2:
  523.         MOV IICADD, #04H
  524.         MOV IICDAT, 34H
  525.         LCALL IIC_WRITE
  526.         LCALL DAY_SET
  527. JUDGE444:
  528.         MOV A, 2EH
  529.         CJNE A, #5, JUDGE555
  530.         MOV A, 33H
  531.         CJNE A, #00H, DEC_33_1
  532.         MOV 33H, #23H
  533.         SJMP DEC_33_3
  534. DEC_33_1:
  535.         ANL A, #0FH
  536.         CJNE A, #00H, DEC_33_2
  537.         MOV A, 33H
  538.         SUBB A, #07H
  539.         MOV 33H, A
  540.         SJMP DEC_33_3
  541. DEC_33_2:
  542.         DEC 33H
  543. DEC_33_3:
  544.         MOV IICADD, #03H
  545.         MOV IICDAT, 33H
  546.         LCALL IIC_WRITE
  547.         LCALL HOUR_SET
  548. JUDGE555:
  549.         MOV A, 2EH
  550.         CJNE A, #6, JUDGE666
  551.         MOV A, 32H
  552.         CJNE A, #00H, DEC_32_1
  553.         MOV 32H, #59H
  554.         SJMP DEC_32_3
  555. DEC_32_1:
  556.         ANL A, #0FH
  557.         CJNE A,#00H, DEC_32_2
  558.         MOV A, 32H
  559.         SUBB A, #07H
  560.         MOV 32H, A
  561.         SJMP DEC_32_2
  562. DEC_32_2:
  563.         DEC 32H
  564. DEC_32_3:
  565.         MOV IICADD, #02H
  566.         MOV IICDAT, 32H
  567.         LCALL IIC_WRITE
  568.         LCALL MIN_SET
  569. JUDGE666:
  570.         MOV A, 2EH
  571.         CJNE A, #7, TO_BUTTON1
  572.         MOV 31H, #0
  573.         MOV IICADD, #01H
  574.         MOV IICDAT, 31H
  575.         LCALL IIC_WRITE
  576.         LCALL SEC_SET
  577.        
  578. TO_BUTTON1:LJMP BUTTON
  579. ;===============================================================================
  580. SHOW_STORY:
  581.         MOV A, #80H
  582.         LCALL WRITE_COM
  583.         LCALL DEL0
  584.         MOV DPTR, #STORY1
  585.         MOV R6, #0
  586.         MOV R7, #16
  587.         LCALL SHOW_CHINESE
  588.         DJNZ R5, SHOW_STORY
  589.         LJMP MAIN
  590.        
  591. SHOW_VISION:
  592.         MOV A, #80H
  593.         LCALL WRITE_COM
  594.         LCALL DEL0
  595.         MOV DPTR, #VISION
  596.         MOV R6, #0
  597.         MOV R7, #16
  598.         LCALL SHOW_CHINESE
  599.        
  600.         MOV A, #90H
  601.         LCALL WRITE_COM
  602.         LCALL DEL0
  603.         MOV DPTR, #BLANK
  604.         MOV R6, #0
  605.         MOV R7, #16
  606.         LCALL SHOW_CHINESE       
  607.        
  608.         DJNZ R5, SHOW_VISION
  609.         LJMP MAIN
  610.        
  611. YEAR_SET:
  612.         MOV A, #80H
  613.         LCALL WRITE_COM
  614.         LCALL DEL0
  615.        
  616.         MOV R6, #0
  617.         MOV R7, #14
  618.         MOV DPTR, #YEAR_SET_WORD
  619.         LCALL SHOW_CHINESE
  620.        
  621.         MOV IICADD, #07H
  622.         LCALL IIC_READ
  623.         MOV A, IICDAT
  624.         LCALL NUMSHOW
  625.        
  626.         MOV A, #90H
  627.         LCALL WRITE_COM
  628.         LCALL DEL0
  629.         MOV DPTR, #BLANK
  630.         MOV R6, #0
  631.         MOV R7, #16
  632.         LCALL SHOW_CHINESE       
  633.         RET
  634.        
  635. MON_SET:

  636.         MOV A, #80H
  637.         LCALL WRITE_COM
  638.         LCALL DEL0
  639.        
  640.         MOV R6, #0
  641.         MOV R7, #14
  642.         MOV DPTR, #MON_SET_WORD
  643.         LCALL SHOW_CHINESE
  644.        

  645.         MOV IICADD, #06H
  646.         LCALL IIC_READ
  647.         MOV A, IICDAT
  648.         LCALL NUMSHOW
  649.         MOV A, #90H
  650.         LCALL WRITE_COM
  651.         LCALL DEL0
  652.         MOV DPTR, #BLANK
  653.         MOV R6, #0
  654.         MOV R7, #16
  655.         LCALL SHOW_CHINESE       
  656.         RET
  657.        
  658. DATE_SET:

  659.         MOV A, #80H
  660.         LCALL WRITE_COM
  661.         LCALL DEL0
  662.        
  663.         MOV R6, #0
  664.         MOV R7, #14
  665.         MOV DPTR, #DATE_SET_WORD
  666.         LCALL SHOW_CHINESE
  667.        

  668.         MOV IICADD, #05H
  669.         LCALL IIC_READ
  670.         MOV A, IICDAT
  671.         LCALL NUMSHOW
  672.         MOV A, #90H
  673.         LCALL WRITE_COM
  674.         LCALL DEL0
  675.         MOV DPTR, #BLANK
  676.         MOV R6, #0
  677.         MOV R7, #16
  678.         LCALL SHOW_CHINESE       
  679.         RET
  680.        
  681. DAY_SET:

  682.         MOV A, #80H
  683.         LCALL WRITE_COM
  684.         LCALL DEL0
  685.        
  686.         MOV R6, #0
  687.         MOV R7, #14
  688.         MOV DPTR, #DAY_SET_WORD
  689.         LCALL SHOW_CHINESE
  690.        

  691.         MOV IICADD, #04H
  692.         LCALL IIC_READ
  693.         MOV A, IICDAT
  694.         LCALL NUMSHOW
  695.         MOV A, #90H
  696.         LCALL WRITE_COM
  697.         LCALL DEL0
  698.         MOV DPTR, #BLANK
  699.         MOV R6, #0
  700.         MOV R7, #16
  701.         LCALL SHOW_CHINESE       
  702.         RET
  703.        
  704. HOUR_SET:

  705.         MOV A, #80H
  706.         LCALL WRITE_COM
  707.         LCALL DEL0
  708.        
  709.         MOV R6, #0
  710.         MOV R7, #14
  711.         MOV DPTR, #HOUR_SET_WORD
  712.         LCALL SHOW_CHINESE
  713.        

  714.         MOV IICADD, #03H
  715.         LCALL IIC_READ
  716.         MOV A, IICDAT
  717.         LCALL NUMSHOW
  718.         MOV A, #90H
  719.         LCALL WRITE_COM
  720.         LCALL DEL0
  721.         MOV DPTR, #BLANK
  722.         MOV R6, #0
  723.         MOV R7, #16
  724.         LCALL SHOW_CHINESE       
  725.         RET
  726.        
  727. MIN_SET:
  728.        
  729.         MOV A, #80H
  730.         LCALL WRITE_COM
  731.         LCALL DEL0
  732.        
  733.         MOV R6, #0
  734.         MOV R7, #14
  735.         MOV DPTR, #MIN_SET_WORD
  736.         LCALL SHOW_CHINESE
  737.        

  738.         MOV IICADD, #02H
  739.         LCALL IIC_READ
  740.         MOV A, IICDAT
  741.         LCALL NUMSHOW
  742.         MOV A, #90H
  743.         LCALL WRITE_COM
  744.         LCALL DEL0
  745.         MOV DPTR, #BLANK
  746.         MOV R6, #0
  747.         MOV R7, #16
  748.         LCALL SHOW_CHINESE       
  749.         RET
  750.        
  751. SEC_SET:
  752.        
  753.         MOV A, #80H
  754.         LCALL WRITE_COM
  755.         LCALL DEL0
  756.        
  757.         MOV R6, #0
  758.         MOV R7, #14
  759.         MOV DPTR, #SEC_SET_WORD
  760.         LCALL SHOW_CHINESE
  761.        

  762.         MOV IICADD, #01H
  763.         LCALL IIC_READ
  764.         MOV A, IICDAT
  765.         LCALL NUMSHOW
  766.          
  767.         MOV A, #90H
  768.         LCALL WRITE_COM
  769.         LCALL DEL0
  770.         MOV DPTR, #BLANK
  771.         MOV R6, #0
  772.         MOV R7, #16
  773.         LCALL SHOW_CHINESE       
  774.        
  775.         RET
  776.        

  777. ;===============================================================================
  778. ;十六进制数据转换为LCD可显示的ASCII码数据
  779. ;===============================================================================
  780. NUMSHOW:        MOV        B,A                               
  781.                 ANL        A,#0F0H
  782.                 SWAP        A
  783.                 ADD        A,#30H
  784.                 LCALL        WRITE_DATA
  785.                 LCALL        DEL0
  786.                 MOV        A,B
  787.                 ANL        A,#0FH
  788.                 ADD        A,#30H
  789.                 LCALL        WRITE_DATA
  790.                 LCALL        DEL0
  791.                 RET
  792. ;==========================================================================
  793. ;LCD的接口函数,WRITE_COM写地址,WRITE_DATA写数据
  794. ;==========================================================================
  795. WRITE_COM:
  796.                 CLR RS
  797.                 LCALL DEL0
  798.                 CLR RW
  799.                 LCALL DEL0
  800.                 SETB EEE
  801.                 RLC A
  802.                 MOV 00H,C
  803.                 RLC A
  804.                 MOV 01H,C
  805.                 RLC A
  806.                 MOV 02H,C
  807.                 RLC A
  808.                 MOV 03H,C
  809.                 RLC A
  810.                 MOV 04H,C
  811.                 RLC A
  812.                 MOV 05H,C
  813.                 RLC A
  814.                 MOV 06H,C
  815.                 RLC A
  816.                 MOV 07H,C
  817.                 MOV A,20H
  818.                 MOV P0,A
  819.                 LCALL DEL0
  820.                 CLR EEE
  821.                 LCALL DEL0
  822.                 RET
  823. WRITE_DATA:
  824.                 SETB RS
  825.                 LCALL DEL0
  826.                 CLR RW
  827.                 LCALL DEL0
  828.                 SETB EEE
  829.                 RLC A
  830.                 MOV 00H,C
  831.                 RLC A
  832.                 MOV 01H,C
  833.                 RLC A
  834.                 MOV 02H,C
  835.                 RLC A
  836.                 MOV 03H,C
  837.                 RLC A
  838.                 MOV 04H,C
  839.                 RLC A
  840.                 MOV 05H,C
  841.                 RLC A
  842.                 MOV 06H,C
  843.                 RLC A
  844.                 MOV 07H,C
  845.                 MOV A,20H
  846.                 MOV P0,A
  847.                 LCALL DEL0
  848.                 CLR EEE
  849.                 LCALL DEL0
  850.                 RET
  851. ;===================================================================
  852. ;延时程序
  853. ;===================================================================
  854. DEL0:MOV 20H,#2
  855. DEL1:MOV 21H,#2
  856. DEL2:MOV 22H,#25
  857.         DJNZ 22H,$
  858.         DJNZ 21H,DEL2
  859.         DJNZ 20H,DEL1
  860.         RET

  861. ;--------------------------------------------
  862. ;IIC总线(读,写操作)
  863. ;IIC_WRITE:
  864. ;IICNUM中存放要写入的元件的地址,IICADD中存放要写入的地址, IICDAT中存放要写入的数据
  865. ;IIC_READ:
  866. ;IICNUM中存放要读取的元件的地址,IICADD中存放要写入的地址, IICDAT中存放读取的数据                               
  867. ;Made by 651927693
  868. ;2012/08/08
  869. ;--------------------------------------------

  870. IIC_WRITE:                                               
  871.         LCALL IIC_START
  872.         MOV A, IICNUM
  873.         LCALL IIC_WRITE_BYTE
  874.         ;LCALL IIC_WRITE_ACK
  875.         LCALL IIC_ACK
  876.         JC IIC_WRITE
  877.         MOV A, IICADD
  878.         LCALL IIC_WRITE_BYTE
  879.         ;LCALL IIC_WRITE_ACK
  880.         LCALL IIC_ACK
  881.         JC IIC_WRITE
  882.         MOV A, IICDAT
  883.         LCALL IIC_WRITE_BYTE
  884.         ;LCALL IIC_WRITE_ACK
  885.         LCALL IIC_ACK
  886.         JC IIC_WRITE
  887.         LCALL IIC_STOP
  888.         RET
  889. IIC_READ:                                               

  890.         LCALL IIC_START
  891.         MOV A, IICNUM
  892.         LCALL IIC_WRITE_BYTE
  893.         ;LCALL IIC_WRITE_ACK
  894.         LCALL IIC_ACK
  895.         JC IIC_READ
  896.         MOV A, IICADD
  897.         LCALL IIC_WRITE_BYTE
  898.         ;LCALL IIC_WRITE_ACK
  899.         LCALL IIC_ACK
  900.         JC IIC_READ
  901.        
  902.                         ;RESTART
  903.         LCALL IIC_START
  904.         MOV A, IICNUM
  905.         ORL A, #01H
  906.         LCALL IIC_WRITE_BYTE
  907.         ;LCALL IIC_WRITE_ACK
  908.         LCALL IIC_ACK
  909.         JC IIC_READ
  910.         LCALL IIC_READ_BYTE
  911.         ;LCALL IIC_READ_ACK
  912.         MOV IICDAT, A
  913.         LCALL IIC_STOP
  914.         RET
  915.        
  916. ;=====================================================
  917. IIC_START:
  918.         SETB SDA
  919.         NOP
  920.         SETB SCL
  921.         NOP
  922.         NOP
  923.         NOP
  924.         NOP
  925.         NOP
  926.         CLR SDA
  927.         NOP
  928.         NOP
  929.         NOP
  930.         NOP
  931.         NOP
  932.         CLR SCL
  933.         RET
  934. ;=====================================================
  935. IIC_STOP:
  936.         CLR SDA
  937.         NOP
  938.         SETB SCL
  939.         NOP
  940.         NOP
  941.         NOP
  942.         NOP
  943.         NOP
  944.         SETB SDA
  945.         NOP
  946.         NOP
  947.         NOP
  948.         NOP
  949.         NOP
  950.         RET
  951. ;=====================================================
  952. IIC_WRITE_BYTE:       
  953.         MOV B, #08H
  954.         IIC_WRITE_BYTE0:
  955.         RLC A
  956.         MOV SDA, C
  957.         NOP
  958.         SETB SCL
  959.         NOP
  960.         NOP
  961.         NOP
  962.         NOP
  963.         NOP
  964.         CLR SCL
  965.         NOP
  966.         DJNZ B, IIC_WRITE_BYTE0
  967.         RET
  968. ;====================================================
  969. IIC_READ_BYTE:
  970.         MOV B, #08H       
  971.         CLR A
  972.         SETB SDA
  973.         NOP
  974.         IIC_READ_BYTE0:
  975.         SETB SCL
  976.         NOP
  977.         NOP
  978.         NOP
  979.         NOP
  980.         NOP
  981.         MOV C, SDA
  982.         RLC A
  983.         CLR SCL
  984.         NOP
  985.         NOP
  986.         NOP
  987.         NOP
  988.         NOP
  989.         DJNZ B, IIC_READ_BYTE0
  990.         RET
  991. ;====================================================
  992.         MOV B, #0FFH
  993. IIC_WRITE_ACK:       
  994.         SETB SDA
  995.         SETB SCL
  996.         NOP
  997.         JB SDA, DEL_ACK
  998.         CLR SCL
  999.         NOP
  1000.         RET
  1001. ;=============================
  1002. DEL_ACK:
  1003.         DJNZ B, $
  1004.         CLR SCL
  1005.         NOP
  1006.         RET
  1007. ;====================================================
  1008. IIC_READ_ACK:
  1009.         CLR SCL
  1010.         NOP
  1011.         CLR SDA
  1012.         NOP
  1013.         SETB SCL
  1014.         NOP
  1015.         RET
  1016. ;=====================================================
  1017. IIC_ACK:        SETB        SDA
  1018.                 NOP
  1019.                 NOP
  1020.                 SETB        SCL
  1021.                 NOP
  1022.                 NOP
  1023.                 NOP
  1024.                 JB        SDA,IIC_ACK0
  1025.                 CLR        C
  1026.                 SJMP        IIC_ACK_END
  1027. IIC_ACK0:        SETB        C
  1028.                 SJMP        IIC_ACK_END
  1029. IIC_ACK_END:        CLR        SCL
  1030.                 RET
  1031. ;==================================================
  1032. ;iic2
  1033. ;A中存储了温度值信息
  1034. ;==================================================
  1035. IIC_READ2:                                               
  1036.         LCALL IIC_START2
  1037.         MOV A, #90H
  1038.         LCALL IIC_WRITE_BYTE2
  1039.         LCALL IIC_ACK2
  1040.         JC IIC_READ2
  1041.         MOV A, #00H
  1042.         LCALL IIC_WRITE_BYTE2
  1043.         LCALL IIC_ACK2
  1044.         JC IIC_READ2
  1045.         LCALL IIC_STOP2
  1046.        
  1047.                         ;RESTART
  1048.         LCALL IIC_START2
  1049.         MOV A, #91H
  1050.         LCALL IIC_WRITE_BYTE2
  1051.         LCALL IIC_ACK2
  1052.         JC IIC_READ2
  1053.         LCALL IIC_READ_BYTE2
  1054.         LCALL IIC_STOP2
  1055.         RET

  1056. ;=====================================================
  1057. IIC_START2:
  1058.         SETB SDAA
  1059.         NOP
  1060.         SETB SCLL
  1061.         NOP
  1062.         NOP
  1063.         NOP
  1064.         NOP
  1065.         NOP
  1066.         CLR SDAA
  1067.         NOP
  1068.         NOP
  1069.         NOP
  1070.         NOP
  1071.         NOP
  1072.         CLR SCLL
  1073.         RET
  1074. ;=====================================================
  1075. IIC_STOP2:
  1076.         CLR SDAA
  1077.         NOP
  1078.         SETB SCLL
  1079.         NOP
  1080.         NOP
  1081.         NOP
  1082.         NOP
  1083.         NOP
  1084.         SETB SDAA
  1085.         NOP
  1086.         NOP
  1087.         NOP
  1088.         NOP
  1089.         NOP
  1090.         RET
  1091. ;=====================================================
  1092. IIC_WRITE_BYTE2:       
  1093.         MOV B, #08H
  1094.         IIC_WRITE_BYTE02:
  1095.         RLC A
  1096.         MOV SDAA, C
  1097.         NOP
  1098.         SETB SCLL
  1099.         NOP
  1100.         NOP
  1101.         NOP
  1102.         NOP
  1103.         NOP
  1104.         CLR SCLL
  1105.         NOP
  1106.         DJNZ B, IIC_WRITE_BYTE02
  1107.         RET
  1108. ;====================================================
  1109. IIC_READ_BYTE2:
  1110.         MOV B, #08H       
  1111.         CLR A
  1112.         SETB SDAA
  1113.         NOP
  1114.         IIC_READ_BYTE02:
  1115.         SETB SCLL
  1116.         NOP
  1117.         NOP
  1118.         NOP
  1119.         NOP
  1120.         NOP
  1121.         MOV C, SDAA
  1122.         RLC A
  1123.         CLR SCLL
  1124.         NOP
  1125.         NOP
  1126.         NOP
  1127.         NOP
  1128.         NOP
  1129.         DJNZ B, IIC_READ_BYTE02
  1130.         RET
  1131. ;=====================================================
  1132. IIC_ACK2:        SETB        SDAA
  1133.                 NOP
  1134.                 NOP
  1135.                 SETB        SCLL
  1136.                 NOP
  1137.                 NOP
  1138.                 NOP
  1139.                 JB        SDAA,IIC_ACK02
  1140.                 CLR        C
  1141.                 SJMP        IIC_ACK_END2
  1142. IIC_ACK02:        SETB        C
  1143.                 SJMP        IIC_ACK_END2
  1144. IIC_ACK_END2:        CLR        SCLL
  1145.                 RET
  1146. ;=====================================================
  1147. ;DPTR
  1148. ;R7表示要显示的汉字个数*2
  1149. ;R6/2表示从第几个汉字开始显示
  1150. ;=====================================================
  1151. SHOW_CHINESE:
  1152.         MOV A, R6
  1153.         MOVC A,  @A+DPTR
  1154.         LCALL WRITE_DATA
  1155.         LCALL DEL0
  1156.         INC DPTR
  1157.         DJNZ R7, SHOW_CHINESE
  1158.         LCALL DEL0
  1159.         RET
  1160. TIME_WORD_1:
  1161.         DB "星期"
  1162. TIME_WORD_2:
  1163.         DB "一二三四五六日"
  1164. TEM_WORD_1:
  1165.    

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top