找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机温度测量(多个DS18b20)

[复制链接]
跳转到指定楼层
楼主
ID:528235 发表于 2019-5-6 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机温度测量(DS18b20)

单片机源程序如下:
  1. /*-----------------------------------------------
  2.   名称:DS18b20 温度检测液晶显示
  3. ------------------------------------------------*/
  4. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  5. #include<stdio.h>
  6. #include "18b20.h"
  7. #include "18b20a.h"
  8. #include "1602.h"
  9. #include "delay.h"

  10. bit ReadTempFlag;//定义读时间标志

  11. void Init_Timer0(void);//定时器初始化
  12. /*------------------------------------------------
  13.               串口通讯初始化
  14. ------------------------------------------------*/
  15. void UART_Init(void)
  16. {
  17.     SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
  18.     TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
  19.     TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz  
  20.     TR1   = 1;                  // TR1:  timer 1 打开                        
  21.     //EA    = 1;                  //打开总中断
  22.     //ES    = 1;                  //打开串口中断
  23.         TI=1;
  24. }
  25. /*------------------------------------------------
  26.                     主函数
  27. ------------------------------------------------*/
  28. void main (void)
  29. {                  
  30. int temp;
  31. float temperature;
  32. char displaytemp[16];//定义显示区域临时存储数组

  33. LCD_Init();           //初始化液晶
  34. DelayMs(20);          //延时有助于稳定
  35. LCD_Clear();          //清屏
  36. Init_Timer0();
  37. UART_Init();
  38. Lcd_User_Chr();       //写入自定义字符

  39. LCD_Write_Char(13,0,0x01);//写入温度右上角点
  40. LCD_Write_Char(14,0,'C'); //写入字符C

  41. LCD_Write_Char(13,1,0x01);//写入温度右上角点
  42. LCD_Write_Char(14,1,'C'); //写入字符C

  43. while (1)         //主循环
  44.   {

  45. if(ReadTempFlag==1)
  46. {
  47.   ReadTempFlag=0;
  48.   temp=ReadTemperature();
  49.   temperature=(float)temp*0.0625;
  50.   sprintf(displaytemp,"Temp1 %7.3f",temperature);//打印温度值
  51.   LCD_Write_String(0,0,displaytemp);//显示第二行

  52.   temp=ReadTemperature_a();
  53.   temperature=(float)temp*0.0625;
  54.   sprintf(displaytemp,"Temp2 %7.3f",temperature);//打印温度值
  55.   LCD_Write_String(0,1,displaytemp);//显示第二行
  56.   }       
  57. }
  58. }

  59. /*------------------------------------------------
  60.                     定时器初始化子程序
  61. ------------------------------------------------*/
  62. void Init_Timer0(void)
  63. {
  64. TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
  65. //TH0=0x00;              //给定初值
  66. //TL0=0x00;
  67. EA=1;            //总中断打开
  68. ET0=1;           //定时器中断打开
  69. TR0=1;           //定时器开关打开
  70. }
  71. /*------------------------------------------------
  72.                  定时器中断子程序
  73. ------------------------------------------------*/
  74. void Timer0_isr(void) interrupt 1
  75. ……………………

  76. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
多个18b20温度传感器1602液晶显示.rar (46.87 KB, 下载次数: 94)

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

使用道具 举报

沙发
ID:1 发表于 2019-5-6 16:42 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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