- #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)指出,本站将立即改正。
|
|