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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 8977|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的DS18B20溫度+LCD顯示匯編語言源程序與仿真

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
基于51單片機(jī)的DS18B20溫度+LCD顯示(匯編編寫)


單片機(jī)源程序如下:
  1.                   TEMP_ZH   DATA  24H     ;實(shí)時(shí)溫度值存放單元
  2.           TEMPL     DATA  25H     ;
  3.           TEMPH     DATA  26H     ;
  4.           TEMP_TH   DATA  27H     ;高溫報(bào)警值存放單元
  5.           TEMP_TL   DATA  28H     ;低溫報(bào)警值存放單元
  6.           TEMPHC    DATA  29H     ;
  7.           TEMPLC    DATA  2AH

  8.           K1     EQU  P1.4
  9.           K2     EQU  P1.5
  10.           K3     EQU  P1.6
  11.           K4     EQU  P1.7

  12.           BEEP      EQU  P3.7
  13.           RELAY     EQU  P1.3
  14.           LCD_X     EQU  2FH      ;LCD 地址變量
  15.           LCD_RS    EQU  P2.0
  16.           LCD_RW    EQU  P2.1
  17.           LCD_EN    EQU  P2.2
  18.           flag1     equ  20H.0    ;DS18B20是否存在標(biāo)記
  19.           KEY_UD    EQU  20H.1    ;設(shè)定 KEY 的UP與DOWN 標(biāo)記
  20.           date_line equ p3.3
  21. ;=====================================================
  22.            ORG  0000H
  23.            JMP  MAIN

  24.                   
  25.                   ORG  0030H
  26. MAIN:     MOV  SP,#60H
  27.           MOV  A,#00H
  28.           MOV  R0,#20H       ;將 20H-2FH 單元清零
  29.           MOV  R1,#10H
  30. CLEAR:    MOV  @R0,A
  31.           INC  R0
  32.           DJNZ  R1,CLEAR

  33.           CALL  SET_LCD
  34.           CALL  RE_18B20

  35. start:    CALL  RESET          ;18B20復(fù)位子程序
  36.           JNB   FLAG1,START1   ;DS1820不存在
  37.           CALL  MENU_OK
  38.           CALL  READ_E2
  39.           CALL  TEMP_BJ        ;顯示溫度標(biāo)記
  40.           JMP   START2
  41. START1:   CALL  MENU_ERROR
  42.           CALL  TEMP_BJ        ;顯示溫度標(biāo)記
  43.           JMP  $

  44. START2:
  45.           CALL  RESET
  46.           JNB  FLAG1,START1    ;DS1820不存在
  47.           MOV   A,#0CCH        ; 跳過ROM匹配
  48.           CALL  WRITE
  49.           MOV   A,#44H         ; 發(fā)出溫度轉(zhuǎn)換命令
  50.           CALL  WRITE
  51.           CALL  RESET
  52.           MOV   A,#0CCH        ; 跳過ROM匹配
  53.           CALL  WRITE
  54.           MOV   A,#0BEH        ; 發(fā)出讀溫度命令
  55.           CALL  WRITE
  56.           CALL  READ
  57.           call CONVTEMP
  58.           Call DISPBCD
  59.           CALL CONV
  60.           CALL TEMP_COMP
  61.           CALL  PROC_KEY       ; 鍵掃描

  62.    SJMP START2
  63. ;-----------------------------------------------------
  64. PROC_KEY:
  65.   JB  K1,PROC_K1    ; 按鍵K1處理
  66.          CALL  BEEP_BL
  67.          JNB  K1,$
  68.          MOV  DPTR,#M_ALAX1
  69.          MOV  A,#1
  70.          CALL  LCD_PRINT
  71.          CALL  LOOK_ALARM
  72.          JB  K3,$
  73.          CALL  BEEP_BL
  74.          JMP  PROC_K2
  75. PROC_K1:     ; 按鍵K2處理
  76.          JB  K2,PROC_END
  77.          CALL  BEEP_BL
  78.          JNB  K2,$
  79.          MOV   DPTR,#RESET_A1
  80.          MOV   A,#1
  81.          CALL  LCD_PRINT
  82.          CALL  SET_ALARM
  83.          CALL  RE_18B20           ;將設(shè)定的TH,TL值寫入DS18B20內(nèi)
  84.          CALL  WRITE_E2
  85. PROC_K2:
  86.          CALL  MENU_OK
  87.          CALL  TEMP_BJ
  88. PROC_END:
  89.          RET
  90. ;============================================
  91. ;設(shè)定報(bào)警值 TH、TL
  92. ;============================================
  93. SET_ALARM:
  94.          ;CALL  RESET_ALARM
  95.          CALL  LOOK_ALARM
  96. AS0:
  97.          JB   K1,AS00
  98.          CALL  BEEP_BL
  99.          JNB  K1,$
  100.          CPL  20H.1            ;UP/DOWN 標(biāo)記
  101. AS00:    JB  20H.1,ASZ01       ;20H.1=1,UP
  102.          JMP  ASJ01            ;20H.1=0,DOWN

  103. ASZ01:   JB  K2,ASZ02          ;TH值調(diào)整(增加)
  104.          CALL  BEEP_BL
  105.          INC  TEMP_TH
  106.          MOV  A,TEMP_TH
  107.          CJNE  A,#120,ASZ011
  108.          MOV  TEMP_TH,#0
  109. ASZ011:  CALL  LOOK_ALARM
  110.          MOV  R5,#10
  111.          CALL  DELAY
  112.          JMP  ASZ01

  113. ASZ02:   JB  K3,ASZ03          ;TL值調(diào)整(增加)
  114.          CALL  BEEP_BL
  115.          INC  TEMP_TL
  116.          MOV  A,TEMP_TL
  117.          CJNE  A,#99,ASZ021
  118.          MOV  TEMP_TL,#00H
  119. ASZ021:  CALL  LOOK_ALARM    ;
  120.          MOV  R5,#10
  121.          CALL  DELAY
  122.          JMP  ASZ02
  123. ASZ03:   JB  K4,AS0          ;確定調(diào)整 OK
  124.          CALL  BEEP_BL
  125.          JNB  K4,$
  126.          RET

  127. ASJ01:
  128.          JB  K2,ASJ02          ;TH值調(diào)整 (減少)
  129.          CALL  BEEP_BL
  130.          DEC   TEMP_TH
  131.          MOV  A,TEMP_TH
  132.          CJNE  A,#0FFH,ASJ011
  133.          JMP  ASJ022
  134. ASJ011:  CALL  LOOK_ALARM
  135.          MOV  R5,#10
  136.          CALL  DELAY
  137.          JMP  AS0

  138. ASJ02:   JB  K3,ASJ03         ;TL值調(diào)整(減少)
  139.          CALL  BEEP_BL
  140.          DEC  TEMP_TL
  141.          MOV  A,TEMP_TL
  142.          CJNE  A,#0FFH,ASJ021
  143.          JMP  ASJ022
  144. ASJ021:  CALL  LOOK_ALARM    ;
  145.          MOV  R5,#10
  146.          CALL  DELAY
  147.          JMP  AS0
  148. ASJ022:  CPL  20H.1
  149.          JMP  ASZ01
  150. ASJ03:   JMP  ASZ03
  151.          RET


  152. RESET_ALARM:
  153.           MOV  DPTR,#RESET_A1  ;指針指到顯示信息區(qū)
  154.           MOV  A,#1            ;顯示在第一行
  155.           CALL  LCD_PRINT
  156.           RET
  157. RESET_A1:
  158.      DB  "RESET ALERT CODE"
  159. ;====================================================
  160. ;實(shí)際溫度值與標(biāo)記溫度值比較子程序
  161. ;====================================================
  162. TEMP_COMP:
  163.           MOV  A,TEMP_TH      
  164.           SUBB  A,TEMP_ZH       ;減數(shù)>被減數(shù),則
  165.           JC  CHULI1            ;借位標(biāo)志位C=1,轉(zhuǎn)
  166.           MOV  A,TEMP_ZH
  167.           SUBB  A,TEMP_TL       ;減數(shù)>被減數(shù),則
  168.           JC  CHULI2            ;借位標(biāo)志位C=1,轉(zhuǎn)
  169.           MOV  DPTR,#BJ5
  170.           CALL  TEMP_BJ3
  171.           CLR   RELAY           ;繼電器吸合
  172.           RET
  173. CHULI1:
  174.           MOV  DPTR,#BJ3
  175.           CALL  TEMP_BJ3
  176.           SETB  RELAY           ;繼電器關(guān)閉
  177.           CALL  BEEP_BL
  178.           RET
  179. CHULI2:
  180.           MOV  DPTR,#BJ4
  181.           CALL  TEMP_BJ3
  182.           CALL  BEEP_BL
  183.           RET
  184. ;-----------------------------------------
  185. TEMP_BJ3:
  186.           MOV  A,#0CEH
  187.           CALL WCOM
  188.           MOV  R1,#0
  189.           MOV  R0,#2

  190. BBJJ3:    MOV  A,R1
  191.           MOVC A,@A+DPTR
  192.           CALL  WDATA
  193.           INC R1
  194.           DJNZ  R0,BBJJ3
  195.           RET
  196. BJ3:
  197.       DB  ">H"
  198. BJ4:
  199.       DB  "<L"
  200. BJ5:
  201.       DB  " !"
  202. ;==================================================
  203. ;顯示溫度標(biāo)記子程序
  204. ;==================================================
  205. TEMP_BJ:
  206.           MOV  A,#0CBH
  207.           CALL WCOM
  208.           MOV  DPTR,#BJ1  ;指針指到顯示消息
  209.           MOV  R1,#0
  210.           MOV  R0,#2

  211. BBJJ1:    MOV  A,R1
  212.           MOVC A,@A+DPTR
  213.           CALL  WDATA
  214.           INC R1
  215.           DJNZ  R0,BBJJ1
  216.           RET
  217. BJ1:
  218.       DB  00H,"C"
  219. ;=================================================
  220. MENU_OK:

  221.           MOV  DPTR,#M_OK1  ;指針指到顯示消息
  222.           MOV  A,#1          ;顯示在第一行
  223.           CALL  LCD_PRINT
  224.           MOV  DPTR,#M_OK2  ;指針指到顯示消息
  225.           MOV  A,#2          ;顯示在第一行
  226.           CALL  LCD_PRINT

  227.           RET
  228. M_OK1:
  229.     DB   "   DS18B20 OK   ",0
  230. M_OK2:
  231.     DB   " TEMP:          ",0
  232. ;-----------------------------------------------
  233. MENU_ERROR:
  234.           MOV  DPTR,#M_ERROR1  ;指針指到顯示消息1
  235.           MOV  A,#1          ;顯示在第一行
  236.           CALL  LCD_PRINT
  237.           MOV  DPTR,#M_ERROR2  ;指針指到顯示消息1
  238.           MOV  A,#2          ;顯示在第一行
  239.           CALL  LCD_PRINT
  240.           RET
  241. M_ERROR1:
  242.     DB   " DS18B20 ERROR  ",0
  243. M_ERROR2:
  244.     DB   " TEMP: ----     ",0
  245. ;====================================================
  246. reset:  setb date_line
  247.         nop
  248.         clr date_line
  249.         mov r0,#6bh         ;主機(jī)發(fā)出延時(shí)復(fù)位低脈沖
  250.         mov r1,#04h
  251. tsr1:   djnz r0,$
  252.         mov r0,#6bh
  253.         djnz r1,tsr1
  254.         setb date_line        ;然后拉高數(shù)據(jù)線
  255.         nop
  256.         nop
  257.         nop
  258.         mov r0,#32h
  259. tsr2:   jnb date_line,tsr3   ;等待DS18B20回應(yīng)
  260.         djnz r0,tsr2
  261.         jmp tsr4             ; 延時(shí)
  262. tsr3:   setb flag1           ; 置標(biāo)志位,表示DS1820存在
  263.         jmp tsr5
  264. tsr4:   clr flag1            ; 清標(biāo)志位,表示DS1820不存在
  265.         jmp tsr7
  266. tsr5:   mov r0,#06bh
  267. tsr6:   djnz r0,[        DISCUZ_CODE_1        ]nbsp;           ; 時(shí)序要求延時(shí)一段時(shí)間
  268. tsr7:   setb date_line
  269.         ret
  270. ;=======================================================
  271. RE_18B20:
  272.         JB  FLAG1,RE_18B20A
  273.         RET
  274. RE_18B20A:
  275.         CALL  RESET
  276.         MOV  A,#0CCH       ;跳過ROM匹配
  277.         LCALL  WRITE
  278.         MOV  A,#4EH        ;寫暫存寄存器
  279.         LCALL  WRITE
  280.         MOV  A,TEMP_TH     ;TH(報(bào)警上限)
  281.         LCALL  WRITE
  282.         MOV  A,TEMP_TL     ;TL(報(bào)警下限)
  283.         LCALL  WRITE
  284.         MOV  A,#7FH        ;12位精確度
  285.         LCALL  WRITE
  286.         RET
  287. ;------------------------------------------------------------
  288. WRITE_E2:
  289.         CALL  RESET
  290.         MOV  A,#0CCH        ;跳過ROM匹配
  291.         LCALL  WRITE
  292.         MOV  A,#48H         ;把暫存器里的溫度報(bào)警值拷貝到EEROM
  293.         LCALL  WRITE
  294.         RET
  295. ;--------------------------------------------------------------
  296. READ_E2:
  297.         CALL  RESET
  298.         MOV  A,#0CCH        ;跳過ROM匹配
  299.         LCALL  WRITE
  300.         MOV  A,#0B8H        ;把EEROM里的溫度報(bào)警值拷貝回暫存器
  301.         CALL  WRITE
  302.         RET
  303. ;--------------------------------------------------------------
  304. ;將自定義字符寫入LCD1602的CGRAM中
  305. ;--------------------------------------------------------------
  306. STORE_DATA:
  307.         MOV  A,#40H
  308.         CALL  WCOM
  309.         MOV  R2,#08H
  310.         MOV  DPTR,#D_DATA
  311.         MOV  R3,#00H
  312. S_DATA:
  313.         MOV  A,R3
  314.         MOVC  A,@A+DPTR
  315.         CALL  WDATA      ;寫入數(shù)據(jù)
  316.         INC  R3
  317.         DJNZ  R2,S_DATA
  318.         RET

  319. D_DATA:
  320.     DB  0CH,12H,12H,0CH,00H,00H,00H,00H
  321. ;==============================================================
  322. write:  mov r2,#8            ;一共8位數(shù)據(jù)
  323.         CLR  C
  324. wr1:
  325.         clr date_line        ;開始寫入DS18B20總線要處于復(fù)位(低)狀態(tài)
  326.         mov r3,#07
  327.         djnz r3,[        DISCUZ_CODE_1        ]nbsp;           ;總線復(fù)位保持16微妙以上
  328.         rrc a                ;把一個(gè)字節(jié)DATA 分成8個(gè)BIT環(huán)移給C
  329.         mov date_line,c      ;寫入一個(gè)BIT
  330.         mov r3,#3CH
  331.         djnz r3,[        DISCUZ_CODE_1        ]nbsp;           ;等待100微妙
  332.         setb date_line       ;重新釋放總線
  333.         nop
  334.         djnz r2,wr1          ;寫入下一個(gè)BIT
  335.         setb date_line
  336.         ret
  337. ;--------------------------------------------------------------------
  338. read:    mov r4,#4          ; 將溫度低位、高位、TH、TL從DS18B20中讀出
  339.          mov r1,#TEMPL        ; 存入25H、26H、27H、28H
  340. re00:    mov r2,#8
  341. re01:    clr cy
  342.          setb date_line
  343.          nop
  344.          nop
  345.          clr date_line        ;讀前總線保持為低
  346.          nop
  347.          nop
  348.          nop
  349.          setb date_line       ;開始讀總線釋放
  350.          mov r3,#09           ;延時(shí)18微妙
  351.          djnz r3,$
  352.          mov c,date_line      ;從DS18B20總線讀得一個(gè)BIT
  353.          mov r3,#3CH
  354.          djnz r3,[        DISCUZ_CODE_1        ]nbsp;           ;等待100微妙
  355.          rrc a                ;把讀得的位值環(huán)移給A
  356.          djnz r2,re01         ;讀下一個(gè)BIT
  357.          mov @r1,a
  358.          inc r1
  359.          djnz r4,re00
  360.          ret


  361. ;*****************************************************
  362. ;  處理溫度 BCD 碼子程序
  363. ;****************************************************
  364. CONVTEMP:      MOV  A,TEMPH       ;判溫度是否零下
  365.                ANL  A,#80H
  366.                JZ  TEMPC1         ;溫度零上轉(zhuǎn)
  367.                CLR  C
  368.                MOV  A,TEMPL       ;二進(jìn)制數(shù)求補(bǔ)(雙字節(jié))
  369.                CPL  A             ;取反加1
  370.                ADD  A,#01H
  371.                MOV  TEMPL,A
  372.                MOV  A,TEMPH
  373.                CPL  A
  374.                ADDC  A,#00H
  375.                MOV  TEMPH,A
  376.                SJMP  TEMPC11

  377. TEMPC1:        MOV  TEMPHC,#0AH     ;+
  378. TEMPC11:       MOV  A,TEMPHC
  379.                SWAP  A
  380.                MOV  TEMPHC,A
  381.                MOV  A,TEMPL
  382.                ANL  A,#0FH              ;乘0.0625
  383.                MOV  DPTR,#TEMPDOTTAB
  384.                MOVC  A,@A+DPTR
  385.                MOV  TEMPLC,A            ;TEMPLC LOW=小數(shù)部分 BCD

  386.                MOV  A,TEMPL             ;整數(shù)部分
  387.                ANL  A,#0F0H             ;取出高四位
  388.                SWAP  A
  389.                MOV  TEMPL,A
  390.                MOV  A,TEMPH             ;取出低四位
  391.                ANL  A,#0FH
  392.                SWAP  A
  393.                ORL  A,TEMPL             ;重新組合
  394.                MOV  TEMP_ZH,A
  395.                LCALL  HEX2BCD1
  396.                MOV  TEMPL,A
  397.                ANL  A,#0F0H
  398.                SWAP  A
  399.                ORL  A,TEMPHC            ;TEMPHC LOW = 十位數(shù) BCD
  400.                MOV  TEMPHC,A
  401.                MOV  A,TEMPL
  402.                ANL  A,#0FH
  403.                SWAP  A                  ;TEMPLC HI = 個(gè)位數(shù) BCD
  404.                ORL  A,TEMPLC
  405.                MOV  TEMPLC,A
  406.                MOV  A,R4
  407.                JZ  TEMPC12
  408.                ANL  A,#0FH
  409.                SWAP  A
  410.                MOV  R4,A
  411.                MOV  A,TEMPHC            ;TEMPHC HI = 百位數(shù) BCD
  412.                ANL  A,#0FH
  413.                ORL  A,R4
  414.                MOV  TEMPHC,A
  415. TEMPC12:       RET
  416. ;---------------------------------------------------------------
  417. HEX2BCD1:
  418.               MOV  B,#064H          ;十六進(jìn)制-> BCD
  419.               DIV  AB               ;B= A % 100
  420.               MOV  R4,A             ;R7 = 百位數(shù)
  421.               MOV  A,#0AH
  422.               XCH  A,B
  423.               DIV  AB               ;B = A % B
  424.               SWAP  A
  425.               ORL  A,B
  426.               RET
  427. ;-------------------------------------------------------------
  428. ;  小數(shù)部分碼表
  429. ;-------------------------------------------------------------
  430. TEMPDOTTAB:
  431.          DB   00H,00H,01H,01H,02H,03H,03H,04H
  432.          DB   05H,05H,06H,06H,07H,08H,08H,09H
  433. ;=====================================================
  434. LOOK_ALARM:

  435.           MOV  DPTR,#M_ALAX2   ;指針指到顯示信息區(qū)
  436.           MOV  A,#2            ;顯示在第二行
  437.           CALL  LCD_PRINT

  438.           MOV  A,#0C6H
  439.           CALL  TEMP_BJ1
  440.           MOV  A,TEMP_TH       ;加載TH數(shù)據(jù)
  441.           MOV  LCD_X,#3        ;設(shè)置位置
  442.           CALL  SHOW_DIG2H     ;顯示數(shù)據(jù)

  443.           MOV  A,#0CEH
  444.           CALL  TEMP_BJ1
  445.           MOV  A,TEMP_TL       ;加載TL數(shù)據(jù)
  446.           MOV  LCD_X,#12       ;設(shè)置位置
  447.           CALL  SHOW_DIG2L     ;顯示數(shù)據(jù)
  448.           RET
  449. ;--------------------------------------------
  450. M_ALAX1:
  451.      DB   " LOOK ALERT CODE",0
  452. M_ALAX2:
  453.      DB   "TH:      TL:    ",0
  454. ;--------------------------------------------
  455. TEMP_BJ1:
  456.           CALL WCOM
  457.           MOV  DPTR,#BJ2      ;指針指到顯示信息區(qū)
  458.           MOV  R1,#0
  459.           MOV  R0,#2

  460. BBJJ2:    MOV  A,R1
  461.           MOVC A,@A+DPTR
  462.           CALL  WDATA
  463.           INC R1
  464.           DJNZ  R0,BBJJ2
  465.           RET
  466. BJ2:
  467.       DB  00H,"C"

  468. ;---------------------------------------------------
  469. SHOW_DIG2H:                ;在 LCD 的第二行顯示數(shù)字
  470.           MOV  B,#100
  471.           DIV  AB
  472.           ADD  A,#30H
  473.           PUSH  B
  474.           MOV  B,LCD_X
  475.           CALL  LCDP2
  476.           POP  B
  477.           MOV  A,#0AH
  478.           XCH  A,B
  479.           DIV  AB
  480.           ADD  A,#30H
  481.           INC  LCD_X
  482.           PUSH  B
  483.           MOV  B,LCD_X
  484.           CALL  LCDP2
  485.           POP  B
  486.           INC  LCD_X
  487.           MOV  A,B
  488.           MOV  B,LCD_X
  489.           ADD  A,#30H
  490.           CALL  LCDP2
  491.           RET

  492. SHOW_DIG2L:                ;在 LCD 的第二行顯示數(shù)字
  493.           MOV  B,#100
  494.           DIV  AB
  495.           MOV  A,#0AH
  496.           XCH  A,B
  497.           DIV  AB
  498.           ADD  A,#30H
  499.           PUSH  B
  500.           MOV  B,LCD_X
  501.           CALL  LCDP2
  502.           POP  B
  503.           INC  LCD_X
  504.           MOV  A,B
  505.           MOV  B,LCD_X
  506.           ADD  A,#30H
  507.           CALL  LCDP2
  508.           RET
  509. ;-------------------------------------------------------------
  510. ;顯示區(qū) BCD 碼溫度值刷新子程序
  511. ;-------------------------------------------------------------
  512. DISPBCD:
  513.               MOV  A,TEMPLC
  514.               ANL  A,#0FH
  515.               MOV  70H,A                 ;小數(shù)位
  516.               MOV  A,TEMPLC
  517.               SWAP  A
  518.               ANL  A,#0FH
  519.               MOV  71H,A                 ;個(gè)位
  520.               MOV  A,TEMPHC
  521.               ANL  A,#0FH
  522.               MOV  72H,A                 ;十位
  523.               MOV  A,TEMPHC
  524.               SWAP  A
  525.               ANL  A,#0FH
  526.               MOV  73H,A                 ;百位
  527.               MOV  A,TEMPHC
  528.               ANL  A,#0F0H
  529.               CJNE  A,#010H,DISPBCD0
  530.               SJMP  DISPBCD2

  531. DISPBCD0:     MOV  A,TEMPHC
  532.               ANL  A,#0FH
  533.               JNZ  DISPBCD2               ;十位數(shù)是0
  534.               MOV  A,TEMPHC
  535.               SWAP  A
  536.               ANL  A,#0FH
  537.               MOV  73H,#0AH               ;符號(hào)位不顯示
  538.               MOV  72H,A                  ;十位數(shù)顯示符號(hào)
  539. DISPBCD2:     RET

  540. ;==========================================================
  541. ; LCD 1602 顯示子程序
  542. ;==========================================================
  543. CONV:
  544.           MOV  A,73H         ;加載百位數(shù)據(jù)
  545.           MOV  LCD_X,#6      ;設(shè)置位置
  546.           CJNE A,#1,CONV1
  547.           JMP  CONV2
  548. CONV1:    MOV  A,#" "
  549.           MOV  B,LCD_X
  550.           CALL  LCDP2
  551.           JMP  CONV3
  552. CONV2:    CALL  SHOW_DIG2    ;顯示數(shù)據(jù)
  553. CONV3:    INC  LCD_X             ;
  554.           mov  a,72h         ;十位
  555.           CALL  SHOW_DIG2
  556.           inc  LCD_X
  557.           mov  a,71h         ;個(gè)位
  558.           CALL  SHOW_DIG2
  559.           inc  LCD_X
  560.           MOV  A,#'.'
  561.           MOV  B,LCD_X
  562.           CALL  LCDP2
  563.           MOV  A,70h         ;加載小數(shù)點(diǎn)位
  564.           INC  LCD_X         ;設(shè)置位置
  565.           CALL  SHOW_DIG2    ;顯示數(shù)據(jù)
  566.           RET
  567. ;-------------------------------------------------------
  568. SHOW_DIG2:                 ;在 LCD 的第二行顯示數(shù)字
  569.           ADD  A,#30H
  570.           MOV  B,LCD_X
  571.           CALL  LCDP2
  572.           RET
  573. ;---------------------------------------------------------
  574. LCDP2:                    ;在LCD的第二行顯示字符
  575.          PUSH  ACC        ;
  576.          MOV  A,B         ;設(shè)置顯示地址
  577.          ADD  A,#0C0H     ;設(shè)置LCD的第二行地址
  578.          CALL  WCOM       ;寫入命令
  579.          POP  ACC         ;由堆棧取出A
  580.          CALL  WDATA      ;寫入數(shù)據(jù)
  581.          RET
  582. ;---------------------------------------------------------


  583. SET_LCD:                     ;對(duì) LCD 做初始化設(shè)置及測(cè)試
  584.           CLR  LCD_EN
  585.           CALL  INIT_LCD     ;初始化 LCD
  586.           CALL  STORE_DATA   ;將自定義字符存入LCD的CGRAM
  587.           RET
  588. INIT_LCD:                  ;8位I/O控制 LCD 接口初始化
  589.           MOV  A,#38H        ;雙列顯示,字形5*7點(diǎn)陣
  590.           CALL  WCOM
  591.           call  delay1
  592.           MOV  A,#38H
  593.           CALL  WCOM
  594.           call  delay1

  595.           MOV  A,#38H
  596.           CALL  WCOM
  597.           call  delay1
  598.           MOV  A,#0CH        ;開顯示,顯示光標(biāo),光標(biāo)不閃爍
  599.           CALL  WCOM
  600.           call  delay1
  601.           MOV  A,#01H        ;清除 LCD 顯示屏
  602.           CALL  WCOM
  603.           call  delay1
  604.           RET
  605. ;==================================================
  606. CLR_LINE1:                   ;清除LCD的第一行字符
  607.           MOV  A,#80H        ;設(shè)置 LCD 的第一行地址
  608.           CALL  WCOM         ;
  609.           MOV  R0,#24        ;設(shè)置計(jì)數(shù)值
  610.     C1:   MOV  A,#' '        ;載入空格符至LCD
  611.           CALL  WDATA        ;輸出字符至LCD
  612.           DJNZ  R0,C1        ;計(jì)數(shù)結(jié)束
  613.           RET
  614. ;==================================================
  615. LCD_PRINT:       ;在LCD的第一行或第二行顯示字符

  616.           CJNE  A,#1,LINE2  ;判斷是否為第一行
  617.   LINE1:  MOV  A,#80H       ;設(shè)置 LCD 的第一行地址
  618.           CALL  WCOM        ;寫入命令
  619.           CALL  CLR_LINE    ;清除該行字符數(shù)據(jù)
  620.           MOV  A,#80H       ;設(shè)置 LCD 的第一行地址
  621.           CALL  WCOM        ;寫入命令
  622.           JMP  FILL

  623.   LINE2:  MOV  A,#0C0H      ;設(shè)置 LCD 的第二行地址
  624.           CALL  WCOM        ;寫入命令
  625.           CALL  CLR_LINE    ;清除該行字符數(shù)據(jù)
  626.           MOV  A,#0C0H      ;設(shè)置 LCD 的第二行地址
  627.           CALL  WCOM
  628.   FILL:   CLR  A            ;填入字符
  629.           MOVC  A,@A+DPTR   ;由消息區(qū)取出字符
  630.           CJNE  A,#0,LC1    ;判斷是否為結(jié)束碼
  631. ……………………

  632. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
