久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
stc89c52單片機+ds18b20+lcd1601溫度計程序
[打印本頁]
作者:
chunzz
時間:
2019-6-9 01:32
標題:
stc89c52單片機+ds18b20+lcd1601溫度計程序
做了個溫度計,和大家分享下。
制作出來的實物圖如下:
ds18b20_1.jpg
(128.44 KB, 下載次數: 37)
下載附件
2019-6-9 01:30 上傳
ds18b20_2.jpg
(109.52 KB, 下載次數: 27)
下載附件
2019-6-9 01:30 上傳
單片機源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="TEMP : ";
uchar data disdata[5];//百、十、個、小數位
sbit lcden=P1^1; //液晶使能端
sbit lcdrs=P1^0; //液晶數據命令選擇端
sbit DQ=P1^3;
uint tvalue; //溫度值
uchar tflag; //溫度正負標志
// sbit lcdrw=P1^2;
uchar num;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
lcdrs=0;
// lcdrw=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
// lcdrw=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0;
write_com(0x38);//設置16X2顯示,5X7點陣,8位數據接口
write_com(0x0c);//設置開顯示,不顯示光標
write_com(0x06);//寫一個字符后地址指針加1
write_com(0x01);//顯示清零,數據指針清零
delay(5);
}
/******************************ds18b20程序******************************************************************/
void delay_18b20(uint i)//延時1微秒
{
while(i--);
}
void ds18b20rst() //ds18b20初始化子函數
//要求"數據線拉高-延時-數據線拉低-延時大于480微妙-數據線拉高-延時等待"
{
uchar x=0;
DQ = 1; //信號線DQ復位
delay_18b20(4); //延時
DQ = 0; //DQ拉低
delay_18b20(100); //精確延時大于480us
DQ = 1; //拉高
delay_18b20(40);
}
void ds18b20wr(uchar wdata)/*寫數據子函數,無返回值,含參數*/
{
uchar i=0;
for (i=8; i>0; i--)//要寫完一個字節,故需要重復8次以下操作
{
DQ = 0; //數據線拉低
DQ = wdata&0x01;//wdata是一個形參,將其與0000 0001進行按位與
//按從低到高的順序發送數據(一次發送一位)
delay_18b20(10);
DQ = 1; //最后將數據線拉高
wdata>>=1; //將wdata右移1位
}
}
uchar ds18b20rd() //讀數據子函數,是有返回值dat
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)//要讀完一個字節,故需要重復8次以下操作
{
DQ = 0; //給脈沖信號
dat>>=1;
DQ = 1; //給脈沖信號
if(DQ)
dat|=0x80;
delay_18b20(10);
}
return(dat); //返回dat
}
read_temp() //讀取溫度值并轉換的子函數,有返回值溫度值tvalue
{
uchar a,b;
ds18b20rst(); //調用ds18b20初始化子函數
ds18b20wr(0xcc);//調用寫數據子函數,向ds18b20寫命令0xcc
//ccH表示跳過ROM讀序列號,適用于單機工作,直接向18b20發送溫度變換命令
ds18b20wr(0x44);//調用寫數據子函數,向ds18b20寫命令0x44
//44H表示啟動ds18b20溫度轉換,結果自行存入9字節的RAM中
ds18b20rst(); //調用ds18b20初始化子函數
ds18b20wr(0xcc);//同上
ds18b20wr(0xbe);//調用寫數據子函數,向ds18b20寫命令0xbe
//beH表示讀取RAM中9字節的溫度數據
a=ds18b20rd(); //調用讀數據子函數,并將所得數據給a
b=ds18b20rd(); //
tvalue=b; //把b的值給tvalue
tvalue<<=8; //tvalue左移8位
tvalue=tvalue|a;//tvalue與a進行按位或
if(tvalue<0x0fff)//
tflag=0; //前五位為0時,讀取的溫度為正,標志位為0,此時只要
//將測得數值乘以0.0625即可得到實際溫度
else //前五位為1時,讀取的溫度為負,標志位為1,此時需要
{ //將測得數值取反后再加1,再乘以0.0625即可得到實際溫度
tvalue=~tvalue+1;
tflag=1; //此時表示負溫度
}
tvalue=tvalue*(0.625);//溫度值擴大10倍,精確到1位小數
return(tvalue); //返回溫度值
}
/*************************************************************************************************************/
/************************溫度值顯示**************************************************************************/
void ds18b20disp()//溫度值顯示
{
uchar flagdat;
disdata[0]=tvalue/1000+0x30; //百位數
disdata[1]=tvalue%1000/100+0x30;//十位數
disdata[2]=tvalue%100/10+0x30; //個位數
disdata[3]=tvalue%10+0x30; //小數位
if(tflag==0)
flagdat=0x2b; //正溫度顯示符號:+
else
flagdat=0x2d; //負溫度顯示負號:-
if(disdata[0]==0x30)
{
disdata[0]=0x20; //如果百位為0,不顯示
if(disdata[1]==0x30)
{
disdata[1]=0x20; //如果百位為0,十位為0也不顯示
}
}
write_com(0x80+0x40); //定位數據指針的位置:第二行第六個字符處
write_data(flagdat); //顯示符號位
write_com(0x80+0x41); //定位數據指針的位置:第二行第七個字符處
write_data(disdata[0]); //顯示百位
write_com(0x80+0x42); //定位數據指針的位置:第二行第八個字符處
write_data(disdata[1]); //顯示十位
write_com(0x80+0x43); //定位數據指針的位置:第二行第九個字符處
write_data(disdata[2]); //顯示個位
write_com(0x80+0x44); //定位數據指針的位置:第二行第十個字符處
write_data(0x2e); //顯示小數點
write_com(0x80+0x45); //定位數據指針的位置:第二行第十一個字符處
write_data(disdata[3]); //顯示小數位
}
void main()
{
init();
write_com(0x80);
for(num=0;num<8;num++)
{
write_data(table[num]);
delay(5);
}
while(1)
{
read_temp(); //調用ds18b20讀取溫度
ds18b20disp(); //調用溫度顯示子函數
}
}
復制代碼
以上所有資料51hei提供打包下載:
ds18b20.rar
(1.99 KB, 下載次數: 88)
2019-6-9 01:32 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
tt98
時間:
2019-6-9 08:36
謝謝樓主!!!
作者:
花式帥
時間:
2020-6-6 08:23
可以做多路
作者:
w1179benp
時間:
2022-3-16 06:55
樓主的標題、圖片是LCD1601,可程序卻是LCD1602D的,???
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩在线
|
日韩免费av网站
|
亚洲综合五月天婷婷
|
日本黄色的视频
|
一区二区三区精品视频
|
伊人天堂网
|
国产亚洲黄色片
|
久久久久精
|
日韩视频免费看
|
亚洲视频区
|
成人在线电影在线观看
|
北条麻妃一区二区三区在线观看
|
91在线中文字幕
|
国产日韩精品久久
|
黄色成人免费在线观看
|
国产一区二区三区
|
一级黄色片免费在线观看
|
91精品国产综合久久精品图片
|
欧美人成在线视频
|
成人在线a
|
久久精品国产久精国产
|
91麻豆精品一区二区三区
|
久久久妇女国产精品影视
|
精品乱码一区二区三四区
|
国产精品视频偷伦精品视频
|
久久91精品
|
91成人午夜性a一级毛片
|
九九热精品视频
|
久久成人午夜
|
小草久久久久久久久爱六
|
国产精品久久午夜夜伦鲁鲁
|
久久国产精品视频
|
国产999精品久久久久久绿帽
|
国产91丝袜在线18
|
韩国久久
|
国产一二区免费视频
|
www国产成人免费观看视频,深夜成人网
|
欧美亚州综合
|
欧美高清视频一区
|
中文字幕一区在线观看视频
|
caoporn国产精品免费公开
|