找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

18b20溫度 帶上限程序 溫度上限調節(jié) LCD1602液晶顯示

[復制鏈接]
跳轉到指定樓層
樓主
ID:105323 發(fā)表于 2016-2-22 01:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
;在前一篇:http://www.torrancerestoration.com/bbs/dpj-44013-1.html 的基礎上,有增加幾個按鍵,.P0.0 進入溫度調節(jié) P0.1十位位溫度調節(jié)     P0.2 個位溫度調節(jié) P0.3退出溫度調節(jié)
不足之處:1.溫度只能在30度到40度之間調節(jié)
                  2.沒有增加軟件去抖動




  1. ORG 0000H
  2. ;單片機內存分配申明!
  3. TEMPER_L EQU 29H;用于保存讀出溫度的低8位
  4. TEMPER_H EQU 28H;用于保存讀出溫度的高8位
  5. FLAG1       EQU 38H;是否檢測到DS18B20標志位
  6. a_bit       equ 20h ;數(shù)碼管個位數(shù)存放內存位置
  7. b_bit       equ 21h ;數(shù)碼管十位數(shù)存放內存位置
  8. c_bit       equ 22h ;按鍵個位內存地址
  9. d_bit       equ 23h     ;按鍵個位內存地址
  10. e_bit       equ 24h
  11. RS EQU P3.7;確定具體硬件的連接方式
  12. RW EQU P3.6 ;確定具體硬件的連接方式
  13. E EQU P3.5 ;確定具體硬件的連接方式
  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.           acall key
  27.           CJNE A,e_bit,FIT
  28.           SETB P3.0
  29.           AJMP DISLED
  30.       FIT:CPL C
  31.           MOV P3.0,C;jiesu到這里結束
  32. DISLED:LCALL DISPLAY;調用數(shù)碼管顯示子程序
  33.           AJMP MAIN
  34. ;DS18B20復位初始化子程序
  35. INIT_1820:SETB P2.2
  36.              NOP
  37.              CLR P2.2;主機發(fā)出延時537微秒的復位低脈沖
  38.              MOV R1,#3
  39.         TSR1:MOV R0,#107
  40.              DJNZ R0,$
  41.              DJNZ R1,TSR1
  42.              SETB P2.2;然后拉高數(shù)據(jù)線
  43.              NOP
  44.              NOP
  45.              NOP
  46.              MOV R0,#25H
  47.         TSR2:JNB P2.2,TSR3;等待DS18B20回應
  48.              DJNZ R0,TSR2
  49.              LJMP TSR4 ; 延時
  50.         TSR3:SETB FLAG1 ; 置標志位,表示DS1820存在
  51.              CLR P1.7;檢查到DS18B20就點亮P1.7LED,與傳感器通信成功
  52.              LJMP TSR5
  53.         TSR4:CLR FLAG1 ; 清標志位,表示DS1820不存在
  54.              CLR P1.1;未檢查到DS18B20就點亮P1.1LED,與傳感器通信失敗
  55.              LJMP TSR7
  56.         TSR5:MOV R0,#117
  57.         TSR6:DJNZ R0,TSR6 ; 時序要求延時一段時間
  58.         TSR7:SETB P2.2
  59.              RET
  60. ;讀出轉換后的溫度值的子程序
  61. GET_TEMPER:SETB P2.2
  62.               LCALL INIT_1820;先復位DS18B20
  63.               JB FLAG1,TSS2
  64.               CLR P1.2
  65.               RET ; 判斷DS1820是否存在?若DS18B20不存在則返回
  66.          TSS2:CLR P1.3;DS18B20已經(jīng)被檢測到!
  67.               MOV A,#0CCH ; 跳過ROM匹配
  68.               LCALL WRITE_1820
  69.               MOV A,#44H ; 發(fā)出溫度轉換命令
  70.               LCALL WRITE_1820
  71.               LCALL DISPLAY;這里通過調用顯示子程序實現(xiàn)延時一段時間,等待AD轉換結束,12位的話750微秒
  72.               LCALL INIT_1820;準備讀溫度前先復位
  73.               MOV A,#0CCH ; 跳過ROM匹配
  74.               LCALL WRITE_1820
  75.               MOV A,#0BEH ; 發(fā)出讀溫度命令
  76.               LCALL WRITE_1820
  77.               LCALL READ_18200; 將讀出的溫度數(shù)據(jù)保存到35H/36H
  78.               CLR P1.4
  79.               RET
  80. ;寫DS18B20的子程序(有具體的時序要求)
  81. WRITE_1820:MOV R2,#8;一共8位數(shù)據(jù)
  82.               CLR C
  83.           WR1:CLR P2.2
  84.               MOV R3,#6
  85.               DJNZ R3,$
  86.               RRC A
  87.               MOV P2.2,C
  88.               MOV R3,#23
  89.               DJNZ R3,$
  90.               SETB P2.2
  91.               NOP
  92.               DJNZ R2,WR1
  93.               SETB P2.2
  94.               RET
  95. ; 讀DS18B20的程序,從DS18B20中讀出兩個字節(jié)的溫度數(shù)據(jù)
  96. READ_18200:MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
  97.               MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
  98.          RE00:MOV R2,#8;數(shù)據(jù)一共有8位
  99.          RE01:CLR C
  100.               SETB P2.2
  101.               NOP
  102.               NOP
  103.               CLR P2.2
  104.               NOP
  105.               NOP
  106.               NOP
  107.               SETB P2.2
  108.               MOV R3,#9
  109.          RE10:DJNZ R3,RE10
  110.               MOV C,P2.2
  111.               MOV R3,#23
  112.          RE20:DJNZ R3,RE20
  113.               RRC A
  114.               DJNZ R2,RE01
  115.               MOV @R1,A
  116.               DEC R1
  117.               DJNZ R4,RE00
  118.               RET
  119. ;鍵盤掃描程序
  120. key:       nop
  121.            mov r2,#00h
  122.            mov r3,#00h
  123.            jb p0.0,sss
  124. mai:       jnb p0.1,key1
  125.            jnb p0.2,key2
  126.            jnb p0.3,sss
  127.            ljmp mai
  128. sss:       LJMP fff
  129. key1:      mov r2,#0ffh
  130. q1:        jnb p0.1,$
  131.            inc r2
  132.            mov a,r2
  133.            cjne r2,#0ah,q2
  134.            ljmp key1
  135. q2:        mov a,r2
  136.            swap a
  137.            add a,r3
  138.            subb a,#12h
  139.            mov e_bit,a           
  140.            mov a,r2
  141.            add a,#30h
  142.            mov c_bit,a
  143.            acall display0
  144. q3:
  145.            jnb p0.1,q1
  146.            jnb p0.2,key2
  147.            jnb p0.3,sss
  148.            ljmp q3
  149. key2:      mov r3,#0ffh
  150. q4:        jnb p0.2,$
  151.            inc r3
  152.            mov a,r3
  153.            cjne r3,#0ah,q5
  154.            ljmp key1
  155. q5:        mov a,r2
  156.            swap a
  157.            add a,r3
  158.            subb a,#12h
  159.            mov e_bit,a      
  160.            mov a,r3
  161.            add a,#30h
  162.            mov d_bit,a
  163.            acall display0
  164. q6:
  165.            jnb p0.1,q1
  166.            jnb p0.2,q4
  167.            jnb p0.3,sss
  168.            ljmp q6
  169.         display0:
  170.         acall DL100MS
  171.         acall DL100MS
  172.      
  173.         MOV P1,#00000001B; ;清屏并光標復位
  174.         ACALL ENABLE;調用寫入命令子程序
  175.         MOV P1,#00111000B ;;設置顯示模式:8位2行5x7點陣
  176.         ACALL ENABLE ;調用寫入命令子程序
  177.         MOV P1,#00001111B ;;顯示器開、光標開、光標允許閃爍
  178.         ACALL ENABLE ;調用寫入命令子程序
  179.         MOV P1,#00000110B ;;文字不動,光標自動右移
  180.         ACALL ENABLE ;調用寫入命令子程序
  181.         MOV P1,#0C0H ;;寫入顯示起始地址(第二行第一個位置)
  182.         ACALL ENABLE ;調用寫入命令子程序
  183.         MOV P1,c_bit ;;字母A的代碼
  184.         SETB RS; ;RS=1
  185.         CLR RW; ;RW=0 ;準備寫入數(shù)據(jù)
  186.         CLR E; ;E=0 ;執(zhí)行顯示命令
  187.         ACALL DELAY ;判斷液晶模塊是否忙?
  188.         SETB E ;;E=1 ;顯示完成,程序停車
  189.         MOV P1,#0C1H ;;寫入顯示起始地址(第二行第一個位置)
  190.         ACALL ENABLE ;調用寫入命令子程序
  191.         MOV P1,d_bit ;;字母A的代碼
  192.         SETB RS; ;RS=1
  193.         CLR RW; ;RW=0 ;準備寫入數(shù)據(jù)
  194.         CLR E; ;E=0 ;執(zhí)行顯示命令
  195.         ACALL DELAY ;判斷液晶模塊是否忙?
  196.         SETB E ;;E=1 ;顯示完成,程序停車
  197.         ret
  198. fff: ret
  199. ;顯示子程序
  200. display: acall DL100MS
  201.             acall DL100MS
  202.             mov a,29H;將29H中的十六進制數(shù)轉換成10進制
  203.             mov b,#10 ;10進制/10=10進制
  204.             div ab
  205.             mov b_bit,a ;十位在a
  206.             mov a_bit,b ;個位在b
  207.             add a,#00110000b
  208.             mov b_bit,a
  209.             mov a,b
  210.             add a,#00110000b
  211.             mov a_bit,a
  212.             MOV P1,#00000001B; ;清屏并光標復位
  213.             ACALL ENABLE;調用寫入命令子程序
  214.             MOV P1,#00111000B ;;設置顯示模式:8位2行5x7點陣
  215.             ACALL ENABLE ;調用寫入命令子程序
  216.             MOV P1,#00001111B ;;顯示器開、光標開、光標允許閃爍
  217.             ACALL ENABLE ;調用寫入命令子程序
  218.             MOV P1,#00000110B ;;文字不動,光標自動右移
  219.             ACALL ENABLE ;調用寫入命令子程序
  220.             MOV P1,#80H ;;寫入顯示起始地址(第二行第一個位置)
  221.             ACALL ENABLE ;調用寫入命令子程序
  222.             MOV P1,b_bit ;;A十位送出去

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

  228.             MOV P1,#00000110B ;;文字不動,光標自動右移
  229.             ACALL ENABLE ;調用寫入命令子程序
  230.             MOV P1,#81H ;;寫入顯示起始地址(第二行第2個位置)
  231.             ACALL ENABLE ;調用寫入命令子程序
  232.             MOV P1,a_bit;;字母A的代碼

  233.             SETB RS; ;RS=1
  234.             CLR RW; ;RW=0 ;準備寫入數(shù)據(jù)
  235.             CLR E; ;E=0 ;執(zhí)行顯示命令
  236.             ACALL DELAY ;判斷液晶模塊是否忙?
  237.             SETB E ;;E=1 ;顯示完成,程序停車
  238.         MOV P1,#00000110B ;;文字不動,光標自動右移
  239.         ACALL ENABLE ;調用寫入命令子程序
  240.         MOV P1,#0C0H ;;寫入顯示起始地址(第二行第一個位置)
  241.         ACALL ENABLE ;調用寫入命令子程序
  242.         MOV P1,c_bit ;;字母A的代碼
  243.         SETB RS; ;RS=1
  244.         CLR RW; ;RW=0 ;準備寫入數(shù)據(jù)
  245.         CLR E; ;E=0 ;執(zhí)行顯示命令
  246.         ACALL DELAY ;判斷液晶模塊是否忙?
  247.         SETB E ;;E=1 ;顯示完成,程序停車
  248.         MOV P1,#0C1H ;;寫入顯示起始地址(第二行第一個位置)
  249.         ACALL ENABLE ;調用寫入命令子程序
  250.         MOV P1,d_bit ;;字母A的代碼
  251.         SETB RS; ;RS=1
  252.         CLR RW; ;RW=0 ;準備寫入數(shù)據(jù)
  253.         CLR E; ;E=0 ;執(zhí)行顯示命令
  254.         ACALL DELAY ;判斷液晶模塊是否忙?
  255.         SETB E ;;E=1 ;顯示完成,程序停車
  256.         ret
  257.             ENABLE:
  258.             CLR RS; ;寫入控制命令的子程序
  259.             CLR RW
  260.             CLR E
  261.             ACALL DELAY
  262.             SETB E
  263.             RET
  264.       DELAY:
  265.             MOV P1,#0FFH ;;判斷液晶顯示器是否忙的子程序
  266.             CLR RS
  267.             SETB RW
  268.             CLR E
  269.             NOP
  270.             SETB E
  271.             JB P1.7,DELAY; ;如果P1.7為高電平表示忙就循環(huán)等待
  272.             RET
  273. DL100MS:      MOV R7,#02H
  274. DL1:          MOV R6,#0C8H
  275. DL2:          MOV R5,#0FAH
  276.               DJNZ R5,$
  277.               DJNZ R6,DL2
  278.               DJNZ R7,DL1
  279.               RET

  280.             end
復制代碼








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

使用道具 舉報

沙發(fā)
ID:106483 發(fā)表于 2016-2-27 01:08 來自手機 | 只看該作者
怎麼下載?
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表