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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DS18B20+LCD1602的溫度檢測系統

[復制鏈接]
跳轉到指定樓層
樓主
ID:565667 發表于 2020-5-13 11:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1.  main.c
#include <reg52.h> //調用頭文件
#include <stdio.h>
#include "18b20.h"  //調用初始化函數
#include "1602.h"
#include "delay.h"
bitReadTempFlag; //溫度顯示
voidInit_Timer0(void);//中斷函數

void main (void)
{                 
int temp;
float temperature;
char displaytemp[16];//

LCD_Init();          //調用初始化函數
DelayMs(20);         //延時20ms
LCD_Clear();         //清屏操作
Init_Timer0();
LCD_Write_String(0,0," wwwH2LWHcom ");
LCD_Write_Char(13,1,0x01);//顯示temp
LCD_Write_Char(14,1,'C'); //顯示C

while (1)        //無限循環
{
if(ReadTempFlag==1)
{
ReadTempFlag=0;
temp=ReadTemperature();

temperature=(float)temp*0.0625;
sprintf(displaytemp,"Temp  %7.3f",temperature);//輸出溫度顯示值
LCD_Write_String(0,1,displaytemp);//把溫度寫入LCD
  }
}
}
void Init_Timer0(void)
{
TMOD |= 0x01;      //           
EA=1;            //接受中斷
ET0=1;           //
TR0=1;           //
}
void Timer0_isr(void) interrupt 1
{
static unsignedint num;
TH0=(65536-2000)/256;        //重新賦值 2ms
TL0=(65536-2000)%256;
  num++;
if(num==300)        //
   {
    num=0;
   ReadTempFlag=1; //
    }
}

2.18b20.c
  #include"delay.h"
#include "18b20.h"
bit Init_DS18B20(void)
{
bit dat=0;
DQ = 1;    //釋放總線,等待18b20的存在脈沖
DelayUs2x(5);   //讓硬件反應
DQ = 0;         //RESET 拉低18b20單總線
DelayUs2x(200); //拉低400us
DelayUs2x(200);
DQ = 1;        
DelayUs2x(50); //等待50us
dat=DQ;      
DelayUs2x(25);
return dat;
}
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
  DQ = 0; // 給脈沖信號
  dat>>=1;
  DQ = 1; // 給脈沖信號
  if(DQ)
   dat|=0x80;
  DelayUs2x(25);
}
return(dat);
}
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0;i--)
{
  DQ = 0;
  DQ =dat&0x01;
  DelayUs2x(25);
  DQ = 1;
  dat>>=1;
}
DelayUs2x(25);
}
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned int b=0;
unsigned int t=0;
Init_DS18B20();
WriteOneChar(0xCC); //
WriteOneChar(0x44); //
DelayMs(10);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE); //
a=ReadOneChar();  //
b=ReadOneChar();  //
b<<=8;
t=a+b;
return(t);
}

1.1602.c
  #include"1602.h"   
