找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2032|回复: 0
打印 上一主题 下一主题
收起左侧

单片机KS0074电压表,电流表源程序(液晶显示)

[复制链接]
跳转到指定楼层
楼主
ID:57366 发表于 2018-4-9 17:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机控制KS0074实现电压表,电流表功能的源码如下:
  1. ;引脚为:1VCC,2VCC,3GND,4BLA,5DB7,6DB6,7DB5,8DB4,9E,10RW,11RS,12V0,13GND,14GND,15VCC.实际上,可任用其中一个VCC引脚和一个GND引脚。
  2. ;KS0074有8线并行、4线并行和2线串行输入方式,但set1602默认的输入方式为4数据总线并行输入方式
  3. ;V0引脚应通过串接800欧左右电阻后接VCC(5V)。或者,在VCC和GND之间串接一个5~10可调电位器,滑动端接V0,利用调节滑动端控制LCD显示对比度。
  4. ;BLA输入电压应为3.3V,可通过串接合适电阻后接VCC(5V),避免高温烧坏LCD。
  5. ;---------------------------------------------------------------------------------------------------------------------
  6. ;以下为硬件连接要求
  7. DB4 equ p0.4
  8. DB5 equ p0.5
  9. DB6 equ p0.6
  10. DB7 equ p0.7
  11. RS EQU P2.5
  12. RW EQU P2.6
  13. E EQU P2.7
  14. RCOMDATE equ 70H;作为读取的BF相关指令信息的暂存单元
  15. WCOMdate equ 71H;作为拟写入指令代码的暂存单元
  16. RLCDDATE Equ 72H;作为读取LCD相关显示代码或信息的暂存单元
  17. WLCDDATe EQU 73H;作为拟写入LCD显示信息的暂存单元
  18. ;-------------------------------------------------------------------------------------------------------
  19.         P1ASF        EQU        9DH        ;P1口设置寄存器
  20.         ADC_CONTOR        EQU        0BCH        ;ADC控制寄存器
  21.         ADC_RES        EQU        0BDH        ;ADC输出高8位
  22.         ADC_RESL        EQU        0BEH        ;ADC低8为输出
  23.         AUXR1        EQU        0A2H        ;设置寄存器
  24.         IJISHU        EQU        30H        ;电流比较次数计数
  25.         UJISHU        EQU        31H        ;电压比较次数计数
  26.         IL        EQU        32H        ;电流低位
  27.         IH        EQU        33H        ;电流高位
  28.         UL        EQU        34H        ;电压低位
  29.         UH        EQU        35H        ;电压高位
  30.         ORG        0000H
  31.         LJMP        START
  32.         ORG        002BH
  33. START:
  34. MOV        P1ASF,#00000011B        ;开启P1.0和P1.1作为AD的输入端口
  35.         MOV        AUXR1,#04H        ;设置AD输出方式
  36.         MOV        SP,#5FH        ;设置栈底
  37.         MOV        IJISHU,#00H
  38.         MOV        UJISHU,#00H
  39.         ;×××××××××××××××××××××××××
  40. LCD:
  41. MOV SP,#80H
  42. ;------------------------- -------------------------------------------------------------
  43. ;首先,开机或复位后,应进行4数据总线和LCD初始化,将默认的8位数据接口改为4位。
  44. ;---------------------------------------------------------------------------------------------------------------------
  45. ;开机或复位后,至少应等待20MS以上
  46. LCALL Delay1MS
  47. LCALL Delay1MS
  48. ;第一步功能设置,设为4位数据总线方式输入(DL=0)
  49. MOV WCOMDATE,#20H
  50. LCALL INPUTCOMMAND;输入指令0010XXXX(低四位忽略)
  51. ;第二步功能设置,在保持4位数据总线输入方式下设为两行模式(输入指令00101XXX)
  52. MOV WCOMDATE,#28H;设成2行显示
  53. LCALL INPUTCOMMAND;输入指令00101XXX
  54. ;第三步显示开关设置
  55. MOV WCOMDATE,#0CH;设成显示开,而光标开和光标闪烁关
  56. LCALL INPUTCOMMAND;输入指令00001111
  57. ;第四步清屏
  58. MOV WCOMDATE,#01H;
  59. LCALL INPUTCOMMAND;输入指令00000001
  60. LCALL DELAY1MS;输入功能设置指令需延迟1.53MS以上(除归位指令和本指令执行时间为1.53MS,其余指令执行时间均不足0.1MS)
  61. ;第五步输入模式设置
  62. MOV WCOMDATE,#06H;
  63. LCALL INPUTCOMMAND;输入指令00000110
  64. ;- ------------------------------------------------------------------------------------------------------------------
  65. ;然后,将逆序显示变更为正常显示(即使用KS0074的镜向功能)
  66. ;--------------------------------------------------------------------------------------------------------------------

  67. ;第一步,功能设置指令,使RE=1
  68. MOV WCOMDATE,#2CH;
  69. LCALL INPUTCOMMAND;输入指令00101100
  70. ;第二步,输入模式设置指令,使BID=1(逆序显示)
  71. MOV WCOMDATE,#07H;
  72. LCALL INPUTCOMMAND;输入指令00000111
  73. ;第三步,功能设置指令,使RE=0,以便后续应用时可使用正常指令
  74. MOV WCOMDATE,#28H;
  75. LCALL INPUTCOMMAND;输入指令00101000
  76. ;-----------------------------------------------------------------------------------------------------------------
  77. ;第一步,显示第一行的固定字符(40H~4EH,起始位址40H),测试要求全部显示出来
  78. MOV WCOMDATE,#2CH;功能设置指令,使RE=1,以执行扩充命令
  79. LCALL INPUTCOMMAND;输入指令00101100
  80. MOV WCOMDATE,#40H;设SEGRAM地址(格式为01XXABCD,起始地址为40H)
  81. LCALL INPUTCOMMAND;输入指令40H
  82. ;(1)显示第一个段码字符即信号强度标志,默认为不显示
  83. MOV WLCDDATe,#20H;40H控制第一个字符的大部分段码位
  84. LCALL INPUTDATACODE
  85. MOV WLCDDATe,#20H;41H控制第一个字符中除40H控制段码外的其它位
  86. LCALL INPUTDATACODE
  87. MOV WLCDDATe,#20H;42H无用
  88. LCALL INPUTDATACODE
  89. MOV WLCDDATe,#20H;43H无用
  90. LCALL INPUTDATACODE
  91. ;(2)显示第二个段码字符即电量显示符号,默认显示满电量
  92. MOV WLCDDATe,#0FFH;44H控制全部电量显示段码位,对应关系应进一步测试
  93. LCALL INPUTDATACODE
  94. ;(3)显示第三个段码字符主菜单标志符,默认显示主菜单符号
  95. MOV WLCDDATe,#20H;45H控制全部主菜单显示段码位
  96. LCALL INPUTDATACODE
  97. MOV WLCDDATe,#00H;46H无用
  98. LCALL INPUTDATACODE
  99. MOV WLCDDATe,#00H;47H无用
  100. LCALL INPUTDATACODE
  101. MOV WLCDDATe,#00H;48H无用
  102. LCALL INPUTDATACODE
  103. ;(4)显示第四个段码字符即闹铃符号,默认不显示
  104. MOV WLCDDATe,#20H;49H控制闹铃所有段码位
  105. LCALL INPUTDATACODE
  106. MOV WLCDDATe,#20H;4A无用
  107. LCALL INPUTDATACODE
  108. ;(5)显示第五个段码字符打开修笺(书本)符号,默认不显示
  109. MOV WLCDDATe,#0FFH;4BH控制该符号全部段码
  110. LCALL INPUTDATACODE
  111. MOV WLCDDATe,#20H;4CH无用
  112. LCALL INPUTDATACODE
  113. ;(6)显示第六个段码字符,默认显示
  114. MOV WLCDDATe,#20H;4DH控制该符号全部段码
  115. LCALL INPUTDATACODE
  116. MOV WLCDDATe,#00H;4EH无用
  117. LCALL INPUTDATACODE
  118. ;(7)显示第七个段码字符即接听电话符号,默认显示
  119. MOV WLCDDATe,#20H;55H控制该符号全部段码
  120. LCALL INPUTDATACODE
  121. MOV WCOMDATE,#28H;功能设置指令,使RE=0,恢复正常命令状态
  122. LCALL INPUTCOMMAND
  123. ;输入指令00101000

  124. MOV WCOMDATE,#80H;设置DDRAM地址,该行起始80H
  125. LCALL INPUTCOMMAND


  126. MOV WLCDDATe,#"Q"
  127. LCALL INPUTDATACODE
  128. LCALL DELAY100MS

  129. MOV WLCDDATe,#"Q"
  130. LCALL INPUTDATACODE
  131. LCALL DELAY100MS

  132. MOV WLCDDATe,#":"
  133. LCALL INPUTDATACODE
  134. LCALL DELAY100MS

  135. MOV WLCDDATe,#"2"
  136. LCALL INPUTDATACODE
  137. LCALL DELAY100MS

  138. MOV WLCDDATe,#"8"
  139. LCALL INPUTDATACODE
  140. LCALL DELAY100MS

  141. MOV WLCDDATe,#"7"
  142. LCALL INPUTDATACODE
  143. LCALL DELAY100MS

  144. MOV WLCDDATe,#"0"
  145. LCALL INPUTDATACODE
  146. LCALL DELAY100MS

  147. MOV WLCDDATe,#"5"
  148. LCALL INPUTDATACODE
  149. LCALL DELAY100MS

  150. MOV WLCDDATe,#"5"
  151. LCALL INPUTDATACODE
  152. LCALL DELAY100MS

  153. MOV WLCDDATe,#"5"
  154. LCALL INPUTDATACODE
  155. LCALL DELAY100MS

  156. MOV WLCDDATe,#"3"
  157. LCALL INPUTDATACODE

  158. LCALL DELAY100MS
  159. LCALL DELAY100MS
  160. LCALL DELAY100MS
  161. LCALL DELAY100MS
  162. LCALL DELAY100MS
  163. LCALL DELAY100MS

  164. MOV WCOMDATE,#01H;
  165. LCALL INPUTCOMMAND;输入指令00000001

  166. MAIN:
  167.         MOV        ADC_CONTOR,#11001001B        ;开启P1.1的AD转换,电流
  168.         LCALL        AD        ;调用AD子程序
  169.         MOV        A,ADC_RES
  170.         CJNE        A,IH,MAINI
  171.         MOV        A,ADC_RESL
  172.         CJNE        A,IL,MAINI
  173.         MOV        IJISHU,#00H
  174.         SJMP        MAINI1
  175. MAINI:        INC        IJISHU
  176.         MOV        A,#20
  177.         CJNE        A,IJISHU,MAINI1
  178.         MOV        IJISHU,#00H
  179.         MOV        IH,ADC_RES        ;保存电流数据
  180.         MOV        IL,ADC_RESL
  181. MAINI1:        MOV        0AH,IH
  182.         MOV        0BH,IL
  183.         LCALL        TO10
  184.         MOV        0CH,18H
  185.         MOV        0DH,19H
  186.         MOV        0EH,1AH
  187.         MOV        A,0AH
  188.         RRC        A
  189.         MOV        0AH,A
  190.         MOV        A,0BH
  191.         RRC        A
  192.         MOV        0BH,A
  193.         MOV        A,0AH
  194.         RRC        A
  195.         MOV        A,0BH
  196.         RRC        A
  197.         MOV        09H,A        ;09H保存8位电流数据
  198.         MOV        ADC_CONTOR,#11001000B        ;开启P1.0的AD转换        电压
  199.         LCALL        AD        ;调用AD子程序
  200.         MOV        A,ADC_RES
  201.         CJNE        A,UH,MAINU
  202.         MOV        A,ADC_RESL
  203.         CJNE        A,UL,MAINU
  204.         MOV        UJISHU,#00H
  205.         SJMP        MAINU1
  206. MAINU:        INC        UJISHU
  207.         MOV        A,#20
  208.         CJNE        A,UJISHU,MAINU1
  209.         MOV        UJISHU,#00H
  210.         MOV        UH,ADC_RES        ;保存电压数据
  211.         MOV        UL,ADC_RESL
  212. MAINU1:        MOV        0AH,UH
  213.         MOV        0BH,UL
  214.         LCALL        TO10
  215.         MOV        10H,18H
  216.         MOV        11H,19H
  217.         MOV        12H,1AH
  218.         MOV        A,0AH
  219.         RRC        A
  220.         MOV        0AH,A
  221.         MOV        A,0BH
  222.         RRC        A
  223.         MOV        0BH,A
  224.         MOV        A,0AH
  225.         RRC        A
  226.         MOV        A,0BH
  227.         RRC        A
  228.         MOV        08H,A        ;08H保存8位电压数据
  229.         MOV        B,09H
  230.         MUL        AB
  231.         MOV        R2,B
  232.         MOV        R3,A
  233.         MOV        R4,#61H        ;/25000
  234.         MOV        R5,#0A8H
  235.         LCALL        DIVD
  236.         MOV        A,R7
  237.         ADD        A,#30H
  238.         MOV        13H,A
  239.         MOV        R4,#09H
  240.         MOV        R5,#0C4H        ;/2500
  241.         LCALL        DIVD
  242.         MOV        A,R7
  243.         ADD        A,#30H
  244.         MOV        14H,A
  245.         MOV        R4,#00H
  246.         MOV        R5,#250        ;/250
  247.         LCALL        DIVD
  248.         MOV        A,R7
  249.         ADD        A,#30H
  250.         MOV        15H,A
  251.         MOV        R4,#00H
  252.         MOV        R5,#25        ;/25
  253.         LCALL        DIVD
  254.         MOV        A,R7
  255.         ADD        A,#30H
  256.         MOV        16H,A
  257.         MOV        A,R3
  258.         CLR        C
  259.         RLC        A
  260.         CLR        C
  261.         RLC        A
  262.         MOV        R3,A
  263.         MOV        R5,#10
  264.         LCALL        DIVD
  265.         MOV        A,R7
  266.         ADD        A,#30H
  267.         MOV        17H,A
  268.         LCALL        XIANSHI
  269.         LJMP        MAIN
  270.         ;×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
  271.         ;AD转换子程序
  272.         ;×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
  273. AD:        MOV        A,ADC_CONTOR
  274.         JNB        0E4H,AD
  275.         CLR        0E4H
  276.         MOV        ADC_CONTOR,A
  277.         ;×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
  278.         ;二-十进制转换子程序,同时加便宜量完成1602的0-9字模地址的转换        输出结果18H        19H        1AH
  279.         ;×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
  280. TO10:        MOV        R2,0AH
  281.         MOV        R3,0BH
  282.         MOV        R4,#0
  283.         MOV        R5,#2
  284.         LCALL        DIVD
  285.         MOV        A,R6
  286.         MOV        R2,A
  287.         MOV        A,R7
  288.         MOV        R3,A
  289.         MOV        R4,#00H
  290.         MOV        R5,#100
  291.         LCALL        DIVD
  292.         MOV        18H,R7
  293.         MOV        A,#30H
  294.         ADD        A,18H
  295.         MOV        18H,A
  296.         MOV        R5,#10
  297.         LCALL        DIVD
  298.         MOV        19H,R7
  299.         MOV        A,#30H
  300.         ADD        A,19H
  301.         MOV        19H,A
  302.         MOV        1AH,R3
  303.         MOV        A,#30H
  304.         ADD        A,1AH
  305.         MOV        1AH,A
  306.         RET
  307.         ;×××××××××××××××××××××××××××××××××××××××××××××××××××
  308.         ;双字节除法运算子程序
  309.         ;入口条件:        被除数在R2、R3、除数在R4、R5中,商在R6、R7中。R1用于计数位移量
  310.         ;出口信息:        余数在R2、R3中,双字节商在R4、R5中,OV=1        时溢出。
  311.         ;影响资源:        PSW、A、R1~R7
  312.         ;××××××××××××××××××××××××××××××××××××××××××××××××××××××××
  313. DIVD:PUSH        PSW         
  314.         PUSH        ACC
  315.         MOV        R1,#00H        ;计数器清零
  316.         MOV        R6,#00H
  317.         MOV        R7,#00H
  318.         LCALL        SUBBD        ;判断够不够减
  319.         JC        DIVDE
  320. DIVD1:        MOV        A,R4
  321.         JB        ACC.7,DIVD3        ;判断最高位是不是1
  322.         CLR        C        ;除数左移一位
  323.         MOV        A,R5        
  324.         RLC        A
  325.         MOV        R5,A
  326.         MOV        A,R4
  327.         RLC        A
  328.         MOV        R4,A
  329.         INC        R1        ;左移计数器计数
  330.         LCALL        SUBBD        ;比较左移后够不够减
  331.         JNC        DIVD1        ;够减转移,不够减继续
  332.         LCALL        DIVDR        ;除数右移一位
  333.         DEC        R1        ;右移了,所以要-1
  334. DIVD3:        CLR        C
  335.         MOV        A,R3        ;开始减法
  336.         SUBB        A,R5
  337.         MOV        R3,A
  338.         MOV        A,R2
  339.         SUBB        A,R4
  340.         MOV        R2,A
  341.         INC        R7
  342. DIVD4:        CJNE        R1,#00H,DIVD5        ;判断是不是到最后一位了
  343.         SJMP        DIVDE
  344. DIVD5:        LCALL        DIVDR        ;除数右移一位
  345.         MOV        A,R7
  346.         CLR        C
  347.         RLC        A
  348.         MOV        R7,A
  349.         MOV        A,R6
  350.         RLC        A
  351.         MOV        R6,A
  352.         DEC        R1        ;位置计数器-1
  353.         LCALL        SUBBD        ;比较够不够减
  354.         JC        DIVD4
  355.         SJMP        DIVD3
  356. SUBBD:        CLR        C        ;判断够不够减子程序
  357.         MOV        A,R3
  358.         SUBB        A,R5
  359.         MOV        A,R2
  360.         SUBB        A,R4
  361.         RET
  362. DIVDR:        CLR        C
  363.         MOV        A,R4
  364.         RRC        A
  365.         MOV        R4,A
  366.         MOV        A,R5
  367.         RRC        A
  368.         MOV        R5,A
  369.         RET
  370. DIVDE:        SETB        OV
  371.          POP        ACC
  372.         POP        PSW         
  373.         RET

  374. XIANSHI:

  375. ;第二步,在第二行(起始位址为80H)显示“2013-05-15”
  376. MOV WCOMDATE,#80H;设置DDRAM地址,该行起始80H
  377. LCALL INPUTCOMMAND
  378.         MOV        A,#30H
  379.         CJNE        A,10H,DYXY
  380.         MOV        WLCDDATe,#20H
  381.         SJMP        DYXY1
  382. DYXY:        MOV        WLCDDATe,10H        ;电压最高位显示0时消隐
  383. DYXY1:        LCALL        INPUTDATACODE
  384.         MOV        WLCDDATe,11H
  385.         LCALL        INPUTDATACODE
  386.         MOV        WLCDDATe,#2EH
  387.         LCALL        INPUTDATACODE
  388.         MOV        WLCDDATe,12H
  389.         LCALL        INPUTDATACODE
  390.         MOV        WLCDDATe,#56H
  391.         LCALL        INPUTDATACODE
  392.         
  393.         MOV WLCDDATe,#20H                ;功率部分(13H,14H,15H,16H,17H对应功率的5个数值)
  394.         LCALL        INPUTDATACODE        ;        MOV        P
  395.         MOV        WLCDDATe,#20H
  396.         LCALL        INPUTDATACODE
  397.         MOV        WLCDDATe,#20H
  398.         LCALL        INPUTDATACODE
  399.         MOV        WLCDDATe,#20H
  400.         LCALL        INPUTDATACODE
  401.         MOV        WLCDDATe,13H
  402.         LCALL        INPUTDATACODE
  403.         MOV        WLCDDATe,14H
  404.         LCALL        INPUTDATACODE
  405.         MOV        WLCDDATe,15H
  406.         LCALL        INPUTDATACODE
  407.         MOV        WLCDDATe,#2EH
  408.         LCALL        INPUTDATACODE
  409.         MOV        WLCDDATe,16H
  410.         LCALL        INPUTDATACODE
  411.         MOV        WLCDDATe,17H
  412.         LCALL        INPUTDATACODE
  413.         MOV        WLCDDATe,#57H
  414.         LCALL        INPUTDATACODE
  415.         

  416. ;第三步,在第三行
  417. ;电流部分(0CH,0DH,0EH对应电流的3个数值)
  418. MOV WCOMDATE,#90H;设置DDRAM地址
  419. LCALL INPUTCOMMAND

  420. MOV WLCDDATe,0CH
  421. LCALL INPUTDATACODE
  422. MOV WLCDDATe,#"."
  423. LCALL INPUTDATACODE
  424. MOV WLCDDATe,0DH
  425. LCALL INPUTDATACODE
  426. MOV WLCDDATe,0EH
  427. LCALL INPUTDATACODE
  428. MOV WLCDDATe,#"A"
  429. LCALL INPUTDATACODE
  430. RET
  431. SJMP $
  432. ;读BF并判断状态子程序
  433. ;直到LCD空闲时退出本程序
  434. ;------------------------------------------------------------------------------------------------------------------
  435. READBFAC:
  436. PUSH ACC
  437. BFWAIT:
  438. SETB DB4;将4位数据线设置到读有效状态
  439. SETB DB5
  440. SETB DB6
  441. SETB DB7
  442. CLR RS;设置成读BF及AC值操作状态
  443. SETB RW
  444. SETB E;第一次读,使LCD将BF及AC值的高4位信息释放到数据总线上。
  445. MOV C,DB7
  446. MOV ACC.7,C
  447. CLR E;高半字节读取完成
  448. CLR RW
  449. SETB DB4;将4位数据线设置到读有效状态
  450. SETB DB5
  451. SETB DB6
  452. SETB DB7
  453. SETB RW
  454. SETB E;第二次读,使LCD将BF及AC值的低4位信息释放到数据总线上。
  455. CLR E;第二次读取完成
  456. JB ACC.7,BFWAIT;LCD忙碌时继续等待并监控,空闲时执行下面指令
  457. POP ACC
  458. RET
  459. ;-------------------------------------------------------------------------------------------------------------------
  460. ;输入指令子程序INPUTCOMMAND
  461. ;拟写指令代码存放在WCOMDATE中
  462. ;-------------------------------------------------------------------------------------------------------------------
  463. INPUTCOMMAND:
  464. PUSH ACC
  465. ;首先,判断LCD是否空闲并视具体情况处理
  466. LCALL READBFAC
  467. ;然后,为写指令代码作好准备
  468. MOV A,WCOMDATE;将拟写指令代码取到A中
  469. ;再后,将拟写指令代码的高4位写入LCD
  470. CLR RS;设置成写指令状态
  471. CLR RW
  472. SETB E
  473. MOV C,ACC.7;将高4位送出
  474. MOV DB7,C
  475. MOV C,ACC.6
  476. MOV DB6,C
  477. MOV C,ACC.5
  478. MOV DB5,C
  479. MOV C,ACC.4
  480. MOV DB4,C
  481. CLR E
  482. SETB RW
  483. CLR RW
  484. ;最后,将拟写指令代码的低4位写入LCD
  485. SETB E
  486. MOV C,ACC.3;将低4位送出
  487. MOV DB7,C
  488. MOV C,ACC.2
  489. MOV DB6,C
  490. MOV C,ACC.1
  491. MOV DB5,C
  492. MOV C,ACC.0
  493. MOV DB4,C
  494. CLR E;E的下降沿执行上述指令,将低4位写入LCD
  495. LCALL DELAY1ms
  496. POP ACC
  497. RET
  498. ;------------------------------------------------------------------------------------------------------------------
  499. ;写显示数据子程序INPUTDATACODE
  500. ;拟写数据代码存放在WLCDDATA中
  501. ;------------------------------------------------------------------------------------------------------------------
  502. INPUTDATACODE:
  503. PUSH ACC
  504. ;首先,判断LCD是否空闲并视具体情况处理
  505. LCALL READBFAC
  506. ;然后,为写显示数据作好准备
  507. MOV A,WLCDDATE;将拟写显示数据取到A中
  508. ;第三,将拟写数据代码的高4位写入LCD的DDRAM
  509. SETB RS;设置成写显示数据状态
  510. clr rw
  511. setb E
  512. MOV C,ACC.7;将高4位送出
  513. MOV DB7,C
  514. MOV C,ACC.6
  515. MOV DB6,C
  516. MOV C,ACC.5
  517. MOV DB5,C
  518. MOV C,ACC.4
  519. MOV DB4,C
  520. clr E
  521. setb RW
  522. CLR RW
  523. ;最后,将拟写数据代码的低4位写入LCD的DDRAM
  524. SETB E
  525. MOV C,ACC.3;将低4位送出
  526. MOV DB7,C
  527. MOV C,ACC.2
  528. MOV DB6,C
  529. MOV C,ACC.1
  530. MOV DB5,C
  531. MOV C,ACC.0
  532. MOV DB4,C
  533. CLR E
  534. LCALL DELAY1ms
  535. POP ACC
  536. RET
  537. ;---------------------------------------------------------------------------------------------------------------------
  538. ;延时子程序DELAY1MS:针对32MHZ晶振编程,延时不少1MS
  539. DELAY1MS:
  540. MOV r6,#22H
  541. DELAY1ms1:MOV R7,#064H
  542. DELAY1ms2: NOP
  543. DJNZ R7,DELAY1ms2
  544. DJNZ R6,DELAY1ms1
  545. NOP
  546. RET
  547. DELAY100MS:                        ;@12.000MHz
  548.         PUSH 30H
  549.         PUSH 31H
  550.         PUSH 32H
  551.         MOV 30H,#4
  552.         MOV 31H,#166
  553.         MOV 32H,#206
  554. NEXT:
  555.         DJNZ 32H,NEXT
  556.         DJNZ 31H,NEXT
  557.         DJNZ 30H,NEXT
  558.         POP 32H
  559.         POP 31H
  560.         POP 30H
  561.         RET
  562.         ;---------------------------------------------------------------------------------------------------------------------
  563. END

复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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