亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機兩路測溫 Keil4工程+Proteus仿真
[打印本頁]
作者:
沉漚覓客
時間:
2017-6-11 11:13
標題:
單片機兩路測溫 Keil4工程+Proteus仿真
單片機兩路測溫 Keil4工程+Proteus仿真,有需要的自行下載
Proteus仿真圖:
0.png
(45 KB, 下載次數: 108)
下載附件
2017-6-11 16:32 上傳
0.png
(47.35 KB, 下載次數: 106)
下載附件
2017-6-11 16:32 上傳
單片機源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar i;
char csh=0;
sbit lcdrs=P2^0;
sbit lcdrw=P2^1;
sbit lcden=P2^2;
uchar code t0[]="the temperature ";
uchar code t1[]=" is ";
uchar code wendu[]="0123456789"; //利用一個溫度表解決溫度顯示亂碼
sbit DQ_1= P3^0;//定義ds18B20總線IO
sbit DQ_2= P3^1;//定義ds18B20總線IO
void delay(uint z);
void write_com(uchar com);
void write_date(unsigned char date);
void init_lcd();
void tmpDelay(int num);//延時函數
void Init_DS18B20();//初始化ds1820
unsigned char ReadOneChar_1();//讀一個字節
void WriteOneChar_1(unsigned char dat);//寫一個字節
unsigned int Readtemp_1();//讀取溫度
unsigned char ReadOneChar_2();//讀一個字節
void WriteOneChar_2(unsigned char dat);//寫一個字節
unsigned int Readtemp_2();//讀取溫度
void display();
void delay(uint z)
{
uint x,y;
for(x=100;x>1;x--)
for(y=z;y>1;y--);
}
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(unsigned char date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init_lcd()
{
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x01);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
for(i=0;i<16;i++)
{
write_date(t0[i]);
delay(0);
}
write_com(0x80+0x40);
for(i=0;i<16;i++)
{
write_date(t1[i]);
delay(0);
}
}
//溫度采集模塊
void tmpDelay(int num)//延時函數
{
while(num--) ;
}
/******************************************************************************/
void Init_DS18B20()//初始化ds1820
{
unsigned char x1=0;
unsigned char x2=0;
DQ_1 = 1; //DQ復位
tmpDelay(8); //稍做延時
DQ_1 = 0; //單片機將DQ拉低
tmpDelay(80); //精確延時 大于 480us
DQ_1 = 1; //拉高總線
tmpDelay(14);
x1=DQ_1; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
tmpDelay(20);
///////////////////////////////////////////
DQ_2 = 1; //DQ復位
tmpDelay(8); //稍做延時
DQ_2 = 0; //單片機將DQ拉低
tmpDelay(80); //精確延時 大于 480us
DQ_2 = 1; //拉高總線
tmpDelay(14);
x2=DQ_2; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
tmpDelay(20);
}
unsigned char ReadOneChar_1()//讀一個字節
{
unsigned char i=0;
unsigned char dat_1 = 0;
for (i=8;i>0;i--)
{
DQ_1 = 0; // 給脈沖信號
dat_1>>=1;
DQ_1 = 1; // 給脈沖信號
if(DQ_1)
dat_1|=0x80;
tmpDelay(4);
}
return(dat_1);
}
unsigned char ReadOneChar_2()//讀一個字節
{
unsigned char i=0;
unsigned char dat_2 = 0;
for (i=8;i>0;i--)
{
DQ_2 = 0; // 給脈沖信號
dat_2>>=1;
DQ_2 = 1; // 給脈沖信號
if(DQ_2)
dat_2|=0x80;
tmpDelay(4);
}
return(dat_2);
}
void WriteOneChar_1(unsigned char dat_1)//寫一個字節
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ_1= 0;
DQ_1= dat_1&0x01;
tmpDelay(5);
DQ_1= 1;
dat_1>>=1;
}
}
void WriteOneChar_2(unsigned char dat_2)//寫一個字節
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ_2= 0;
DQ_2= dat_2&0x01;
tmpDelay(5);
DQ_2= 1;
dat_2>>=1;
}
}
unsigned int Readtemp_1()//讀取溫度
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar_1(0xCC); // 跳過讀序號列號的操作
WriteOneChar_1(0x44); // 啟動溫度轉換
Init_DS18B20();
WriteOneChar_1(0xCC); //跳過讀序號列號的操作
WriteOneChar_1(0xBE); //讀取溫度寄存器
a=ReadOneChar_1(); //連續讀兩個字節數據 //讀低8位
b=ReadOneChar_1(); //讀高8位
t=b;
t<<=8;
t=t|a; //兩字節合成一個整型變量。
tt=t*0.0625; //得到真實十進制溫度值,因為DS18B20可以精確到0.0625度,所以讀回數據的最低位代表的是0.0625度
t= tt*10+0.5; //放大十倍,這樣做的目的將小數點后第一位也轉換為可顯示數字,同時進行一個四舍五入操作。
return(t);
}
unsigned int Readtemp_2()//讀取溫度
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar_2(0xCC); // 跳過讀序號列號的操作
WriteOneChar_2(0x44); // 啟動溫度轉換
Init_DS18B20();
WriteOneChar_2(0xCC); //跳過讀序號列號的操作
WriteOneChar_2(0xBE); //讀取溫度寄存器
a=ReadOneChar_2(); //連續讀兩個字節數據 //讀低8位
b=ReadOneChar_2(); //讀高8位
t=b;
t<<=8;
t=t|a; //兩字節合成一個整型變量。
tt=t*0.0625; //得到真實十進制溫度值,因為DS18B20可以精確到0.0625度,所以讀回數據的最低位代表的是0.0625度
t= tt*10+0.5; //放大十倍,這樣做的目的將小數點后第一位也轉換為可顯示數字,同時進行一個四舍五入操作。
return(t);
}
void display()
{
unsigned int num; //定義的時候用uchar宏定義就會出錯
unsigned int shi,ge,xiaoshu; //這里的num,shi,ge,xiaoshu 必須用unsigned int無符號整數來表示,用unshigned char 字符型則顯示錯誤
num=Readtemp_1();
if(csh<=8){num=0;csh++;}
shi=num/100;
ge=num/10%10;
xiaoshu=num%10;
write_com(0x80+0x40+5);
write_date(wendu[shi]);
write_com(0x80+0x40+6);
write_date(wendu[ge]);
write_com(0x80+0x40+7);
write_date(0x2e);
write_com(0x80+0x40+8);
write_date(wendu[xiaoshu]);
/////////////////////////////////////////////////////
num=Readtemp_2();
if(csh<=8){num=0;csh++;}
shi=num/100;
ge=num/10%10;
xiaoshu=num%10;
write_com(0x80+0x40+11);
write_date(wendu[shi]);
write_com(0x80+0x40+12);
write_date(wendu[ge]);
write_com(0x80+0x40+13);
write_date(0x2e);
write_com(0x80+0x40+14);
write_date(wendu[xiaoshu]);
}
復制代碼
所有資料51hei提供下載:
單片機,兩路測溫.rar
(71.52 KB, 下載次數: 32)
2017-6-11 11:12 上傳
點擊文件名下載附件
單片機兩路測溫 Keil4工程+Proteus仿真
下載積分: 黑幣 -5
作者:
阿九阿九
時間:
2020-3-19 15:48
有器件名單嗎
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1