传感器proteus虚拟实验教案资料
传感器proteus虚拟实验
![传感器proteus虚拟实验](https://img.taocdn.com/s3/m/baead15a5022aaea998f0fe5.png)
《传感器原理与应用》实验指导书版本实验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 charex文件,导入到单片机当中,进行仿真,观察结果。
#include <> 5 usSCK=0;DATA=1; 5 usSCK=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;}///////延时/////// delay(int i){while(--i); }///////显示处理/////// xianshi(){int abcd=0;int i;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(){char xianzhi_mi;xianzhi_mi=xianzhi_t/10;if((xianzhi_mi<setzhi_h)&(xianzhi_t>setzhi_l)) { motor=0;hot=0;speek=0;} if(xianzhi_mi>setzhi_h) { motor=1;hot=0;speek=1;}if(xianzhi_mi<setzhi_l) { motor=0;hot=1;speek=1;}}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<setzhi_h)&(setzhi_l<=99)) 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();//显示 }}。
基于Proteus软件的传感器仿真实践教学研究
![基于Proteus软件的传感器仿真实践教学研究](https://img.taocdn.com/s3/m/2e543b2891c69ec3d5bbfd0a79563c1ec4dad746.png)
武汉工程眼业技术学院学抿Wubad EtigLiiecriag la$EiE«Ee Vol.JSNo.l March202B第33卷第I堰2021年3月基于Proteus软件的传感器仿真实践教学研究叶茎李云平谷玉玲(武汉软件工程职业学院,湖北武汉:430205)摘要基于Proteus仿真软件,分析了传感器仿真实践教学中存在的问题,对教学适用条件、传感器仿真软件的选择、仿真资源的建设、仿真教学的设计、学习成绩评价及效果进行了分析和研究,并以仿真软件Proteus中数字温度传感器DS18B20,数字压力传感器MPX4250和超声波传感器的仿真教学设计为例,针对所存在的教学问题,从硬件设计和软件设计两方面详细讲述了共性、个性教学任务的具体设计。
该研究为传感器理论和实践教学发展提供了经验参考。
关键词传感器;仿真实践教学;Proteus中图分类号:TP212;G434文献标识码:A文章编号:1671-3524(2021)01-0095-04随着互联网技术的发展,教育数字化和智能化的时代来临。
使用在线课程资源,采用翻转课堂、线上线下混合教学模式m,灵活地结合手机、平板等移动终端囚,是专业课程教学发展的新趋势。
为适应线上线下教学需要,仿真实践教学通过在计算机上模拟现实仪器设备的操作及实验效果闪,突破了环境的限制,已得到广泛应用。
在仿真实践软件中,Proteus是集电路设计、单片机编程于一体的通用软件,可以联调电路元件、单片机代码并协同仿真,只需要普通计算机就可以运行,非常适合教师低成本开发仿真实践教学资源,其虚拟元件库包含了一些常用的传感器元件。
随着制造业智能化的发展,传感器在智能制造、机器人、物联网、人工智能等新兴产业中起到重要的数据采集、信息监控、开关检测等作用⑷。
工科专业传感器课程的实践教学,因存在缺乏实践设备、耗材,缺少自主设计的实践项目等问题,急需开发在线仿真实践教学项目,以丰富在线教学资源。
传感器proteus虚拟实验教学内容
![传感器proteus虚拟实验教学内容](https://img.taocdn.com/s3/m/0de7a1a8700abb68a882fb3f.png)
传感器p r o t e u s虚拟实验《传感器原理与应用》实验指导书Proteus-V1.0版本实验1:基于DS18B20传感器温度测量实验步骤:(1)在Proteus软件画出电路图(2)用keil C 软件写出C程序,并生成.hex文件,导入到单片机当中,进行仿真,观察结果。
包括:2个头文件LCD1602.h和DS18B20.h; 1个源文件LCD_18b20.c;代码如下LCD1602.h:#include <at89x51.h>//用AT89C51时就用这个头文件//#include <reg52.h>//用华邦W78E58B时必须用这个头文件#include <intrins.h>//注意那个LCD_Wait()函数,它是判"忙"标志的,在实际硬件要把注掉的那种打开//PortDefinitions********************************************************** sbit LcdRs = P2^0;sbit LcdRw = P2^1;sbit LcdEn = P2^2;sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口//内部等待函数********************************************************************* *****unsigned char LCD_Wait(void){LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_();//while(DBPort&0x80);//在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,//可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80//实际硬件时打开此语句LcdEn=0;return DBPort;}//向LCD写入命令或数据************************************************************#define LCD_COMMAND 0 // Command#define LCD_DATA 1 // Data#define LCD_CLEAR_SCREEN 0x01 // 清屏#define LCD_HOMING 0x02 // 光标返回原点void LCD_Write(bit style, unsigned char input){LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input; _nop_();//注意顺序LcdEn=1; _nop_();//注意顺序LcdEn=0; _nop_();LCD_Wait();}//设置显示模式************************************************************#define LCD_SHOW 0x04 //显示开#define LCD_HIDE 0x00 //显示关#define LCD_CURSOR 0x02 //显示光标#define LCD_NO_CURSOR 0x00 //无光标#define LCD_FLASH 0x01 //光标闪动#define LCD_NO_FLASH 0x00 //光标不闪动void LCD_SetDisplay(unsigned char DisplayMode){LCD_Write(LCD_COMMAND, 0x08|DisplayMode);}//设置输入模式************************************************************#define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 // default#define LCD_MOVE 0x01 // 画面可平移#define LCD_NO_MOVE 0x00 //defaultvoid LCD_SetInput(unsigned char InputMode){LCD_Write(LCD_COMMAND, 0x04|InputMode);}//初始化LCD************************************************************ void LCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动}//******************************************************************** ****void GotoXY(unsigned char x, unsigned char y){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}void Print(unsigned char *str){while(*str!='\0'){LCD_Write(LCD_DATA,*str);str++;}}void LCD_Print(unsigned char x, unsigned char y, unsigned char *str){GotoXY(x,y);Print(str);}DS18b20.h#include <at89x51.h>//用AT89C51时就用这个头文件//#include <reg52.h>//用华邦W78E58B时必须用这个头文件sbit DQ = P3^4; //定义DQ引脚为P3.4/***********ds18b20延迟子函数(晶振12MHz )*******//************DS18B20对时间要求很严,但只能长不能短*************在11.0592M下也行,因为时间长些********/void delay_18B20(unsigned int i){while(i--);}/**********ds18b20初始化函数**********************/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay_18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低delay_18B20(80); //精确延时大于 480usDQ = 1; //拉高总线delay_18B20(14);x=DQ; //稍做延时后如果x=0则初始化成功 x=1则初始化失败 delay_18B20(20);}/***********ds18b20读一个字节**************/unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay_18B20(4);}return(dat);}/*************ds18b20写一个字节****************/void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay_18B20(5);DQ = 1;dat>>=1;}}/**************读取ds18b20当前温度************/unsigned char *ReadTemperature(char TH,char TL,unsigned char RS){ unsigned char tt[2];Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x4E); // //写入"写暂存器"命令,修改TH和TL和分辩率配置寄存器//先写TH,再写TL,最后写配置寄存器WriteOneChar(TH); //写入想设定的温度报警上限WriteOneChar(TL); //写入想设定的温度报警下限WriteOneChar(RS); //写配置寄存器,格式为0 R1 R0 1,1 1 1 1//R1R0=00分辨率娄9位,R1R0=11分辨率为12位delay_18B20(80); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay_18B20(80); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(80);tt[0]=ReadOneChar(); //读取温度值低位tt[1]=ReadOneChar(); //读取温度值高位return(tt);}LCD_18b20.c#include <at89x51.h>//用AT89C51时就用这个头文件//#include <reg52.h>//用华邦W78E58B时必须用这个头文件#include <absacc.h>#include <ctype.h>#include <math.h>#include <stdio.h>#include <string.h>#include <DS18B20.h>#include "LCD1602.h" ////液晶显示头文件//sbit DQ = P3^4; //定义DQ引脚为P3.4unsigned char t[2],*pt; //用来存放温度值,测温程序就是通过这个数组与主函数通信的unsigned char TempBuffer1[9]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,'\0'};//显示实时温度,上电时显示+125.00Cunsigned char TempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20, 0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,'\0'};//显示温度上下限,上电时显示TH:+125 TL:+124Cunsigned char code dotcode[4]={0,25,50,75};/***因显示分辨率为0.25,但小数运算比较麻烦,故采用查表的方法*******再将表值分离出十位和个位后送到十分位和百分位********************/void covert0( unsigned char TH, unsigned char TL) //将温度上下限转换为LCD显示的数据{if(TH>0x7F) //判断正负,如果为负温,将其转化为其绝对值{TempBuffer0[3]=0x2d; //0x2d为"-"的ASCII码TH=~TH;TH++;}else TempBuffer0[3]=0x2b; //0x2B为"+"的ASCII码if(TL>0x7f){TempBuffer0[11]=0x2d; //0x2d为"-"的ASCII码TL=~TL+1;}else TempBuffer0[11]=0x2b; //0x2B为"+"的ASCII码TempBuffer0[4]=TH/100+0x30; //分离出TH的百十个位 if( TempBuffer0[4]==0x30) TempBuffer0[4]=0xfe; //百位数消隐TempBuffer0[5]=(TH%100)/10+0x30; //分离出十位 TempBuffer0[6]=(TH%100)%10+0x30; //分离出个位 TempBuffer0[12]=TL/100+0x30; //分离出TL的百十个位 if( TempBuffer0[12]==0x30) TempBuffer0[12]=0xfe; //百位数消隐TempBuffer0[13]=(TL%100)/10+0x30; //分离出十位 TempBuffer0[14]=(TL%100)%10+0x30; //分离出个位}void covert1(void) //将温度转换为LCD显示的数据{unsigned char x=0x00,y=0x00;t[0]=*pt;pt++;t[1]=*pt;if(t[1]>0x07) //判断正负温度{TempBuffer1[0]=0x2d; //0x2d为"-"的ASCII码t[1]=~t[1]; /*下面几句把负数的补码*/t[0]=~t[0]; /* 换算成绝对值*********/x=t[0]+1; /***********************/t[0]=x; /***********************/if(x>255) /**********************/t[1]++; /*********************/}else TempBuffer1[0]=0x2b; //0xfe为变"+"的ASCII码t[1]<<=4; //将高字节左移4位t[1]=t[1]&0x70; //取出高字节的3个有效数字位x=t[0]; //将t[0]暂存到X,因为取小数部分还要用到它x>>=4; //右移4位x=x&0x0f; //和前面两句就是取出t[0]的高四位t[1]=t[1]|x; //将高低字节的有效值的整数部分拼成一个字节TempBuffer1[1]=t[1]/100+0x30; //+0x30 为变 0~9 ASCII码if( TempBuffer1[1]==0x30) TempBuffer1[1]=0xfe; //百位数消隐TempBuffer1[2]=(t[1]%100)/10+0x30; //分离出十位TempBuffer1[3]=(t[1]%100)%10+0x30; //分离出个位t[0]=t[0]&0x0c; //取有效的两位小数t[0]>>=2; //左移两位,以便查表x=t[0];y=dotcode[x]; //查表换算成实际的小数TempBuffer1[5]=y/10+0x30; //分离出十分位TempBuffer1[6]=y%10+0x30; //分离出百分位}void delay(unsigned char i){while(i--);}main(){unsigned char TH=110,TL=-20; //下一步扩展时可能通过这两个变量,调节上下限//测温函数返回这个数组的头地址while(1){pt=ReadTemperature(TH,TL,0x3f); //上限温度-22,下限-24,分辨率10位,也就是0.25C//读取温度,温度值存放在一个两个字节的数组中,delay(100);covert1();covert0(TH,TL);LCD_Initial(); //第一个参数列号,第二个为行号,为0表示第一行//为1表示第二行,第三个参数为显示数据的首地址LCD_Print(0,0,TempBuffer0);LCD_Print(0,1,TempBuffer1);}}实验2:基于MPX4115传感器温度测量实验步骤:(1)在Proteus软件画出电路图(2)用keil C 软件写出C程序,并生成.hex文件,导入到单片机当中,进行仿真,观察结果。
基于Proteus仿真技术在传感器教学中的应用
![基于Proteus仿真技术在传感器教学中的应用](https://img.taocdn.com/s3/m/769f36013868011ca300a6c30c2259010202f3b3.png)
基于Proteus仿真技术在传感器教学中的应用作为物联网产业核心之一的传感器技术,在近年来得到了快速发展,逐渐应用到我们生活的各个领域。
在传感器的教学中,仿真技术是一项非常重要的技术手段,可以极大地提高学生的学习效率和实践能力。
Proteus是一款功能强大的电子设计自动化软件,可以模拟各种电子电路以及单片机的运行情况。
在传感器的教学中,借助Proteus仿真技术可以构建各种传感器电路,并模拟实际应用过程,使学生更好地理解传感器的原理与应用。
1.构建传感器实验电路在Proteus中,可以从库中选择各种传感器元件,如温度传感器、湿度传感器、气体传感器等,构建相应的实验电路。
结合实际传感器的原理,完成对应用场景的模拟实验。
2.模拟传感器输出数据利用Proteus模拟传感器输出数据的过程,可以让学生更好地了解传感器输出信号的类型、数值、变化规律等。
这对于学生能够根据传感器输出信号完成数据解析、处理与应用有很大的帮助。
3.仿真传感器应用场景通过Proteus可以构建一些典型的传感器应用场景,如自动灯光控制、智能门锁等。
让学生通过实际操作,模拟出这些场景的工作过程,这样可以让学生对传感器的应用有更加深入、细致的理解。
1.易于操作Proteus的操作方式简单易学,学生学习Proteus并进行仿真操作时,不会陷入真实操作中遇到的各种困难。
可以有效缩短学习时间,提高学习效果。
2.模拟电路稳定性在实际电路中,电路会受到很多影响,如电源波动、噪声等等。
而在Proteus中,可以非常方便地模拟这些干扰因素,从而使学生了解到电路的稳定性与鲁棒性。
3.可实现快速迭代在实际电路设计与实现中,反复调试所需的时间与成本比较大。
而在Proteus中,能够快速地针对电路进行修改与调试,避免了在实际电路中的一些失误与错误。
综上,Proteus仿真技术在传感器教学中的应用对于学生的学习效率和实践能力都有很大的提高,应该在传感器教学中得到更广泛的应用。
第四次实验-PROTEUS虚拟仪器实验
![第四次实验-PROTEUS虚拟仪器实验](https://img.taocdn.com/s3/m/3da3abcaa1c7aa00b52acbe7.png)
SS:从模式选择端,从模式时必须为低电平才能
使终端响应;主模式时当数据正传输时此端为低电 平。 TRIG:输入端,能够把下一个存储序列放到SPI的 输出序列中。 双击SPI的原理图符号,可以打开它的属性设置对 话框,如图4-50所示。
DIN DOUT SCK SS TRIG
SPI
图4-50 SPI属性设置对话框
入,每条总线支持16位数据,主要用于接单片机的 动态输出信号。运行后,可以显示A0~A15、 B0~B3的数据输入波形。
(A0) A0 A1 A2 A3 A4 A5 A6 A7 B0[0..7] B1[0..7] A8 A9 A10 A11 A12 A13 A14 A15 B2[0..7] B3[0..7]
2. 虚拟示波器的使用 (1) 示波器的四个接线端A、B、C、D应分别接四路 输入信号,信号的另一端应接地。该虚拟示波器能 同时观看四路信号的波形。 (2) 照图4-35接线。把1kHz、1V的正弦激励信号加 到示波器的A通道。
Sine Source
A
A
B
B
C D
C D
图4-34 虚拟示波器
图4-35 正弦信号与示波器的接法
图4-33 虚拟仪器列表
4.2.1 示波器
1. 放置虚拟示波器 (1) 在Proteus ISIS环境中单击虚拟仪器模式 “Virtual Instrument Mode”按钮图标,出现如图433所示的所有虚拟仪器名称列表。 (2) 用鼠标左键单击列表区的“OSCILLOSCOPE”, 则在预览窗口出现示波器的符号。 (3) 在编辑窗口单击鼠标左键,出现示波器的拖动图 像,拖动鼠标指针到合适位置,再次单击左键,示 波器被放置到原理图编辑区中去。虚拟示波器的原 理符号如图4-34所示。
传感器proteus虚拟实验
![传感器proteus虚拟实验](https://img.taocdn.com/s3/m/5a9c0971376baf1ffc4fad9f.png)
《传感器原理与应用》实验指导书版本实验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//ADC0832的引脚sbit ADCS =P2^0; //ADC0832 chip seclectsbit ADDI =P3^7; //ADC0832 k insbit ADDO =P3^7; //ADC0832 k outsbit ADCLK =P3^6; //ADC0832 clock signalunsigned char dispbitcode[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f}; //位扫描unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}; //共阳数码管字段码unsigned char dispbuf[4];uint temp;uchar getdata; //获取ADC转换回来的值void delay_1ms(void) //12mhz delay{unsigned char x,y;x=3;while(x--){y=40;while(y--);}}void display(void) //数码管显示函数{char k;for(k=0;k<4;k++){P1 = dispbitcode[k];P0 = dispcode[dispbuf[k]];if(k==1) //加上数码管的dp小数点P0&=0x7f;delay_1ms();}}/************读ADC0832函数************///采集并返回unsigned int Adc0832(unsigned char channel) //AD转换,返回结果{uchar i=0;uchar j;uint dat=0;uchar ndat=0;if(channel==0)channel=2;if(channel==1)channel=3;ADDI=1;_nop_();_nop_();ADCS=0;//拉低CS端_nop_();_nop_();ADCLK=1;//拉高CLK端_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿1 _nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=channel&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿2 _nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=(channel>>1)&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿3 ADDI=1;//控制命令结束_nop_();_nop_();dat=0;for(i=0;i<8;i++){dat|=ADDO;//收数据ADCLK=1;_nop_();_nop_();ADCLK=0;//形成一次时钟脉冲_nop_();_nop_();dat<<=1;if(i==7)dat|=ADDO;}for(i=0;i<8;i++){j=0;j=j|ADDO;//收数据ADCLK=1;_nop_();_nop_();ADCLK=0;//形成一次时钟脉冲_nop_();_nop_();j=j<<7;ndat=ndat|j;if(i<7)ndat>>=1;}ADCS=1;//拉低CS端ADCLK=0;//拉低CLK端ADDO=1;//拉高数据端,回到初始状态dat<<=8;dat|=ndat;return(dat); //return ad k}void main(void){while(1){ unsigned int temp;float press;getdata=Adc0832(0);if(14<getdata<243) //当压力值介于15kpa到115kpa 之间时,遵循线性变换{int vary=getdata;//y=(115-15)/(243-13)*X+15kpapress=(*vary)+; //测试时补偿值为temp=(int)(press*10); //放大10倍,便于后面的计算dispbuf[3]=temp/1000; //取压力值百位dispbuf[2]=(temp%1000)/100; //取压力值十位dispbuf[1]=((temp%1000)%100)/10; //取压力值个位dispbuf[0]=((temp%1000)%100)%10; //取压力值十分位display();}}}。
基于Proteus仿真技术在传感器教学中的应用
![基于Proteus仿真技术在传感器教学中的应用](https://img.taocdn.com/s3/m/429ae10630126edb6f1aff00bed5b9f3f90f7297.png)
基于Proteus仿真技术在传感器教学中的应用近年来,随着物联网、工业互联网等领域的蓬勃发展,传感器技术成为信息采集、环境监测、智能控制等重要应用的基础。
在传感器教学中,学生需要通过理论课程的学习和实践操作的训练,了解传感器的基本原理和特点,掌握传感器的工作方式和信号处理方法,提高设计制作和应用调试的能力。
而基于Proteus仿真技术的传感器教学应用,可以为学生提供一个虚拟的实验平台,帮助学生更好地理解传感器的工作原理和应用方法,提高实践操作的效率和成功率。
首先,基于Proteus仿真技术的传感器教学应用,可以模拟真实的环境和设备,让学生在虚拟的实验场景中操作。
比如,对于温度传感器的应用,可以通过在Proteus中添加温度传感器模块、温度计和电路板等组成一个完整的测温电路,然后设置不同温度值的输入信号,模拟温度变化对传感器输出信号的影响。
学生可以通过仿真软件动态观察、控制温度变化和测量结果,直观了解温度传感器的精度、响应速度等性能指标。
其次,基于Proteus仿真技术的传感器教学应用,可以灵活调整实验参数和参数范围,帮助学生深入理解传感器的工作原理和性能规律。
比如,对于光敏电阻传感器的实验,可以通过调整光源强度、波长、角度和距离等参数,观察电阻值的变化和响应速度,探究光敏电阻的灵敏度、直线性、抗干扰等特性。
通过分析实验数据,学生可以从实验中收获深入的知识和经验,帮助他们更好地设计和调试传感器应用系统。
最后,基于Proteus仿真技术的传感器教学应用,具有操作简便、安全可靠、低成本等优点。
传感器仿真软件可以在不受时间、空间和设备限制的情况下进行实验,不仅可以降低实验成本和风险,还可以让学生自主探究、创新设计,开放思维,拓展技能。
另外,仿真软件的操作界面友好,操作步骤逻辑清晰,易于学生学习和掌握。
总之,基于Proteus仿真技术的传感器教学应用是一种理论和实践相结合的有效手段,可以为传感器教学提供一个拓展和深化的空间。
传感器proteus虚拟实验教学内容
![传感器proteus虚拟实验教学内容](https://img.taocdn.com/s3/m/8d7775ac690203d8ce2f0066f5335a8102d266e7.png)
传感器proteus虚拟实验教学内容传感器p r o t e u s虚拟实验《传感器原理与应用》实验指导书Proteus-V1.0版本实验1:基于DS18B20传感器温度测量实验步骤:(1)在Proteus软件画出电路图(2)用keil C 软件写出C程序,并生成.hex文件,导入到单片机当中,进行仿真,观察结果。
包括:2个头文件LCD1602.h和DS18B20.h; 1个源文件LCD_18b20.c;代码如下LCD1602.h:#include //用AT89C51时就用这个头文件//#include //用华邦W78E58B时必须用这个头文件#include//注意那个LCD_Wait()函数,它是判"忙"标志的,在实际硬件要把注掉的那种打开//PortDefinitions*************************************************** ******* sbit LcdRs = P2^0;sbit LcdRw = P2^1;sbit LcdEn = P2^2;sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口//内部等待函数*************************************************************** ****** *****unsigned char LCD_Wait(void){LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_();//while(DBPort&0x80);//在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,//可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80//实际硬件时打开此语句LcdEn=0;return DBPort;}//向LCD写入命令或数据************************************************************#define LCD_COMMAND 0 // Command#define LCD_DATA 1 // Data#define LCD_CLEAR_SCREEN 0x01 // 清屏#define LCD_HOMING 0x02 // 光标返回原点void LCD_Write(bit style, unsigned char input){LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input; _nop_();//注意顺序LcdEn=1; _nop_();//注意顺序LcdEn=0; _nop_();LCD_Wait();}//设置显示模式************************************************************#define LCD_SHOW 0x04 //显示开#define LCD_HIDE 0x00 //显示关#define LCD_CURSOR 0x02 //显示光标#define LCD_NO_CURSOR 0x00 //无光标#define LCD_FLASH 0x01 //光标闪动#define LCD_NO_FLASH 0x00 //光标不闪动void LCD_SetDisplay(unsigned char DisplayMode){LCD_Write(LCD_COMMAND, 0x08|DisplayMode);}//设置输入模式************************************************************#define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 // default#define LCD_MOVE 0x01 // 画面可平移#define LCD_NO_MOVE 0x00 //defaultvoid LCD_SetInput(unsigned char InputMode){LCD_Write(LCD_COMMAND, 0x04|InputMode);}//初始化LCD*********************************************************** * void LCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动}//************************************************************* ******* ****void GotoXY(unsigned char x, unsigned char y){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}void Print(unsigned char *str){while(*str!='\0'){LCD_Write(LCD_DATA,*str);str++;}}void LCD_Print(unsigned char x, unsigned char y, unsigned char *str){GotoXY(x,y);Print(str);}DS18b20.h#include //用AT89C51时就用这个头文件//#include //用华邦W78E58B时必须用这个头文件sbit DQ = P3^4; //定义DQ引脚为P3.4/***********ds18b20延迟子函数(晶振12MHz )*******//************DS18B20对时间要求很严,但只能长不能短*************在11.0592M下也行,因为时间长些********/void delay_18B20(unsigned int i){while(i--);}/**********ds18b20初始化函数**********************/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay_18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低delay_18B20(80); //精确延时大于 480usDQ = 1; //拉高总线delay_18B20(14);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay_18B20(20);}/***********ds18b20读一个字节**************/unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay_18B20(4);}return(dat);}/*************ds18b20写一个字节****************/void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay_18B20(5);DQ = 1;dat>>=1;}}/**************读取ds18b20当前温度************/unsigned char *ReadTemperature(char TH,char TL,unsigned char RS){ unsigned char tt[2];Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x4E); // //写入"写暂存器"命令,修改TH和TL和分辩率配置寄存器//先写TH,再写TL,最后写配置寄存器WriteOneChar(TH); //写入想设定的温度报警上限WriteOneChar(TL); //写入想设定的温度报警下限WriteOneChar(RS); //写配置寄存器,格式为0 R1 R0 1,1 1 1 1//R1R0=00分辨率娄9位,R1R0=11分辨率为12位delay_18B20(80); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay_18B20(80); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(80);tt[0]=ReadOneChar(); //读取温度值低位tt[1]=ReadOneChar(); //读取温度值高位return(tt);}LCD_18b20.c#include //用AT89C51时就用这个头文件//#include //用华邦W78E58B时必须用这个头文件#include#include#include#include#include#include#include "LCD1602.h" ////液晶显示头文件//sbit DQ = P3^4; //定义DQ引脚为P3.4unsigned char t[2],*pt; //用来存放温度值,测温程序就是通过这个数组与主函数通信的unsigned char TempBuffer1[9]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,'\0'};//显示实时温度,上电时显示+125.00Cunsigned char TempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20,0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,'\0'};//显示温度上下限,上电时显示TH:+125 TL:+124Cunsigned char code dotcode[4]={0,25,50,75};/***因显示分辨率为0.25,但小数运算比较麻烦,故采用查表的方法*******再将表值分离出十位和个位后送到十分位和百分位********************/void covert0( unsigned char TH, unsigned char TL) //将温度上下限转换为LCD显示的数据{if(TH>0x7F) //判断正负,如果为负温,将其转化为其绝对值{TempBuffer0[3]=0x2d; //0x2d为"-"的ASCII码TH=~TH;TH++;}else TempBuffer0[3]=0x2b; //0x2B为"+"的ASCII码if(TL>0x7f){TempBuffer0[11]=0x2d; //0x2d为"-"的ASCII码TL=~TL+1;}else TempBuffer0[11]=0x2b; //0x2B为"+"的ASCII码TempBuffer0[4]=TH/100+0x30; //分离出TH的百十个位if( TempBuffer0[4]==0x30) TempBuffer0[4]=0xfe; //百位数消隐TempBuffer0[5]=(TH%100)/10+0x30; //分离出十位TempBuffer0[6]=(TH%100)%10+0x30; //分离出个位TempBuffer0[12]=TL/100+0x30; //分离出TL的百十个位if( TempBuffer0[12]==0x30) TempBuffer0[12]=0xfe; //百位数消隐TempBuffer0[13]=(TL%100)/10+0x30; //分离出十位TempBuffer0[14]=(TL%100)%10+0x30; //分离出个位} void covert1(void) //将温度转换为LCD显示的数据{unsigned char x=0x00,y=0x00;t[0]=*pt;pt++;t[1]=*pt;if(t[1]>0x07) //判断正负温度{TempBuffer1[0]=0x2d; //0x2d为"-"的ASCII码t[1]=~t[1]; /*下面几句把负数的补码*/t[0]=~t[0]; /* 换算成绝对值*********/x=t[0]+1; /***********************/t[0]=x; /***********************/if(x>255) /**********************/t[1]++; /*********************/}else TempBuffer1[0]=0x2b; //0xfe为变"+"的ASCII码t[1]<<=4; //将高字节左移4位t[1]=t[1]&0x70; //取出高字节的3个有效数字位x=t[0]; //将t[0]暂存到X,因为取小数部分还要用到它x>>=4; //右移4位x=x&0x0f; //和前面两句就是取出t[0]的高四位t[1]=t[1]|x; //将高低字节的有效值的整数部分拼成一个字节TempBuffer1[1]=t[1]/100+0x30; //+0x30 为变 0~9 ASCII码if( TempBuffer1[1]==0x30) TempBuffer1[1]=0xfe; //百位数消隐TempBuffer1[2]=(t[1]%100)/10+0x30; //分离出十位TempBuffer1[3]=(t[1]%100)%10+0x30; //分离出个位t[0]=t[0]&0x0c; //取有效的两位小数t[0]>>=2; //左移两位,以便查表x=t[0];y=dotcode[x]; //查表换算成实际的小数TempBuffer1[5]=y/10+0x30; //分离出十分位TempBuffer1[6]=y%10+0x30; //分离出百分位}void delay(unsigned char i){while(i--);}main(){unsigned char TH=110,TL=-20; //下一步扩展时可能通过这两个变量,调节上下限//测温函数返回这个数组的头地址while(1){pt=ReadTemperature(TH,TL,0x3f); //上限温度-22,下限-24,分辨率10位,也就是0.25C//读取温度,温度值存放在一个两个字节的数组中,delay(100);covert1();covert0(TH,TL);LCD_Initial(); //第一个参数列号,第二个为行号,为0表示第一行//为1表示第二行,第三个参数为显示数据的首地址LCD_Print(0,0,TempBuffer0);LCD_Print(0,1,TempBuffer1);}}实验2:基于MPX4115传感器温度测量实验步骤:(1)在Proteus软件画出电路图(2)用keil C 软件写出C程序,并生成.hex文件,导入到单片机当中,进行仿真,观察结果。
基于Proteus仿真技术在传感器教学中的应用
![基于Proteus仿真技术在传感器教学中的应用](https://img.taocdn.com/s3/m/83a8742cdcccda38376baf1ffc4ffe473368fd89.png)
基于Proteus仿真技术在传感器教学中的应用【摘要】本文主要讨论了基于Proteus仿真技术在传感器教学中的应用。
文章首先介绍了Proteus仿真技术的基本概念,然后分析了传感器教学中的应用案例,并总结了Proteus在传感器教学中的优势。
接着详细描述了Proteus仿真技术在传感器教学中的具体操作步骤,并对实验效果进行评价。
对基于Proteus仿真技术在传感器教学中的应用效果进行了分析,探讨了未来研究方向,并进行了总结。
通过本文的研究,可以更好地了解Proteus在传感器教学中的应用效果,为未来相关研究提供参考。
【关键词】Proteus仿真技术, 传感器教学, 应用案例分析, 优势, 操作步骤, 实验效果评价, 应用效果分析, 研究方向, 总结1. 引言1.1 背景介绍传感器技术作为现代科技领域的重要组成部分,在控制工程、电子信息等领域发挥着关键作用。
传感器的应用领域不断拓展,其在工业生产、医疗保健、环境监测等方面均有广泛的应用。
传感器教学作为培养学生工程实践能力和创新思维的重要环节,也日益受到重视。
1.2 研究意义二千字研究意义内容输出:传感器在现代科技领域中扮演着至关重要的角色,它们能够感知并获取各种环境信息,为智能系统的运行提供基础数据支持。
传感器技术的教学不仅仅是一种简单的知识传授,更是培养学生解决实际问题能力的重要途径。
而基于Proteus仿真技术在传感器教学中的应用,则为传感器教学注入了新的活力和挑战。
通过Proteus仿真技术,学生可以在虚拟环境中进行实时的传感器实验,不受时间和地点的限制,大大提高了学生的实践能力和实验操作的灵活性。
Proteus仿真技术具有较高的可视化效果,可以直观地展现传感器的工作原理和数据变化,帮助学生更深入地理解传感器工作过程。
采用Proteus仿真技术还能有效降低实验成本和安全风险,为学生提供一个安全、方便的学习环境。
研究基于Proteus仿真技术在传感器教学中的应用具有重要意义。
实验:传感器的应用 教案 说课稿 教学设计
![实验:传感器的应用 教案 说课稿 教学设计](https://img.taocdn.com/s3/m/5f1cfa47ae1ffc4ffe4733687e21af45b307fe00.png)
实验:传感器的应用【知识与技能】1.了解两个实验的基本原理。
2.通过实验,加深对传感器作用的体会,培养自己的动手能力。
【过程与方法】通过实验培养动手能力,体会传感器在实际中的应用。
【情感态度与价值观】在实验中通过动手组装和调试,增强理论联系实际的意识,激发学习兴趣,培养良好的科学态度。
【教学重难点】★教学重点1.了解斯密特触发器的工作特点,能够分析光控电路的工作原理。
2.温度报警器的电路工作原理。
★教学难点光控电路和温度报警器电路的工作原理。
【教学过程】一、实验目的了解与传感器技术相关的物理知识,练习用传感器制作自动控制装置.二、实验原理1.斯密特触发器当输入端电压上升到某一值(1.6 V)时,输出端会突然从高电平跳到低电平(0.25 V),当输入端电压下降到某一值(0.8 V)时,输出端会从低电平跳到高电平(3.4 V).2.普通二极管具有单向导电性.3.发光二极管具有单向导电性,同时还能发光.4.光控开关工作原理如图所示.图甲:白天,光强度较大,光敏电阻R G阻值较小,加在斯密特触发器输入端A的电压较低,则输出端Y输出高电平,发光二极管LED不导通;当天色暗到一定程度时,R G阻值增大到一定值,斯密特触发器的输入端A的电压上升到1.6 V,输出端Y突然从高电平跳到低电平,则发光二极管LED导通发光(相当于路灯亮了).天明后,R G阻值减小,斯密特触发器输入端A电势逐渐降低,降到0.8 V 时,输出端Y突然由低电平跳到高电平,发光二极管LED熄灭.这样就达到了使路灯天明自动熄灭,天暗自动开启的目的.图乙:控制电路原理:天较亮时,光敏电阻R G阻值较小,斯密特触发器输入端A电压较低,则输出端Y输出高电平,继电器线圈中无电流,工作电路不通;天较暗时,光敏电阻R G电阻增大,斯密特触发器输入端A电势升高,当升高到一定值,输出端Y由高电平突然跳到低电平,有电流通过继电器的线圈,电磁继电器工作,接通工作电路,使路灯自动开启;天明后,R G阻值减小,斯密特触发器输入端A电势逐渐降低,降到一定值,输出端Y突然由低电平跳到高电平,则线圈中不再有电流,则电磁继电器自动切断工作电路的电源,路灯熄灭,5.温度报警器工作原理如图所示.常温下,调整R1的阻值使斯密特触发器的输入端A处于低电平,则输出端Y处于高电平,无电流通过蜂鸣器,蜂鸣器不发声;当温度升高时,热敏电阻R T阻值减小,斯密特触发器输入端A电势升高,当达到某一值(高电平),其输出端Y由高电平跳到低电平,蜂鸣器通电,从而发出报警声.R1的阻值不同,则报警温度不同.三、实验器材1.光控开关实验斯密特触发器、发光二极管、二极管、继电器、灯泡(6 V,0.3 A)、可变电阻R1(最大阻值51 kΩ)、电阻R2(330 Ω)、光敏电阻、集成电路实验板、直流电源(5 V)、导线若干、黑纸.2.温度报警器实验斯密特触发器、蜂鸣器、热敏电阻、可变电阻R1(最大阻值1 kΩ)、集成电路实验板、直流电源(5 V)、导线若干、烧杯(盛有热水).四、实验步骤1.光控开关实验步骤(1)按照电路图将各元件组装到集成电路实验板上.(2)检查各元件的连接,确保无误.(3)接通电源,调节电阻R1,使发光二极管或灯泡在普通光照条件下不亮.(4)用黑纸逐渐遮住光敏电阻,观察发光二极管或灯泡的状态.(5)逐渐撤掉黑纸,观察发光二极管或灯泡的状态.2.温度报警器实验步骤(1)按照电路图将各元件组装到集成电路实验板上.(2)检查各元件的连接,确保无误.(3)接通电源,调节电阻R1,使蜂鸣器常温下不发声.(4)用热水使热敏电阻的温度升高,注意蜂鸣器是否发声.(5)将热敏电阻从热水中取出,注意蜂鸣器是否发声.五、注意事项1.光控开关实验(1)安装前对器材进行测试,确保各元件性能良好后再进行安装.(2)二极管连入电路时,极性不能反接,否则继电器不能正常工作.(3)要想天暗时路灯才会亮,应该把R1的阻值调大些.2.温度报警器实验(1)安装前对器材进行测试,确保各元件性能良好后再进行安装.(2)要使热敏电阻在较低的温度时报警,应增大R1的阻值.。
基于Proteus仿真技术在传感器教学中的应用
![基于Proteus仿真技术在传感器教学中的应用](https://img.taocdn.com/s3/m/ab251e5f1fd9ad51f01dc281e53a580216fc501d.png)
基于Proteus仿真技术在传感器教学中的应用传感器是现代电子技术中的重要组成部分,广泛应用于工业自动化、农业生产、环境监测等领域。
传感器的教学对电子工程学生的培养具有重要意义。
在传感器教学过程中,往往需要大量的实验器材和实验环境,给教学带来了一定的困扰。
而基于Proteus仿真技术的应用,可以有效地解决这一问题,提高传感器教学的效果。
Proteus是一款常用的电子电路仿真软件,可以模拟各种电子元器件的工作状态和性能。
在传感器教学中,可以利用Proteus仿真技术,搭建虚拟的传感器实验环境,实现传感器的实际工作状态和性能的模拟。
Proteus仿真技术可以实现传感器的工作原理和信号处理过程的模拟。
对于不同类型的传感器,可以通过在Proteus软件中添加相应的模型和电路连接方式,实现传感器的模拟工作。
对于温度传感器,可以在Proteus中添加温度传感器的模型,并通过连接电路来模拟温度传感器的原理和输出信号。
这样,学生可以通过Proteus仿真软件来直观地了解传感器的工作原理和信号处理过程。
Proteus仿真技术可以实现传感器实验的可视化和交互式操作。
在传感器教学中,学生往往需要通过实验来验证传感器的性能和特性。
借助Proteus仿真软件,学生可以在虚拟的实验环境中进行交互式操作,观察传感器的输出信号,并进行实验数据的采集和分析。
Proteus软件还提供了丰富的实验示范和结果展示功能,学生可以通过实验界面来直观地理解传感器的特性和应用。
Proteus仿真技术还可以实现传感器故障诊断和故障排除的模拟。
在实际应用中,传感器故障是一个常见的问题,需要学生具备相应的故障诊断和排除能力。
利用Proteus仿真软件,可以模拟传感器的故障情况,并通过相应的故障诊断和排除方法来解决问题。
这样,学生可以在虚拟的实验环境中进行故障排除的操作,提高故障处理能力。
基于Proteus仿真技术在传感器教学中的应用
![基于Proteus仿真技术在传感器教学中的应用](https://img.taocdn.com/s3/m/7a4f8193c0c708a1284ac850ad02de80d4d8063f.png)
基于Proteus仿真技术在传感器教学中的应用一、Proteus仿真技术概述Proteus是一款专业的电子电路仿真软件,广泛应用于电子设计、嵌入式系统开发和自动化控制领域。
Proteus提供了丰富的元器件库和仿真功能,用户可以通过简单的拖拽操作就能完成电路的设计和仿真。
Proteus还支持PCB设计和单片机程序设计,是一款功能强大的综合性电子设计软件。
在传感器教学中,Proteus可以用来模拟各种传感器的工作原理和应用场景,帮助学生更好地理解传感器的工作原理和实际应用。
通过Proteus仿真技术,学生可以在电脑上完成传感器实验,不仅减少了实验成本和时间,同时还能提高实验的安全性和稳定性。
Proteus在传感器教学中具有非常大的应用潜力。
1. 搭建传感器电路Proteus提供了丰富的元器件库,包括各种传感器、电阻、电容、电感等基本元器件,用户可以通过拖拽操作将这些元器件搭建成传感器电路。
学生可以通过Proteus搭建温度传感器电路,通过设置不同的输入信号和环境条件,观察传感器输出的变化,从而深入理解温度传感器的工作原理和特性。
2. 进行传感器仿真实验通过Proteus,学生可以对搭建好的传感器电路进行仿真实验。
他们可以通过设置不同的输入信号和参数,观察传感器输出的变化,了解传感器在不同工作条件下的响应特性。
通过仿真实验,学生可以更好地理解传感器的工作原理和特性,提高他们的实验能力和创新思维。
除了传感器本身的特性,Proteus还可以帮助学生设计传感器的应用电路。
学生可以通过Proteus搭建温度传感器与单片机或其他外围设备的连接电路,并进行仿真调试。
通过这样的设计实践,学生不仅可以了解传感器的应用场景,还能提高他们的电路设计能力和工程实践能力。
1. 提高实验效率和稳定性传统的传感器实验通常需要搭建实际的电路,存在着实验成本高、易受环境影响和安全风险大的问题。
而Proteus仿真技术可以在电脑上完成传感器实验,不仅减少了实验成本和时间,同时还能提高实验的稳定性和安全性。
基于Proteus仿真技术在传感器教学中的应用
![基于Proteus仿真技术在传感器教学中的应用](https://img.taocdn.com/s3/m/ec8b141d3d1ec5da50e2524de518964bcf84d29d.png)
基于Proteus仿真技术在传感器教学中的应用【摘要】本文将围绕基于Proteus仿真技术在传感器教学中的应用展开探讨。
在将介绍研究背景、研究意义和研究对象。
正文部分将详细介绍Proteus仿真技术的概述,传感器教学中的需求,以及Proteus在传感器教学中的实际应用案例、优势和发展趋势。
结论部分将讨论Proteus 仿真技术对传感器教学的推动作用,应用前景,并进行总结。
通过本文的探讨,读者将了解Proteus仿真技术在传感器教学中的重要性,为应用该技术提供参考和指导。
【关键词】关键词:Proteus仿真技术、传感器、教学应用、优势、发展趋势、推动作用、应用前景、总结。
1. 引言1.1 研究背景随着科技的不断进步和传感器技术的日益成熟,传感器在各个领域中的应用越来越广泛。
在工业生产、农业种植、健康医疗等领域,传感器都扮演着至关重要的角色。
传感器的应用并不仅仅局限于实际场景中,传感器的教育教学也变得越来越重要。
传感器教学的目的是培养学生对传感器技术的理解和应用能力,使他们能够在未来的工作中灵活运用传感器技术解决问题。
传感器教学面临的一个难题是传感器设备本身的成本高昂和数量有限,这使得学生无法进行大规模的实际操作和实验。
基于Proteus仿真技术在传感器教学中的应用具有重要的意义。
通过Proteus仿真技术,学生可以在虚拟环境中进行传感器实验,不仅节约了实际传感器设备的成本,而且能够进行更加灵活和多样化的实验操作。
研究基于Proteus仿真技术在传感器教学中的应用具有重要的现实意义和发展前景。
1.2 研究意义本文旨在探讨基于Proteus仿真技术在传感器教学中的应用,其中研究意义主要体现在以下几个方面:传感器技术在现代社会中扮演着非常重要的角色,它广泛应用于工业自动化、智能物联网、环境监测等领域。
加强传感器教学对于培养学生的实践能力和创新思维具有重要意义。
传感器技术与信息技术的融合已经成为未来科技发展的主要趋势,因此掌握传感器技术已经成为当代学生的必备技能之一。
15周protues实验二:虚拟仪器的使用精简板
![15周protues实验二:虚拟仪器的使用精简板](https://img.taocdn.com/s3/m/878d5c3e55270722192ef7b7.png)
模拟示波器可以同时测4个波形,分别为A,B,C,D,颜
色为黄色,蓝色,红色,绿色.
调节波形的
垂直位置.
波形类型
调节垂直 刻度系数
调节扫描速率
示波器触发信号设置:
调节电平
触发电平类型
触发方式
自动设置触发方式 单击触发 指针模式
2.定时/计数器的使用
定时/计数器是一个通用的数字仪器,可以用来测量 时间间隔,信号频率和脉冲数.
使计数器保持为零,可同时使用CE和RST. CLK:时钟引脚.
复位电平极性
手动复位
秒 小时,分,秒 频率
计 数
3.信号发生器
1).信号发生器能够输出非调制波及调制波,主要 有以下功能: a.产生方波,锯齿波,三角波和正弦波;
• b.输出频率范围为0~12MHZ,8个可调范围. • c.输出幅值为0~12V,4个可调范围. • d.幅值和频率的调制输入和输出.
1).选取定时/计数器 在模拟仪器工具中选择counter timer.
2).连接仪器
时钟引脚 时钟使能引脚
复位引脚
CE:时钟使能引脚. 当需要使能信号时,可将使能控制信号连接到这一引
脚.当CE有效时,在信号的上升沿开始计数. RST:复位引脚,可以使计时器复位,归零. RST为边沿触发方式,不是电平触发方式.如果想要
元件名称 555 battery Resistor Cap Pot-lin
元件清单
所属类
所属子类
Analog ICs
Timers
Simulator Primiting Primitives Analog
Capacitors
Generic
Resistors
基于Proteus仿真技术在传感器教学中的应用
![基于Proteus仿真技术在传感器教学中的应用](https://img.taocdn.com/s3/m/6ca8d6b49f3143323968011ca300a6c30d22f14d.png)
基于Proteus仿真技术在传感器教学中的应用随着科学技术的不断发展,传感器技术在现代社会中发挥着越来越重要的作用。
传感器是一种能够感知和检测特定物理量并将其转换为可读取信号的装置,例如温度传感器、湿度传感器、光敏传感器等。
传感器的应用涉及到各个领域,包括工业自动化、医疗健康、环境监测等。
培养学生对传感器的理解和应用能力,对他们未来的就业和创新能力具有重要意义。
如何在教学中有效地传授传感器知识,成为了教育工作者们面临的挑战之一。
1. 仿真传感器工作原理传感器的工作原理是传感器教学中的重点内容之一。
通过Proteus软件,教师可以建立基于各种传感器工作原理的仿真电路,让学生通过模拟实验来了解传感器的内部结构和工作原理。
利用Proteus软件模拟温度传感器的工作原理,让学生了解温度传感器是如何将环境温度转换成电信号的;再模拟光敏传感器的工作原理,让学生通过实验了解光敏传感器是如何感知光线强度并输出相应电信号的。
通过这些仿真实验,学生可以直观地了解传感器的工作原理,提高他们的理论水平。
2. 模拟传感器应用场景3. 联合其他软件进行开发除了仿真传感器单独工作的原理和应用,Proteus还可以联合其他软件进行开发,通过编程语言(比如C语言)和传感器的相关控制芯片进行仿真。
这样可以让学生学会如何编程控制传感器,更多地了解传感器的控制和应用技朻。
1. 丰富了传感器教学内容2. 提高了传感器教学的实验性传感器教学过程中,实验性是非常重要的。
通过Proteus软件,教师可以设计多种仿真实验,让学生在虚拟实验环境中完成传感器的操作和控制,提高了传感器教学的实验性。
这种虚拟实验的方式,可以降低实验成本,减少安全隐患,同时也可以让学生更加自主地进行实验操作,增强了学生的动手能力。
3. 培养了学生的创新能力Proteus仿真技术为学生提供了一个自由、开放的实验环境,让他们可以自主设计、改进传感器的检测方案,培养了学生的创新能力。
传感器课程设计protuse
![传感器课程设计protuse](https://img.taocdn.com/s3/m/23ea113c26d3240c844769eae009581b6bd9bda8.png)
传感器课程设计protuse一、课程目标知识目标:1. 理解传感器的定义、分类及工作原理;2. 掌握Protuse软件绘制传感器电路图的基本方法;3. 学会分析传感器在实际应用中的优缺点。
技能目标:1. 能够运用Protuse软件设计简单的传感器电路;2. 能够对传感器电路进行仿真测试,分析实验结果;3. 能够通过小组合作,解决实际问题,提高团队协作能力。
情感态度价值观目标:1. 培养学生对传感器技术的兴趣,激发探索精神;2. 培养学生严谨、务实的学习态度,养成良好的实验习惯;3. 增强学生的环保意识,认识到传感器在节能减排方面的重要作用。
课程性质:本课程为电子技术及应用课程的一部分,以实践为主,理论联系实际。
学生特点:学生为初中二年级学生,具备一定的物理知识和实验技能,对新鲜事物充满好奇心。
教学要求:结合学生特点,注重启发式教学,引导学生主动探索,培养实际操作能力。
在教学过程中,关注学生个体差异,给予个性化指导,确保每个学生都能达到课程目标。
通过课程学习,使学生能够将所学知识应用于实际生活中,提高学生的创新意识和实践能力。
二、教学内容本课程教学内容主要包括以下三个方面:1. 传感器基础知识:- 传感器的定义、分类和工作原理;- 常见传感器的特点及应用。
2. Protuse软件操作:- Protuse软件的安装与界面认识;- Protuse软件绘制传感器电路图的基本操作;- 传感器电路仿真测试方法。
3. 传感器应用案例分析:- 选择具有代表性的传感器应用案例,分析其工作原理和电路设计;- 结合实际情况,讨论传感器在实际应用中的优缺点。
教学内容安排和进度:第一课时:传感器基础知识学习,介绍传感器的定义、分类和工作原理,让学生对传感器有初步的认识。
第二课时:Protuse软件操作,学会使用Protuse软件绘制传感器电路图。
第三课时:传感器电路仿真测试,掌握仿真测试方法,对所学知识进行巩固。
第四课时:传感器应用案例分析,通过实际案例,加深学生对传感器应用的理解。
基于Proteus仿真技术在传感器教学中的应用
![基于Proteus仿真技术在传感器教学中的应用](https://img.taocdn.com/s3/m/3824658b88eb172ded630b1c59eef8c75fbf950a.png)
基于Proteus仿真技术在传感器教学中的应用【摘要】本文主要探讨了基于Proteus仿真技术在传感器教学中的应用。
首先介绍了Proteus仿真技术的概念和特点,然后分析了传感器教学的现状。
接着通过实际案例展示了Proteus在传感器教学中的实践应用,包括仿真实验设计和实施过程。
对实验效果进行评估后,发现Proteus仿真技术能够有效提升传感器教学的效果和效率。
结论部分总结了Proteus在传感器教学中的重要价值,并展望了未来的发展方向。
通过本文的研究,可以看到Proteus仿真技术在传感器教学中具有巨大潜力,有助于提升学生的实践能力和技术水平,也为教学改革和创新提供了有益的借鉴。
【关键词】Proteus仿真技术、传感器教学、实践案例、实验设计、实验效果、价值、发展方向1. 引言1.1 背景介绍传感器教学存在一些问题和挑战。
一方面,传感器涉及到很多专业的知识和实践操作,学生往往难以获得足够的实践机会。
实验设备的昂贵和易损使得传感器实验教学受到一定的限制。
本文将探讨基于Proteus仿真技术在传感器教学中的应用,并通过实践案例和实验效果评估,探讨Proteus仿真技术对传感器教学的价值和未来发展方向。
1.2 研究意义传感器教学具有重要意义,可以帮助学生更好地理解和掌握传感器的工作原理、应用场景以及相关技术知识。
通过教学实践,学生可以通过实验操作来深入了解传感器的具体应用,培养其实践能力和创新精神。
而基于Proteus仿真技术的传感器教学可以有效提高教学效率,节省实验材料和设备成本,同时减少传感器实验中由于操作失误而导致的安全隐患。
Proteus仿真技术还可以模拟各种实际场景,为学生提供更丰富多样的实验体验,激发学生学习的兴趣。
探究基于Proteus仿真技术在传感器教学中的应用具有重要的研究意义,将有助于推动传感器教学教学方法的创新和提升教学质量。
2. 正文2.1 Proteus仿真技术概述Proteus仿真软件是一种广泛应用于电子电路设计和嵌入式系统开发领域的虚拟仿真工具。
Proteus仿真技术在光电传感器教学中的应用-精品文档
![Proteus仿真技术在光电传感器教学中的应用-精品文档](https://img.taocdn.com/s3/m/960faa0aaaea998fcc220ef9.png)
Proteus仿真技术在光电传感器教学中的应用基金项目:本文系高等职业学校专业骨干教师国家级培训项目电气自动化技术企业顶岗培训(项目编号:18122302)的研究成果。
光电传感器是传感器与检测技术的一项重要内容,广泛应用于各种光控电路。
光电传感器能够将光信号转换为电信号,利用一些特定材料的光电效应来实现对光信号的检测。
由于是对光信号的检测,光电传感器在教学中搭建实物试验比较困难,内容显得较为抽象,有一定的教学难度,学生学习也有难度。
笔者经过教学实践,利用计算机仿真技术,通过Proteus软件,搭建光电传感器虚拟实验,取得了较好的教学效果。
一、Proteus仿真教学简介Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB 设计,真正实现了从概念到产品的完整设计。
使用Proteus 软件进行传感器及其检测电路设计是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;在教学实践中,通过使用 Proteus 软件对学生进行教学,在不需要硬件投入的条件下,学生普遍反映对传感器的学习比单纯学习书本知识更容易接受,更容易提高。
实践证明,使用 Proteus进行系统仿真开发成功之后再进行实际制作能极大提高系统设计效率。
二、光电效应及光电器件的Proteus仿真1.光电效应光可以认为是一种能量传递的方式,它是由一定能量的粒子组成,这种粒子叫做光子。
光的频率越高,光子的能量越大,用光照射物体,可以看做是光子对该物体的一系列撞击,物体的粒子接受光子的撞击后获得能量,产生的电效应就是光电效应。
光电效应分为内光电效应和外光电效应。
光照射在某一物体上,使电子从这些物体表面逸出的现象称为外光电现象,也叫做光电发射。
当光照射于某一物体上,使物体的导电能力发生变化,这种现象叫做内光电效应,也叫做光电导现象。
利用内光电效应可以制成光敏电阻、光敏二极管、光敏三极管、光敏晶闸管等光电转换器件,这些都是常见的光电传感器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《传感器原理与应用》实验指导书Proteus-V1.0版本实验1:基于DS18B20传感器温度测量实验步骤:(1)在Proteus软件画出电路图(2)用keil C 软件写出C程序,并生成.hex文件,导入到单片机当中,进行仿真,观察结果。
包括:2个头文件LCD1602.h和DS18B20.h; 1个源文件LCD_18b20.c;代码如下LCD1602.h:#include <at89x51.h>//用A T89C51时就用这个头文件//#include <reg52.h>//用华邦W78E58B时必须用这个头文件#include <intrins.h>//注意那个LCD_Wait()函数,它是判"忙"标志的,在实际硬件要把注掉的那种打开//Port Definitions**********************************************************sbit LcdRs = P2^0;sbit LcdRw = P2^1;sbit LcdEn = P2^2;sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口//内部等待函数************************************************************************** unsigned char LCD_Wait(void){LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_();//while(DBPort&0x80);//在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,//可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80//实际硬件时打开此语句LcdEn=0;return DBPort;}//向LCD写入命令或数据************************************************************#define LCD_COMMAND 0 // Command#define LCD_DATA 1 // Data#define LCD_CLEAR_SCREEN 0x01 // 清屏#define LCD_HOMING 0x02 // 光标返回原点void LCD_Write(bit style, unsigned char input){LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input; _nop_();//注意顺序LcdEn=1; _nop_();//注意顺序LcdEn=0; _nop_();LCD_Wait();}//设置显示模式************************************************************#define LCD_SHOW 0x04 //显示开#define LCD_HIDE 0x00 //显示关#define LCD_CURSOR 0x02 //显示光标#define LCD_NO_CURSOR 0x00 //无光标#define LCD_FLASH 0x01 //光标闪动#define LCD_NO_FLASH 0x00 //光标不闪动void LCD_SetDisplay(unsigned char DisplayMode){LCD_Write(LCD_COMMAND, 0x08|DisplayMode);}//设置输入模式************************************************************#define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 // default#define LCD_MOVE 0x01 // 画面可平移#define LCD_NO_MOVE 0x00 //defaultvoid LCD_SetInput(unsigned char InputMode){LCD_Write(LCD_COMMAND, 0x04|InputMode);}//初始化LCD************************************************************ void LCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动}//************************************************************************ void GotoXY(unsigned char x, unsigned char y){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}void Print(unsigned char *str){while(*str!='\0'){LCD_Write(LCD_DATA,*str);str++;}}void LCD_Print(unsigned char x, unsigned char y, unsigned char *str){GotoXY(x,y);Print(str);}DS18b20.h#include <at89x51.h>//用A T89C51时就用这个头文件//#include <reg52.h>//用华邦W78E58B时必须用这个头文件sbit DQ = P3^4; //定义DQ引脚为P3.4/***********ds18b20延迟子函数(晶振12MHz )*******//************DS18B20对时间要求很严,但只能长不能短*************在11.0592M下也行,因为时间长些********/void delay_18B20(unsigned int i){while(i--);}/**********ds18b20初始化函数**********************/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay_18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低delay_18B20(80); //精确延时大于480usDQ = 1; //拉高总线delay_18B20(14);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay_18B20(20);}/***********ds18b20读一个字节**************/unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay_18B20(4);}return(dat);}/*************ds18b20写一个字节****************/void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay_18B20(5);DQ = 1;dat>>=1;}}/**************读取ds18b20当前温度************/unsigned char *ReadTemperature(char TH,char TL,unsigned char RS){ unsigned char tt[2];Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x4E); // //写入"写暂存器"命令,修改TH和TL和分辩率配置寄存器//先写TH,再写TL,最后写配置寄存器WriteOneChar(TH); //写入想设定的温度报警上限WriteOneChar(TL); //写入想设定的温度报警下限WriteOneChar(RS); //写配置寄存器,格式为0 R1 R0 1,1 1 1 1//R1R0=00分辨率娄9位,R1R0=11分辨率为12位delay_18B20(80); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay_18B20(80); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(80);tt[0]=ReadOneChar(); //读取温度值低位tt[1]=ReadOneChar(); //读取温度值高位return(tt);}LCD_18b20.c#include <at89x51.h>//用A T89C51时就用这个头文件//#include <reg52.h>//用华邦W78E58B时必须用这个头文件#include <absacc.h>#include <ctype.h>#include <math.h>#include <stdio.h>#include <string.h>#include <DS18B20.h>#include "LCD1602.h" ////液晶显示头文件//sbit DQ = P3^4; //定义DQ引脚为P3.4unsigned char t[2],*pt; //用来存放温度值,测温程序就是通过这个数组与主函unsigned char TempBuffer1[9]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,'\0'};//显示实时温度,上电时显示+125.00Cunsigned char TempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20,0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,'\0'};//显示温度上下限,上电时显示TH:+125 TL:+124Cunsigned char code dotcode[4]={0,25,50,75};/***因显示分辨率为0.25,但小数运算比较麻烦,故采用查表的方法*******再将表值分离出十位和个位后送到十分位和百分位********************/void covert0( unsigned char TH, unsigned char TL) //将温度上下限转换为LCD显示的数据{if(TH>0x7F) //判断正负,如果为负温,将其转化为其绝对值{TempBuffer0[3]=0x2d; //0x2d为"-"的ASCII码TH=~TH;TH++;}else TempBuffer0[3]=0x2b; //0x2B为"+"的ASCII码if(TL>0x7f){TempBuffer0[11]=0x2d; //0x2d为"-"的ASCII码TL=~TL+1;}else TempBuffer0[11]=0x2b; //0x2B为"+"的ASCII码TempBuffer0[4]=TH/100+0x30; //分离出TH的百十个位if( TempBuffer0[4]==0x30) TempBuffer0[4]=0xfe; //百位数消隐TempBuffer0[5]=(TH%100)/10+0x30; //分离出十位TempBuffer0[6]=(TH%100)%10+0x30; //分离出个位TempBuffer0[12]=TL/100+0x30; //分离出TL的百十个位if( TempBuffer0[12]==0x30) TempBuffer0[12]=0xfe; //百位数消隐TempBuffer0[13]=(TL%100)/10+0x30; //分离出十位TempBuffer0[14]=(TL%100)%10+0x30; //分离出个位}void covert1(void) //将温度转换为LCD显示的数据{unsigned char x=0x00,y=0x00;t[0]=*pt;t[1]=*pt;if(t[1]>0x07) //判断正负温度{TempBuffer1[0]=0x2d; //0x2d为"-"的ASCII码t[1]=~t[1]; /*下面几句把负数的补码*/t[0]=~t[0]; /* 换算成绝对值*********/x=t[0]+1; /***********************/t[0]=x; /***********************/if(x>255) /**********************/t[1]++; /*********************/}else TempBuffer1[0]=0x2b; //0xfe为变"+"的ASCII码t[1]<<=4; //将高字节左移4位t[1]=t[1]&0x70; //取出高字节的3个有效数字位x=t[0]; //将t[0]暂存到X,因为取小数部分还要用到它x>>=4; //右移4位x=x&0x0f; //和前面两句就是取出t[0]的高四位t[1]=t[1]|x; //将高低字节的有效值的整数部分拼成一个字节TempBuffer1[1]=t[1]/100+0x30; //+0x30 为变0~9 ASCII码if( TempBuffer1[1]==0x30) TempBuffer1[1]=0xfe; //百位数消隐TempBuffer1[2]=(t[1]%100)/10+0x30; //分离出十位TempBuffer1[3]=(t[1]%100)%10+0x30; //分离出个位t[0]=t[0]&0x0c; //取有效的两位小数t[0]>>=2; //左移两位,以便查表x=t[0];y=dotcode[x]; //查表换算成实际的小数TempBuffer1[5]=y/10+0x30; //分离出十分位TempBuffer1[6]=y%10+0x30; //分离出百分位}void delay(unsigned char i){while(i--);}main(){unsigned char TH=110,TL=-20; //下一步扩展时可能通过这两个变量,调节上下限//测温函数返回这个数组的头地址while(1){pt=ReadTemperature(TH,TL,0x3f); //上限温度-22,下限-24,分辨率10位,也就是0.25C//读取温度,温度值存放在一个两个字节的数组中,delay(100);covert1();covert0(TH,TL);LCD_Initial(); //第一个参数列号,第二个为行号,为0表示第一行//为1表示第二行,第三个参数为显示数据的首地址LCD_Print(0,0,TempBuffer0);LCD_Print(0,1,TempBuffer1);}}实验2:基于MPX4115传感器温度测量实验步骤:(1)在Proteus软件画出电路图(2)用keil C 软件写出C程序,并生成.hex文件,导入到单片机当中,进行仿真,观察结果。