找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于18b20溫度帶上限程序-LCD1602液晶顯示篇

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:105323 發(fā)表于 2016-2-22 01:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
下圖為圖片:具體說明看前一篇的,這是用1602來顯示的,程序是修改前面幾個實驗的,當(dāng)溫度<40度時電風(fēng)扇不轉(zhuǎn),當(dāng)>=40度時電風(fēng)扇轉(zhuǎn)動.下面實驗做的截圖,為參加電子比賽做的單片機系統(tǒng)實驗.












全部程序:
  1. ORG 0000H
  2. ;單片機內(nèi)存分配申明!
  3. TEMPER_L EQU 29H;用于保存讀出溫度的低8位
  4. TEMPER_H EQU 28H;用于保存讀出溫度的高8位
  5. FLAG1       EQU 38H;是否檢測到DS18B20標(biāo)志位
  6. a_bit       equ 20h ;數(shù)碼管個位數(shù)存放內(nèi)存位置
  7. b_bit       equ 21h ;數(shù)碼管十位數(shù)存放內(nèi)存位置
  8. RS EQU P3.7;確定具體硬件的連接方式
  9. RW EQU P3.6 ;確定具體硬件的連接方式
  10. E EQU P3.5 ;確定具體硬件的連接方式
  11. ;主程序
  12. MAIN:
  13.           LCALL GET_TEMPER;調(diào)用讀溫度子程序
  14.           MOV A,29H
  15.           MOV C,40H;將28H中的最低位移入C
  16.           RRC A
  17.           MOV C,41H
  18.           RRC A
  19.           MOV C,42H
  20.           RRC A
  21.           MOV C,43H
  22.           RRC A
  23.           MOV 29H,A
  24.           clr c
  25.           setb p3.0;zhelikais從這里開始是我填加的溫度控制
  26.           CJNE A,#28H,FIT
  27.           SETB P3.0
  28.           AJMP DISLED
  29.       FIT:CPL C
  30.           MOV P3.0,C;jiesu到這里結(jié)束
  31. DISLED:LCALL DISPLAY;調(diào)用數(shù)碼管顯示子程序
  32.           AJMP MAIN
  33. ;DS18B20復(fù)位初始化子程序
  34. INIT_1820:SETB P2.2
  35.              NOP
  36.              CLR P2.2;主機發(fā)出延時537微秒的復(fù)位低脈沖
  37.              MOV R1,#3
  38.         TSR1:MOV R0,#107
  39.              DJNZ R0,$
  40.              DJNZ R1,TSR1
  41.              SETB P2.2;然后拉高數(shù)據(jù)線
  42.              NOP
  43.              NOP
  44.              NOP
  45.              MOV R0,#25H
  46.         TSR2:JNB P2.2,TSR3;等待DS18B20回應(yīng)
  47.              DJNZ R0,TSR2
  48.              LJMP TSR4 ; 延時
  49.         TSR3:SETB FLAG1 ; 置標(biāo)志位,表示DS1820存在
  50.              CLR P1.7;檢查到DS18B20就點亮P1.7LED,與傳感器通信成功
  51.              LJMP TSR5
  52.         TSR4:CLR FLAG1 ; 清標(biāo)志位,表示DS1820不存在
  53.              CLR P1.1;未檢查到DS18B20就點亮P1.1LED,與傳感器通信失敗
  54.              LJMP TSR7
  55.         TSR5:MOV R0,#117
  56.         TSR6:DJNZ R0,TSR6 ; 時序要求延時一段時間
  57.         TSR7:SETB P2.2
  58.              RET
  59. ;讀出轉(zhuǎn)換后的溫度值的子程序
  60. GET_TEMPER:SETB P2.2
  61.               LCALL INIT_1820;先復(fù)位DS18B20
  62.               JB FLAG1,TSS2
  63.               CLR P1.2
  64.               RET ; 判斷DS1820是否存在?若DS18B20不存在則返回
  65.          TSS2:CLR P1.3;DS18B20已經(jīng)被檢測到!
  66.               MOV A,#0CCH ; 跳過ROM匹配
  67.               LCALL WRITE_1820
  68.               MOV A,#44H ; 發(fā)出溫度轉(zhuǎn)換命令
  69.               LCALL WRITE_1820
  70.               LCALL DISPLAY;這里通過調(diào)用顯示子程序?qū)崿F(xiàn)延時一段時間,等待AD轉(zhuǎn)換結(jié)束,12位的話750微秒
  71.               LCALL INIT_1820;準(zhǔn)備讀溫度前先復(fù)位
  72.               MOV A,#0CCH ; 跳過ROM匹配
  73.               LCALL WRITE_1820
  74.               MOV A,#0BEH ; 發(fā)出讀溫度命令
  75.               LCALL WRITE_1820
  76.               LCALL READ_18200; 將讀出的溫度數(shù)據(jù)保存到35H/36H
  77.               CLR P1.4
  78.               RET
  79. ;寫DS18B20的子程序(有具體的時序要求)
  80. WRITE_1820:MOV R2,#8;一共8位數(shù)據(jù)
  81.               CLR C
  82.           WR1:CLR P2.2
  83.               MOV R3,#6
  84.               DJNZ R3,$
  85.               RRC A
  86.               MOV P2.2,C
  87.               MOV R3,#23
  88.               DJNZ R3,$
  89.               SETB P2.2
  90.               NOP
  91.               DJNZ R2,WR1
  92.               SETB P2.2
  93.               RET
  94. ; 讀DS18B20的程序,從DS18B20中讀出兩個字節(jié)的溫度數(shù)據(jù)
  95. READ_18200:MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
  96.               MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
  97.          RE00:MOV R2,#8;數(shù)據(jù)一共有8位
  98.          RE01:CLR C
  99.               SETB P2.2
  100.               NOP
  101.               NOP
  102.               CLR P2.2
  103.               NOP
  104.               NOP
  105.               NOP
  106.               SETB P2.2
  107.               MOV R3,#9
  108.          RE10:DJNZ R3,RE10
  109.               MOV C,P2.2
  110.               MOV R3,#23
  111.          RE20:DJNZ R3,RE20
  112.               RRC A
  113.               DJNZ R2,RE01
  114.               MOV @R1,A
  115.               DEC R1
  116.               DJNZ R4,RE00
  117.               RET
  118. ;顯示子程序
  119. display: acall DL100MS
  120.             acall DL100MS
  121.             mov a,29H;將29H中的十六進制數(shù)轉(zhuǎn)換成10進制
  122.             mov b,#10 ;10進制/10=10進制
  123.             div ab
  124.             mov b_bit,a ;十位在a
  125.             mov a_bit,b ;個位在b
  126.             add a,#00110000b
  127.             mov b_bit,a
  128.             mov a,b
  129.             add a,#00110000b
  130.             mov a_bit,a
  131.             MOV P1,#00000001B; ;清屏并光標(biāo)復(fù)位
  132.             ACALL ENABLE;調(diào)用寫入命令子程序
  133.             MOV P1,#00111000B ;;設(shè)置顯示模式:8位2行5x7點陣
  134.             ACALL ENABLE ;調(diào)用寫入命令子程序
  135.             MOV P1,#00001111B ;;顯示器開、光標(biāo)開、光標(biāo)允許閃爍
  136.             ACALL ENABLE ;調(diào)用寫入命令子程序
  137.             MOV P1,#00000110B ;;文字不動,光標(biāo)自動右移
  138.             ACALL ENABLE ;調(diào)用寫入命令子程序
  139.             MOV P1,#80H ;;寫入顯示起始地址(第二行第一個位置)
  140.             ACALL ENABLE ;調(diào)用寫入命令子程序
  141.             MOV P1,b_bit ;;A十位送出去

  142.             SETB RS; ;RS=1
  143.             CLR RW; ;RW=0 ;準(zhǔn)備寫入數(shù)據(jù)
  144.             CLR E; ;E=0 ;執(zhí)行顯示命令
  145.             ACALL DELAY ;判斷液晶模塊是否忙?
  146.             SETB E ;;E=1 ;顯示完成,程序停車

  147.             MOV P1,#00000110B ;;文字不動,光標(biāo)自動右移
  148.             ACALL ENABLE ;調(diào)用寫入命令子程序
  149.             MOV P1,#81H ;;寫入顯示起始地址(第二行第2個位置)
  150.             ACALL ENABLE ;調(diào)用寫入命令子程序
  151.             MOV P1,a_bit;;字母A的代碼

  152.             SETB RS; ;RS=1
  153.             CLR RW; ;RW=0 ;準(zhǔn)備寫入數(shù)據(jù)
  154.             CLR E; ;E=0 ;執(zhí)行顯示命令
  155.             ACALL DELAY ;判斷液晶模塊是否忙?
  156.             SETB E ;;E=1 ;顯示完成,程序停車
  157.             ret
  158.             ENABLE:
  159.             CLR RS; ;寫入控制命令的子程序
  160.             CLR RW
  161.             CLR E
  162.             ACALL DELAY
  163.             SETB E
  164.             RET
  165.       DELAY:
  166.             MOV P1,#0FFH ;;判斷液晶顯示器是否忙的子程序
  167.             CLR RS
  168.             SETB RW
  169.             CLR E
  170.             NOP
  171.             SETB E
  172.             JB P1.7,DELAY; ;如果P1.7為高電平表示忙就循環(huán)等待
  173.             RET
  174. DL100MS:      MOV R7,#02H
  175. DL1:          MOV R6,#0C8H
  176. DL2:          MOV R5,#0FAH
  177.               DJNZ R5,$
  178.               DJNZ R6,DL2
  179.               DJNZ R7,DL1
  180.               RET

  181.             end
復(fù)制代碼








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

相關(guān)帖子

回復(fù)

使用道具 舉報

沙發(fā)
ID:106195 發(fā)表于 2016-2-24 20:16 | 只看該作者
求此電路圖。。。謝謝。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表