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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DS18B20+LCD1602的溫度檢測系統(tǒng)

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

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

LCD_Init();          //調(diào)用初始化函數(shù)
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)        //無限循環(huán)
{
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);   //讓硬件反應(yīng)
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 //數(shù)據(jù)寄存器
#define RW_CLR RW=0 //進(jìn)行寫操作
#define RW_SET RW=1 //進(jìn)行讀操作
#define EN_CLR EN=0 //執(zhí)行命令
#define EN_SET EN=1 //讀取信息
#define DataPort P0  //宏定義顯示數(shù)據(jù)端口P0(1602的7-14腳)
/*------------------------------------------------
LCD1602初始化函數(shù)與顯示函數(shù)
------------------------------------------------*/

    void  LCD1602_checkbusy() //液晶讀忙狀態(tài)
{
     unsignedchar  state;
       DataPort=0xff;    //數(shù)據(jù)口端口全電平
        RS_CLR;  //選擇1602指令寄存器
       RW_SET;   //進(jìn)行寫操作
        do  
        {
               EN_SET;  //讀取信息
               state=DataPort;  //變量state讀取數(shù)據(jù)
              EN_CLR;    //執(zhí)行命令
       }while(state&0x80);      //給硬件反應(yīng)時間
}
void LCD_Write_Com(unsigned char com)  //設(shè)置模式或地址
{  
LCD1602_checkbusy();//忙則等待
RS_CLR;  //選擇1602指令寄存器
RW_CLR;  //進(jìn)行寫操作
EN_SET;  //讀取信息
DataPort=com;  //數(shù)據(jù)端口讀取com口
_nop_();   //空操作一個周期,給硬件反應(yīng)時間
EN_CLR;   //當(dāng)EN有高電平跳變成低電平時,液晶模塊開始執(zhí)行命令
}
void LCD_Write_Data(unsigned char Data)  //向LCD1602寫數(shù)據(jù)
{
LCD1602_checkbusy();// while(LCD_Check_Busy()); //忙則等待
RS_SET;  //數(shù)據(jù)寄存器
RW_CLR;  //進(jìn)行寫操作
EN_SET;  //讀取信息
DataPort=Data;  //數(shù)據(jù)端口讀取Data的數(shù)據(jù)
_nop_();   //空操作
EN_CLR;   //當(dāng)EN有高電平跳變成低電平時,液晶模塊開始執(zhí)行命令
}
void LCD_Clear(void)  //請屏指令
{
LCD_Write_Com(0x01);   //將以前的顯示內(nèi)容清處
DelayMs(5);
}
void LCD_Write_String(unsigned char x,unsigned chary,unsigned char *s) //設(shè)置實(shí)際顯示的地址
{     
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);    //顯示模式設(shè)置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);    //開顯示,關(guān)光標(biāo)
  LCD_Write_Com(0x01);    //清屏
  LCD_Write_Com(0x06);    //字符進(jìn)入模式:屏不動,字符后移
   DelayMs(5);
  LCD_Write_Com(0x0C);    //開顯示,開光標(biāo)
   }

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

溫度監(jiān)測仿真.zip

131.68 KB, 下載次數(shù): 31, 下載積分: 黑幣 -5

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产乱性| 97精品国产97久久久久久免费 | 91最新在线视频 | 亚洲一区二区 | 91社区在线观看高清 | 日韩中文字幕高清 | 欧美成人综合 | 羞羞视频在线观看 | 亚洲看片网站 | 日韩成人免费 | 91精品久久久久久久久久 | 日韩高清一区 | 在线免费看黄 | 亚洲日韩中文字幕 | 午夜精品久久久久久 | 中文字幕在线看人 | 亚洲精品久久久久久国产精华液 | 一本色道精品久久一区二区三区 | 夜夜爽99久久国产综合精品女不卡 | 黄色一级大片在线免费看产 | 欧美成年网站 | 夜夜骚视频 | 一级大片免费 | 亚洲欧美一区二区三区在线 | 在线中文字幕国产 | 日韩网站在线观看 | 日本 欧美 三级 高清 视频 | 久草视频在线播放 | 日本视频在线播放 | 在线观看中文字幕亚洲 | 日本黄色一级视频 | 精品一区av | 日韩欧美在线视频一区 | 久久国产精品99久久久久 | 96av麻豆蜜桃一区二区 | 久久久免费少妇高潮毛片 | 亚洲精品一区二三区不卡 | 色综合久| 国产乱码精品一品二品 | 日韩av一二三区 | 91久久久www播放日本观看 |