传感器proteus虚拟实验.docx
《传感器proteus虚拟实验.docx》由会员分享,可在线阅读,更多相关《传感器proteus虚拟实验.docx(12页珍藏版)》请在冰点文库上搜索。
传感器proteus虚拟实验
传感器proteus虚拟实验
《传感器原理与应用》实验指导书
版本
实验1:
基于DS18B20传感器温度测量实验
步骤:
(1)在Proteus软件画出电路图
(2)用keilC软件写出C程序,并生成.hex文件,导入到单片机当中,进行仿真,观察结果。
包括:
2个头文件和;1个源文件;代码如下
:
#include<>据端口
ex文件,导入到单片机当中,进行仿真,观察结果。
压力测试仪
系统描述;输入15--115kPA压力信号
输出00h--ffh数字信号(adc0832)
在LCD上显示实际的压力值,如果超限则报警
线性区间标度变换公式:
y=(115-15)/(243-13)*X+15kpa
作者:
单位:
日期:
<>
#include""
#defineuintunsignedint
#defineucharunsignedchar
ex文件,导入到单片机当中,进行仿真,观察结果。
#include<>5us
SCK=0;
DATA=1;5us
SCK=0;
DATA=1;//释放数据总线
temp_LL=val;
}
charwrite(unsignedcharvalue)//写一个字节返回应答信号
{
unsignedchari;
ack=0;
for(i=0x80;i>0;i/=2)//释放数据总线
{if(i&value)DATA=1;//写入值
elseDATA=0;
SCK=1;//上升沿写入
_nop_();_nop_();_nop_();//延时
SCK=0;
}
DATA=1;//释放数据总线
SCK=1;//第9个脉冲
if(DATA==1)ack=1;
//读应答信号
SCK=0;
returnack;//error=1表示没有应答
}
voidstart_sht11(void)//启动
{
DATA=1;SCK=0;//数据为1,SCK=0
_nop_();
SCK=1;//第一个脉冲
_nop_();
DATA=0;//数据跌落
_nop_();
SCK=0;//完成一个脉冲
_nop_();_nop_();_nop_();
SCK=1;//再一个脉冲
_nop_();
DATA=1;//数据变为1
_nop_();
SCK=0;//完成该脉冲
}
voidsht_rest(void)//复位
{
unsignedchari;
DATA=1;SCK=0;//数据为1时钟为0
for(i=0;i<9;i++)//9个脉冲为复位
{SCK=1;
SCK=0;
}
start_sht11();//启动
}
//测量温度或者是温度,返回校验值
text_a(unsignedcharml)
{
unsignedinti;
start_sht11();//启动
write(ml);//写入测温度
if(ack==1)
{
sht_rest();//复位
write(ml);//写入测温度
}
//判断是否处于忙
//DATA=1;//释放数据总线
//for(i=0;i<65535;i++)if(DATA==0)break;
for(i=0;i<55535;i++){if(DATA==0)break;else{xianshi();}}
read();//读温度
}
/////////温湿度处理//////
text_jishuan_temp11()
{
error=0;
ack=0;
sht_rest();//复位
text_a(TEMP_ML);
text_jishuan_temp();
key();
text_a(HUMI_ML);
text_jishuan_humi();
}
//////////计算温度////
text_jishuan_temp()
{
floataa=0,bb=0,temp_zi;
intabcd=0;
aa=(float)temp_h*256+(float)temp_LL;
temp_zi=*aa-40;
if(temp_zi<0)
{
temp_zi=0;
}
temp_zi=temp_zi*10;
xianzhi_t=(int)temp_zi;//给显示值
}
///////计算湿度//////
text_jishuan_humi()
{
floataa=0,bb=0,humi_zi;
intabcd=0;
aa=(float)temp_h*256+(float)temp_LL;
bb=aa*aa*1000000;
aa=*aa;
aa=aa-4-bb;
humi_zi=aa;
humi_zi=humi_zi*10;
xianzhi_h=(int)humi_zi;
}
///////延时///////
delay(inti)
{
while(--i);
}
///////显示处理///////
xianshi()
{
intabcd=0;
inti;
for(i=0;i<1;i++)
{
abcd=xianzhi_h;
gwei=1;
swei=1;
bwei=1;
qwei=1;
P1=dispcode[abcd/100];
qwei=0;
delay(40);
qwei=1;
abcd=abcd%100;
P1=dispcode[abcd/10];
bwei=0;
delay(40);
bwei=1;
if(setbz_h^setbz_l)
{
if(setbz_h)abcd=setzhi_h;
if(setbz_l)abcd=setzhi_l;
P1=dispcode[abcd/10];
swei=0;
delay(40);
swei=1;
P1=dispcode[abcd%10];
gwei=0;
delay(40);
gwei=1;
}
else
{
abcd=xianzhi_t;
P1=dispcode[abcd/100];
swei=0;
delay(40);
swei=1;
abcd=abcd%100;
P1=dispcode[abcd/10];
gwei=0;
delay(40);
gwei=1;
}
}
}
doing()
{
charxianzhi_mi;
xianzhi_mi=xianzhi_t/10;
if((xianzhi_misetzhi_l)){motor=0;hot=0;speek=0;}
if(xianzhi_mi>setzhi_h){motor=1;hot=0;speek=1;}
if(xianzhi_mi}
key()
{
if(set&setkey)
{
setkey=0;
if(setbz_l){setbz_l=0;setbz_h=0;}
else
{if(!
setbz_h)setbz_h=1;
else{setbz_h=0;setbz_l=1;}
}
}
if(!
set)setkey=1;
if(setup==0)
{
if(setbz_h==1)
{if(setzhi_h<=99)setzhi_h++;}
if(setbz_l==1)
{if((setzhi_l}
if(setdown==0)
{
if(setbz_h==1)
{if((setzhi_h>setzhi_l)&(setzhi_h>=1))setzhi_h--;}
if(setbz_l==1)
{if(setzhi_l>=1)setzhi_l--;}
}
}
//系统初始化///
csh()
{
P0=0XFF;
P1=1;
P2=0;
P3=0XFF;
}
main()
{
setzhi_h=22;//设置高温
setzhi_l=20;//设置低温
csh();//系统初始化
while
(1)
{
text_jishuan_temp11();//测温湿度
//xianshi();//显示
doing();//处理
key();//键处理
//xianshi();//显示
}
}