資源簡介
基于STC89S52單片機的溫度控制系統,可以通過按鍵設置最大最小溫度值,DS18B20溫度傳感器采集回來溫度通過1602液晶顯示屏顯示。內含電路圖和程序源碼

代碼片段和文件信息
/**********************BST-V51實驗開發板例程************************
*??平臺:BST-V51?+?Keil?5?+?STC89C52
*??名稱:18B20實時溫度計1602顯示??
*??日期:2018-10-28
*??晶振:11.0592MHZ
******************************************************************/
#include?
#include?
#include?
#define?uchar?unsigned?char
#define?uint??unsigned?int
sbit?ds?=?P2^2;??//ds18b20端口定義
sbit?rw?=?P1^1;??//LCD1602端口定義
sbit?RS?=?P1^0;??
sbit?LCDEN?=?P2^5;?
sbit?kaiguan?=?P2^0;
sbit?K1?=?P3^4;??//K1獨立按鍵設置溫度+
sbit?K2?=?P3^5;??//K1獨立按鍵設置溫度-
void?delayUs()??//延時一個機器周期
{
????_nop_();
}
?void?delayMs(uint?a)??//延時a毫秒
{
????uint?i?j;
????for(i?=?a;?i?>?0;?i--)
????????for(j?=?100;?j?>?0;?j--);
}
/*******************************LCD1602*******************************/
void?writeComm(uchar?comm)??//LCD寫命令
{
????RS?=?0;????
????P0?=?comm;
????LCDEN?=?1;
????delayUs();
????LCDEN?=?0;
????delayMs(1);
}
void?writeData(uchar?dat)??//寫數據:RS=1?RW=0;
{
????RS?=?1;
????P0?=?dat;
????LCDEN?=?1;
????delayUs();
????LCDEN?=?0;
????delayMs(1);
}
void?init()??//LCD初始化
{
????rw?=?0;?
????writeComm(0x38);
????writeComm(0x0c);?
????writeComm(0x06);
????writeComm(0x01);?
}
void?writeString(uchar?*?str?uchar?length)??//LCD寫字符串
{
????uchar?i;
????for(i?=?0;?i?????{
?????????writeData(str[i]);
????}
?}
?
/*******************************DS18B20*******************************/
void?dsInit()??//ds18b20初始化
{
????unsigned?int?i;??
????ds?=?0;
????i?=?100;??
?????while(i>0)?i--;
????ds?=?1;???
????i?=?4;
?????while(i>0)?i--;
}
?
void?dsWait()??//等待
?{
??????unsigned?int?i;
??????while(ds);??
??????while(~ds);
??????i?=?4;
??????while(i?>?0)?i--;
}
bit?readBit()??//讀一位數據
{
????unsigned?int?i;
????bit?b;
????ds?=?0;
????i++;???
????ds?=?1;?
????i++;?i++;??
????b?=?ds;
????i?=?8;?
????while(i>0)?i--;
????return?b;
}
unsigned?char?readByte()??//讀一個字節
{
????unsigned?int?i;
????unsigned?char?j?dat;
????dat?=?0;
????for(i=0;?i<8;?i++)
????{
????????j?=?readBit();
??????
????????dat?=?(j?<7)?|?(dat?>>?1);
????}
????return?dat;
}
void?writeByte(unsigned?char?dat)??//寫一個字節
{
????unsigned?int?i;
????unsigned?char?j;
????bit?b;
????for(j?=?0;?j?8;?j++)
????{
????????b?=?dat?&?0x01;
????????dat?>>=?1;
????
????????if(b)???
????????{
???????????ds?=?0;??????????i++;?i++;??
????????????ds?=?1;????
????????????i?=?8;?while(i>0)?i--;??
????????}
????????else??
????????{
????????????ds?=?0;
??????????i?=?8;?while(i>0)?i--;??
????????????ds?=?1;
???????????i++;?i++;
????????}
????}
}
void?sendChangeCmd()??//溫度轉換
{
????dsInit();????
????dsWait();???
????delayMs(1);????
????writeByte(0xcc);??//跳過64位光刻ROM操作
????writeByte(0x44);??//寫入RAM操作
}
void?sendReadCmd()??
{
????dsInit();
????dsWait();
????delayMs(1);
????writeByte(0xcc);?
????writeByte(0xbe);?
}
int?getTmpValue()??//獲取溫度
{
????unsigned?int?tmpvalue;
????int?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????14721??2018-10-29?00:57??DS18B20溫度控制(1602顯示)\1602-wendu
?????文件????????994??2018-10-29?00:57??DS18B20溫度控制(1602顯示)\1602-wendu.build_log.htm
?????文件???????5131??2018-10-29?00:55??DS18B20溫度控制(1602顯示)\1602-wendu.c
?????文件???????6745??2018-10-29?00:57??DS18B20溫度控制(1602顯示)\1602-wendu.hex
?????文件?????????37??2018-10-29?00:57??DS18B20溫度控制(1602顯示)\1602-wendu.lnp
?????文件??????10411??2018-10-29?00:57??DS18B20溫度控制(1602顯示)\1602-wendu.LST
?????文件??????20590??2018-10-29?00:57??DS18B20溫度控制(1602顯示)\1602-wendu.M51
?????文件??????15635??2018-10-29?00:57??DS18B20溫度控制(1602顯示)\1602-wendu.OBJ
?????文件????????259??2013-11-02?22:23??DS18B20溫度控制(1602顯示)\1602-wendu.plg
????.......?????85507??2018-11-01?21:45??DS18B20溫度控制(1602顯示)\1602-wendu.uvgui.36564
?????文件???????5564??2018-10-28?18:46??DS18B20溫度控制(1602顯示)\1602-wendu.uvopt
?????文件??????13851??2018-10-28?19:32??DS18B20溫度控制(1602顯示)\1602-wendu.uvproj
?????文件???????1330??2013-11-02?22:23??DS18B20溫度控制(1602顯示)\1602-wendu_Opt.Bak
?????文件???????2153??2012-02-15?20:38??DS18B20溫度控制(1602顯示)\1602-wendu_Uv2.Bak
?????文件??????39936??2018-05-04?14:38??DS18B20溫度控制(1602顯示)\溫度傳感器ds18b20模塊化程序.doc
?????文件??????16491??2018-10-29?01:12??DS18B20溫度控制(1602顯示)\電路\@Q9(Q~{HR_MGYWS4U)GS@19.png
?????文件????4032397??2018-10-29?01:17??DS18B20溫度控制(1602顯示)\電路\IMG_20181029_011728.jpg
?????文件??????52569??2018-10-29?01:12??DS18B20溫度控制(1602顯示)\電路\P32Y3]BCE0IRCU5NPU94WR9.png
?????文件?????192150??2018-10-29?01:11??DS18B20溫度控制(1602顯示)\電路\ZI_CR$9Z~2[%(‘FPW%4VY_3.png
?????目錄??????????0??2018-10-29?01:22??DS18B20溫度控制(1602顯示)\電路
?????目錄??????????0??2019-01-03?08:59??DS18B20溫度控制(1602顯示)
-----------?---------??----------?-----??----
??????????????4516471????????????????????21
- 上一篇:IET作者指南
- 下一篇:室內火災煙霧識別算法研究
評論
共有 條評論