?? 88888pid.c
字號:
out=1;
}
}
pmw_cx++;
if(pmw_cx>=200) //計數到200表示10S到 進行下一次PID運算
{
pmw_cx=0; //計數清0
pmw_out=pidprocess(s_t0,aver0); //PID運算
cywd=aver0/10.0;
lnwd=s_t0/10.0; //
dis_data5=pmw_out/100;
dis_data6=(pmw_out%100)/10;
dis_data7=pmw_out%10;
// pmw_out=PIDprocess(s_t,set_temper);// pmw_out=100;//
}
}
EA=1;
}
//**********************************
//
void cktx()
{
if(cjsj==120)
{
cjsj=0;
czhi=lnwd-cywd;
if(czhi<-1.2){cywd=cywd-0.4;czhi=lnwd-cywd;}
time2();
/* czhi=lnwd-cywd;
if(czhi<=1.3&&czhi>=-1.1)
{
time2();
}
else if(czhi<2.2&&czhi>1.3)
{
cywd=cywd*1.01;
time2();
}
else if(czhi<-1.1&&czhi>-2.5)
{
cywd=lnwd*0.99;
time2();
} */
}
}
//***********************************
//*****模擬串口程序****************
void dis(uchar i)
{
uint x;
for(x=0x01;x<=0x80;x=x<<1)
{
if((i&x)==0)
RXD=0;
else
RXD=1;
TXD=0;
TXD=1;
}
// while(sk_flag)
// {sk_flag=0;}
}
//********************************
//out:sampling_temper
//fun:讀取MAX6675
//********************************
read_max6675()
{
if(!KeyFunIndex) //按鍵狀態
{
if(COV_FLAG) //轉換標志
{
uchar i;
uint dat_temp;
dat_temp=0;
CS=0;
SCK=0;
for(i=16;i>0;i--) //SCK由0→1 產生一上升 脈沖
{
SCK=1;
dat_temp=dat_temp<<1;
if(SO==1)
{
dat_temp=dat_temp|0x01;
}
SCK=0;
}
CS=1;
dat_temp=dat_temp<<1; //去掉最高位
dat_temp=dat_temp>>4; //去掉低三位
samping_temper=dat_temp; //這個是實際溫度的4倍 1024度是0xffff;
// return (dat_temp);
}
}
}
//********************************
//fun:軟件濾波
//********************************
void soft_filt()
{
if(!KeyFunIndex)
{
if(_testbit_(COV_FLAG))
{
uchar i;
uint max,min,sum=0;
for(i=6;i>=1;i--)
{
a[i]=a[i-1]; // 每次加進一個采樣數
}
// samping_temper=read_max6675();
a[0]=samping_temper;
max=min=a[0];
for(i=0;i<7;i++)
{
if(max<a[i]) max=a[i];
if(min>a[i]) min=a[i];
sum+=a[i];
} //去最大最小取平均值
aver0=((sum-max-min)>>1); //aver=(sum/5/4)*10=(sum/2) 擴大十倍
dis_data0=(aver0)/1000; //百位
dis_data1=(aver0%1000)/100; //十位
dis_data2=(aver0%100)/10; //個位
dis_data3=aver0%10; //小數第1位
/* if(dis_data3<3) //三分段
{
dis_data3=0;
}
else if(dis_data3>7)
{
dis_data3=0; s
dis_data2=dis_data2+1;
if( dis_data2==10) dis_data2=0;
if(dis_data2==0)
{
dis_data1=dis_data1+1;
if( dis_data1==10) dis_data1=0;
if(dis_data1==0)
{
dis_data0=dis_data0+1;
}
}
}
else dis_data3=5;*/
//aver1=aver0; //aver1<=aver0;
}
}
}
//********************************
// 多級菜單設計
//********************************
KbdTabStruct code KeyTab[]=
{
{0,1,0,0,0,(normal)}, //正常模式
{1,11,2,3,4,(sec_1_temper)}, //第一段的 設定溫度
{2,1,2,3,4,(sec_1_temper_up)}, //第一段的 設定溫度+
{3,1,2,3,4,(sec_1_temper_down)}, //第一段的 設定溫度-
{4,4,5,6,7,(sec_1_min)}, //第一段的 設定時間min
{5,4,5,6,7,(sec_1_min_up)}, //第一段的 設定時間min+
{6,4,5,6,7,(sec_1_min_down)}, //第一段的 設定時間min-
{7,7,8,9,11,(sec_1_hour)}, //第一段的 設定時間hour
{8,7,8,9,11,(sec_1_hour_up)}, //第一段的 設定時間hour+
{9,7,8,9,11,(sec_1_hour_down)}, //第一段的 設定時間hour-
{10,1,0,0,0,(normal)},
{11,21,12,13,14,(sec_2_temper)}, //第二段的 設定溫度
{12,11,12,13,14,(sec_2_temper_up)}, //第二段的 設定溫度+
{13,11,12,13,14,(sec_2_temper_down)}, //第二段的 設定溫度-
{14,14,15,16,17,(sec_2_min)}, //第二段的 設定時間min
{15,14,15,16,17,(sec_2_min_up)}, //第二段的 設定時間min+
{16,14,15,16,17,(sec_2_min_down)}, //第二段的 設定時間min-
{17,17,18,19,21,(sec_2_hour)}, //第二段的 設定時間hour
{18,17,18,19,21,(sec_2_hour_up)}, //第二段的 設定時間hour+
{19,17,18,19,21,(sec_2_hour_down)}, //第二段的 設定時間hour-
{20,1,0,0,0,(normal)},
{21,31,22,23,24,(sec_3_temper)}, //第三段的 設定溫度
{22,21,22,23,24,(sec_3_temper_up)}, //第三段的 設定溫度+
{23,21,22,23,24,(sec_3_temper_down)}, //第三段的 設定溫度-
{24,24,25,26,27,(sec_3_min)}, //第三段的 設定時間min
{25,24,25,26,27,(sec_3_min_up)}, //第三段的 設定時間min+
{26,24,25,26,27,(sec_3_min_down)}, //第三段的 設定時間min-
{27,27,28,29,31,(sec_3_hour)}, //第三段的 設定時間hour
{28,27,28,29,31,(sec_3_hour_up)}, //第三段的 設定時間hour+
{29,27,28,29,31,(sec_3_hour_down)}, //第三段的 設定時間hour-
{30,1,0,0,0,(normal)},
{31,41,32,33,34,(sec_4_temper)}, //第四段的 設定溫度
{32,31,32,33,34,(sec_4_temper_up)}, //第四段的 設定溫度+
{33,31,32,33,34,(sec_4_temper_down)}, //第四段的 設定溫度-
{34,34,35,36,37,(sec_4_min)}, //第四段的 設定時間min
{35,34,35,36,37,(sec_4_min_up)}, //第四段的 設定時間min+
{36,34,35,36,37,(sec_4_min_down)}, //第四段的 設定時間min-
{37,37,38,39,41,(sec_4_hour)}, //第四段的 設定時間hour
{38,37,38,39,41,(sec_4_hour_up)}, //第四段的 設定時間hour+
{39,37,38,39,41,(sec_4_hour_down)}, //第四段的 設定時間hour-
{40,1,0,0,0,(normal)},
{41,0,42,43,44,(sec_5_temper)}, //第五段的 設定溫度
{42,41,42,43,44,(sec_5_temper_up)}, //第五段的 設定溫度+
{43,41,42,43,44,(sec_5_temper_down)}, //第五段的 設定溫度-
{44,44,45,46,47,(sec_5_min)}, //第五段的 設定時間min
{45,44,45,46,47,(sec_5_min_up)}, //第五段的 設定時間min+
{46,44,45,46,47,(sec_5_min_down)}, //第五段的 設定時間min-
{47,47,48,49,0,(sec_5_hour)}, //第五段的 設定時間hour
{48,47,48,49,0,(sec_5_hour_up)}, //第五段的 設定時間hour+
{49,47,48,49,0,(sec_5_hour_down)}, //第五段的 設定時間hour-
};
//********************************
void temper_set()
{
dis_data4=10;
dis_data5=set_temper/100;
dis_data6=(set_temper%100)/10;
dis_data7=set_temper%10;
}
void temper_up()
{
set_temper++; //溫度設置加
if(set_temper>500){set_temper=0;}
temper_set();
}
void temper_down()
{
set_temper--; //溫度設置減
if(set_temper<0){set_temper=500;}
temper_set();
}
void time_set()
{
dis_data4=set_hour/10;
dis_data5=set_hour%10;
dis_data6=set_min/10;
dis_data7=set_min%10;
}
void min_up()
{ //分鐘設置加
set_min++;
if(set_min>59){set_min=0;}
time_set();
}
void min_down()
{
set_min--; //分鐘設置減
if(set_min<0){set_min=59;}
time_set();
}
void hour_up()
{
set_hour++; //小時設置加
if(set_hour>99){set_hour=0;}
time_set();
}
void hour_down()
{
set_hour--; //小時設置減
if(set_hour<0){set_hour=99;}
time_set();
}
//********************************
void normal()
{
if(_testbit_(SEC5_FLAG))
{
temper_set();
min5=set_min;
hour5=set_hour;
write_eeprom(SEC5_ADDR2,set_min);
write_eeprom(SEC5_ADDR3,set_hour);
set_min=set_hour=0;
}
} //空操作
void sec_1_temper() //第一段的 設定溫度
{
dis_data0=11;
dis_data1=10;
dis_data2=10;
dis_data3=1;
set_temper=samping_temper/4.0;
temper_set();
t0=aver0/10;
wipe_eeprom(SEC1_ADDR0); //擦除eeprom扇區
}
void sec_1_temper_up() //第一段的 設定溫度+
{
temper_up();
}
void sec_1_temper_down() //第一段的 設定溫度-
{
temper_down();
}
void sec_1_min() //第一段的 設定時間min
{
dis_data0=10;
//dis_data1=10;
dis_data2=11;
//dis_data3=1;
time_set();
temper1=set_temper;
write_eeprom(SEC1_ADDR0,set_temper>>8);
write_eeprom(SEC1_ADDR1,set_temper&0xff);
min=0;
}
void sec_1_min_up() //第一段的 設定時間min+
{
min_up();
}
void sec_1_min_down() //第一段的 設定時間min-
{
min_down();
}
void sec_1_hour() //第一段的 設定時間hour
{
//dis_data0=10;
dis_data1=11;
dis_data2=10;
//dis_data3=1;
}
void sec_1_hour_up() //第一段的 設定時間hour+
{
hour_up();
}
void sec_1_hour_down() //第一段的 設定時間hour-
{
hour_down();
}
void sec_2_temper() //第2段的 設定溫度
{
dis_data0=11;
dis_data1=10;
//dis_data2=10;
dis_data3=2;
temper_set();
min1=set_min;
hour1=set_hour;
write_eeprom(SEC1_ADDR2,set_min);
write_eeprom(SEC1_ADDR3,set_hour);
set_min=set_hour=0;
}
void sec_2_temper_up() //第2段的 設定溫度+
{
temper_up();
}
void sec_2_temper_down() //第2段的 設定溫度-
{
temper_down();
}
void sec_2_min() //第2段的 設定時間min
{
dis_data0=10;
//dis_data1=10;
dis_data2=11;
//dis_data3=2;
time_set();
temper2=set_temper;
write_eeprom(SEC2_ADDR0,set_temper>>8);
write_eeprom(SEC2_ADDR1,set_temper&0xff);
}
void sec_2_min_up() //第2段的 設定時間min+
{
min_up();
}
void sec_2_min_down() //第2段的 設定時間min-
{
min_down();
}
void sec_2_hour() //第2段的 設定時間hour
{
//dis_data0=10;
dis_data1=11;
dis_data2=10;
//dis_data3=2;
}
void sec_2_hour_up() //第2段的 設定時間hour+
{
hour_up();
}
void sec_2_hour_down() //第2段的 設定時間hour-
{
hour_down();
}
void sec_3_temper() //第3段的 設定溫度
{
dis_data0=11;
dis_data1=10;
//dis_data2=10;
dis_data3=3;
temper_set();
min2=set_min;
hour2=set_hour;
write_eeprom(SEC2_ADDR2,set_min);
write_eeprom(SEC2_ADDR3,set_hour);
set_min=set_hour=0;
}
void sec_3_temper_up() //第3段的 設定溫度+
{
temper_up();
}
void sec_3_temper_down() //第3段的 設定溫度-
{
temper_down();
}
void sec_3_min() //第3段的 設定時間min
{
dis_data0=10;
//dis_data1=10;
dis_data2=11;
//dis_data3=3;
time_set();
temper3=set_temper;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -