亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 88888pid.c

?? 基于AT89s51的溫濕度檢測報警程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
//********************************
//max6675 溫度采集
//lp      2007.12.06         
//********************************
#include <AT89x52.h>
#include <intrins.h>
#include <string.h>
#include "stdio.h"
//#include "sio.h"
#include "stc89c58_eeprom.h"			
#define  uchar unsigned char
#define  uint unsigned int
//********************
//模擬串口
#define  RXD   P2_7
#define  TXD   P2_6
//********************************
//      164顯示用的變量
data 	uchar	dis_data0=10;
data	uchar	dis_data1=10;
data	uchar	dis_data2=10;
data	uchar	dis_data3=10;
data	uchar	dis_data4=10;
data	uchar	dis_data5=10;
data	uchar	dis_data6=10;
data	uchar	dis_data7=10;
data	uchar	dis_data8=10;
data	uchar	dis_data9=10;
data	uchar	dis_data10=10;
data	uchar	dis_data11=10;
data	uchar	dis_data12=10;
data	uchar	dis_data13=10;
data	uchar	dis_data14=10;
data	uchar	dis_data15=10;		
data	uint 	disp_cx=200;				//計數到顯示標志樹起
bit		DISP_FLAG=1;				//顯示標志
//********************************
//串口通信用
float lnwd;
float cywd;
float czhi;
float eczhi;
float EII;
float EI=0;
//float bzhi;
uint  yxsj;
//********************************
//		按鍵用的變量
data	uchar	key_data;key_state=0xff;
bit   sk_flag=0;
bit		KEY_FLAG=1;					//按鍵抖動標志
data	uchar 	KeyFunIndex=0;				//狀態號
bit		SERRIES_FLAG;				//連加時間計數
bit		SCANKEY_FLAG=1;				//10ms 中斷樹標志 進入按鍵掃描程序
data	uchar	key_long_cx=0;key_serries_cx=0;//長按鍵、連加時間計數用
//********************************
uchar code led_segment[12]={0x21,0xF9,0x45,0x51,0x99,0x13,0x03,0xF1,0x01,0x11,0xff,0xdf}  ;	
//********************************
//熱電偶數字轉換器MAX6675
sbit SCK=P1^0;
sbit CS=P1^1;
sbit SO=P1^2;
sbit out=P1^3; 					    //pwm輸出	
bit	 COV_FLAG=1; 					//轉換標志
uint  aver0,aver1=0,aver2=0;		//采樣后求平均得到的溫度也擴大了十倍 aver0 當前的 aver1 前一次 aver2 前二次的
uint  samping_temper;				//采樣的溫度擴大了十倍
int   s_t0,	s_t1=0;					//計算理論溫度當前的和前一次的 也擴大了十倍	 
uchar data pmw_out=0; 					
uchar data pmw_cx=0;
bit	  SAVE_FLAG=1,SET_FLAG=0,PID_FLAG=0;
uint  a[7];						    //軟件濾波用
//********************************
bit		SEC5_FLAG=0;				//按鍵是否是由5-0mode 標志
int		set_temper=25;				//設定溫度
char	set_hour=0;set_min=0;       //設定時間
data int 	temper1;temper2;temper3;temper4;temper5;
data char	hour1;min1;hour2;min2;hour3;min3;hour4;min4;hour5;min5;
uint  min_cx=0;					//分計數
uint  ln_min;
//uint  xs_xs=20;
//uint  xsxs;
uint  cjsj=0;
bit   jr_flag;
uint 	min=0;						//分鐘
char    sect=0;						//設置段數
uint 	t0;						    //保存開始的溫度
//********************************
typedef struct						//多級菜單
{
	uchar KeyStateIndex;          	//index
	uchar KeyCrState;				//mode
	uchar KeyUpState;				//up
	uchar KeyDnState;				//down
	uchar KeyBackState;				//enter
	void  (*CurrentOperate)();
}KbdTabStruct;
//********************************
//函數申明:

void set();							//按鍵用
void up();
void down();
void enter();

void normal();						//正常模式
void sec_1_temper();				//第一段的  設定溫度
void sec_1_temper_up();				//第一段的  設定溫度+
void sec_1_temper_down();			//第一段的  設定溫度-
void sec_1_min();					//第一段的	設定時間min				
void sec_1_min_up();				//第一段的	設定時間min+
void sec_1_min_down();				//第一段的	設定時間min-													
void sec_1_hour();					//第一段的	設定時間hour				
void sec_1_hour_up();				//第一段的	設定時間hour+
void sec_1_hour_down();				//第一段的	設定時間hour-

