C51 COMPILER V9.54 MAIN 09/26/2022 20:11:45 PAGE 1 C51 COMPILER V9.54, COMPILATION OF MODULE MAIN OBJECT MODULE PLACED IN .\Objects\main.obj COMPILER INVOKED BY: D:\Keil5 C51\C51\BIN\C51.EXE main.c LARGE OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listi -ngs\main.lst) TABS(2) OBJECT(.\Objects\main.obj) line level source 1 #include "STC8XXXX.h" 2 #include "oled.h" 3 #include "bmp.h" 4 #include "timer0.h" 5 #include "ADC.h" 6 #include "EEPROM.h" 7 #include 8 9 #define vol_channel 0 10 #define tem_channel 1 11 #define vcc_channel 15 12 13 void prekey(void);//计算按键按下时长 14 void relkey_page0(void);//对按键操作做出反应 15 void relkey_page1(void);//对按键操作做出反应 16 void page0(void);//第0个页面 17 void page1(void);//第1个页面 18 void mode0(void);//模式0 19 void mode1(void);//模式1 20 void pid_p(void); 21 22 unsigned int presstime=500;//长按时间ms 23 unsigned int tartem=300;//设定温度 24 unsigned int keyi0=0;//按键0时长 25 unsigned int keyi1=0;//按键1时长 26 unsigned int keyi=0;//同时按下时长 27 unsigned int maxtartem=350;//最大设定温度,可设置 28 unsigned int mintartem=1;//最小设定温度,可设置 29 unsigned int i;//for循环变量 30 unsigned int time;//定时器计时 31 unsigned int kp=10,ki=20,kd=30; 32 33 int pwm=0; 34 int pagenum=0; 35 int err=0,lasterr=0; 36 int integral=0; 37 int derivative=0; 38 39 double showpwm=0; 40 double showpwm_opp=0; 41 double powvol;//电源电压统计 42 double powvol_average[30]=0;//电源电压均值 43 double realtem=200;//真实温度 44 double realtem_average[30]=0;//实际温度统计 45 double p1= 0.00000016;//温度曲线参数1 46 double p2= -0.00089441;//温度曲线参数2 47 double p3= 1.91367865;//温度曲线参数3 48 double p4=-1537.97459730;//温度曲线参数4 49 double vcc=0; 50 51 unsigned char count=0;//电源电压统计计数 52 unsigned char page = 0;//页面选择 53 unsigned char modesel=0;//模式选择 54 unsigned char keyx0,keyx1; C51 COMPILER V9.54 MAIN 09/26/2022 20:11:45 PAGE 2 55 unsigned char page1_iconnum=4;//页面1选项数量 56 unsigned char page1_PIDnum=4;//PID二级页面选项数量 57 unsigned char page1_TEMnum=3;//温度二级页面选项数量 58 unsigned char page1_MODEnum=3;//模式二级页面选项数量 59 unsigned char eeptart[2]=0; 60 unsigned char eepkp[2]=0; 61 unsigned char eepki[2]=0; 62 unsigned char eepkd[2]=0; 63 unsigned char eepmaxt[2]=0; 64 unsigned char eepmint[2]=0; 65 unsigned char mapline[101]=0;//温度记录 66 unsigned char numofsam=30;//取样次数 67 68 sbit heat=P3^4;//加热 69 sbit key0=P3^2;//按键0 70 sbit key1=P3^3;//按键1 71 72 bit swclose=1;//按键休眠开关 73 bit keyj0;//按键0标志位 74 bit keyj1;//按键1标志位 75 bit keyj;//同时按下标志位-1 76 bit keyp;//同时按下标志位-2 77 bit eeprom_tartem=1;//设定温度标志位 78 bit eeprom_pid=1;//PID参数标志位 79 bit eeprom_limtem=1;//温度限制标志位 80 bit eeprom_mode=1; 81 bit pageflag;//切换页面标志位 82 bit blinker;//刷新标志位 83 bit pidflag; 84 85 void init(void) 86 { 87 1 EEPROM_read_n(0x0000,&eeptart[0],2); 88 1 EEPROM_read_n(0x0200,&eepkp[0],2); 89 1 EEPROM_read_n(0x0204,&eepki[0],2); 90 1 EEPROM_read_n(0x0208,&eepkd[0],2); 91 1 EEPROM_read_n(0x0400,&eepmaxt[0],2); 92 1 EEPROM_read_n(0x0404,&eepmint[0],2); 93 1 EEPROM_read_n(0x0600,&modesel,1); 94 1 tartem=(256*eeptart[1])+eeptart[0]; 95 1 kp=(256*(eepkp[1]))+(eepkp[0]); 96 1 ki=(256*(eepki[1]))+(eepki[0]); 97 1 kd=(256*(eepkd[1]))+(eepkd[0]); 98 1 maxtartem=(256*(eepmaxt[1]))+(eepmaxt[0]); 99 1 mintartem=(256*(eepmint[1]))+(eepmint[0]); 100 1 if(maxtartem>350){maxtartem=350;} 101 1 else if(maxtartem<200){maxtartem=200;} 102 1 if(mintartem>200){mintartem=0;} 103 1 else if(mintartem<0){mintartem=0;} 104 1 if(tartem>maxtartem){tartem=maxtartem;} 105 1 else if(tartem1000){kp=500;} 107 1 else if(kp<0){kp=0;} 108 1 if(ki>1000){ki=500;} 109 1 else if(ki<0){ki=0;} 110 1 if(kd>1000){kd=500;} 111 1 else if(kd<0){kd=0;} 112 1 if(modesel>page1_MODEnum-2 || page1_MODEnum<0) 113 1 { 114 2 modesel=0; 115 2 } 116 1 P1M0 = 0x00;//00000011 C51 COMPILER V9.54 MAIN 09/26/2022 20:11:45 PAGE 3 117 1 P1M1 = 0xff;//11111100 118 1 P3M0 = 0xff;//11111111 119 1 P3M1 = 0x0c;//00001100 120 1 heat=0; 121 1 swclose=0; 122 1 powvol=0; 123 1 adc_init();//初始化ADC 124 1 OLED_Init();//初始化屏幕 125 1 Timer0Init();//初始化定时器0 126 1 EA=1; 127 1 showpwm_opp=100-showpwm; 128 1 for(i=0;i=time && swclose){heat=1;} 163 1 else/* if(pwm