• 大小: 108KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: 其他
  • 标签: proteus  温度仿真  

资源简介

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


评论

共有 条评论