找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1212|回复: 4
打印 上一主题 下一主题
收起左侧

PT100热电阻测温,程序有了,如何加入温度控制?求指导

[复制链接]
跳转到指定楼层
楼主

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:262 发表于 2022-4-6 21:01 | 只看该作者
你在住循环里面 加入一个if 判断即可,你可以在上面的51hei搜索框输入"温控"参考一下 51hei其他的项目
回复

使用道具 举报

板凳
ID:161164 发表于 2022-4-6 23:11 | 只看该作者
代码呢?
回复

使用道具 举报

地板
ID:980583 发表于 2022-4-7 10:04 | 只看该作者
怎样将PT100将AD转换成温度,算法不会,所以精度太大
#include <reg51.h>
#include<intrins.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
uchar code str1[]={"Temper"        }  ;
uchar code str2[]={" "        }  ;
sbit lcdrs=P2^0;
sbit lcdrw=P2^1;
sbit lcden=P2^2;
sbit CS=P2^4;
sbit CLK=P2^5;
sbit DIDO=P2^7;
sbit be=P3^4;
sbit jdq=P3^3;
sbit led1=P3^5;
sbit led2=P3^6;
uchar flag,num,count,k1num,k2num,
k3num,k4num,a,b,c,d,e,f;
char tempmax,tempmin;//设定的温度
uchar dat;
long int temp;
double deal,U ;//电阻值,温度对电阻的变化量(Q
//延时函数
void delay(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<114;y++);}
//蜂鸣器子程序
void di()       
{
be=0;delay(100);be=1;}
//        忙碌
bit lcd_busy(void)
{
bit result;
lcdrs=0;//根据规定,RS为低电平,RW为高电平时,可以读状态
lcdrw=1;
lcden=1; //E=1,才允许读写
_nop_();//空操作
_nop_();
_nop_();
_nop_();//空操作四个机器周期,给硬件反应时间
result=(bit)(P0&0x80); //将忙碌标志电平赋给result
lcden=0;//将E恢复低电平
return result;
}
//写命令函数
void write_com(uchar com)
{
while( lcd_busy());
lcdrs=0;lcdrw=0;lcden=0;
_nop_();_nop_();
P0=com;delay(5);
lcden=1;delay(5);
lcden=0;}
//写数据函数
void write_date(uchar date)
{
while( lcd_busy());
        lcdrs=1;
        lcdrw=0;
        lcden=0;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
//LCD1602显示函数
void lcd1602_display(uchar *p,uchar*q)
{
write_com(0x80+0x40);
while(*p!='\0')
{
   write_date(*p);
p++;
delay(1);
}
  write_com(0x80+0x48);
while(*q!='\0')
{
write_date(*q);
q++;
delay(1);
}
}

//D0832初始话显示        ///////////////////////
void Init_AD0808()
{
lcd_init();
lcd1602_display(str1,str2);
} ///////////////
void delay_ADC(uint i)
{
while(i--);

} ///////////////////
  
uchar ADC0808()
{
uchar i;
CS=1;delay_ADC(5) ;
CLK =1;        delay_ADC(5) ;
CS = 0;
DIDO = 1;CLK = 0; delay_ADC(5) ;
CLK =1; DIDO =1; delay_ADC(5) ;
CLK = 0;  CLK = 1;        delay_ADC(5) ;
  DIDO = 0; CLK = 0; delay_ADC(5) ;
   CLK = 1;DIDO =1;         delay_ADC(5) ;
for(i = 0; i< 8; i++)
{
CLK = 0;   delay_ADC(5) ;
if(DIDO) dat |=0x01;
CLK =1;
dat <<= 1; delay_ADC(5) ;
U=5.0/255.0*dat;
deal=10.0*59.9*U;
temp=(long int)deal;
tempmax=temp/10;tempmin=temp/10;
}
return temp;
CS= 1;
}
//AD 转换
void AD0808_display()
{
disdata[0]=temp/1000+0x30;//百位数
disdata[1]=temp/100%10+0x30;//十位数
disdata[2]=temp/10%10+'0';//个位数
disdata[3]=temp%10+0x30;//小数位
if(disdata[0]==0x30)
       {
      disdata[0]=0x20;//如果百位为0,不显示
     if(disdata[1]==0x30)
          {
        disdata[1]=0x20;//如果百位为0,十位为0也不显示
          }
        }
write_com(0x80+0x49);
       write_date(disdata[0]);//显示百位
       write_com(0x80+0x4a);
       write_date(disdata[1]);//显示十位     
       write_com(0x80+0x4b);
       write_date(disdata[2]);//显示个位  
           write_com(0x80+0x4c);
       write_date(0x2e);//显示小数点   
       write_com(0x80+0x4d);
       write_date(disdata[3]);//显示小数位
          
           if((tempmax>290)||(tempmin<30))
           {jdq=0;be=~be;led2=0;delay(50);}
           else
           {led2=1;}
}  
          
//主函数
void main()
{
    TMOD=0x01;
        TH0=(65536-46080)/256;
        TL0=(65536-46080)%256;
        EA=1;
        ET0=1;
        TR0=1;                                                        
lcd_init();
                Init_AD0808();
                write_com(0x80);                       
  while(1)
        {
                  ADC0808();
        AD0808_display();
               
                 tempmax = temp/10;

                }
        }
回复

使用道具 举报

5#
ID:123289 发表于 2022-4-8 16:24 | 只看该作者
谈到【控制】,就有控制的对象是谁?
先研究一下【控制对象】的特性,需求。
而后再写程序。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表