欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2878|回復: 0
打印 上一主題 下一主題
收起左側

單片機+MAX6675上位機控制溫度報警程序

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int  
#define uchar unsigned char
        

unsigned char rs,set[]={0,0,0,0,0,0};
unsigned int data a;         
int maxtemp,mintemp,ctemp;
double  aa=0;

         uint j;
//MAX6675引腳定義         
sbit SO=P1^5;
sbit SCK=P1^6;
sbit CS=P1^7;
//函數名定義
uint min=0;              //軟件初始下限閾值(低溫提示預警)
uint max=1023;             //軟件初始上限閾值(高溫提示預警)
uint MAX6675_ReadData(void);
void mDelay(unsigned int DelayTime);
void Display(uint i);

void Display(uint i)
{
uchar dis[4]={0,0,0,0};
uint m,n;
uint LED[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};      //0-9顯示碼 共陽極數碼管
n=0x08;                           
dis[3]=i/1000;                 
dis[2]=i%1000/100;
dis[1]=i%100/10;
dis[0]=i%10;
for(m=0;m<4;m++)                               //動態掃描
{
P0=0xff;
P2=0xf0|n;                                     //指定位給1  
P0=LED[dis[m]];
mDelay(3);
n=_cror_(n,1);
}
}

uint  MAX6675_ReadData(void)
{
int k,i;        
        long int dat;
int n;
i=0;
dat=0;//初始化時間大于Tcss即>100ns
CS=0;
SCK=0;                 
for(i=0;i<16;i++)        //16個脈沖采集信號
        {
        SCK=1;                 //拉高     
        dat<<=1;
        if(SO==1)
        dat=dat|0x01;
        SCK=0;                 //拉低
        }
        CS=1;                  //拉高
        dat>>=3;               //D3-D14有效  溫度值
        dat&=0x0fff;
        k=(dat*0.25); //乘分辨率0.25 就是攝氏度
        

        if((0<k&&k<=161)||(406<=k&&k<=440)) //誤差處理  冷端溫度為0℃  
        {k+=1;}
        if((162<=k&&k<=195)||(367<=k&&k<=405))  
        {k+=2;}
        if((196<=k&&k<=240)||(305<=k&&k<=366))
  {k+=3;}
        if(241<=k&&k<=304)
  {k+=4;}
  if(471<=k&&k<=499)        
        {k-=1;}
        if(500<=k&&k<=526)        
        {k-=2;}
  if(527<=k&&k<=555)        
        {k-=3;}
  if(556<=k&&k<=584)        
  {k-=4;}
  if(585<=k&&k<=610)        
        {k-=5;}
  if(441<=k&&k<=470)        
        {k=k;}

        return k;//函數返回值  返回溫度
}

void time0() interrupt 1 using 0   
{
        long int temp=1;
        unsigned int cctemp;
        ET0=0;  //定時器0關
        TH0=(65535-250)/256;   //50000/250=200  
        TL0=(65535-250)%256;  
         a++;
        if(a==3000)//a每加到3000  進行處理  1秒
        {
          a=0;
          aa= MAX6675_ReadData();//調用讀取溫度函數
                temp=aa*10;//讀取溫度按照上位機要求乘10處理
               
          TI=0;SBUF='h';while(!TI);//通信協議  先發‘h’
          TI=0;SBUF=temp/256;while(!TI);//乘10后先發高八位
          TI=0;SBUF='l';while(!TI);//通信協議 在發‘l’
          TI=0;SBUF=temp%256;while(!TI);//發溫度的第八位
        }

        
                if(RI)
                {RI=0;set[rs]=SBUF;rs++;if(rs==2)
                        {        
                                ctemp = set[0];
                                ctemp = ctemp<<8;
                                ctemp = ctemp|set[1]; rs=0;
                        }
                }


        Display(ctemp/10);
        
        ET0=1;//定位器開
}

void mDelay(unsigned int DelayTime)//軟件延時1ms
{
unsigned char j=0;
        while(DelayTime--);
        
}
        
void main()
{

        TMOD=0X21;//定時器初始化模式設置
        SCON=0X50;
        PCON=0X80;
        TH1=0XFA;
        TL1=0XFA;
        TH0=(65535-250)/256;          //50000/250=200  
        TL0=(65535-250)%256;
        TR1=1;
        ET0=1;IT0=1;TR0=1;EX0=1;EA=1; //允許外部中斷0產生中斷

        while(1);
        
}


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表