求大神谁能帮忙看一下这个热电偶测温程序

2019-07-15 09:31发布

这个段选和位选为什么之定义了P2-6,P2-7,原理图怎么连!!!
/*************************************************************************
亲测可用,误差1-2摄氏度,元件是k型热电偶,51单片机,晶振11.0592,4位共阴数码管显示
**************************************************************************/
#include <reg51.h>//头文件
#include "intrins.h"//_nop_();延时函数用
#define  uchar unsigned char //用uchar代替unsigned char,1字节0-255
#define  uint  unsigned int //用uint代替nsigned int,2字节0-26653

sbit  SO=P1^0;  //P1.0口与SO相连
sbit  CS=P1^1;  //P1.1口与CS相连
sbit  SCK=P1^2; //P1.2口与SCK相连

sbit dula=P2^6;//段选
sbit wela=P2^7;//位选

uint j,h;
float wendu;//4字节(6位数字)
uint  Re_Convert();//热电偶数据读取,返回温度
void  Disp_temp();//温度显示
uchar qian=0,bai=0,shi=0,ge=0,xiao=0;
uint  P_Temp;
uint  temp;
uchar code table3[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,                                        //共阴数码管
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(unsigned int z)//延时
{
        unsigned int x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

uint Re_Convert() //热电偶数据读取,返回温度
{ uchar i;
        unsigned long Temp_2;
  Temp_2=0;
  CS=1;
  SCK=0;  
  _nop_();_nop_();
  //这个_nop_()等效与汇编里面的NOP指令,也就是空一个机器周期,
  //在51单片机中_nop_()等于空12个时钟周期【即一个机器周期】
  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_();
     }
                CS=1;                 //读取完后对CS置1进行温度转换!MAX6675的转换时间是典型值:0.17s,最大值0.22s。
                Temp_2=Temp_2<<1;        //向左移一位,取0-14位
                Temp_2=Temp_2>>4;        //向右移4位,取3-14位         
                Temp_2=Temp_2*10/4;//变换为温度值--每LSB代表0.25度,注意:在此处先乘了个10
                return(Temp_2);   
}
void Disp_temp()//温度显示
{
  uint temp;       
//        wendu=Re_Convert();// 热电偶数据读取,返回温度
        temp=wendu;
  xiao=temp%10; //取小数位数字
  temp=temp/10;
  ge  =temp%10;//取个位数字
  temp=temp/10;
  shi =temp%10;//取十位数字
  bai =temp/10;//去百位数字
//动态扫描显示各位数字
       
                dula=0;
                P0=table3[bai];               
                dula=1;
                dula=0;               
                wela=0;
                P0=0x7e;
                wela=1;
                wela=0;
                delay(1);
               
                dula=0;
                P0=table3[shi];               
                dula=1;
                dula=0;               
                wela=0;
                P0=0x7d;
                wela=1;
                wela=0;
                delay(1);
               
                dula=0;
                P0=table3[ge];               
                dula=1;
                dula=0;               
                wela=0;
                P0=0x7b;
                wela=1;
                wela=0;
                delay(1);
               
                dula=0;
                P0=table3[xiao];               
                dula=1;
                dula=0;               
                wela=0;
                P0=0x77;
                wela=1;
                wela=0;
                delay(1);       

}
void main()//主程序
{
        while(1)
  {
               
                for(j=250;j>0;j--)
                {
                        if(j==250){wendu=Re_Convert();}
                        // 热电偶数据读取,返回温度,每刷新250次(大约0.5秒)进行一次MAX6675的温度转换,MAX6675的转换时间典型值:0.17s,最大值0.22s。
                        Disp_temp(); //温度显示
                }
  }   
}

0条回答

一周热门 更多>