传感器proteus虚拟实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《传感器原理与应用》实验指导书
版本
实验1:基于DS18B20传感器温度测量实验
步骤:(1)在Proteus软件画出电路图
(2)用keil C 软件写出C程序,并生成.hex文件,导入到单片机当中,进行仿真,观察结果。
包括:2个头文件和; 1个源文件;代码如下
:
#include <>据端口
ex文件,导入到单片机当中,进行仿真,观察结果。
压力测试仪
系统描述;输入 15--115kPA压力信号
输出 00h--ffh数字信号(adc0832)
在LCD上显示实际的压力值,如果超限则报警
线性区间标度变换公式: y=(115-15)/(243-13)*X+15kpa
作者:
单位:
日期: <>
#include ""
#define uint unsigned int
#define uchar unsigned char
ex文件,导入到单片机当中,进行仿真,观察结果。
#include <> 5 us
SCK=0;
DATA=1; 5 us
SCK=0;
DATA=1; //释放数据总线
temp_LL=val;
}
char write(unsigned char value) //写一个字节返回应答信号{
unsigned char i ;
ack=0;
for (i=0x80;i>0;i/=2) //释放数据总线
{ if (i & value) DATA=1; //写入值
else DATA=0;
SCK=1; //上升沿写入
_nop_(); _nop_(); _nop_(); //延时
SCK=0;
}
DATA=1; //释放数据总线
SCK=1; //第9个脉冲
if (DATA==1) ack=1;
//读应答信号
SCK=0;
return ack; //error=1 表示没有应答
}
void start_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; //完成该脉冲
}
void sht_rest(void) //复位
{
unsigned char i;
DATA=1; SCK=0; //数据为1 时钟为0 for(i=0;i<9;i++) //9 个脉冲为复位 { SCK=1;
SCK=0;
}
start_sht11(); //启动
}
//测量温度或者是温度,返回校验值
text_a(unsigned char ml)
{
unsigned int i;
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()
{
float aa=0,bb=0,temp_zi;
int abcd=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()
{
float aa=0,bb=0,humi_zi;
int abcd=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;
}