?? text1
字號:
// Header:
// File Name:
// Author:
// Date:
#include<STC89C51RC_RD_PLUS.h>
#include<intrins.h>
#include<string.h>
#include"dataflash.h"
#include"gain_temp.h"
#include"pid.h"
typedef unsigned char unchar;
sbit Data_Inc=0x90;
sbit Control_Heat=0x91;
sbit Control_Cold=0x92;
sbit Data_Dec=0x93;
sbit Shift=0x94;
sbit Set=0x95;
////菜單標志位
bit Normal_Menu=1;
bit Work_End=0;
bit Time_Menu=0;//時間查看標志位(0),否則
bit A_Menu=0;
bit B_Menu=0;
bit Gain_On=0;//采集標志位
//存放顯示各個位值信息(高位放前面)
unchar BInform_WTime[4]={0,0,0,0};//存放設定工作時間各個位的值
unchar BInform_PV[4]={0,0,0,0}; //存放實測溫度PV各個位的值
unchar BInform_SV[4];// 存放設定溫度SV各個位的值 (先存放高位)
xdata unchar BInform_B[44];//存放AL1,SEC,COLD,SC,HL,P,I,D,LCK,SVL,SVH的各個位的值顯示
idata unchar BInform_AL1[4];
idata unchar BInform_SEC[4];
idata unchar BInform_COLD[4];
idata unchar BInform_SC[4];
idata unchar BInform_HL[4];
idata unchar BInform_P[4];
idata unchar BInform_I[4];
idata unchar BInform_D[4];
idata unchar BInform_LCK[4];
idata unchar BInform_SVH[4];
idata unchar BInform_SVL[4];
//存放參數數值信息
idata unchar Value_Led;//存放指示燈的狀態值
idata unchar Value_WTime;//存放設定工作時間的值
idata float Value_PV; //存放實測溫度PV的值
idata float Value_SV=30.0;// 存放設定溫度SV的值
idata unchar Value_LCK;
idata float Value_SVH; //
idata float Value_SVL;// 存放設定溫度SV的值的上下限
idata float Value_AL1;
idata unchar Value_SEC;
idata float Value_COLD;
idata float Value_SC;
idata float Value_HL;
idata float Value_P;
idata unchar Value_I;
idata unchar Value_D;
////存放AL1,SEC,COLD,SC,HL,P,I,D,LCK的符號顯示
code unchar Display_T[4]={0xff,0xff,0xff,0xCE};
code unchar Display_AL1[4]={0xff,0x88,0xc7,0xf9};
code unchar Display_SEC[4]={0xff,0x92,0x86,0xc6};
code unchar Display_COLD[4]={0xc6,0xc0,0xc7,0xc0};
code unchar Display_SC[4]={0xff,0xff,0x92,0xc6};
code unchar Display_HL[4]={0xff,0xff,0x89,0xc7};
code unchar Display_P[4]={0xff,0xff,0xff,0x8c};
code unchar Display_I[4]={0xff,0xff,0xff,0xf9};
code unchar Display_D[4]={0xff,0xff,0xff,0xc0};
code unchar Display_LCK[4]={0xff,0xc7,0xc6,0x8f};
code unchar Display_SVH[4]={0xff,0x92,0xc1,0x89};
code unchar Display_SVL[4]={0xff,0x92,0xc1,0xc7};
code unchar Display___[4]={0xf7,0xf7,0xf7,0xf7};
code unchar Display_END[4]={0xff,0x86,0x89,0xc0};
////
unchar Value_Set=0; //存放功能鍵的序號=0時進入正常顯示
unchar Value_Shift=0;//存放移位鍵的序號
////
char sec=0;//制冷延時時間
unchar Time0_Gain=0;//用于T0定時一秒20*50ms
unchar Time1_USet=0;//A\B菜單中存放無鍵按下時間
unchar Time2_Set=0;//存放Set鍵按下時間
unchar Frequency=0;//供加熱器頻率
////顯示程序
void time_display(unchar *pf,unchar *pt,unchar Diode_Led);//顯示當前溫度,工作剩余時間,二極管狀態
void norm_display(unchar *pv,unchar *ps,unchar Diode_Led);// 顯示當前溫度,設置溫度,二極管狀態
void shanshuo_display(unchar *pf,unchar *pz,unchar Diode_Led);//顯示各個參數符號,各個參數的值,二極管狀態(當是設定溫度時,pf顯示的是當前溫度)
code unchar seven_seg[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
code unchar seven_seg1[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
/*=====================================================================================================================
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
=====================================================================================================================*/
void delay(char x)//用在常態顯示的延時
{
unsigned char i,j;
for (i=0;i<x;i++)for (j=0;j<255;j++);////大約1ms
}
////////////////////////////////////////
void idata_process(unchar pv,unchar *pp)
{
*pp=pv/1000;
pv%=1000;
*(pp+1)=pv/100;
pv%=100;
*(pp+2)=pv/10;
pv%=10;
*(pp+3)=pv;
}
/* ====================================================
參數初始化程序
====================================================*/
void init_parameter(void)
{int i;
//參數數值信息
Value_Led=0;
Value_PV=0;
Value_WTime=0;
Value_SV=100*BInform_SV[0]+10*BInform_SV[1]+BInform_SV[2]+BInform_SV[3]/10;
Value_AL1=0*BInform_B[0]+0*BInform_B[1]+BInform_B[2]+BInform_B[3]/10;
Value_SEC=0*BInform_B[4]+0*BInform_B[5]+0*BInform_B[6]+BInform_B[7];
Value_COLD=0*BInform_B[8]+0*BInform_B[10]+BInform_B[10]+BInform_B[11]/10;
Value_SC=0*BInform_B[12]+0*BInform_B[13]+BInform_B[14]+BInform_B[15]/10;
Value_HL=BInform_B[16]+BInform_B[17]/10+BInform_B[18]/100+BInform_B[19]/1000;
Value_P=10*BInform_B[20]+BInform_B[21]+BInform_B[22]/10+BInform_B[23]/100;
Value_I=1000*BInform_B[24]+100*BInform_B[25]+10*BInform_B[26]+BInform_B[27];
Value_D=1000*BInform_B[28]+100*BInform_B[29]+10*BInform_B[30]+BInform_B[31];
Value_LCK=1000*BInform_B[32]+100*BInform_B[33]+10*BInform_B[34]+BInform_B[35];
Value_SVL=100*BInform_B[36]+10*BInform_B[37]+BInform_B[38]+BInform_B[39]/10;
Value_SVH=100*BInform_B[40]+10*BInform_B[41]+BInform_B[42]+BInform_B[43]/10;
//BInform_WTime[4];//存放設定工作時間各個位的值
// BInform_PV[4]; //存放實測溫度PV各個位的值
// BInform_SV[4];// 存放設定溫度SV各個位的值 (先存放高位)
for(i=0;i<44;i++)
{
if(i<4)BInform_AL1[i]=BInform_B[i];
else if(i<8)BInform_SEC[i-4]=BInform_B[i];
else if(i<12)BInform_COLD[i-8]=BInform_B[i];
else if(i<16)BInform_SC[i-12]=BInform_B[i];
else if(i<20)BInform_HL[i-16]=BInform_B[i];
else if(i<24)BInform_P[i-20]=BInform_B[i];
else if(i<28)BInform_I[i-24]=BInform_B[i];
else if(i<32)BInform_D[i-28]=BInform_B[i];
else if(i<36)BInform_LCK[i-32]=BInform_B[i];
else if(i<40)BInform_SVL[i-36]=BInform_B[i];
else BInform_SVH[i-40]=BInform_B[i];
}
}
/* ====================================================
參數保存化程序
====================================================*/
void stor_parameter(void) //參數數值信息
{
int i;
for(i=0;i<44;i++)
{if(i<4)BInform_B[i]= BInform_AL1[i];
else if(i<8)BInform_B[i]=BInform_SEC[i-4];
else if(i<12)BInform_B[i]=BInform_COLD[i-8];
else if(i<16)BInform_B[i]=BInform_SC[i-12];
else if(i<20)BInform_B[i]=BInform_HL[i-16];
else if(i<24)BInform_B[i]=BInform_P[i-20];
else if(i<28)BInform_B[i]=BInform_I[i-24];
else if(i<32)BInform_B[i]=BInform_D[i-28];
else if(i<36)BInform_B[i]=BInform_LCK[i-32];
else if(i<40)BInform_B[i]=BInform_SVL[i-36];
else BInform_B[i]=BInform_SVH[i-40];}
//////////////////////////////////////////////////////////////////////////////////////////////
Value_SV=100*BInform_SV[0]+10*BInform_SV[1]+BInform_SV[2]+BInform_SV[3]/10;
if(Value_SV>=Value_SVH)
{
Value_SV=Value_SVH;
for(i=0;i<4;i++)
{BInform_SV[i]=BInform_SVH[i];}
}
else if(Value_SV<=Value_SVL)
{
Value_SV=Value_SVL;
for(i=0;i<4;i++)
{BInform_SV[i]=BInform_SVL[i];}
}
Value_WTime=1000*BInform_WTime[0]+100*BInform_WTime[1]+10*BInform_WTime[2]+BInform_WTime[3];
Value_AL1=0*BInform_B[0]+0*BInform_B[1]+BInform_B[2]+BInform_B[3]/10;
Value_SEC=0*BInform_B[4]+0*BInform_B[5]+0*BInform_B[6]+BInform_B[7];
Value_COLD=0*BInform_B[8]+0*BInform_B[10]+BInform_B[10]+BInform_B[11]/10;
Value_SC=0*BInform_B[12]+0*BInform_B[13]+BInform_B[14]+BInform_B[15]/10;
Value_HL=BInform_B[16]+BInform_B[17]/10+BInform_B[18]/100+BInform_B[19]/1000;
Value_P=10*BInform_B[20]+BInform_B[21]+BInform_B[22]/10+BInform_B[23]/100;
Value_I=1000*BInform_B[24]+100*BInform_B[25]+10*BInform_B[26]+BInform_B[27];
Value_D=1000*BInform_B[28]+100*BInform_B[29]+10*BInform_B[30]+BInform_B[31];
Value_LCK=1000*BInform_B[32]+100*BInform_B[33]+10*BInform_B[34]+BInform_B[35];
Value_SVL=100*BInform_B[36]+10*BInform_B[37]+BInform_B[38]+BInform_B[39]/10;
Value_SVH=100*BInform_B[40]+10*BInform_B[41]+BInform_B[42]+BInform_B[43]/10;
}
/* ====================================================
SET鍵菜單選擇程序
====================================================*/
void set_key(void)//SET鍵的取值
{
if(Set==0)
{
delay(10);
if(Time2_Set==0&&Set==0)
{EA=1;
T2MOD=0x00;
TH2=0xc7; //10MS定時
TL2=0xf0;
TR2=1;}
}
//對Time_Set判斷來決定菜單選項
if(Time2_Set<500)
{Normal_Menu=0;////進入A菜單
A_Menu=1;}
else if(Time2_Set>=500&&Time2_Set<1500)
{A_Menu=0;////進入B菜單
B_Menu=1;}
else if(Time2_Set>=1500)
{B_Menu=0;////進入常態菜單
Normal_Menu=1;}
if(Set==1)
{
delay(10);
if(Set==1)Time2_Set=0;
}
}
/* ====================================================
SHIF鍵查看工作剩余時間程序
====================================================*/
void time_key(void)
{
bit x=0;//X=1表示恢復到正常顯示
if(Normal_Menu==1||Time_Menu==1)
{
if(Shift==0)
{
delay(10);
if(Shift==0)
{
if(x==0)
{Time_Menu=1;
Normal_Menu=0;}
else
{Time_Menu=0;
Normal_Menu=1;}
}
}
else if(Shift==1)
{
delay(10);
if(Shift==1)x^=0x01;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -