设为首页
收藏本站
开启辅助访问
登录
注册
只需一步,快速开始
首页
BBS
在线充值
搜索
工控币获得方法
联系方式
搜索
搜索
本版
帖子
用户
工控论坛
»
首页
›
电子技术
›
EDA设计仿真
›
51单片机和pt100测温度Proteus仿真程序
返回列表
发新帖
51单片机和pt100测温度Proteus仿真程序
[复制链接]
2
|
0
|
2020-1-29 23:36:40
|
显示全部楼层
|
阅读模式
LCD1602+AD623+MAX1240+pt100+51单片机
程序及仿真文件
Pt100.zip
(784.97 KB, 售价: 5 工控币)
2020-1-29 23:34 上传
点击文件名下载附件
#include <reg52.h>
#include <string.h>
#include <math.h>
#include "intrins.h"
#define ROW1 0x80
#define ROW2 0xC0
#define Ts_CONST 1 //AD采样时间系数,采样时间为0.1xTs_CONST(s)
#define NOACT 0
#define FC 1
#define Start_AD 2
#define Cal_Temperature 3
#define Kpt 0.02732644 //AD芯片max1240的采样值到温度值的转化系数
void LCD_Init(void);
void ClearDisp(unsigned char Row);
void Display(unsigned char Addr, unsigned char *pstr);
void DecToASC(unsigned int Dec,unsigned char *p, unsigned char n);
void Disp_Initize(void);
void Write_CMD(unsigned char CMD);
unsigned int AD_MAX1240(void);
sbit RS=P2^2;
sbit RW=P2^1;
sbit E=P2^0;
sbit SDA=P1^5;
sbit SCL=P1^6;
sbit CS=P1^7;
sbit Key=P3^5;
sbit up=P3^6;
sbit down=P3^7;
unsigned char DispBuf[16];
unsigned char RunState=NOACT;
unsigned int AD_Reslut,tsflag,ts=1;
float fz,tmp,tmp1,Pt;
void delay(unsigned int j)//延时jms
{
unsigned int m,n;
for(n=0;n<j;n++)
{
for(m=0;m<120;m++);
}
}
void main(void)
{ LCD_Init();
ClearDisp(ROW1);
Disp_Initize();
CS=1;
SDA=1;
SCL=0;
TMOD=0x11;
TF0=0; //开始程序前先延时65ms,等待max1240上电,以保证AD采样准确
TH0=0;
TL0=0;
TR0=1;
while(!TF0);
TF0=0;
TR0=0;
TH0=0x3C; //12M晶振时延时50ms
TL0=0xB0;
ET0=1;
TR0=1;
EX1=1;
IT1=1;
EA=1;
while(1)
switch(RunState)
{ case NOACT:
break;
case FC: //F0计算及显示
fz=pow(10,(tmp-121.0000)/10);
DecToASC(fz,DispBuf,1);
DispBuf[1]='.';
DecToASC((fz-(unsigned int)fz)*1000,DispBuf+2,3);
DispBuf[5]='\0';
Display(0x80+11,DispBuf);
RunState=NOACT;
break;
case Start_AD: //开始AD采样
AD_Reslut=AD_MAX1240();
RunState=Cal_Temperature;
break;
case Cal_Temperature: //将AD值转化为温度并进行线性化
{
Pt=AD_Reslut*Kpt;
Pt+=100; //温度值
tmp=Pt/100;
tmp=1-tmp;
tmp=2.31e-6L*tmp;
tmp+=1.527480889e-5L;
tmp=sqrt(tmp);
tmp+=-3.9083e-3L;
tmp/=-1.155e-6L;//AD采样值线性化修正
tmp1=tmp;
tmp=(tmp+tmp1)/2;//取平均温度
tmp=((float)((unsigned int)(tmp*10)))/10 ;
DecToASC(tmp,DispBuf,3);
DispBuf[3]='.';
DecToASC((tmp-(unsigned int)tmp)*10,DispBuf+4,1);
DispBuf[5]='\0';
Display(0xC0+2,DispBuf); //显示函数
}
RunState=NOACT;
break;
}
}
/*******************************************************************************/
unsigned int AD_MAX1240(void) //读取AD,AD芯片为串口数据形式
{ unsigned int adtmp=0;
unsigned char i;
CS=0;
while(!SDA);
SCL=1;
adtmp<<=1;
SCL=0;
for(i=0;i<12;i++)
{ SCL=1;
adtmp<<=1;
if(SDA==1)adtmp++;
SCL=0;
}
CS=1;
return adtmp;
}
/*******************************************************************************/
void Disp_Initize(void) //LCD初始化,将Ts,F0,t等提示字符显示在屏幕上
{ //unsigned char *p;
DispBuf[0]='T';
DispBuf[1]='s';
DispBuf[2]='=';
DecToASC(ts,DispBuf+3,2);
DispBuf[5]='s';
DispBuf[8]='f' ;
DispBuf[9]='0' ;
DispBuf[10]='=' ;
DispBuf[16]='\0';
Display(0x80,DispBuf);
DispBuf[0]='t';
DispBuf[1]='=';
DispBuf[2]='\0';
Display(0xc0,DispBuf);
}
/*******************************************************************************/
void INT1_ISR(void) interrupt 2 //切换采样时间的中断函数,用于开关量识别和改变Ts(采样时间)
{
EA=0;
TR0=0;
ET0=0;
strcpy(DispBuf," ");
Display(0x80+11,DispBuf);
while(1)
{
if(up==0)
{
delay(100);
if(up==0)
ts++;
}
if(down==0)
{ delay(100);
if(down==0)
ts--;
}
if(ts>60)
ts=1;
if(ts<=0)
ts=60;
DecToASC(ts,DispBuf,2);
DispBuf[2]='s';
DispBuf[3]='\0';
Display(0x80+3,DispBuf);
if(Key==0)
break;
}
EA=1;
TR0=1;
ET0=1;
}
/*******************************************************************************/
void T0_ISR(void) interrupt 1 //定时中断程序
{ static unsigned char T0_CNT=Ts_CONST;
//static bit Flag=0;
TH0=0x3C;
TL0=0xB0;
//Flag=!Flag;
//if(Flag)return;
T0_CNT--;
tsflag++;
if(!T0_CNT)
{ T0_CNT=Ts_CONST;
RunState=Start_AD; //AD采样
}
if(tsflag>=ts*20)
{
tsflag=0;
RunState =FC; //Ts到时进行F0值运算
}
}
/*******************************************************************************/
void DecToASC(unsigned int Dec,unsigned char *p, unsigned char n) //将Dec变量编程可以在1602上直接显示的ASICII值
{ unsigned char i;
p+=n;
p--;
for(i=0;i<n;i++)
{ *p=Dec%10+0x30;
p--;
Dec/=10;
}
}
/*LCD显示*******************************************************************************/
void Check_Busy(void)
{// return;
do
{ P0=0xFF;
E=0;
RS=0;
RW=1;
E=1;
_nop_();
}while(P0&0x80);
E=0;
}
/*******************************************************************************/
void Write_CMD(unsigned char CMD)
{
Check_Busy();
E=0;
RS=0;
RW=0;
P0=CMD;
E=1;
_nop_();
E=0;
}
/*******************************************************************************/
void Write_Data(unsigned char Data)
{
Check_Busy();
E=0;
RS=1;
RW=0;
P0=Data;
E=1;
_nop_();
E=0;
}
/*******************************************************************************/
void LCD_Init(void)
{
Write_CMD(0x38);
Write_CMD(0x0C);
Write_CMD(0x06);
Write_CMD(0x01); //清屏
}
/*******************************************************************************/
void Display(unsigned char Addr, unsigned char *pstr)
{
Write_CMD(Addr);
while(*pstr)
Write_Data(*pstr++);
}
/*******************************************************************************/
void ClearDisp(unsigned char Row)
{
strcpy(DispBuf," ");
Display(Row,DispBuf);
}
复制代码
pt100
,
温度
,
proteus
,
51单片机
相关帖子
•
51单片机采集温度通过串口发送到labview上位机采集曲线显示
•
基于LABVIEW温度越限报警程序设计
•
基于组态王的占空比PID算法温度控制系统设计 含源码和文档
•
LabVIEW读取和显示温度曲线 51单片机做下位机
•
远程果蔬工厂监控系统设计 LabVIEW+51单片机程序
•
温室大棚监控系统LabVIEW上位机
•
labview种植大棚温度监控源程序
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
coolice
426
主题
433
帖子
366
积分
初级会员
初级会员, 积分 366, 距离下一级还需 134 积分
初级会员, 积分 366, 距离下一级还需 134 积分
工控币
366
加好友
发消息
回复楼主
返回列表
电子技术综合讨论
单片机嵌入式
EDA设计仿真
STM32/8
51单片机
上位机开发及系统管理
Labview
Multisim仿真
图文推荐
用Fanuc Karel语言实现三点建坐标系
2021-01-04
用CH341A做的USB转SPI_232_485_TTL转换器 PCB+SCH文件 烧写器源
2020-12-14
51单片机采集温度通过串口发送到labview上位机采集曲线显示
2020-12-13
基于组态王的占空比PID算法温度控制系统设计 含源码和文档
2020-12-13
基于LabVIEW的电动车速度监测和控制系统上位机程序设计
2020-12-08
热门排行
1
有没有 GE plc PME9.0版本的中文对照表
2
哈哈,网站很好,来支持一下
3
6000CHM废气处理EPLAN电气图纸
4
300多个常用的Multisim仿真电路资料分享
5
谁那有施耐德PES软件 本人愿意提供一定积分
6
交通信号灯电子线路实验Multisim仿真电路图
7
Multisim14仿真PIC16f84单片机驱动led
8
基于labview的电子秤
9
哪位大佬能看看logix5571以太网通信故障这
10
WINCC 7.5+SP1+UPD3