#include "delay.h"
sbit RS = P1^0;  //定義1602寄存器選擇端口為P2.4
sbit RW = P1^1;  //定義讀寫信號端口
sbit EN = P1^2;  //定義使能端口
#define RS_CLR RS=0 //宏定義選擇1602指令寄存器
#define RS_SET RS=1 //數據寄存器
#define RW_CLR RW=0 //進行寫操作
#define RW_SET RW=1 //進行讀操作
#define EN_CLR EN=0 //執行命令
#define EN_SET EN=1 //讀取信息
#define DataPort P0  //宏定義顯示數據端口P0(1602的7-14腳)
/*------------------------------------------------
LCD1602初始化函數與顯示函數
------------------------------------------------*/

    void  LCD1602_checkbusy() //液晶讀忙狀態
{
     unsignedchar  state;
       DataPort=0xff;    //數據口端口全電平
        RS_CLR;  //選擇1602指令寄存器
       RW_SET;   //進行寫操作
        do  
        {
               EN_SET;  //讀取信息
               state=DataPort;  //變量state讀取數據
              EN_CLR;    //執行命令
       }while(state&0x80);      //給硬件反應時間
}
void LCD_Write_Com(unsigned char com)  //設置模式或地址
{  
LCD1602_checkbusy();//忙則等待
RS_CLR;  //選擇1602指令寄存器
RW_CLR;  //進行寫操作
EN_SET;  //讀取信息
DataPort=com;  //數據端口讀取com口
_nop_();   //空操作一個周期,給硬件反應時間
EN_CLR;   //當EN有高電平跳變成低電平時,液晶模塊開始執行命令
}
void LCD_Write_Data(unsigned char Data)  //向LCD1602寫數據
{
LCD1602_checkbusy();// while(LCD_Check_Busy()); //忙則等待
RS_SET;  //數據寄存器
RW_CLR;  //進行寫操作
EN_SET;  //讀取信息
DataPort=Data;  //數據端口讀取Data的數據
_nop_();   //空操作
EN_CLR;   //當EN有高電平跳變成低電平時,液晶模塊開始執行命令
}
void LCD_Clear(void)  //請屏指令
{
LCD_Write_Com(0x01);   //將以前的顯示內容清處
DelayMs(5);
}
void LCD_Write_String(unsigned char x,unsigned chary,unsigned char *s) //設置實際顯示的地址
{     
if (y == 0)
   {  LCD_Write_Com(0x80 + x);     //顯示第一行}
else
   {  LCD_Write_Com(0xC0+ x);      //顯示第二行}        
while (*s)
   {     
LCD_Write_Data(*s);     
s ++;     
   }
}
void LCD_Write_Char(unsigned char x,unsigned chary,unsigned char Data)
{     
if (y == 0)
   {  LCD_Write_Com(0x80+ x);     }   
else
   {  LCD_Write_Com(0xC0+ x);     }        
LCD_Write_Data(Data);  
}
void LCD_Init(void)  //初始化操作
{  
  LCD_Write_Com(0x38);    //顯示模式設置16*2,5*7,8位
   DelayMs(5);
  LCD_Write_Com(0x38);  
   DelayMs(5);
  LCD_Write_Com(0x38);
   DelayMs(5);
  LCD_Write_Com(0x38);  
  LCD_Write_Com(0x08);    //開顯示,關光標
  LCD_Write_Com(0x01);    //清屏
  LCD_Write_Com(0x06);    //字符進入模式:屏不動,字符后移
   DelayMs(5);
  LCD_Write_Com(0x0C);    //開顯示,開光標
   }

2.delay.c
#include "delay.h"    //調用.h初始化
void DelayUs2x(unsigned char t)   //us秒級延時
{   
while(--t);
}
void DelayMs(unsigned char t)    //s秒級延時
{  
while(t--)
{
     //大致延時1mS
    DelayUs2x(245);
  DelayUs2x(245);
}

溫度監測仿真.zip

131.68 KB, 下載次數: 31, 下載積分: 黑幣 -5

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品综合在线 | 午夜综合 | 久久久精品影院 | 精品日本中文字幕 | 911影院 | 国内精品久久久久久 | 91九色视频在线 | 欧美xxxx性xxxxx高清 | 日韩高清国产一区在线 | 精品久久网 | 一区二区三区精品视频 | 91久久久久 | 久久久99精品免费观看 | 免费在线看黄 | 九色.com | 欧美一区二区三区在线观看 | 午夜寂寞影院在线观看 | 97在线观视频免费观看 | 久久久久久国产精品免费免费狐狸 | 日韩三级在线 | 免费av毛片 | www.久草.com | 日本黄色不卡视频 | 亚洲精品久久久久久久久久久久久 | 成人国产精品久久 | 亚洲一区二区av | 国产成人免费在线 | 亚洲精品免费在线观看 | av片免费| 欧美激情久久久 | 中文字幕在线观看 | 久久久久国产一区二区三区 | 精品中文在线 | 999精品在线 | 自拍视频网站 | 国产电影一区二区在线观看 | 亚洲a在线观看 | www.久久国产精品 | 成人精品视频99在线观看免费 | 精品国产99 | 久久中文视频 |