www.pudn.com > RE.zip > main.c, change:2014-05-17,size:2405b


#include <reg51.h> 
#include <intrins.h>  
#include <math.h> 
#define uchar  unsigned char 
#define uint   unsigned int 
#define ulong  unsigned long 
//定义温度数据变量 
float temp = 0; 
ulong x = 0; 
uint  wendu; 
sbit  SO=P1^0;  //P1.0口与SO相连 
sbit  SCK=P1^1; //P1.1口与SCK相连 
sbit  CS=P1^2;  //P1.2口与CS相连 
 
//热电偶数据--读取温度 
unsigned long Re_Convert()  
{ uchar i;  
  unsigned long Temp_2;  
  Temp_2=0; 
  CS=1; 
  SCK=0;   
  _nop_();_nop_();  
  CS=0; 
  for(i=0;i<16;i++)//16位数据读取 
     { Temp_2<<=1;//向右移一位 
	  _nop_(); 
	   SCK=1;//上升 
       if(SO==1){Temp_2=Temp_2|0x01;}  
	   else Temp_2=Temp_2|0x00; 
	   _nop_();   			                                                          
       SCK=0; 
	  _nop_(); 
     }     
  Temp_2=Temp_2<<1;	//向左移一位,取0-14位 
  Temp_2=Temp_2>>3;	//向右移4位,取3-14位 
  return(Temp_2);    
}  
//延时函数ms 
void _delay_ms(uint i) 
{ 
  uchar j; 
  for(;i>0;i--) 
  { 
   for(j=0;j<120;j++); 
  } 
} 
//共阳极/*0,1,2,3,4,5,6,7,8,9,*/ 
uchar code SEG7[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; 
//显示缓冲 
uchar num[]={0,0,0,0,0}; 
//位码定义 
sbit      q1=P2^0; 
sbit      q2=P2^1; 
sbit      q3=P2^2; 
sbit      q4=P2^3; 
//温度显示 
void display() 
{ 
  num[0]=SEG7[wendu%10000/1000]; 
  num[1]=SEG7[wendu%1000/100]; 
  num[2]=SEG7[wendu%100/10]; 
  num[3]=SEG7[wendu%10]; 
  //显示第1位 
  P0=num[0];q1=1;_delay_ms(2);q1=0; 
  //显示第2位 
  P0=num[1];q2=1;_delay_ms(2);q2=0; 
  //显示第3位 
  P0=num[2];q3=1;_delay_ms(2);q3=0; 
  //显示第4位 
  P0=num[3];q4=1;_delay_ms(2);q4=0;   
} 
  
void  chushihua() 
{ 
  SCON=0x50; //串口模式1,允许接收 
  TMOD=0x20; //T1 工作模式2 
  TH1=0xfd;  //波特率9600 
  TL1=0xfd; 
  PCON=0x00; //波特率不倍增 
  ES=1; 
  EA=1; 
  IP=0x01; 
  TR1=1; 
}  
//------------------------------- 
void Putc_to_SerialPort(uchar c) 
{ 
  SBUF=c; 
  while(TI==0); 
  TI=0; 
} 
 
uint jishu1=0; 
void main()//主程序 
{  
   chushihua(); 
   while(1)  
   {  
	 x=Re_Convert(); 
  	 temp=0.25*x; 
   	 wendu =(uint) temp; 
     wendu=wendu-49; 
     wendu=wendu/2; 
     display(); 
	 //发送到PC 
	 jishu1=jishu1+1; 
	 if(jishu1>100) 
	 { 
	  jishu1=0; 
	  Putc_to_SerialPort('\r'); 
	  Putc_to_SerialPort(0x30+wendu%1000/100); 
	  Putc_to_SerialPort(0x30+wendu%100/10); 
	  Putc_to_SerialPort(0x30+wendu%10); 
	  Putc_to_SerialPort('^'); 
	  Putc_to_SerialPort('c'); 
	 } 
  }     
}