//max6675
sbit SO=P1^0;
sbit SCK=P1^1;
sbit CS=P1^2;
//按键
sbit key1=P3^4; //功能键
sbit key2=P3^5; //+
sbit key3=P3^7; //-
sbit BEEP=P2^3; //蜂鸣器
//DAC0832
sbit CSDA=P3^2;
sbit wr=P3^6;
int shang=1250; //上限报警温度,默认值为1250
int SetPoint=1200; //设定目标
int wendu,k1;
uchar qian=0,bai=0,shi=0,ge=0,xiao=0;
float Kp,Ki,Kd;
uchar tab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极数码管赋值 0,1,2,3,4,5,6,7,8,9
uchar code tab[]={0x7e,0x7d,0x7b,0x77};//数码管位选
sbit dula=P2^6; //数码管段选,锁存器控制信号
sbit wela=P2^7;//数码管位选,锁存器控制信号
uint Re_Convert(); //热电偶数据读取,返回温度
int ek=0;
int ek1=0; //第K-1采样时的偏差值,Error[-1]
int ek2=0; //第K-2采样时的偏差值,Error[-2]
float LastOutput=0; //上次PID输出
float Output=0; //PID的输出
uchar high_time,low_time,count=0;//占空比调节参数
//---------------------------延时子程序---------------------------//
void delay_50ms(uint m)
{
uchar x,y;
for(x=m;x>0;x--)
for(y=50;y>0;y--) ;
}
/*********** MAX6675函数***********/
uint Re_Convert() //热电偶数据读取,返回温度
{
uchar i;
unsigned long Temp_2;
Temp_2=0;
CS=1; //片选段
SCK=0; //sck串行时钟输入
delay_50ms(5);
CS=0; //片选段,低电平选通
for(i=0;i<16;i++)//16位数据读取
{
Temp_2=Temp_2<<1;//向左移一位
SCK=1;// 上升
if(SO==1) //so串行数据输出
{
Temp_2=Temp_2|0x01;
}
else Temp_2=Temp_2|0x00;
SCK=0;
}
Temp_2=Temp_2<<1; //向左移一位,取0-14位
Temp_2=Temp_2>>4; //向右移4位,取3-14位
Temp_2=Temp_2*1023.75/4096.00;//变换为温度值,后边Temp_2是你采集到的数据,temp是转换成实际温度的数据,可以直接送到显示部分显示,精度0.25
return Temp_2;
其实,是延时的问题,主要是delay_50ms(5);这个延时长短,我现在调的就是老是每次在最后一位停顿一下,求以前调过的大神给点意见,显示位码那延时多少,以及MAX6675函数中延时多少,就像下边的没有正确使用这样的回复就不要了,我求真正解决问题的建议