欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
哪個大佬能給看看我這單片機熱電偶測溫程序哪里有問題嗎?
[打印本頁]
作者:
蔚藍的珊瑚海97
時間:
2020-5-6 16:25
標題:
哪個大佬能給看看我這單片機熱電偶測溫程序哪里有問題嗎?
這是個52單片機熱電偶測溫的程序,通過MAX6675轉換溫度數據的。
寫到Proteus仿真里面數碼管就從由往左閃爍,不能穩定顯示,然后讀的數據也不對。求大佬幫忙看看是程序哪里有問題嗎 萬分感謝!
#include "reg52.h"
#include "absacc.h"
#include "math.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^0; //數碼管段選
sbit wei=P2^1; //數碼管位選
sbit S0=P1^0; //MAX6675位定義
sbit SCK=P1^1; //
sbit CS=P1^2; //
sbit beep=P1^3; //蜂鳴器位定義
sbit Work=P1^4; //工作LED燈位定義
uint Re_Convert (void); //熱電偶溫度轉換
void Disp_temp(); //數碼管顯示
void Baojing(); //蜂鳴器報警
void delay(uchar); ///延時
uint P_Temp;
uint wendu,t1;
uint ge,shi,bai,qian;
uchar code tab1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
uchar code tab2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
void main(void) //主函數
{
beep=0;
while(1)
{
Disp_temp();
delay(500);
Baojing();
P_Temp=0;
}
}
void delay(uchar t) //延時函數
{
uchar x;
uchar y;
for(x=0;x<t;x++)
for(y=0;y<110;y++);
}
uint Re_Convert() //熱電偶溫度讀取
{
uchar i;
unsigned long P_Temp2;
CS=1; //MAX6675溫度轉換
delay(10); //
CS=0; //MAX6675使能
delay(1);
SCK=1; //
P_Temp2=0;
for(i=0;i<16;i++)
{
SCK =0; //拉低電平 給一個時鐘信號
P_Temp2=P_Temp2<<1;
if(S0==1)
P_Temp2|=0x0001;
else
P_Temp2&=0xffff;
SCK=1;
delay(10);
}
CS =1;
return(P_Temp2);
}
void Baojing(void) //報警函數
{
if(t1<=100&&t1>=400) //溫度小于100大于400報警
{
delay(20);
beep=1;
}
}
void Disp_temp() //顯示函數
{
P_Temp=Re_Convert();
P_Temp=P_Temp<<1;
P_Temp=P_Temp>>4;
t1=P_Temp/4;//P_Temp =(1024*P_Temp)/4096
t1=t1*10;
ge=t1%10;
t1=t1/10;
shi=t1%10;
t1=t1/10;
bai=t1%10;
qian=t1/10;
P0=tab1[ge];
dula=1;
dula=0;
P0=0x08;
wei=1;
wei=0;
delay(10);
P0=tab2[shi];
dula=1;
dula=0;
P0=0x04;
wei=1;
wei=0;
delay(10);
P0=tab1[bai];
dula=1;
dula=0;
P0=0x02; //0000 0010
wei=1;
wei=0;
delay(10);
P0=tab1[qian];
dula=1;
dula=0;
P0=0x01;
wei=1;
wei=0;
delay(10);
}
作者:
wulin
時間:
2020-5-7 10:41
主要是顯示程序有毛病,掃描周期太長,也沒有消隱。改這樣試試。
#include "reg52.h"
#include "absacc.h"
#include "math.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^0; //數碼管段選
sbit wei=P2^1; //數碼管位選
sbit SO=P1^0; //MAX6675位定義
sbit SCK=P1^1; //
sbit CS=P1^2; //
sbit beep=P1^3; //蜂鳴器位定義
sbit Work=P1^4; //工作LED燈位定義
uint Re_Convert (void); //熱電偶溫度轉換
void Disp_temp(); //數碼管顯示
void Baojing(); //蜂鳴器報警
void delay(uchar); ///延時
uint P_Temp;
uint wendu,t1;
uint ge,shi,bai,qian;
uchar code tab1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};//段碼
uchar code tab2[]={0x08,0x04,0x02,0x01};//位碼
uchar tab3[4];//顯示緩存
void main(void) //主函數
{
beep=0;
while(1)
{
Disp_temp();
Baojing();
P_Temp=0;
}
}
void delay(uchar t) //延時函數
{
uchar x;
uchar y;
for(x=0;x<t;x++)
for(y=0;y<110;y++);
}
uint Re_Convert() //熱電偶溫度讀取
{
uchar i;
unsigned long P_Temp2;
CS=1; //MAX6675溫度轉換
_nop_(); //_nop_();
CS=0; //MAX6675使能
_nop_();
SCK=1; //
P_Temp2=0;
for(i=0;i<16;i++)
{
SCK =0; //拉低電平 給一個時鐘信號
P_Temp2=P_Temp2<<1;
if(SO==1)
P_Temp2|=0x0001;
else
P_Temp2&=0xffff;
SCK=1;
_nop_();
}
CS =1;
return(P_Temp2);
}
void Baojing(void) //報警函數
{
if(t1<=100&&t1>=400) //溫度小于100大于400報警
{
delay(20);
beep=1;
}
}
void Disp_temp() //顯示函數
{
static uchar i=0;
P_Temp=Re_Convert();
P_Temp=P_Temp<<1;
P_Temp=P_Temp>>4;
t1=P_Temp/4; //P_Temp =(1024*P_Temp)/4096
t1=t1*10;
tab3[0]=t1%10;
tab3[1]=t1/10%10;
tab3[2]=t1/100%10;
tab3[3]=t1/1000%10;
P0=0xff;//消隱
dula=1;
dula=0;
P0=tab2[i];
wei=1;
wei=0;
if(i==1)
P0=tab1[tab3[i]]&0x7f; //加小數點
else
P0=tab1[tab3[i]];
dula=1;
dula=0;
i++;
i%=4;
}
復制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1