找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

PT100熱電阻測溫,程序有了,如何加入溫度控制?求指導(dǎo)

查看數(shù): 1551 | 評論數(shù): 4 | 收藏 2
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時(shí)間: 2022-4-6 16:23

正文摘要:

回復(fù)

ID:123289 發(fā)表于 2022-4-8 16:24
談到【控制】,就有控制的對象是誰?
先研究一下【控制對象】的特性,需求。
而后再寫程序。
ID:980583 發(fā)表于 2022-4-7 10:04
怎樣將PT100將AD轉(zhuǎn)換成溫度,算法不會,所以精度太大
#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;//設(shè)定的溫度
uchar dat;
long int temp;
double deal,U ;//電阻值,溫度對電阻的變化量(Q
//延時(shí)函數(shù)
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;//根據(jù)規(guī)定,RS為低電平,RW為高電平時(shí),可以讀狀態(tài)
lcdrw=1;
lcden=1; //E=1,才允許讀寫
_nop_();//空操作
_nop_();
_nop_();
_nop_();//空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
result=(bit)(P0&0x80); //將忙碌標(biāo)志電平賦給result
lcden=0;//將E恢復(fù)低電平
return result;
}
//寫命令函數(shù)
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;}
//寫數(shù)據(jù)函數(shù)
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顯示函數(shù)
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 轉(zhuǎn)換
void AD0808_display()
{
disdata[0]=temp/1000+0x30;//百位數(shù)
disdata[1]=temp/100%10+0x30;//十位數(shù)
disdata[2]=temp/10%10+'0';//個(gè)位數(shù)
disdata[3]=temp%10+0x30;//小數(shù)位
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]);//顯示個(gè)位  
           write_com(0x80+0x4c);
       write_date(0x2e);//顯示小數(shù)點(diǎn)   
       write_com(0x80+0x4d);
       write_date(disdata[3]);//顯示小數(shù)位
          
           if((tempmax>290)||(tempmin<30))
           {jdq=0;be=~be;led2=0;delay(50);}
           else
           {led2=1;}
}  
          
//主函數(shù)
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;

                }
        }
ID:161164 發(fā)表于 2022-4-6 23:11
代碼呢?
ID:262 發(fā)表于 2022-4-6 21:01
你在住循環(huán)里面 加入一個(gè)if 判斷即可,你可以在上面的51hei搜索框輸入"溫控"參考一下 51hei其他的項(xiàng)目

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表