單片機(jī)DS18B20.rar (79.88 KB, 下載次數(shù): 148)





評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:278194 發(fā)表于 2018-11-27 17:23 | 只看該作者
想問一下 你的硬件仿真感覺少好多東西?
回復(fù)

使用道具 舉報(bào)

板凳
ID:681943 發(fā)表于 2020-1-6 10:13 | 只看該作者
硬件仿真少了一些電路?
回復(fù)

使用道具 舉報(bào)

地板
ID:783871 發(fā)表于 2020-6-28 13:01 | 只看該作者
程序調(diào)試的好多未定義啊,怎么解決啊?
回復(fù)

使用道具 舉報(bào)

5#
ID:61140 發(fā)表于 2022-4-4 19:22 | 只看該作者
可以仿真成功,但硬件實(shí)測(cè)第一行顯示白塊,第二行不顯示
回復(fù)

使用道具 舉報(bào)

6#
ID:1032085 發(fā)表于 2022-6-4 13:20 | 只看該作者
這個(gè)怎么設(shè)置讓他顯示負(fù)數(shù)啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产 日韩 欧美 制服 另类 | 国产免费xxx | 韩日av在线 | 久久成人一区 | 男女网站在线观看 | 精品一区国产 | 亚洲精久| 午夜欧美一区二区三区在线播放 | 国产91在线 | 中日 | 成人久久久 | 国产1区2区3区 | 一区视频| 91欧美激情一区二区三区成人 | 一级免费毛片 | 亚洲高清视频一区二区 | 中文字幕第一页在线 | av在线免费观看网站 | 日韩在线视频一区 | 国产精品五月天 | 国产探花在线精品一区二区 | 亚洲天堂影院 | 99久久精品免费看国产高清 | 欧美日韩一区二区在线 | 免费在线观看h片 | av一级毛片 | 国产视频久久久 | 超碰成人免费 | 午夜激情免费 | 黄免费看 | 特黄级国产片 | 天堂男人av | 日日骚av| 国产精品久久午夜夜伦鲁鲁 | a看片| 九九久久精品视频 | 在线色网 | 日本精品一区二区三区在线观看视频 | 欧美日韩国产三级 | 国产999精品久久久 精品三级在线观看 | 成人在线不卡 | 91精品国产高清一区二区三区 |