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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2603|回復: 0
打印 上一主題 下一主題
收起左側

液晶顯示數值

[復制鏈接]
跳轉到指定樓層
樓主
ID:70976 發表于 2014-12-26 23:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


  1.           LCD_X  EQU   23H     ;LCD 地址變量(決定文字的在LCD上的顯示位置)

  2. ;-----------------------------------------------------------
  3.           LCD_RS    EQU   P4.0    ;LCD 數據/命令選擇端
  4.           LCD_RW    EQU   P4.1    ;LCD 讀/寫選擇端
  5.           LCD_EN    EQU   P4.2    ;LCD 使能信號
  6.           LCD_BG    EQU   P4.3    ;LCD 背光控制端
  7.           LCD_SJ    EQU   P0      ;LCD 數據


  8. ;===========================================================
  9.           ORG  0000H
  10.           AJMP  MAIN
  11.           ORG  0100H
  12. ;===========================================================
  13. MAIN:     MOV  SP,#60H
  14.           CLR  LCD_BG          ;打開LCD背光
  15.           CALL  SET_LCD        ;初始化 LCD
  16.           CALL  MENU_1         ;顯示菜單1
  17.           MOV  73H,#1          ;加載百位數據
  18.           MOV  72H,#2          ;加載十位數據
  19.           MOV  71H,#3          ;加載個位數據
  20.           MOV  70H,#4          ;加載小數位數據
  21.           ACALL CONV01
  22.           SJMP $

  23. ;=================================================
  24. ;對 LCD 做初始化設置
  25. ;=================================================
  26. SET_LCD:  MOV A,#34H      ;34H--擴充指令操作
  27.           CALL  WCOM         ;寫入命令
  28.    MOV A,#30H      ;30H--基本指令操作
  29.           CALL  WCOM         ;寫入命令
  30.    MOV A,#01H      ;清除顯示
  31.           CALL  WCOM         ;寫入命令
  32.           MOV A,#06H      ;指定在資料寫入或讀取時,光標的移動方向
  33.           CALL  WCOM         ;DDRAM 的地址計數器(AC)加1
  34.    MOV A,#0CH      ;開顯示,關光標,不閃爍
  35.           CALL  WCOM         ;寫入命令
  36.           RET
  37. ;==========================================================
  38. ;73H-70H 分別存放百位、十位、個位、小數位的數據
  39. ;==========================================================
  40. CONV01:   MOV  A,73H          ;加載百位數據
  41.           MOV  LCD_X,#1       ;設置顯示位置
  42.           CJNE A,#00H,CONV2
  43. CONV1:    MOV  A,#" "        ;百位數等于0顯示空格
  44.           MOV  B,LCD_X
  45.           CALL  LCDP2
  46.           MOV  A,72H         ;十位
  47.           CJNE A,#00H,CONV3
  48.           INC  LCD_X         ;調整顯示地址
  49.           MOV  A,#" "        ;十位數等于0顯示空格
  50.           MOV  B,LCD_X
  51.           CALL  LCDP2
  52.           JMP  CONV4

  53. CONV2:    CALL  SHOW_DIG2    ;顯示數據

  54. CONV3:    INC  LCD_X         ;調整顯示地址
  55.           MOV  A,72H         ;十位
  56.           CALL  SHOW_DIG2

  57. CONV4:    INC  LCD_X         ;調整顯示地址
  58.           MOV  A,71H         ;個位
  59.           CALL  SHOW_DIG2
  60.           INC  LCD_X         ;調整顯示地址
  61.           MOV  A,#'.'
  62.           MOV  B,LCD_X
  63.           CALL  LCDP2
  64.           MOV  A,70H         ;加載小數位
  65.           INC  LCD_X         ;設置位置
  66.           CALL  SHOW_DIG2    ;顯示數據
  67.           RET
  68. ;=============================================
  69. ;在LCD的第二行顯示數據字符
  70. ;A=ASCII 數據, B=位置變量
  71. ;==============================================
  72. LCDP2:   PUSH  ACC           ;在LCD的第二行顯示字符
  73.          MOV  A,B            ;設置顯示地址
  74.          ADD  A,#90H         ;設置LCD的第二行地址
  75.          CALL  WCOM          ;寫入命令
  76.          POP  ACC            ;由堆棧取出A
  77.          CALL  WDATA         ;寫入數據
  78.          RET
  79. ;-------------------------------------------------------
  80. SHOW_DIG2:                   ;在 LCD 的第二行顯示數字
  81.           ADD  A,#30H        ;加30H,轉換為ASCII碼
  82.           MOV  B,LCD_X       ;確定顯示位置
  83.           CALL  LCDP2        ;送顯示
  84.           RET

  85. ;===============================================
  86. ;命令寫入子程序
  87. ;RS=L,RW=L,D0-D7=指令碼,E=高脈沖
  88. ;以8位控制方式將命令寫至LCD
  89. ;===============================================
  90. WCOM:    LCALL CHK_BUSY       ;寫入指令
  91.   CLR LCD_RS
  92.   CLR LCD_RW
  93.   MOV LCD_SJ,A
  94.   SETB LCD_EN
  95.   NOP
  96.   NOP
  97.   CLR LCD_EN
  98.   RET
  99. ;===============================================
  100. ;數據寫入子程序
  101. ;RS=H,RW=L,D0-D7=指令碼,E=高脈沖
  102. ;以8位控制方式將數據寫至LCD
  103. ;===============================================
  104. WDATA:    MOV  LCD_SJ,A       ;寫入數據
  105.           SETB  LCD_RS
  106.           CLR  LCD_RW
  107.           SETB  LCD_EN
  108.           CALL  DE
  109.           CLR  LCD_EN
  110.           CALL  DE
  111.           RET
  112. ;===============================================
  113. ;測LCD忙碌子程序
  114. ;RS=0,RW=1,E=H,D0-D7=狀態字
  115. ;===============================================
  116. CHK_BUSY: MOV LCD_SJ,#0FFH   ;測忙碌子程序
  117.    CLR LCD_RS
  118.    SETB LCD_RW
  119.    SETB LCD_EN
  120.    JB LCD_SJ.7,$
  121.    CLR LCD_EN
  122.    RET

  123. ;==========================================================
  124. ;LCD 顯示第一頁菜單
  125. ;==========================================================
  126. MENU_OK1: MOV  DPTR,#M_OK11  ;指針指到顯示信息區
  127.           MOV  A,#1          ;顯示在第一行
  128.           CALL  LCD_PRINT
  129.           MOV  DPTR,#M_OK12  ;指針指到顯示信息區
  130.           MOV  A,#2          ;顯示在第二行
  131.           CALL  LCD_PRINT
  132.           MOV  DPTR,#M_OK13  ;指針指到顯示信息區
  133.           MOV  A,#3          ;顯示在第二行
  134.           CALL  LCD_PRINT
  135.           MOV  DPTR,#M_OK14  ;指針指到顯示信息區
  136.           MOV  A,#4          ;顯示在第二行
  137.           CALL  LCD_PRINT
  138.           RET
  139. M_OK11:   DB"一氧化氮濃度:  ",0
  140. M_OK12:   DB"            PPM",0   ;超過120PPM報警
  141. M_OK13:   DB"油量:         ",0
  142. M_OK14:   DB"            升 ",0

  143. ;==================================================
  144. ;在LCD的顯示字符串
  145. ;DPTR = 放字符串的地址
  146. ;==================================================
  147. LCD_PRINT:CJNE  A,#1,LINE2  ;判斷是否為第一行
  148. LINE1:    MOV  A,#80H       ;設置 LCD 的第一行地址
  149.           CALL  WCOM        ;寫入命令
  150.           CALL  CLR_LINE    ;清除該行字符數據
  151.           MOV  A,#80H       ;設置 LCD 的第一行地址
  152.           CALL  WCOM        ;寫入命令
  153.           JMP  FILL

  154. LINE2:    CJNE  A,#2,LINE3  ;判斷是否為第二行
  155.           MOV  A,#90H       ;設置 LCD 的第二行地址
  156.           CALL  WCOM        ;寫入命令
  157.           CALL  CLR_LINE    ;清除該行字符數據
  158.           MOV  A,#90H       ;設置 LCD 的第二行地址
  159.           CALL  WCOM
  160.           JMP  FILL

  161. LINE3:    CJNE  A,#3,LINE4  ;判斷是否為第三行
  162.           MOV  A,#88H       ;設置 LCD 的第三行地址
  163.           CALL  WCOM        ;寫入命令
  164.           CALL  CLR_LINE    ;清除該行字符數據
  165.           MOV  A,#88H       ;設置 LCD 的第三行地址
  166.           CALL  WCOM
  167.           JMP  FILL

  168. LINE4:    MOV  A,#98H       ;設置 LCD 的第四行地址
  169.           CALL  WCOM        ;寫入命令
  170.           CALL  CLR_LINE    ;清除該行字符數據
  171.           MOV  A,#98H       ;設置 LCD 的第四行地址
  172.           CALL  WCOM

  173. FILL:     CLR  A            ;填入字符
  174.           MOVC  A,@A+DPTR   ;由信息區取出字符
  175.           CJNE  A,#0,LC1    ;判斷是否為結束碼
  176.           RET

  177. LC1:      CALL  WDATA       ;寫入數據
  178.           INC  DPTR         ;指針加1
  179.           JMP  FILL         ;繼續填入字符
  180. ;===============================================
  181. ;清除一行 LCD 的字符
  182. ;輸入一行空格,來替代原顯示字符
  183. ;===============================================
  184. CLR_LINE: MOV  R0,#24       ;清除該行 LCD 的字符
  185. CL1:      MOV  A,#' '
  186.           CALL  WDATA
  187.           DJNZ  R0,CL1
  188.           RET

  189. ;====================================================
  190. ;實時溫度值與設定報警溫度值 TH、TL 比較子程序
  191. ;當實際溫度大于 TH 的設定值時,顯示“過高”并閃動顯示
  192. ;當實際溫度小于 TH 的設定值時,顯示“正常”
  193. ;當實際溫度小于 TL 的設定值時,顯示“過低”
  194. ;====================================================
  195. TEMP_COMP:JNB FLAG2,L101         ;讀取水溫傳感器時用以下程序
  196.           MOV TEMP_TH,#SWGWSD
  197.           MOV TEMP_TL,#SWDWSD    ;設置 LCD 的第一行地址
  198.           SJMP L102
  199. L101:     JNB FLAG3,L104         ;讀取油溫傳感器時用以下程序
  200.           MOV TEMP_TH,#YWGWSD
  201.           MOV TEMP_TL,#YWDWSD

  202. L102:     CLR C
  203.           MOV  A,TEMP_ZH
  204.           CJNE  A,TEMP_TH,T_COMP0;實時溫度與設定報警溫度比較,運行后當A<TEMP_TH則C=1
  205. T_COMP0:  JNC   CHULI1          ;檢查溫度是否過高
  206.           MOV  A,TEMP_ZH
  207.           SUBB  A,TEMP_TL       ;檢查溫度是否過低,減數>被減數,則
  208.           JC  CHULI2            ;借位標志位C=1,轉

  209.           MOV  DPTR,#BJ50       ;顯示"正常"
  210.           CALL  TEMP_BJ3
  211. L106:     JNB FLAG2,L103        ;讀取水溫傳感器時用以下程序
  212.           CLR  FLAH1            ;清除水溫報警標志
  213.           SJMP L104
  214. L103:     JNB FLAG3,L104        ;讀取油溫傳感器時用以下程序
  215.           CLR  FLAH2            ;清除油溫報警標志
  216. L104:     RET

  217. CHULI1:   MOV  DPTR,#BJ60       ;顯示形成閃爍效果
  218.           CALL  TEMP_BJ3
  219.           MOV  R5,#10           ;延時10MS
  220.           LCALL DELAY1
  221.           MOV  DPTR,#BJ30       ;顯示"過高"
  222.           CALL  TEMP_BJ3
  223.           JNB FLAG2,L105
  224.           SETB  FLAH1           ;設置水溫報警標志
  225.           SJMP L104
  226. L105:     JNB FLAG3,L104
  227.           SETB  FLAH2           ;設置油溫報警標志
  228.           SJMP L104

  229. CHULI2:   MOV  DPTR,#BJ40       ;顯示"過低"
  230.           CALL TEMP_BJ3
  231.           SJMP L106
  232. ;=========================================
  233. ;標記字符寫入子程序
  234. ;=========================================
  235. TEMP_BJ3: JNB FLAG2,L001       ;讀取水溫傳感器時用以下程序
  236.           MOV  A,#86H          ;設置 LCD 的第一行地址
  237.           SJMP L002
  238. L001:     JNB FLAG3,L004       ;讀取油溫傳感器時用以下程序
  239.           MOV  A,#8EH          ;設置 LCD 的第三行地址
  240. L002:     CALL  WCOM           ;寫入指令
  241. L003:     CLR  A               ;填入字符
  242.           MOVC  A,@A+DPTR      ;由信息區取出字符
  243.           CJNE  A,#0,L005      ;判斷是否為結束碼
  244. L004:     RET

  245. L005:     CALL  WDATA          ;寫入數據
  246.           INC  DPTR            ;指針加1
  247.           JMP  L003            ;繼續填入字符

  248. BJ30:     DB  "濃度超標請注意!",0 ;溫度過高顯示內容
  249. BJ40:     DB  "               ",0 ;溫度正常顯示內容
  250. BJ50:     DB  "低油位,請加油!",0 ;溫度過低顯示內容
  251. BJ60:     DB  "               ",0 ;清除以上標記
  252. ;**********************************************************
  253. ;延時子程序
  254. ;**********************************************************
  255. DE:      MOV  R7,#229        ;延時 500 微秒,此條2個機器周期
  256.          DJNZ  R7,$
  257.          RET    ;此條2個機器周期,總延時(229*2+2+2)*(12/11.0592)≈500uS

  258.          END
復制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线小视频 | 久久精品日产第一区二区三区 | 日韩精品一区二区三区在线观看 | 国产www成人| 亚洲国产精品久久久 | 综合一区二区三区 | 天天干成人网 | 午夜精品久久久久久久星辰影院 | 又黄又爽的网站 | 99pao成人国产永久免费视频 | 国产伦精品一区二区三区高清 | 国产精品乱码一区二三区小蝌蚪 | 国产精品久久久久久 | 国产1页 | 欧美一区二区二区 | 日韩高清一区 | 在线国产小视频 | 美女视频三区 | 亚洲精品在线看 | 国产精品激情 | 综合一区二区三区 | 亚洲成av人片在线观看 | 青青草av在线播放 | 91精品国产综合久久久动漫日韩 | 国产精品69毛片高清亚洲 | 99精品电影 | 欧美日日日日bbbbb视频 | 99热热 | 国产探花在线精品一区二区 | 日日夜夜精品 | 日韩欧美在线不卡 | 91精品在线播放 | 日韩一区二区视频 | 国产欧美在线 | 国产第一页在线观看 | 欧美a在线观看 | 国产免费一区 | 91精品国产高清一区二区三区 | 黄色国产大片 | 黄网址在线观看 | 久久99久久|