找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于18b20温度带上限程序-LCD1602液晶显示篇

[复制链接]
跳转到指定楼层
楼主
ID:105323 发表于 2016-2-22 01:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下图为图片:具体说明看前一篇的,这是用1602来显示的,程序是修改前面几个实验的,当温度<40度时电风扇不转,当>=40度时电风扇转动.下面实验做的截图,为参加电子比赛做的单片机系统实验.












全部程序:
  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 ;数码管个位数存放内存位置
  7. b_bit       equ 21h ;数码管十位数存放内存位置
  8. RS EQU P3.7;确定具体硬件的连接方式
  9. RW EQU P3.6 ;确定具体硬件的连接方式
  10. E EQU P3.5 ;确定具体硬件的连接方式
  11. ;主程序
  12. MAIN:
  13.           LCALL GET_TEMPER;调用读温度子程序
  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到这里结束
  31. DISLED:LCALL DISPLAY;调用数码管显示子程序
  32.           AJMP MAIN
  33. ;DS18B20复位初始化子程序
  34. INIT_1820:SETB P2.2
  35.              NOP
  36.              CLR P2.2;主机发出延时537微秒的复位低脉冲
  37.              MOV R1,#3
  38.         TSR1:MOV R0,#107
  39.              DJNZ R0,$
  40.              DJNZ R1,TSR1
  41.              SETB P2.2;然后拉高数据线
  42.              NOP
  43.              NOP
  44.              NOP
  45.              MOV R0,#25H
  46.         TSR2:JNB P2.2,TSR3;等待DS18B20回应
  47.              DJNZ R0,TSR2
  48.              LJMP TSR4 ; 延时
  49.         TSR3:SETB FLAG1 ; 置标志位,表示DS1820存在
  50.              CLR P1.7;检查到DS18B20就点亮P1.7LED,与传感器通信成功
  51.              LJMP TSR5
  52.         TSR4:CLR FLAG1 ; 清标志位,表示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. ;读出转换后的温度值的子程序
  60. GET_TEMPER:SETB P2.2
  61.               LCALL INIT_1820;先复位DS18B20
  62.               JB FLAG1,TSS2
  63.               CLR P1.2
  64.               RET ; 判断DS1820是否存在?若DS18B20不存在则返回
  65.          TSS2:CLR P1.3;DS18B20已经被检测到!
  66.               MOV A,#0CCH ; 跳过ROM匹配
  67.               LCALL WRITE_1820
  68.               MOV A,#44H ; 发出温度转换命令
  69.               LCALL WRITE_1820
  70.               LCALL DISPLAY;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒
  71.               LCALL INIT_1820;准备读温度前先复位
  72.               MOV A,#0CCH ; 跳过ROM匹配
  73.               LCALL WRITE_1820
  74.               MOV A,#0BEH ; 发出读温度命令
  75.               LCALL WRITE_1820
  76.               LCALL READ_18200; 将读出的温度数据保存到35H/36H
  77.               CLR P1.4
  78.               RET
  79. ;写DS18B20的子程序(有具体的时序要求)
  80. WRITE_1820:MOV R2,#8;一共8位数据
  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中读出两个字节的温度数据
  95. READ_18200:MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
  96.               MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
  97.          RE00:MOV R2,#8;数据一共有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中的十六进制数转换成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; ;清屏并光标复位
  132.             ACALL ENABLE;调用写入命令子程序
  133.             MOV P1,#00111000B ;;设置显示模式:8位2行5x7点阵
  134.             ACALL ENABLE ;调用写入命令子程序
  135.             MOV P1,#00001111B ;;显示器开、光标开、光标允许闪烁
  136.             ACALL ENABLE ;调用写入命令子程序
  137.             MOV P1,#00000110B ;;文字不动,光标自动右移
  138.             ACALL ENABLE ;调用写入命令子程序
  139.             MOV P1,#80H ;;写入显示起始地址(第二行第一个位置)
  140.             ACALL ENABLE ;调用写入命令子程序
  141.             MOV P1,b_bit ;;A十位送出去

  142.             SETB RS; ;RS=1
  143.             CLR RW; ;RW=0 ;准备写入数据
  144.             CLR E; ;E=0 ;执行显示命令
  145.             ACALL DELAY ;判断液晶模块是否忙?
  146.             SETB E ;;E=1 ;显示完成,程序停车

  147.             MOV P1,#00000110B ;;文字不动,光标自动右移
  148.             ACALL ENABLE ;调用写入命令子程序
  149.             MOV P1,#81H ;;写入显示起始地址(第二行第2个位置)
  150.             ACALL ENABLE ;调用写入命令子程序
  151.             MOV P1,a_bit;;字母A的代码

  152.             SETB RS; ;RS=1
  153.             CLR RW; ;RW=0 ;准备写入数据
  154.             CLR E; ;E=0 ;执行显示命令
  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为高电平表示忙就循环等待
  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
复制代码








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

使用道具 举报

沙发
ID:106195 发表于 2016-2-24 20:16 | 只看该作者
求此电路图。。。谢谢。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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