久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機+max6675模塊+K型熱電偶的高溫可調PID溫控系統源程序
[打印本頁]
作者:
kk201314
時間:
2019-6-17 13:36
標題:
51單片機+max6675模塊+K型熱電偶的高溫可調PID溫控系統源程序
單片機源程序如下:
#include <reg52.h>
#include<intrins.h>
#include<string.h>
#include <stdio.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int//位定義
//max6675
sbit SO= P1^0;
sbit CS= P1^1;
sbit SCK=P1^2;
//按鍵
sbit key1=P1^5; //功能鍵
sbit key2=P1^6; //+
sbit key3=P1^7; //-
sbit BEEP=P1^3; //蜂鳴器
sbit RELAY=P1^4; //繼電器
//DAC0832
//sbit CSDA=P3^2;
//sbit wr=P3^6;
//int high_limit=1250; //上限溫度,默認值為1250
int Temp_set=250; //設定目標溫度,默認值為250
int Temp_true;
int set_status=0;
uchar qian=0,bai=0,shi=0,ge=0,xiao=0;
uchar smg[8];
//float Kp,Ki,Kd;
uchar num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰極數碼管賦值 0,1,2,3,4,5,6,7,8,9
//uchar num_p[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//共陽極數碼管帶小數點賦值 0,1,2,3,4,5,6,7,8,9
uchar choose[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//數碼管位選
//sbit dula=P2^6; //數碼管段選,鎖存器控制信號
//sbit wela=P2^7; //數碼管位選,鎖存器控制信號
uint Re_Convert(); //熱電偶數據讀取,返回溫度
//int ek=0;
//int eset_statu=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(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void delay_50ms(uint m)
{
uchar x,y;
for(x=m;x>0;x--)
for(y=50;y>0;y--) ;
}
/*********** MAX6675函數***********/
uint Re_Convert() //熱電偶數據讀取,返回溫度
{
long int a=0x7ff8;
long int wendu=0,wendu_1;
float wendu_2;
uint i;
CS=1;
SCK=0;
delay(200);
_nop_();
_nop_();
CS=0;
for(i=1;i<=16;i++)
{ wendu=wendu<<1;
_nop_();
SCK=1;
if(SO==1){wendu=wendu|0x01;}
else wendu=wendu|0x00;
_nop_();
_nop_();
SCK=0;
_nop_();
_nop_();
}
wendu_1=wendu&a;
wendu_1=wendu_1>>3;
wendu_2=wendu_1*0.25;
return wendu_2; //返回帶兩位小數的實際溫度
//wendu=wendu_2*100; //放大100倍轉成整型常數
//return wendu; //返回整型常數便于顯示小數位數字
}
//*************溫度顯示程序*******************//
void Disp_temp_true(uint temp)//溫度顯示
{
unsigned char i;
unsigned int j;
ge=temp%10; //取個數位數字
temp=temp/10;
shi=temp%10;//取十位數字
temp=temp/10;
bai=temp%10;//取百位數字
qian=temp/10;//取千位數字
smg[0]=num[qian];
smg[1]=num[bai];
smg[2]=num[shi];
smg[3]=num[ge];
/*
for(i=0; i<4; i++)
{
P2=choose[i]; //數碼管位選
P0=smg[i]; //送數字到段碼端口,顯示數字
j = 10; //掃描間隔時間設定
while(j--);
P0 = 0x00;//消隱
}
*/
}
//*************溫度設置顯示程序*******************//
void Disp_temp_set(uint set)//溫度設置顯示
{
unsigned char i;
unsigned int j;
ge=set%10; //取個數位數字
set=set/10;
shi=set%10;//取十位數字
set=set/10;
bai=set%10;//取百位數字
qian=set/10;//取千位數字
smg[4]=num[qian];
smg[5]=num[bai];
smg[6]=num[shi];
smg[7]=num[ge];
/*
for(i=4; i<8; i++)
{
P2=choose[i]; //數碼管位選
P0=smg[i]; //送數字到段碼端口,顯示數字
j = 10; //掃描間隔時間設定
while(j--);
P0 = 0x00;//消隱
}
*/
}
//*************報警子程序*******************//
void Alarm()//蜂鳴器間斷
{
if(Temp_true>Temp_set)
{
int b;
for(b=100;b>0;b--)
{
BEEP=1;
delay_50ms(10);
BEEP=0;
delay_50ms(10);
}
}
}
void compare_temper()
{
uint temper=Temp_true;
if(temper>=Temp_set) //實際溫度是否大于設置的溫度
{
RELAY=1;
}
else if(temper<Temp_set)
{
RELAY=0;
}
}
//*******按鍵子程序*******//
void keyset()
{
#if 1
if(key1 == 0){
set_status =!set_status;
}
if(set_status==1){
if(key1==0)
{
set_status =!set_status;
}
if(key2==0)
{
Temp_set=Temp_set+10;
Disp_temp_set(Temp_set);
//delay_50ms(1);
//while(!key2);
}
if(key3==0)
{
Temp_set=Temp_set-10;
Disp_temp_set(Temp_set);
//delay_50ms(10);
//while(!key3);
}
}
}
#else
if(set_status==0)
{
if(key1==0)
{
set_status=1;
}
}
else{
//while(set_status==1)
{
if(key1==0)
{
set_status=0;
}
if(key2==0)
{
Temp_set=Temp_set+10;
Disp_temp_set(Temp_set);
//delay_50ms(1);
//while(!key2);
}
if(key3==0)
{
Temp_set=Temp_set-10;
Disp_temp_set(Temp_set);
//delay_50ms(10);
//while(!key3);
}
//}
}
#endif
}
void init_sys() //系統初始化
{
IT0=1;
EX0=1;
ET0=1;
EA=1;
TMOD=1;
TH0=0xfc;
TL0=0x66;//裝初值,定時時間為1ms
ET0=1; //打開定時器0的大門
TR0=1;
P0=0xc0;
}
//*************主程序*******************//
void main()
{
// Kp=1.2;
// Ki=3.4;
// Kd=5.6;
init_sys();
delay_50ms(1);
while(1)
{
Temp_true=Re_Convert();// 熱電偶數據讀取,返回溫度
compare_temper();
Disp_temp_true(Temp_true);
Disp_temp_set(Temp_set);
//if(key1==0)
{
keyset();
}
//PID();
Alarm();
//delay_50ms(6);
}
}
void Dsqi0() interrupt 1
{
long int i=0;
uchar c=0xfe;
TH0=0xfc;
TL0=0x66;
P2=0xff;
P0=smg[i];
P2=c;
c=_crol_(c,1);
i=i+1;
if(i==8)
{
i=0;
c=0xfe;
}
}
復制代碼
所有資料51hei提供下載:
max6675.rar
(43.63 KB, 下載次數: 197)
2019-6-17 13:35 上傳
點擊文件名下載附件
51單片機+max6675模塊+K型熱電偶的高溫可調溫控系統
下載積分: 黑幣 -5
作者:
admin
時間:
2019-6-17 16:03
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者:
壞牧羊人
時間:
2020-5-1 14:40
請問有對應原理圖嗎
作者:
qzsulin
時間:
2020-10-19 09:36
未包含pid程序部分
作者:
woyaodwn
時間:
2021-12-28 09:53
補全電路原理圖,源碼了嗎
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产特黄
|
第一福利丝瓜av导航
|
亚洲第一色
|
久草福利在线
|
国产h片在线观看
|
欧美狠狠操
|
黄视频网站在线观看
|
欧美色综合
|
免费在线观看av
|
精品在线免费视频
|
www.久久精品
|
黄色特级片
|
成人免费看片39
|
五月婷婷在线观看
|
欧美成人精品欧美一级乱黄
|
欧美日韩福利
|
91在线免费视频观看
|
欧美国产精品
|
国产在线a
|
乳色吐息樱花
|
日本黄色视
|
国产成人在线免费观看
|
女子spa高潮呻吟抽搐
|
久久久久久亚洲
|
黄色日本视频
|
亚洲日本欧美
|
精品免费在线观看
|
久久九九99
|
日韩欧美一级
|
成人免费看片视频
|
一级毛片黄色
|
97av在线
|
成人性生活片
|
高潮一区二区三区乱码
|
久久精品视频国产
|
欧美精品久久久久久久
|
欧美在线
|
春色导航
|
国产三级在线观看视频
|
欧美日韩成人在线观看
|
亚洲永久免费
|