資源簡介
Proteus的電子溫度檢測仿真系統,源代碼及原理圖都有

代碼片段和文件信息
//DS18B20默認為12位精度
#include
#include
#define?uchar?unsigned?char
#define?uint?unsigned?int
unsigned?char?code?shuma[]={
0x3f???0x06??0x5b??0x4f??0x66??0x6d?
?0x7d??0x07??0x7f???0x6f??
0x77??0x7c?0x39??0x5e?
?0x79??0x71??0x00???};
sbit?T_Port=P1^0;
sbit?dot=P2^7;
uchar?temp_hightemp_low;
uint?final_temp;
void?delay(uchar?x)
{
while(x--);
}
void?delay_long(uint?x)
{
uint?i;
while(x--)
{
for(i=0;i<125;i++)
{}
}
}
void?init_ds18b20()//初始化
{
T_Port=1;//復位
delay(2);//稍作延時
T_Port=0;
delay(85);//延時大于480us(520us)
T_Port=1;
delay(8);//這個時間不能太長,否則就過了檢測信號的時間了
}
void?read_signal()//讀取應答脈沖
{
while(T_Port);
while(~T_Port)//檢測到應答脈沖
{
delay(4);
break;
}
}
bit?readbit_ds18b20()
{
bit?b;
T_Port=1;
delay(3);//稍作延時
T_Port=0;
delay(1);//保持低最少1us(4us)
T_Port=1;
delay(2);//延時15us以后輸出數據有效(23us)
b=T_Port;
delay(10);//讀時間間隙不少于60us(71us)
return(b);
}
void?writebyte_ds18b20(uchar?b)//寫0寫1一起完成
{
int?ij;
uchar?btemp;
T_Port=1;
for(i=0;i<8;i++)
{
j=0;
btemp=b&0x01;
b>>=1;
if(btemp==0)
{
T_Port=0;
delay(10);//保持拉低在60us以上(71us)
T_Port=1;
}
else
{
T_Port=0;
j++;//15us之內拉高
T_Port=1;
delay(10);//整個寫時序時間在60us以上(71us)
}
}
}
void?temp_convert()
{
init_ds18b20();//初始化
read_signal();//讀取應答脈沖
delay_long(1);
writebyte_ds18b20(0xcc);//跳過驗證序列號命令,若單線上有多個ds18b20,則不可用這個命令
writebyte_ds18b20(0x44);//啟動溫度轉換命令
}
char?readbyte_ds18b20()
{
uint?i;
uchar?ab;
b=0;
for(i=0;i<8;i++)
{
a=readbit_ds18b20();
b=(a< }
return(b);
}
uint?read_ds18b20()
{
uint?y;
float?yy;
init_ds18b20();//初始化
read_signal();//讀取應答脈沖
delay_long(1);
writebyte_ds18b20(0xcc);//跳過驗證序列號命令
writebyte_ds18b20(0xbbe);//讀取內部ROM的數據
temp_low=readbyte_ds18b20();//讀數據時低位在前,高位在后
temp_high=readbyte_ds18b20();
y=temp_high;
y<<=8;
y=y|temp_low;//整合為一個int型
yy=y*0.0625;//12位精度為0.0625
// y=yy*10+0.5;
y=yy*10;
return(y);
}
void?display(uint?x)
{
uchar?abc;
a=x/100;
b=x%100/10;
c=x%10;
P3=0xFE;
P2=shuma[a];
delay_long(2);
P3=0xFD;
P2=shuma[b];
dot=1;//點亮小數點
delay_long(2);
P3=0xFB;
P2=shuma[c];
delay_long(2);
P3=0xF7;
P2=shuma[0];
delay_long(2);
dot=0;
}
void?ReadTemp()
{
do
{
delay_long(10);//delay(5)就是延時555us
temp_convert();
delay_long(5);
final_temp=read_ds18b20();
display(final_temp);
}
while(1);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2734??2011-07-05?14:21??電子溫度檢測系統\18B20.c
?????文件???????2716??2011-07-06?08:15??電子溫度檢測系統\18B20.h
?????文件???????1994??2011-07-06?07:34??電子溫度檢測系統\18B201.h
?????文件???????1994??2011-07-06?07:34??電子溫度檢測系統\18B202.h
?????文件???????1994??2011-07-06?07:34??電子溫度檢測系統\18B203.h
?????文件???????1994??2011-07-06?07:34??電子溫度檢測系統\18B204.h
?????文件???????1836??2011-07-06?07:43??電子溫度檢測系統\GetKey.h
?????文件?????159159??2011-07-06?07:26??電子溫度檢測系統\Last?Loaded?shiyan.DBK
?????文件?????159159??2011-07-06?08:16??電子溫度檢測系統\shiyan.DSN
?????文件???????2198??2011-07-06?08:20??電子溫度檢測系統\shiyan.PWI
?????文件???????6376??2009-05-07?14:37??電子溫度檢測系統\STARTUP.A51
?????文件??????14048??2011-07-06?08:15??電子溫度檢測系統\STARTUP.LST
?????文件????????749??2011-07-06?08:15??電子溫度檢測系統\STARTUP.OBJ
?????文件??????35234??2011-07-06?08:15??電子溫度檢測系統\溫度
?????文件???????1201??2011-07-06?08:14??電子溫度檢測系統\溫度.c
?????文件???????9635??2011-07-06?08:15??電子溫度檢測系統\溫度.hex
?????文件?????????56??2011-07-06?08:15??電子溫度檢測系統\溫度.lnp
?????文件???????3920??2011-07-06?08:15??電子溫度檢測系統\溫度.LST
?????文件??????54955??2011-07-06?08:15??電子溫度檢測系統\溫度.M51
?????文件??????41853??2011-07-06?08:15??電子溫度檢測系統\溫度.OBJ
?????文件????????170??2011-07-06?08:20??電子溫度檢測系統\溫度.plg
????.......?????60566??2011-07-06?08:20??電子溫度檢測系統\溫度.uvopt
????.......?????13404??2011-07-05?21:39??電子溫度檢測系統\溫度.uvproj
????.......?????60564??2011-07-06?08:15??電子溫度檢測系統\溫度_uvopt.bak
????.......?????13400??2011-07-05?14:29??電子溫度檢測系統\溫度_uvproj.bak
?????目錄??????????0??2011-07-06?08:20??電子溫度檢測系統
-----------?---------??----------?-----??----
???????????????651909????????????????????26
- 上一篇:excel做的記賬工具
- 下一篇:.小型虛擬超市管理系統miniVS的狀態圖和活動圖
評論
共有 條評論