欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
哪個(gè)大佬能給看看我這單片機(jī)熱電偶測(cè)溫程序哪里有問題嗎?
[打印本頁]
作者:
蔚藍(lán)的珊瑚海97
時(shí)間:
2020-5-6 16:25
標(biāo)題:
哪個(gè)大佬能給看看我這單片機(jī)熱電偶測(cè)溫程序哪里有問題嗎?
這是個(gè)52單片機(jī)熱電偶測(cè)溫的程序,通過MAX6675轉(zhuǎn)換溫度數(shù)據(jù)的。
寫到Proteus仿真里面數(shù)碼管就從由往左閃爍,不能穩(wěn)定顯示,然后讀的數(shù)據(jù)也不對(duì)。求大佬幫忙看看是程序哪里有問題嗎 萬分感謝!
#include "reg52.h"
#include "absacc.h"
#include "math.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^0; //數(shù)碼管段選
sbit wei=P2^1; //數(shù)碼管位選
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); //熱電偶溫度轉(zhuǎn)換
void Disp_temp(); //數(shù)碼管顯示
void Baojing(); //蜂鳴器報(bào)警
void delay(uchar); ///延時(shí)
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) //主函數(shù)
{
beep=0;
while(1)
{
Disp_temp();
delay(500);
Baojing();
P_Temp=0;
}
}
void delay(uchar t) //延時(shí)函數(shù)
{
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溫度轉(zhuǎn)換
delay(10); //
CS=0; //MAX6675使能
delay(1);
SCK=1; //
P_Temp2=0;
for(i=0;i<16;i++)
{
SCK =0; //拉低電平 給一個(gè)時(shí)鐘信號(hào)
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) //報(bào)警函數(shù)
{
if(t1<=100&&t1>=400) //溫度小于100大于400報(bào)警
{
delay(20);
beep=1;
}
}
void Disp_temp() //顯示函數(shù)
{
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
時(shí)間:
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; //數(shù)碼管段選
sbit wei=P2^1; //數(shù)碼管位選
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); //熱電偶溫度轉(zhuǎn)換
void Disp_temp(); //數(shù)碼管顯示
void Baojing(); //蜂鳴器報(bào)警
void delay(uchar); ///延時(shí)
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) //主函數(shù)
{
beep=0;
while(1)
{
Disp_temp();
Baojing();
P_Temp=0;
}
}
void delay(uchar t) //延時(shí)函數(shù)
{
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溫度轉(zhuǎn)換
_nop_(); //_nop_();
CS=0; //MAX6675使能
_nop_();
SCK=1; //
P_Temp2=0;
for(i=0;i<16;i++)
{
SCK =0; //拉低電平 給一個(gè)時(shí)鐘信號(hào)
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) //報(bào)警函數(shù)
{
if(t1<=100&&t1>=400) //溫度小于100大于400報(bào)警
{
delay(20);
beep=1;
}
}
void Disp_temp() //顯示函數(shù)
{
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; //加小數(shù)點(diǎn)
else
P0=tab1[tab3[i]];
dula=1;
dula=0;
i++;
i%=4;
}
復(fù)制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1