1.png (174.37 KB)
下載附件
2021-4-17 01:31 上傳
- #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、本主題所有言論和內容純屬會員個人意見,與本論壇立場無關。2、本站對所發內容真實性、客觀性、可用性不做任何保證也不負任何責任,網友之間僅出于學習目的進行交流。3、對提供的數字內容不擁有任何權利,其版權歸原著者擁有。請勿將該數字內容進行商業交易、轉載等行為,該內容只為學習所提供,使用后發生的一切問題與本站無關。 4、本網站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網站所有軟件和資料均為網友推薦收集整理而來,僅供學習用途使用,請務必下載后兩小時內刪除,禁止商用。6、如有侵犯你版權的,請及時聯系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|