void sec_2_temper();				//第2段的  	設定溫度
void sec_2_temper_up();				//第2段的  	設定溫度+
void sec_2_temper_down();			//第2段的  	設定溫度-
void sec_2_min();					//第2段的	設定時間min				
void sec_2_min_up();				//第2段的	設定時間min+
void sec_2_min_down();				//第2段的	設定時間min-													
void sec_2_hour();					//第2段的	設定時間hour				
void sec_2_hour_up();				//第2段的	設定時間hour+
void sec_2_hour_down();				//第2段的	設定時間hour-

void sec_3_temper();				//第3段的  	設定溫度
void sec_3_temper_up();				//第3段的  	設定溫度+
void sec_3_temper_down();			//第3段的  	設定溫度-
void sec_3_min();					//第3段的	設定時間min				
void sec_3_min_up();				//第3段的	設定時間min+
void sec_3_min_down();				//第3段的	設定時間min-													
void sec_3_hour();					//第3段的	設定時間hour				
void sec_3_hour_up();				//第3段的	設定時間hour+
void sec_3_hour_down();				//第3段的	設定時間hour-

void sec_4_temper();				//第4段的  	設定溫度
void sec_4_temper_up();				//第4段的  	設定溫度+
void sec_4_temper_down();			//第4段的  	設定溫度-
void sec_4_min();					//第4段的	設定時間min				
void sec_4_min_up();				//第4段的	設定時間min+
void sec_4_min_down();				//第4段的	設定時間min-													
void sec_4_hour();					//第4段的	設定時間hour				
void sec_4_hour_up();				//第4段的	設定時間hour+
void sec_4_hour_down();				//第4段的	設定時間hour-

void sec_5_temper();				//第5段的  	設定溫度
void sec_5_temper_up();				//第5段的  	設定溫度+
void sec_5_temper_down();			//第5段的  	設定溫度-
void sec_5_min();					//第5段的	設定時間min				
void sec_5_min_up();				//第5段的	設定時間min+
void sec_5_min_down();				//第5段的	設定時間min-													
void sec_5_hour();					//第5段的	設定時間hour				
void sec_5_hour_up();				//第5段的	設定時間hour+
void sec_5_hour_down();				//第5段的	設定時間hour-

void theory_count();
//********************************
//E_0: 當前測量值
//E_1: 前一次測量值
//E0 :當前理論值
//E1 :前一次理論值
//kp : 比例系數
//ki : 積分系數
//kd : 微分系數
//--------------------------------
//fun: PID計算輸出
//********************************
char   kp;                     // pid 系數
char   ki;
char   kd;
bit	   CT_FLAG=0;
float  E_1=0,E_2=0;
char code  DKP[7][7]={{40,40, 40,40,40,40, 40},
					       {40,40, 40,40,40,40, 40},
					       {30,30, 30,30,30,30, 30},
					       {0,0, 0,0,0,0,0},
					       {-10,0,-10,-10,-10,-10,-10},
					       {-10,0,-10,-10,-10,-10,-10},
					       {-20,0,-20,-20,-30,-30,-30}};

char code  DKI[7][7]={{20,20, 20,20,20,20,20},
					       {20,20, 20,20,20,20,20},
					       {20,20, 20,20,20,20,20},
					       {20,20, 20,20,20,20,20},
					       {20,20, 20,20,5,5,5},
					       {5,5,5,5,5,5,5},
					       {0,0,0,0,0,0,0}};

char code  DKD[7][7]={ {7,-7,-21,-21,-21,-14,7},
      					  {7,-7,-21,-14,-14,-7,0 },
      					  {0,-7,-14,-14,-7,-7,0},
      					  {0,-7,-7,-7,-7,-7,0},
      					  {0,-7,-14,-14,-7,-7,0},
      					  {7,-7,-21,-14,-14,-7,0},
      					  {7,-7,-21,-21,-21,-14,7},};
       				
#define ENB -7    //N是負,B是很大,M是中等,S是很少
#define ENM -5    //P是正,EC是偏差變化率,E是偏差
#define ENS -1
//#define EZO  0
#define EPS  1
#define EPM  2
#define EPB  3


#define ECNB -3  
#define ECNM -2
#define ECNS -1
//#define ECZO  0
#define ECPS  1
#define ECPM  2
#define ECPB  3

