欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
帶注釋的DS18B20測溫單片機程序源碼
[打印本頁]
作者:
lxy5533533
時間:
2018-6-10 14:07
標題:
帶注釋的DS18B20測溫單片機程序源碼
單片機源程序如下:
#include<reg52.h>
#include<intrins.h>
#include <math.H>
#define uchar unsigned char
#define uint unsigned int
uchar i,L,M;
uchar datas[] = {0, 0, 0, 0, 0};
sbit ds=P2^2;
sbit RW = P3^6;
sbit RS = P3^5;
sbit EN = P3^4;
void delay(uchar us)
{
while(us--);
}
void delayMs(uint a)
{
uint i, j;
for(i = a; i > 0; i--)
for(j = 100; j > 0; j--);
}
/***LCD1602顯示***/
void Read_busy()
{
uchar busy;
P0=0xff;
RS = 0;
RW=1;
do
{
EN = 1;
busy=P0;
EN=0;
}
while(P0&0x80);//0x80:10000000,判斷狀態字的最后一位是0還是1.如果是0,則為不忙。不忙的話,則可以跳出do....while循環
}
//讀狀態,將液晶的狀態發回給單片機
void writeCmd(uchar cmd)//寫1602命令一個字節
{
Read_busy();//判斷忙
RS = 0;
RW=0;
P0 = cmd;//發送狀態字
EN = 1;//數據送過去以后,1602把它讀走。
EN=0;
}
//1602顯示字符串函數
void Write_data(uchar date)
{
Read_busy();//判斷忙不忙
RS = 1;
RW=0;
P0 = date;//把數據送到數據線上
EN = 1;
EN=0;
}
void init()
{
RW= 0;
writeCmd(0x38);
writeCmd(0x0c);
writeCmd(0x06);
writeCmd(0x01);
}
/****18B20函數****/
void Init()//DS18B20初始化
{
//uchar t;
ds=1;
_nop_();//小小的延時
ds=0;
delay(75);//拉低總線499.45us;
ds=1;
//t=ds;//把ds的值賦給i,等待ds響應,如果i為1,則傳回主函數中去,及檢測到了DS18B20的響應
delay(20);
ds=1;//釋放總線
_nop_();
//return(t);
}
uchar read_byte()//讀數據
{
uchar i,j,dat;
for(i=0;i<8;i++)
{
ds=0;
_nop_();
ds=1;//釋放總線
_nop_();
j=ds;//獲取數據
delay(10);
ds=1;
_nop_();
dat=(j<<7|dat>>1);//j左移7位,dat右移。一個字節便被存進去了
return(dat);
}
}
void write_byte(uchar dat)//寫數據
{
uchar i;
for(i=0;i<8;i++)
{
ds=0;
_nop_();
ds=dat&0x01;//當dat最低位為1時。與上以后還是1.所以就滿足時序圖的要求了。
delay(10);
ds=1;//釋放總線,準備下一次數據輸入
_nop_();//釋放總線要保持1us
dat>>=1;
}
}
void tempcod(uint t) //溫度轉化。。。顯示溫度值函數,t傳遞的是整形的溫度值(t是傳過來的溫度)
{
uchar temp;
datas[0] = (temp / 10)+'0';//十位轉ASCLL碼
datas[1] = (temp % 10)+'0';//個位轉ASCLL碼
/* datas[2] = '\'';
datas[3] = 'c';
datas[4] = '0';//字符串結束符
Write_data(12,1,datas[]);//表示顯示在橫坐標為12,縱坐標在第二行的地方。*/
}
void display()
{
writeCmd(0x46|0x80);
Write_data(datas[0]);//顯示十位
Write_data(datas[1]);//顯示個位
Write_data('.');
Write_data(0xdf);
Write_data('c');
}
main()
{
writeCmd(0x38);//顯示設置16*2顯示
writeCmd(0x0c);//開顯示
writeCmd(0x06);//地址指針加一
writeCmd(0x80);//顯示的位置(地址)
writeCmd(0x01);//清屏
// Write_data(i);
//while(1);//讓程序一直停在這里
while(1)
{
Init();
write_byte(0xcc);//跳過ROM指令
write_byte(0x44);//發送溫度轉化指令
Init();
write_byte();//讀取暫存器的值
L=read_byte();//低八位
M=read_byte();//高八位
i=M;i<<=8;
i|=L;
i=i*0.0625*10+0.5;
display(i);
}
}
復制代碼
作者:
魏海龍
時間:
2019-11-1 15:50
樓主 你這里面 display里怎么可以放i變量 我用你的程序 編譯程序報錯
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1