float	pidprocess(int rn,yn)		//rn理論值,yn采樣值
{	
	float	dp,di,dd,E_0,EC,kpp,kii,pdsj,ycjw;
	static float pidout=0;
	uchar i,j;
   ycjw=pdsj-rn;;
	E_0=rn-yn;						//當前偏差
   EI=EI+E_0;
//   if(E_0>8) {EI=0;}
   EII=EI/10.0;
   if(E_0==0){EII=0;}
   EC=E_0-E_1;			         //偏差的變化率
   eczhi=(E_0-E_1)/10.0;

	if(E_0<ENB)					{i=0;} //負的比較多 //負=超調
	else if(E_0>ENB&&E_0<ENM)	{i=1;} //負的中	
	else if(E_0>ENM&&E_0<ENS)	{i=2;} //負的比較小
	else if(E_0>ENS&&E_0<EPS)   {i=3;} // 0 
	else if(E_0>EPS&&E_0<EPM)	{i=4;} //正的比較小	//正超調
	else if(E_0>EPM&&E_0<EPB)	{i=5;} //正的比較中
	else 						{i=6;} //正的比較大	
	
	if(EC<ECNB)					{j=0;} //負的比較多 //負=下降趨勢
	else if(EC>ECNB&&EC<ECNM)	{j=1;} //負的中	
	else if(EC>ECNM&&EC<ECNS)	{j=2;} //負的比較小
	else if(EC>ECNS&&EC<ECPS)   {j=3;} // 0 
	else if(EC>ECPS&&EC<ECPM)	{j=4;} //正的比較小	//正=上升趨勢
	else if(EC>ECPM&&EC<ECPB)	{j=5;} //正的比較中
	else 						{j=6;} //正的比較大

	kp=(45-DKP[i][j]);
   if(rn<600){kp=kp-20-rn/100;}
   if(rn<700&&rn>600){kp=kp-10-rn/500;}
   if(rn<1200&&rn>700){kp=kp-5500/rn;}
   if(rn>1200&&rn<1500){kp=kp-1000/rn;}
   if(rn>1501&&rn<1800){kp=kp+rn/2000;}
   if(rn>1800){kp=kp+5+rn/450;}
   kpp=kp/10.0;	
	ki=(80-DKI[i][j]);
   kii=ki/100.0;		
	kd=(130-DKD[i][j]);

	dp=kpp*E_0;
	di=kii*EII;                          //(E_0-E_1);						
	dd=kd*EC;

	pidout=dp+di+dd+pidout;				//	對輸出要累加

 // if(E_0>-3){pidout=0;}
   if(E_0<1){pidout=0;}

	E_2=E_1;
	E_1=E_0;
   pdsj=rn;
	if(pidout<0){pidout=0;}			   //輸出限幅
	if(pidout>200){pidout=200;}		   //輸出限幅

	dis_data4=dp/100;
	dis_data11=((int)dp%100 )/10;
	dis_data12=(int)dp%10;

	//dis_data13=(k%100)/10;	 		//個位
	//dis_data14=k%10;
	dis_data13=dd/100;
	dis_data14=((int)dd%100)/10;
	dis_data15=(int)dd%10;
	return  (pidout);
//   return   (EI);
}
//********************************
//fun:定時器0  1 ms  定時 初始化子程序
//********************************
void time0_init()
{
	TMOD=0x11;
	TH0 =(65536-1000)>>8;
    TL0 =(65536-1000)&0xff;
	EA=1;
	ET0=1;
	TR0=1;
}
//********************************
//fun:定時器1  50 ms  定時 初始化子程序
//********************************
void time1_init()
{
	TH1 =(65536-50000)>>8;
    TL1 =(65536-50000)&0xff;
	ET1=1;
	TR1=1;
}
//********************************
//fun:定時器2 設置單片機的頻率
//********************************
void time2()
{
   T2CON=0x14;
   RCAP2H=0xff;
   RCAP2L=0xb4;
   SCON=0x7a;
 //  ET2=1;
 //  ES=1;
   EA=1;
   TI=1;
   printf("%.2f  ",lnwd);
   printf("%.2f  ",cywd);

 //  printf("%.2f  ",min);
 //  printf("%.2f  ",yxsj);
   printf("%.2f\n",czhi);
 //  printf("%d\n",yxsj);
   TI=0;
 //  ET2=0;
}
//********************************
//fun:  定時器0服務子程序
//********************************
void time0_sever() interrupt 1 using 1
{	
	//EA=0;	   	
    TH0 =(65536-10000)>>8;
    TL0 =(65536-10000)&0xff;
	SCANKEY_FLAG=1;				    //10ms 掃描按鍵1次
   sk_flag=1;
   disp_cx--;	
	if(disp_cx==0)
	{		
		disp_cx=100;
	 	DISP_FLAG=1;				//1秒顯示標志樹起
	   COV_FLAG=1;					//1秒轉換標志樹起
	}
	EA=1;
}
//********************************
//fun:  定時器1服務子程序
//********************************
void time1_sever() interrupt 3 
{
	//EA=0;	   	
    TH1 =(65536-49900)>>8;
    TL1 =(65536-49900)&0xff;
//--------------------------------
	min_cx+=1;
   cjsj+=1;
	if(min_cx==120)						//要改成1200(1 min);
{
		min_cx=0;						 //1分鐘到計數清零
		min+=1;							//分鐘計數
      yxsj=min;		
	{
	if(sect==1)							//sec 在按鍵設置的時候設為1 為0則不進行PID運算
		{}
	else if(sect==2)					//
		{min1=min2;hour1=hour2;}		// 計算理論溫度時,計算理論溫度的斜率要分段
	else if(sect==3)					//
		{min1=min3;hour1=hour3;}		//
	else if(sect==4)					//
		{min1=min4;hour1=hour4;}		//
	else if(sect==5)					//
		{min1=min5;hour1=hour5;}		//
	else 
		{
			sect=0;						// sect=0;表示不進行PID計算
			dis_data4=10;				//
			dis_data5=10;				//
			dis_data6=10;				//
			dis_data7=10;				//
			dis_data8=10;				//
			dis_data9=10;				//
			dis_data10=10;				//	
			out=1;
		}								
	}
}
	if(sect)
   {
   		theory_count();	
		if(min==min1*10+hour1*600)          //時間到進行第二段計算
		{			
	 		sect++;
			if(sect==6) sect=0;								
			min=0;						//時間清0
		}
		if(min%10==0)							//十分鐘寫保護
		{
			write_eeprom(SECT_ADDR,sect);
			write_eeprom(MIN_ADDR,min);
		}
	}
	 	
//--------------------------------	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
	if(sect)							//sect!=0 則有進行PWM輸出		
{										//中斷輸出
	if(pmw_cx<pmw_out)					//加熱時間到
	{									//輸出加熱
		out=0;
	}	
	else
	{
		if(pmw_cx<=200)					//不加熱時間到
		{								//停止加熱

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久人人做人人爽| 亚洲777理论| 亚洲一区免费在线观看| 人人狠狠综合久久亚洲| 成人小视频在线观看| 日韩精品一区二区三区视频播放 | 欧美精品一区二区三区蜜桃 | 国产偷国产偷亚洲高清人白洁| 一区二区三区中文字幕精品精品| 久久国产麻豆精品| 欧美日韩国产色站一区二区三区| 国产亚洲一区二区三区| 日韩不卡免费视频| 91久久精品一区二区二区| 国产亚洲综合av| 国产专区欧美精品| 日韩一区二区电影在线| 亚洲成a人片综合在线| 色综合久久天天| 国产精品美女一区二区在线观看| 黑人巨大精品欧美黑白配亚洲| 91.com视频| 日韩精品电影在线| 欧美日韩国产欧美日美国产精品| 亚洲欧美日韩一区| 99精品视频免费在线观看| 国产精品午夜春色av| 国产一区二区免费看| 欧美精品一区二区三区蜜臀| 蜜桃一区二区三区在线观看| 欧美日韩国产在线播放网站| 亚洲gay无套男同| 中文在线免费一区三区高中清不卡| 日本中文字幕不卡| 91精品国产综合久久福利软件| 亚洲成精国产精品女| 欧美蜜桃一区二区三区| 日韩有码一区二区三区| 91麻豆精品国产91久久久资源速度 | 国产亚洲精品超碰| 国产高清在线精品| 欧美高清一级片在线观看| 国产成人av资源| 综合激情成人伊人| 欧洲一区在线观看| 午夜婷婷国产麻豆精品| 日韩欧美激情一区| 国产精华液一区二区三区| 中文字幕精品—区二区四季| av中文一区二区三区| 一二三四社区欧美黄| 欧美精品高清视频| 精品亚洲国产成人av制服丝袜 | 欧美韩国一区二区| 成人福利电影精品一区二区在线观看| 国产精品色在线观看| 色中色一区二区| 三级一区在线视频先锋| 久久久午夜精品理论片中文字幕| 国产成人精品免费视频网站| 亚洲精品日产精品乱码不卡| 91精品蜜臀在线一区尤物| 国产麻豆精品一区二区| 亚洲美女免费在线| 欧美一级二级三级蜜桃| 成人激情午夜影院| 日日骚欧美日韩| 欧美激情中文字幕| 欧美裸体bbwbbwbbw| 国产成人在线视频网站| 亚洲国产精品嫩草影院| 日本一区二区电影| 欧美日韩欧美一区二区| 粉嫩aⅴ一区二区三区四区五区| 一区二区三区日本| 久久久噜噜噜久久中文字幕色伊伊| heyzo一本久久综合| 日韩专区欧美专区| 亚洲三级在线看| 26uuu国产一区二区三区| 在线观看免费一区| 懂色av中文字幕一区二区三区| 亚洲成人精品在线观看| 国产精品情趣视频| 欧美一卡二卡在线| 欧美影院精品一区| 国产suv精品一区二区883| 日韩电影一二三区| 亚洲一区在线电影| 国产精品伦理一区二区| 日韩一级精品视频在线观看| 在线观看日韩国产| 成人aaaa免费全部观看| 狠狠色丁香婷婷综合| 日本成人在线一区| 一区二区三区加勒比av| 国产精品福利电影一区二区三区四区| 日韩欧美中文字幕制服| 欧美视频三区在线播放| 91老师国产黑色丝袜在线| 国产99久久精品| 国产一区二区免费看| 精品午夜久久福利影院| 免费成人在线观看视频| 日日夜夜一区二区| 亚洲成人激情社区| 婷婷成人综合网| 亚洲成av人片一区二区梦乃| 亚洲自拍都市欧美小说| 夜夜嗨av一区二区三区| 亚洲欧美日韩系列| 尤物在线观看一区| 亚洲一区二区三区四区不卡| 亚洲精品一卡二卡| 一区二区三区在线免费视频| 亚洲色图都市小说| 亚洲欧美一区二区三区久本道91| 国产精品国产三级国产a| 欧美韩国一区二区| 亚洲啪啪综合av一区二区三区| 中文字幕日本不卡| 亚洲精品v日韩精品| 亚洲精品第一国产综合野| 亚洲人成网站影音先锋播放| 亚洲欧美日韩国产成人精品影院| 中文字幕日韩精品一区| 亚洲精品免费在线观看| 亚洲午夜精品在线| 奇米影视在线99精品| 日韩av电影免费观看高清完整版 | 欧美极品另类videosde| 国产精品卡一卡二卡三| 亚洲激情成人在线| 视频一区视频二区中文字幕| 久久精品国产久精国产| 韩日精品视频一区| 97se亚洲国产综合自在线不卡| 色综合久久久久网| 欧美高清激情brazzers| 欧美mv和日韩mv国产网站| 国产肉丝袜一区二区| 亚洲视频一区在线| 视频一区在线播放| 丰满亚洲少妇av| 欧美三级日韩三级| 精品国产三级a在线观看| 中文字幕日韩av资源站| 丝袜亚洲另类欧美| 国产成a人亚洲精品| 91福利社在线观看| 欧美大肚乱孕交hd孕妇| 中文字幕一区二区5566日韩| 日本欧美一区二区在线观看| 国产成人aaa| 欧美精品tushy高清| 欧美激情一区二区三区四区| 亚洲成人在线网站| 大桥未久av一区二区三区中文| 欧美午夜寂寞影院| 国产亚洲综合性久久久影院| 亚洲成人中文在线| 成人app网站| 精品国产免费久久 | 三级在线观看一区二区| 高清成人在线观看| 91精品国产福利| 日韩伦理免费电影| 国精产品一区一区三区mba视频 | 欧美日韩国产a| 国产精品每日更新| 久久99国产精品免费| 欧洲亚洲国产日韩| 国产精品免费观看视频| 精品在线免费视频| 欧美另类久久久品| 一区二区三区四区五区视频在线观看| 国产九色精品成人porny| 欧美日韩免费视频| 一区二区三区日本| 99热在这里有精品免费| 久久一日本道色综合| 婷婷一区二区三区| 在线一区二区三区| 亚洲欧洲国产日韩| 成人a免费在线看| 国产视频一区在线观看 | 亚洲h在线观看| 色婷婷精品久久二区二区蜜臀av| 中文字幕欧美日韩一区| 国产精品综合二区| 久久亚洲精品国产精品紫薇| 麻豆成人91精品二区三区| 欧美日韩免费视频| 婷婷综合久久一区二区三区| xfplay精品久久| 激情欧美一区二区三区在线观看| 7777精品伊人久久久大香线蕉的 | 91在线播放网址| 亚洲欧美一区二区视频| 不卡视频一二三|