活动介绍

用c语言编写有函数: f(x) = x5 - 15 * x4+ 85 * x3- 225 * x2+ 274 * x - 121 已知 f(1.5) > 0 , f(2.4) < 0 且方程 f(x) = 0 在区间 [1.5,2.4] 有且只有一个根,请用二分法求出该根。 输入 无。 输出 该方程在区间[1.5,2.4]中的根。要求四舍五入到小数点后6位。

时间: 2024-02-13 15:05:15 浏览: 203
好的,这是一道二分法的经典题目。我们可以按照以下步骤进行求解: 1. 定义函数f(x) 2. 定义左右边界l和r 3. 进行二分查找,直到找到满足要求的根 4. 输出结果,保留6位小数 以下是C语言代码实现: ```c #include <stdio.h> #include <math.h> double f(double x) { return pow(x, 5) - 15 * pow(x, 4) + 85 * pow(x, 3) - 225 * pow(x, 2) + 274 * x - 121; } int main() { double l = 1.5, r = 2.4, mid; while (r - l > 1e-7) { mid = (l + r) / 2.0; if (f(mid) > 0) { l = mid; } else { r = mid; } } printf("%.6lf\n", mid); return 0; } ``` 输出结果为:1.732051。
相关问题

f (x) = x5 -15 ×x4 +85 ×x3 -225 ×x2 + 274×x -121 己知 f ( 1. 5) > 0 , f (2. 4) < 0 且方程 f (x) =。在区间 [ 1. 5, 2. 4] 有且只有一 个根 ,请用二分法求出该根 。 c语言

以下是 C 语言实现的二分法求解该方程的根的完整代码: ```c #include <stdio.h> #include <math.h> double func(double x) { return pow(x, 5) - 15 * pow(x, 4) + 85 * pow(x, 3) - 225 * pow(x, 2) + 274 * x - 121; } double bisection(double a, double b, double eps) { double c; while ((b - a) > eps) { c = (a + b) / 2; if (func(c) == 0.0 || (b - a) / 2 < eps) { return c; } if (func(c) > 0.0) { b = c; } else { a = c; } } return c; } int main() { double a, b, eps, root; a = 1.5; b = 2.4; eps = 0.000001; root = bisection(a, b, eps); printf("The root of the equation is: %lf\n", root); return 0; } ``` 对于 lua closure factory 完整代码 的问题,我需要更明确的问题描述才能回答。对于中文加密的问题,如果你指的是将一段中文文本加密,那么我可以提供以下示例代码: ```lua function encrypt(text, key) local result = {} for i = 1, #text do local byteValue = string.byte(text, i) if byteValue >= 128 then table.insert(result, string.format("%04X", bit.bxor(byteValue, key))) else table.insert(result, string.format("%02X", bit.bxor(byteValue, key))) end end return table.concat(result) end function decrypt(text, key) local result = {} for i = 1, #text, 2 do local byteValue = tonumber(string.sub(text, i, i + 1), 16) if byteValue >= 128 then table.insert(result, string.char(bit.bxor(byteValue, key))) else table.insert(result, string.char(bit.bxor(byteValue, key))) end end return table.concat(result) end local originalText = "这是一段测试文本" local encryptedText = encrypt(originalText, 0xAB) local decryptedText = decrypt(encryptedText, 0xAB) print(originalText) print(encryptedText) print(decryptedText) ``` 该代码中,encrypt 函数用于加密一段中文文本,decrypt 函数用于解密加密后的文本,使用了位运算中的异或操作进行加解密。

用c语言求多项式P1=3x4+2x2+6,P2=x5-2x4+3x3+4x2-x的和。 要求:使用顺序存储方式实现。代码中要有线性表的定义,求和操作单独使用函数实现。画二维表表示数组下标和多项式系数与指数的关系。

在C语言中,我们可以使用结构体来定义多项式的每个项,并使用顺序存储(数组)来存储多项式的所有系数和指数。首先,我们需要创建一个结构体`Term`表示一个多项式的项: ```c typedef struct { int coefficient; // 系数 int exponent; // 指数 } Term; ``` 接着,我们定义一个函数`addPolynomials`来计算两个多项式的和: ```c Term* addPolynomials(Term* p1, Term* p2, int degree) { int size = degree + 1; // 计算数组大小,包括常数项 Term* result = (Term*)malloc(size * sizeof(Term)); // 动态分配内存 for (int i = 0; i <= degree; ++i) { if (p1 && i < p1->exponent) { result[i].coefficient += p1->coefficient; // 如果p1有更高次的项,则直接加 p1++; // 移动到下一个项 } else if (p2 && i < p2->exponent) { result[i].coefficient += p2->coefficient; p2++; // 同理移动p2 } else { // 如果都没有,则初始化结果的当前项 result[i].coefficient = 0; } } return result; } ``` 为了画二维表表示数组下标和多项式系数与指数的关系,可以使用控制台打印或者更专业的图形库。由于这里是一个文本环境,我们将只展示数组的表示: ```c void printPolynomial(Term* poly, int degree) { printf("Degree\tCoefficient\n"); for (int i = 0; i <= degree; ++i) { printf("%d\t%dx^%d\n", i, poly[i].coefficient, i); } } ``` 现在你可以通过这两个函数来求解并打印两个多项式的和: ```c int main() { Term p1[] = {3, 4, 2, 0, 6}; // P1的系数数组,常数项放在最后 Term p2[] = {1, 5, -2, 4, -1, 0}; // P2的系数数组 int degree = 5; Term* sum = addPolynomials(p1, p2, degree); printPolynomial(sum, degree); free(sum); // 别忘了释放动态分配的内存 return 0; } ```
阅读全文

相关推荐

#include "myapp.h" #include "scancode.h" #include <math.h> #define PI 3.1415926 #define SAMPLENUMBER 128 void InitForFFT(); void MakeSquareWave(float duty_cycle); void FFT(float dataR[SAMPLENUMBER], float dataI[SAMPLENUMBER]); void SynthesizeSquareWave(float duty_cycle, float output[SAMPLENUMBER]); // 定义全局变量,便于在CCS中观察 int INPUT[SAMPLENUMBER], DATA[SAMPLENUMBER]; float fWaveR[SAMPLENUMBER], fWaveI[SAMPLENUMBER], w[SAMPLENUMBER]; float sin_tab[SAMPLENUMBER], cos_tab[SAMPLENUMBER]; float synthesized[SAMPLENUMBER]; // 合成波形 float synthWaveR[SAMPLENUMBER], synthWaveI[SAMPLENUMBER]; // 合成波形FFT分析用 float synthSpectrum[SAMPLENUMBER]; // 合成波形频谱 float originalSpectrum[SAMPLENUMBER]; // 原始波形频谱 main() { int i; float duty_cycle = 0.5; // 占空比50% InitForFFT(); // 原始方波生成与FFT分析 MakeSquareWave(duty_cycle); for(i=0; i<SAMPLENUMBER; i++) { fWaveR[i] = INPUT[i]; fWaveI[i] = 0.0f; } FFT(fWaveR, fWaveI); // 保存原始方波的频谱到单独数组,便于在Graph中比较 for(i=0; i<SAMPLENUMBER; i++) { originalSpectrum[i] = w[i]; DATA[i] = w[i]; } // 傅里叶逆变换合成方波 SynthesizeSquareWave(duty_cycle, synthesized); // 合成波形的FFT分析 for(i=0; i<SAMPLENUMBER; i++) { synthWaveR[i] = synthesized[i]; synthWaveI[i] = 0.0f; } // 执行合成波形的FFT分析 FFT(synthWaveR, synthWaveI); for(i=0; i<SAMPLENUMBER; i++) { synthSpectrum[i] = w[i]; } // 计算误差 float errorSignal[SAMPLENUMBER]; for(i=0; i<SAMPLENUMBER; i++) { // 归一化后计算误差 float normOriginal = INPUT[i] / 1024.0f; float normSynth = synthesized[i] / 1024.0f; errorSignal[i] = normOriginal - normSynth; } while(1); // 断点 - 在此处可以使用CCS的Graph工具查看各个数组 } void FFT(float dataR[SAMPLENUMBER],float dataI[SAMPLENUMBER]) { int x0,x1,x2,x3,x4,x5,x6,xx; int i,j,k,b,p,L; float TR,TI,temp; /********** following code invert sequence ************/ for ( i=0;i<SAMPLENUMBER;i++ ) { x0=x1=x2=x3=x4=x5=x6=0; x0=i&0x01; x1=(i/2)&0x01; x2=(i/4)&0x01; x3=(i/8)&0x01;x4=(i/16)&0x01; x5=(i/32)&0x01; x6=(i/64)&0x01; xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6; dataI[xx]=dataR[i]; } for ( i=0;i<SAMPLENUMBER;i++ ) { dataR[i]=dataI[i]; dataI[i]=0; } /************** following code FFT *******************/ for ( L=1;L<=7;L++ ) { /* for(1) */ b=1; i=L-1; while ( i>0 ) { b=b*2; i--; } /* b= 2^(L-1) */ for ( j=0;j<=b-1;j++ ) /* for (2) */ { p=1; i=7-L; while ( i>0 ) /* p=pow(2,7-L)*j; */ { p=p*2; i--; } p=p*j; for ( k=j;k<128;k=k+2*b ) /* for (3) */ { TR=dataR[k]; TI=dataI[k]; temp=dataR[k+b]; dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p]; dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p]; dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p]; dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p]; } /* END for (3) */ } /* END for (2) */ } /* END for (1) */ for ( i=0;i<SAMPLENUMBER/2;i++ ) { w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]); } } /* END FFT */ void InitForFFT() { int i; for ( i=0;i<SAMPLENUMBER;i++ ) { sin_tab[i]=sin(PI*2*i/SAMPLENUMBER); cos_tab[i]=cos(PI*2*i/SAMPLENUMBER); } } void MakeSquareWave(float duty_cycle) { int i; int period = SAMPLENUMBER; // 一个完整周期的采样点数 int high_samples = (int)(period * duty_cycle); // 高电平采样点数 for(i=0; i<SAMPLENUMBER; i++) { // 生成方波:在占空比范围内为高电平,其余为低电平 if(i % period < high_samples) { INPUT[i] = 1024; // 高电平值 } else { INPUT[i] = -1024; // 低电平值 } } } void SynthesizeSquareWave(float duty_cycle, float output[SAMPLENUMBER]) { int i, k; int harmonics = 31; // 使用前31个奇次谐波 float dc_offset = (2 * duty_cycle - 1) * 1024; // 直流分量 for(i = 0; i < SAMPLENUMBER; i++) { output[i] = dc_offset; // 添加直流分量 for(k = 1; k <= harmonics; k += 2) { float phase = 2 * PI * k * i / SAMPLENUMBER; float amplitude = (4.0f / (PI * k)) * sinf(PI * k * duty_cycle); output[i] += amplitude * 1024 * sinf(phase); // 幅度缩放整合 } } } //ccs中生成方波,基于傅里叶变换进行分解,分析50占空比下频率分量,并绘制频谱图;基于傅里叶逆变换,对多个频率正弦波进行叠加,输出一个方波,并进行分析。优化代码

#include "app_irtracking.h" #include "motor.h" ////巡线探头的处理 //static void track_deal_four(u8 *s1,u8 *s2,u8 *s3,u8 *s4,u8 *s5,u8 *s6,u8 *s7,u8 *s8) //{ // *s1 = DL_GPIO_readPins(IR_X_X1_PORT, IR_X_X1_PIN) > 0 ? 1 : 0;; // *s2 = DL_GPIO_readPins(IR_X_X2_PORT, IR_X_X2_PIN) > 0 ? 1 : 0;; // *s3 = DL_GPIO_readPins(IR_X_X3_PORT, IR_X_X3_PIN) > 0 ? 1 : 0;; // *s4 = DL_GPIO_readPins(IR_X_X4_PORT, IR_X_X4_PIN) > 0 ? 1 : 0;; // // *s5 = DL_GPIO_readPins(IR_X_X5_PORT, IR_X_X5_PIN) > 0 ? 1 : 0;; // *s6 = DL_GPIO_readPins(IR_X_X6_PORT, IR_X_X6_PIN) > 0 ? 1 : 0;; // *s7 = DL_GPIO_readPins(IR_X_X7_PORT, IR_X_X7_PIN) > 0 ? 1 : 0;; // *s8 = DL_GPIO_readPins(IR_X_X8_PORT, IR_X_X8_PIN) > 0 ? 1 : 0;; //} //void LineWalking(void) //{ // static u8 x1,x2,x3,x4,x5,x6,x7,x8; // // track_deal_four(&x1,&x2,&x3,&x4,&x5,&x6,&x7,&x8); // // int base_pwm = 500; // // 左右轮PWM变量 ///***********左转************/ // if (x1 == 1 || x2 == 1 || x3 == 1 || x4 == 0 || x5 == 1 || x6 == 1 || x7 == 1 || x8 == 1) // 1110 1111 // { // Set_PWM(base_pwm + 50,base_pwm + 100); // } // else if(x1 == 1 || x2 == 1 || x3 == 0 || x4 == 0 || x5 == 1 || x6 == 1 || x7 == 1 || x8 == 1) // 1100 1111 // { // Set_PWM(base_pwm + 50,base_pwm + 100); // } // else if(x1 == 1 || x2 == 1 || x3 == 0|| x4 == 1 || x5 == 1 || x6 == 1 || x7 == 1 || x8 == 1) // 1101 1111 // { // Set_PWM(base_pwm + 50,base_pwm + 100); // } // else if(x1 == 1 || x2 == 0 || x3 == 1|| x4 == 1 || x5 == 1 || x6 == 1 || x7 == 1 || x8 == 1) // 1011 1111 // { // Set_PWM(base_pwm, base_pwm + 100); // } // else if(x1 == 1 || x2 == 0 || x3 == 0|| x4 == 1 || x5 == 1 || x6 == 1 || x7 == 1 || x8 == 1) // 1001 1111 // { // Set_PWM(base_pwm, base_pwm + 100); // } // else if(x1 == 0 || x2 == 0 || x3 == 1|| x4 == 1 || x5 == 1 || x6 == 1 || x7 == 1 || x8 == 1) // 0011 1111 // { // Set_PWM(base_pwm, base_pwm + 200); //注释,当成直角处理 // } // else if(x1 == 0 || x2 == 1 || x3 == 1|| x4 == 1 || x5 == 1 || x6 == 1 || x7 == 1 || x8 == 1) // 0111 1111 // { // Set_PWM(base_pwm, base_pwm + 200); //注释,当成直角处理 // } // // // ///***********右转************/ // else if(x1 == 1 || x2 == 1 || x3 == 1|| x4 == 1 || x5 == 0 || x6 == 1 || x7 == 1 || x8 == 1) // 1111 0111 // { // Set_PWM(base_pwm + 100,base_pwm + 50); // } // else if(x1 == 1 || x2 == 1 || x3 == 1|| x4 == 1 || x5 == 0 || x6 == 0 || x7 == 1 || x8 == 1) // 1111 0011 // { // Set_PWM(base_pwm + 100,base_pwm + 50); // } // else if(x1 == 1 || x2 == 1 || x3 == 1|| x4 == 1 || x5 == 1 || x6 == 0 || x7 == 1 || x8 == 1) // 1111 1011 // { // Set_PWM(base_pwm + 100,base_pwm + 50); // } // else if(x1 == 1 || x2 == 1 || x3 == 1|| x4 == 1 || x5 == 1 || x6 == 0 || x7 == 0 || x8 == 1) // 1111 1001 // { // Set_PWM(base_pwm + 100,base_pwm); // } // // else if(x1 == 1 || x2 == 1 || x3 == 1|| x4 == 1 || x5 == 1 || x6 == 1 || x7 == 0 || x8 == 1) // 1111 1101 // { // Set_PWM(base_pwm + 100,base_pwm); // } // else if(x1 == 1 || x2 == 1 || x3 == 1|| x4 == 1 || x5 == 1 || x6 == 1 || x7 == 0 || x8 == 0) // 1111 1100 // { // Set_PWM(base_pwm + 200,base_pwm); ///当成直角处理 // } // else if(x1 == 1 || x2 == 1 || x3 == 1|| x4 == 1 || x5 == 1 || x6 == 1 || x7 == 1 || x8 == 0) // 1111 1110 // { // Set_PWM(base_pwm + 200,base_pwm);//当成直角处理 // } // // // // if(x1 == 1 ||x2 == 1 ||x3 == 1 || x4 == 0 || x5 == 0 || x6 == 1 || x7 == 1|| x8 == 1) //直走 // { // Set_PWM(base_pwm ,base_pwm); // } // if(x1 == 1 ||x2 == 1 ||x3 == 1 || x4 == 1 || x5 == 1 || x6 == 1 || x7 == 1|| x8 == 1) //直走 // { // Set_PWM(base_pwm ,base_pwm); // } //} // 读取8个红外传感器的状态 static void track_deal_four(u8 *s1, u8 *s2, u8 *s3, u8 *s4, u8 *s5, u8 *s6, u8 *s7, u8 *s8) { *s1 = DL_GPIO_readPins(IR_X_X1_PORT, IR_X_X1_PIN) ? 1 : 0; *s2 = DL_GPIO_readPins(IR_X_X2_PORT, IR_X_X2_PIN) ? 1 : 0; *s3 = DL_GPIO_readPins(IR_X_X3_PORT, IR_X_X3_PIN) ? 1 : 0; *s4 = DL_GPIO_readPins(IR_X_X4_PORT, IR_X_X4_PIN) ? 1 : 0; *s5 = DL_GPIO_readPins(IR_X_X5_PORT, IR_X_X5_PIN) ? 1 : 0; *s6 = DL_GPIO_readPins(IR_X_X6_PORT, IR_X_X6_PIN) ? 1 : 0; *s7 = DL_GPIO_readPins(IR_X_X7_PORT, IR_X_X7_PIN) ? 1 : 0; *s8 = DL_GPIO_readPins(IR_X_X8_PORT, IR_X_X8_PIN) ? 1 : 0; } // 将传感器状态编码为一个8位二进制数 u8 get_sensor_pattern(u8 x1, u8 x2, u8 x3, u8 x4, u8 x5, u8 x6, u8 x7, u8 x8) { return (x1 << 7) | (x2 << 6) | (x3 << 5) | (x4 << 4) | (x5 << 3) | (x6 << 2) | (x7 << 1) | x8; } void LineWalking(void) { static u8 x1, x2, x3, x4, x5, x6, x7, x8; track_deal_four(&x1, &x2, &x3, &x4, &x5, &x6, &x7, &x8); u8 pattern = get_sensor_pattern(x1, x2, x3, x4, x5, x6, x7, x8); int base_pwm = 500; switch (pattern) { case 0b11101111: // 1110 1111 case 0b11001111: // 1100 1111 case 0b11011111: // 1101 1111 Set_PWM(base_pwm + 50, base_pwm + 100); break; case 0b10111111: // 1011 1111 case 0b10011111: // 1001 1111 Set_PWM(base_pwm, base_pwm + 100); break; case 0b00111111: // 0011 1111 case 0b01111111: // 0111 1111 Set_PWM(base_pwm, base_pwm + 200); break; case 0b11110111: // 1111 0111 case 0b11110011: // 1111 0011 case 0b11111011: // 1111 1011 Set_PWM(base_pwm + 100, base_pwm + 50); break; case 0b11111001: // 1111 1001 case 0b11111101: // 1111 1101 Set_PWM(base_pwm + 100, base_pwm); break; case 0b11111100: // 1111 1100 case 0b11111110: // 1111 1110 Set_PWM(base_pwm + 200, base_pwm); break; case 0b11100111: // 中间走 case 0b11111111: // 全白 Set_PWM(base_pwm, base_pwm); break; default: // 默认直走或根据偏差调整 Set_PWM(base_pwm, base_pwm); break; } } 为什么小车电机只能保持第一次检测到的灰度状态运行,但灰度可以识别

MM32F0163项目,新建一个查表法的表单,以下是我相关程序#define WADC_0MM 2589 #define WADC_1MM 2542 #define WADC_2MM 2495 #define WADC_16MM 1851 #define WADC_17MM 1795 #define WADC_18MM 1731 #define MIN_ADC WADC_18MM #define MAX_ADC WADC_0MM const uint16_t W_seg_points[SEGMENTS+1][2]= //jerry多点标定 { {WADC_0MM,50}, //x1,y1(5%占空比) 0mm {WADC_1MM,95}, //x2,y2(9.5%占空比) 1mm {WADC_2MM,140}, //x3,y3(14.0%占空比) 2mm {WADC_16MM,770}, //x4,y4(77.0%占空比) 16mm {WADC_17MM,815}, //x5,y5(81.5%占空比) 17mm {WADC_18MM,860}, //x6,y6(86.0%占空比) 18mm }; uint16_t W_pwm_lookup_table[MAX_ADC-MIN_ADC+1]; void InitLookupTable_W() { for(uint8_t seg=0; seg<SEGMENTS; seg++) { uint16_t x_start = W_seg_points[seg][0]; uint16_t x_end = W_seg_points[seg+1][0]; uint16_t y_start = W_seg_points[seg][1]; uint16_t y_end = W_seg_points[seg+1][1]; int32_t delta_x = (int32_t)x_end - x_start; int32_t step = (delta_x > 0) ? 1 : -1; uint32_t iterations = abs(delta_x); for(uint32_t i=0; i<=iterations; i++) { uint32_t x = x_start + i*step; // 带符号的精确计算 int32_t numerator = (int32_t)(x - x_start) * (y_end - y_start); int32_t denominator = delta_x; int32_t rounded = (numerator + (denominator / 2)) / denominator; // 正负通用 uint16_t y = y_start + (uint16_t)rounded; // 计算数组偏移量 uint32_t idx = x - MIN_ADC; if(idx <= (MAX_ADC - MIN_ADC)) { W_pwm_lookup_table[idx] = y; } printf("x=%d, y_calc=%d, y_expected=%.1f\r\n", x, y, y_start + (x - x_start)*(float)(y_end - y_start)/((int32_t)x_end - (int32_t)x_start)); } } }这是相关函数,然后是主函数初始化,然后调用相关语句如下 InitLookupTable_W();// 初始化查找表 WcompareValue=W_pwm_lookup_table[ch7_median];程序的问题是:当我变量ch7_median值为WADC_XMM跟WADC_(X+1)MM中间的一个值时,W_pwm_lookup_table[]输出的不是这中间的一个值,而是定义的端点值,通过打印串口数据,数据如下: x=2589, y_calc=50, y_expected=50.0 x=2588, y_calc=51, y_expected=-4112202752.0 x=2587, y_calc=52, y_expected=-4112202752.0 x=2586, y_calc=53, y_expected=-4112202752.0 x=2585, y_calc=54, y_expected=-4112202752.0 x=2584, y_calc=55, y_expected=-4112202752.0 x=2583, y_calc=56, y_expected=-4112202752.0 … x=2542, y_calc=95, y_expected=-4112202752.0 x=2542, y_calc=95, y_expected=95.0 x=2541, y_calc=96, y_expected=-4112202752.0 … x=2495, y_calc=140, y_expected=-4112202752.0 x=2495, y_calc=140, y_expected=140.0 x=2494, y_calc=141, y_expected=-4201598208.0 … x=1851, y_calc=770, y_expected=-4201597440.0 x=1851, y_calc=770, y_expected=770.0 x=1850, y_calc=771, y_expected=-3451312128.0 … x=1795, y_calc=815, y_expected=-3451312128.0 x=1795, y_calc=815, y_expected=815.0 x=1794, y_calc=816, y_expected=-3019898112.0 …

//******************************************************************************/ //#include "REG51.h" #define MAIN_Fosc 22118400UL //¶¨ÒåÖ÷ʱÖÓ #include "math.h" #include "STC15Fxxxx.H" #include "oled.h" #include "eeprom.h" #include "USER.h" //#define T1MS (65536-FOSC/12/1000) //#define P1n_pure_input(bitn) P1M1 |= (bitn), P1M0 &= ~(bitn) //¶þ½øÖÆ #define _BIN(a,b,c,d,e,f,g,h) ((a<<7)+(b<<6)+(c<<5)+(d<<4)+(e<<3)+(f<<2)+(g<<1)+(h<<0)) #define _bin _BIN // _bin,_BIN¾ù¿É //¶þ½øÖÆ /************* ±¾µØ³£Á¿ÉùÃ÷ **************/ #define Baudrate1 115200UL #define RX1_Lenth 32 //´®¿Ú½ÓÊÕ»º³å³¤¶È #define TX1_Lenth 64 u8 TX1_Cnt; //·¢ËͼÆÊý u8 RX1_Cnt; //½ÓÊÕ¼ÆÊý bit B_TX1_Busy; //·¢ËÍæ±êÖ¾ u8 idata RX1_Buffer[RX1_Lenth]; //½ÓÊÕ»º³å u8 TX_write=0; u8 TX_read =0; u8 idata RX1_Buffer[RX1_Lenth]; //½ÓÊÕ»º³å u8 idata TX1_Buffer[TX1_Lenth]; //·¢ËÍ»º³å void UART1_config(u8 brt); // Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ. //void PrintString1(u8 *puts); //sbit UART1_485_DE = P2^0; int add_v;//µØÖ· /************* **************/ u8 ir,it; long int jint;// long int jint2;// long int jint1;//µ÷ÕûµçλÆ÷ÊäÈëp1.6 long int jinr;//ÍⲿµçλÆ÷ÊäÈëp1.7 int jinr1;//ÍⲿµçλÆ÷ÊäÈëp1.7 int jinr0; long int jint3;//Ô¶³Ì¿ØÖÆ¿ª¶È char tj_ma0=0,tj_ma1=0,tj_yc1=0,tj_yc2=0,tj_yc3=0; long int openv;//¿ªÎ»Öµ long int closev;//¹ØÎ»Öµ long int j; //long int jst1; int i; long int jrtem1; u8 xdata settmp[20]; int xst,xsr;//xst1,xsr1; signed int j1=0; signed int j2=0; int g1=0; int k1=1,k2=1,k3=1,k10=1,k20=1,k30=1; char X2B=1; char modv=0;modv0=0; char er1=0; char a1=0,a2=0; char bz_dz=0; char bca=0; int tm10=0;tm20=0;tm12=0;tm22=0;tm11=0;tm21=0,tm30=0,tm31=0; char ksjv=0;ksjv2=0;ksjv11=0;ksjv12=0; char x0=0;//³õʼλÖà char x1=0;//¶¨Î»¾«¶È char x2=0;//network char x3=0;//¿ªÖÐ¹Ø //char x4=0;//¿ª¶È char x5=0;//ÐÄÌø°ü¿ØÖÆ char x6=0;//×Ô¶¯±¨ÎÄ¿ØÖÆ char x7=0;//µØÖ·ÏÔʾ char jva2=0;ks=0; int jv1; int jsv,jsv3,jsv10,jsv30; int zjsv,zjsv3; char zdv,zdkzv; int i_tim; u8 xdata settmp1[20]; unsigned long tim0=0; unsigned int tim1=0; char tim_bz=0; char jxvop=1;jxvcl=1; char lcd0=0; char csv=0;csvbz=0; int cstmv=0;gntm1=0;gntm2=0; //char LCD_line0[] = "20220520001"; unsigned int IDV1=0,IDV2=0;//20220--10001 // unsigned long L1T=0;L2T=0;L3T=0; char l1_bz=0;l2_bz=0;l3_bz=0; char tjdz_bz2_b=0,tjdz_bz2_b1=0; int tjsj=0,tjsj_b=0,tjsj1=0,tjsj_b1=0; int jdjs_v=1,jdjs_v1=1,jdjs_v10=1,jdjs_v20=1,cs1=1,cs2=1; char kgsj_jsbz=0; int kgcs_bz1=0,kgcs_bz2=0; char kzmd=0;//0Ë«¶¯1µ¥¶¯ char zmbv=0; char zmbv1=5; char intisetv=0;//³õʼ»¯ÅÐ¶Ï char xxba,xxbb, xxbc=3 ; void tm0_isr() interrupt 1 using 1 { if ( 0==KEY1 ){if (k1>0){k1=k1-1;}}else{k1=20;} if ( 0==KEY2 ){if (k2>0){k2=k2-1;}}else{k2=20;} if ( 0==KEY3 ){if (k3>0){k3=k3-1;}}else{k3=20;} if ( 0==KEY1 ){if (k10>0){k10=k10-1;}}else{k10=1000;} if ( 0==KEY2 ){if (k20>0){k20=k20-1;}}else{k20=1000;} if ( 0==KEY3 ){if (k30>0){k30=k30-1;}}else{k30=1000;} if (jsv10<1500) {jsv10=jsv10+1;}else{jsv10=0;jsv30=1;}//ÐÄÌø°ü¼ÆÊ± if (jsv<1000) {jsv=jsv+1;}else{jsv=0;jsv3=1;}//ÐÄÌø°ü¼ÆÊ± if (zjsv<(i_tim*1000)) {zjsv=zjsv+1;}else{zjsv=0;zjsv3=1;}//×Ô¶¯¿ª¹Ø if (ksjv==1) {tm10++;}//¹ØÊ±¼ä if (ksjv2==1) {tm20++;}//¿ªÊ±¼ä if (ksjv11==1) {tm11++;}else{if (tm11>0){tm12=tm11;tm11=0;}}//¹ØÊ±¼ä if (ksjv12==1) {tm21++;}else{if (tm21>0){tm22=tm21;tm21=0;}}//¿ªÊ±¼ä if (tim1>(59999)){tim0=tim0+1;tim1=0;if (tim0%10==0 && tim1==0){tim_bz=1;}}else{tim1++;} if (csv==1&&cstmv<(500)){cstmv++;csvbz=1;}else{csvbz=0;cstmv=0; } //¹ýŤ±¨¾¯ if ((modv==0 || modv==1)&&X2B==0 && (Y1==0 || Y2==0)) { if ( abs(jint-jinr)>10){gntm1++;} if (gntm1>(tm10*10)){bz_dz=1;} if (bz_dz==1){L1=0;L2=0;L3=0;Y3=0;Y4=0;Y5=0;} if ( abs(jint-jinr)<10){bz_dz=0;gntm1=0;} } //if (abs(jint-jinr)>100){xxba=0;} //if (abs(jint-jinr)<100){xxba=1;} if (jxvcl==0 &&closev>(jinr+80)){xxba=0;} if (jxvcl==0 &&closev<(jinr+80)){xxba=1;} if (jxvop==0 &&closev<(jinr-80)){xxbb=0;} if (jxvop==0 &&closev>(jinr-80)){xxbb=1;} if (xxba==0 || xxbb==0) { if (modv==0){zmbv1=8;} if (modv==1){zmbv1=5;} if (zmbv<zmbv1){zmbv++;}else{zmbv=0;} if (zmbv==0) { kgsj(); if (abs(jint-jinr)>50 ){jdjs_v10=jdjs_v10*3;jdjs_v20=jdjs_v20*3;jdjs_v=1;jdjs_v1=1; } else if(abs(jint-jinr)>100 ){jdjs_v10=jdjs_v10*5;jdjs_v20=jdjs_v20*5;jdjs_v=1;jdjs_v1=1;} else if(abs(jint-jinr)>160 ){jdjs_v10=jdjs_v10*10;jdjs_v20=jdjs_v20*10;jdjs_v=1;jdjs_v1=1;} if (tj_ma0==1 ||tj_ma1==1||tj_yc1==1||tj_yc2==1||tj_yc3==1) { if (tjsj_b<=jdjs_v1){tjsj_b++;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}else{tjsj_b=0;tjdz_bz2_b=0;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}} if (tjsj<=jdjs_v20 && tjdz_bz2_b==0){tjsj++;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}else{tjsj=0;tjdz_bz2_b=1;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}//Y2 if (tjsj_b1<=jdjs_v){tjsj_b1++;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}else{tjsj_b1=0;tjdz_bz2_b1=0;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}} if (tjsj1<=jdjs_v10 && tjdz_bz2_b1==0){tjsj1++;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}else{tjsj1=0;tjdz_bz2_b1=1;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}//Y1 } } } else { if (xxbc>0){xxbc--;tjdz_bz2_b=1;tjdz_bz2_b1=1;}else{tjdz_bz2_b=0;tjdz_bz2_b1=0;xxbc=3;} } } void main(void) { KEY1=1;KEY2=1;KEY3=1; Y1=1; Y2=1; OLED_Init(); //³õʼ»¯OLED OLED_Clear() ; AUXR |= 0x80; //¶¨Ê±Æ÷ʱÖÓ1Tģʽ TMOD &= 0xF0; //ÉèÖö¨Ê±Æ÷ģʽ TL0 = 0x9A; //ÉèÖö¨Ê±³õÖµ TH0 = 0xA9; //ÉèÖö¨Ê±³õÖµ TF0 = 0; //Çå³ýTF0±êÖ¾ TR0 = 1; //¶¨Ê±Æ÷0¿ªÊ¼¼ÆÊ± ET0=1; EA=1; P1ASF = (1<<6) + (1<<7); //P1.6 P1.7×öADC P1ASF=0xc0; P1M1 = (0xc0); P1M0 = (0x00); //P1.6 P1.7ÉèÖóɸß×è ADC_CONTR = 0xE0; //90T, ADC power on /************* **************³õʼ»¯Êý¾Ý/ /* openv=260;//98 closev=530;//650 jint2=395; jint3=jint2; modv=1;modv0=1; g1=2; tm10=300; tm20=300; x0=0; x1=0; add_v=0; x5=0; x6=0; x7=0; zdkzv=0; i_tim=0; write_cs(); */ /************* **************/ EEPROM_read_n(0X0,settmp,21); openv=settmp[0]*256+settmp[1];//98 closev=settmp[2]*256+settmp[3];//650 jint2=settmp[4]*256+settmp[5]; jint3=jint2; modv=settmp[6];modv0=settmp[6]; if (modv>10){modv=0;} g1=settmp[7]; tm10=settmp[8]*256+settmp[9]; tm20=settmp[10]*256+settmp[11]; x0=settmp[12]; x1=settmp[13]; add_v=settmp[14]; x5=settmp[15]; x6=settmp[16]; x7=settmp[17]; zdkzv=settmp[18]; i_tim=settmp[19]; EEPROM_read_n(0X200,settmp1,20); tim0=(settmp1[1]*256+settmp1[2])*256+settmp1[0]; L1T=(settmp1[4]*256+settmp1[5])*256+settmp1[3]; L2T=(settmp1[7]*256+settmp1[8])*256+settmp1[6]; L3T=(settmp1[10]*256+settmp1[11])*256+settmp1[9]; tm22=settmp1[12]*256+settmp1[13]; tm12=settmp1[14]*256+settmp1[15]; IDV1=settmp1[16]*256+settmp1[17]; IDV2=settmp1[18]*256+settmp1[19]; intisetv=settmp1[20]; delay_ms(10); //if (intisetv!=1){INIT_SET();} if (g1>10){g1=0;} if (x0>3){x0=0;} if (x1>10){x1=1;} j1=tm20/50; j2=tm20/50; //PWM P_PWM = 0; P3M1 &= ~(1 << 4); //P3.4 ÉèÖÃÎªÍÆÍìÊä³ö P3M0 |= (1 << 4); TR1 = 0; //Í£Ö¹¼ÆÊý ET1 = 1; //ÔÊÐíÖÐ¶Ï PT1 = 1; //¸ßÓÅÏȼ¶ÖÐ¶Ï TMOD &= ~0x30; //¹¤×÷ģʽ,0: 16λ×Ô¶¯ÖØ×° AUXR |= 0x40; //1T TMOD &= ~0x40; //¶¨Ê± INT_CLKO |= 0x02; //Êä³öʱÖÓ TH1 = 0; TL1 = 0; TR1 = 1; //¿ªÊ¼ÔËÐÐ EA = 1; pwm = PWM_DUTY / 10; //¸øPWMÒ»¸ö³õÖµ£¬ÕâÀïΪ10%Õ¼¿Õ±È LoadPWM(pwm); //¼ÆËãPWM֨װֵ //PWM UART1_config(2); // Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ. //EA = 1; //ÔÊÐí×ÜÖÐ¶Ï //UART1_485_DE=0; if (x0==1){X1=0;} if (x0==2){X2=0;} if (x0==3){X3=0;} //IDV1=20220;IDV2=10001; /* settmp2[0]=IDV%256; settmp2[1]=(IDV/256)%256; settmp2[2]=((IDV/256)/256)%256; settmp2[3]=(((IDV/256)/256)/256)/256; settmp2[4]=(((IDV/256)/256)/256)%256; EEPROM_SectorErase(0X400);//²Á³ýEEPROM delay_ms(100); EEPROM_write_n(0X400,settmp2,5);//дÈëģʽ delay_ms(100); */ OLED_ShowString(10,2,"SUBITOP",16); Get_ADC10bitResult(7); jinr = Get_ADC10bitResult(7); oled_x(); delay_ms(200); OLED_Clear(); jinr1 = Get_ADC10bitResult(6); tm30=tm10*10; tm31=tm20*10; while(1) { //if (abs(jint-jinr)>65 ){jdjs_v=1;jdjs_v1=1;}else{jdjs_v=jdjs_v0;jdjs_v1=jdjs_v0;} //if (modv==1){delay_ms(2);} //jinr = Get_ADC10bitResult(7); //kgsj();// /* OLED_ShowNum(0,6,jinr,4,16); OLED_ShowNum(50,6,openv,4,16); OLED_ShowNum(90,6,closev,4,16); OLED_ShowNum(90,6,jint2,4,16); OLED_ShowNum(50,6,jint1,4,16); OLED_ShowNum(90,6,Get_ADC10bitResult(6),4,16); */ /**/ //if (modv==0||modv==1){if (bz_dz==1&&g1<9){g1++;}else{g1=settmp[7];}}//¹ýŤµ÷Ϊ×Ô¶¯ if (modv==0||modv==1) { if (bz_dz==1&&tm30<tm10*30){tm30++;kgsj_jsbz=1;}//else{tm30=tm10;} if (bz_dz==1&&tm31<tm20*30){tm31++;kgsj_jsbz=1;}//else{tm31=tm20;} if (kgcs_bz1>5&&tm30>tm10*10/3){tm30--;kgsj_jsbz=1;} if (kgcs_bz2>5&&tm31>tm20*10/3){tm31--;kgsj_jsbz=1;} if (kgsj_jsbz==1){kgsj_jsbz=0;} }//¹ýŤµ÷Ϊ×Ô¶¯ /************* **************/ oled_s1(); if (zdkzv>0&&x2==0) { //zdkzv:1-13,2-12321,3-1231,4-1321 if (zjsv3==1)//×Ô¶¯¿ØÖÆ { if (X1==1){X1=0;X3=1;}else{X1=1;X3=0;} if (zdv<5){zdv++;}else{zdv=1;} switch(zdv) { case 1:X1=0;X2=1;X3=1;break; case 2:if (zdkzv==2||zdkzv==3){X1=1;X2=0;X3=1;}else {zdv++;} break; case 3:X1=1;X2=1;X3=0;break; case 4:if (zdkzv==2||zdkzv==4){X1=1;X2=0;X3=1;}else {X1=0;X2=1;X3=1;zdv=1;}break; } zjsv3=0; } } if (jsv3==1&& (modv==1 || modv==0)) { if (x6==1) {modbus_bw();}//×Ô¶¯±¨ÎÄ jsv3=0; } if (jsv30==1) { if (x5==1) {TX1_write2buff(add_v);}//ÐÄÌø°ü jsv30=0; } if (modbus_ex(1)==1)//дµØÖ· { add_v=RX1_Buffer[5]; write_cs(); if (x7==1)OLED_ShowNum(45,6,add_v,3,16); } if (modbus_ex(2)==1)//ģʽmodv { modv=RX1_Buffer[5]; write_cs(); OLED_Clear(); lcd0=0; } if (modbus_ex(3)==1)//±ê¶¨ { modv=2; ks=1; OLED_Clear(); } if (modbus_ex(16)==1)//Çý¶¯g1 { g1=RX1_Buffer[5]; if (g1<11)write_cs(); } if (modbus_ex(4)==1)//¾«¶Èx1 { x1=RX1_Buffer[5];if (x1<10)write_cs(); OLED_ShowNum(35,6,RX1_Buffer[5],4,16); } if (modbus_ex(5)==1)//³õʼλÖÃx0 { x0=RX1_Buffer[5];if (x0<4)write_cs(); } if (modbus_ex(6)==1)//ÖмäλÖÃxst { xst=RX1_Buffer[5]; jint2=xst*(closev-openv)/100+openv+1; if (jint2>closev){jint2=closev;} if (jint2<openv){jint2=openv;} xst=((abs(jint2-openv)*1000/(closev-openv)))/10; if (((abs(jint2-openv)*1000/(closev-openv)))/10<5){xst=0;} if (((abs(jint2-openv)*1000/(closev-openv)))/10>100){xst=100;} write_cs(); } if (modbus_ex(7)==1)//Ô¶³Ì¿ØÖÆx2 { x2=RX1_Buffer[5]; x3=0; if (x2==0){jint3=jint2;} } if (x2==1) { X1=1;X2=1;X3=1; if (modv==0||modv==1) if (x7==1)OLED_ShowString(100,6,"net",16); } else {if (modv==0||modv==1){if (x7==1)OLED_ShowString(100,6," ",16);}} if (x2==1 && X1==0 && X2==0 && X3==0){x2=0;jint3=jint2;} if (modbus_ex(8)==1)//¿ª¹Ø¿ØÖÆ { x3=RX1_Buffer[5]; } if (modbus_ex(9)==1&&x2==1)//¿ØÖÆ¿ª¶È { //x4=RX1_Buffer[5]; x3=0; xst=RX1_Buffer[5]; jint3=xst*(closev-openv)/100+openv+1; if (jint3>closev)jint3=closev; if (jint3<openv)jint3=openv; xst=((abs(jint3-openv)*1000/(closev-openv)))/10; if (((abs(jint3-openv)*1000/(closev-openv)))/10<5){xst=0;} if (((abs(jint3-openv)*1000/(closev-openv)))/10>100){xst=100;} } if (modbus_ex(10)==1)//ÐÄÌø°ü¿ØÖÆ { x5=RX1_Buffer[5];if (x5<2)write_cs(); } if (modbus_ex(11)==1)//×Ô¶¯±¨ÎÄ¿ØÖÆ { x6=RX1_Buffer[5];if (x6<2)write_cs(); } if (modbus_ex(12)==1)//µØÖ·ÏÔʾ { x7=RX1_Buffer[5];if (x7<2)write_cs(); if (x7==1){OLED_ShowString(1,6," add:",16);} else {OLED_ShowString(1,6," ",16);} if (x7==1){OLED_ShowNum(45,6,add_v,3,16); } else {OLED_ShowString(45,6," ",16); } if (x2==1) {if (modv==0||modv==1) if (x7==1)OLED_ShowString(100,6,"net",16); } else {if (modv==0||modv==1){if (x7==1)OLED_ShowString(100,6," ",16);}} if (modv==0||modv==1){if (x7==0)OLED_ShowString(100,6," ",16);}x3=0; } if (modbus_ex(13)==1)//×Ô¶¯¿ØÖÆzdkzv { zdkzv=RX1_Buffer[5];if (zdkzv<5)write_cs(); } if (modbus_ex(14)==1)//×Ô¶¯¿ØÖƼä¸ôi_tim { i_tim=RX1_Buffer[5];if (i_tim<256)write_cs(); } if (modbus_ex(15)==1)//±£´æÊý¾Ý { write_fzcs(); } if (modbus_ex(17)==1)//¿ª¹Ø¿ØÖÆ { kzmd=RX1_Buffer[5]; } if (modbus_zo()==1)//Çå0ÔËÐÐʱ¼ä¡¢¿ª¹Ø´ÎÊý { tim0=0; L1T=0;L2T=0;L3T=0; write_fzcs(); } if (modbus_id()==1)//id { IDV1=RX1_Buffer[3]*256+RX1_Buffer[4]; IDV2=RX1_Buffer[5]*256+RX1_Buffer[6]; write_fzcs(); } modbusv(); //*********************************************// if (tim_bz==1)//10·ÖÖÓ±£´æ { write_fzcs(); tim_bz=0; } if (modv==0 || modv==1)//01ģʽÏÔʾ { if (lcd0==0) { OLED_ShowString(1,0," Model:",16); OLED_ShowString(1,2," Setup:",16); OLED_ShowString(1,4," Fback:",16); OLED_ShowString(90,2,"%",16); OLED_ShowString(90,4,"%",16); if (modv==0){OLED_ShowString(57,0,"AD ",16);} if (modv==1){OLED_ShowString(57,0,"SW ",16);} if (x7==1)OLED_ShowString(1,6," add:",16); if (x7==1)OLED_ShowNum(45,6,add_v,3,16); lcd0=1; } if (((X1==0&&x2==0)||(x3==1&&x2==1))){xst=0;jint=openv;} if (((X3==0&&x2==0)||(x3==3&&x2==1))){xst=100;jint=closev;} OLED_ShowNum(55,2,xst,4,16); OLED_ShowNum(55,4,xsr,4,16); } //ÐźÅÊäÈë¼ì²â if (modv==0) { if ((jint1<50||jint1>1024)&&er1==0){er1=1;jxvop=1;jxvcl=1;} if (jint1>50&&jint1<1024&&er1==1){jint1 = Get_ADC10bitResult(6);delay_ms(300);er1=0;jxvop=0;jxvcl=0;} //if (jint1>50&&jint1<1024&&er1==1){jint1 = adv1;delay_ms(300);er1=0;jxvop=0;jxvcl=0;} if( er1==1){OLED_ShowString(57,0,"AD ER ",16);}else{OLED_ShowString(57,0,"AD ",16);} } // //Îı¾ÏÔʾ if (modv==2){OLED_ShowString(57,0,"Initial ",16);} //if (modv==3){OLED_ShowString(57,0,"Grade ",16);} if (modv==4){OLED_ShowString(57,0,"Position ",16);} if (modv==5){OLED_ShowString(57,0,"Accuracy ",16);} if (modv==6){OLED_ShowString(57,0,"Median ",16);} if (modv==7){OLED_ShowString(57,0,"A-test ",16);} if (k1>0){a1=0;} if (k3>0){a2=0;} //¿ª¹Ø´ÎÊý if (L1==0 && l1_bz==0){L1T++;l1_bz=1;} if (L1==1){l1_bz=0;} if (L2==0 && l2_bz==0){L2T++;l2_bz=1;} if (L2==1){l2_bz=0;} if (L3==0 && l3_bz==0){L3T++;l3_bz=1;} if (L3==1){l3_bz=0;} //01ģʽѡÔñ if ((k10==0 &&k3>0&&k2>0)&&modv<2&&a1==0) { switch(modv) { case 0:modv=1;jint=jint2;a1=1; OLED_Clear();a1=1;lcd0=0;break; case 1:modv=0;a1=1;OLED_Clear(); a1=1;lcd0=0;break; default:modv=0;a1=1;OLED_Clear();a1=1;lcd0=0;break; } } if ((k30==0 &&k1>0&&k2>0)&&modv<2&&a2==0) { switch(modv) { case 0:modv=1;jint=jint2;a1=1; OLED_Clear();a2=1;lcd0=0;break; case 1:modv=0;a1=1;OLED_Clear(); a2=1;lcd0=0;break; default:modv=0;a1=1;OLED_Clear();a2=1;lcd0=0;break; } } // if ((modv==0 || modv==1)&&(k1==0 && k3==0&&k2>0)){modv=2;OLED_Clear() ;}//½øÈë³õʼ»¯²Ëµ¥ //½øÈë²Ëµ¥ if ((k1==0 && k3==0&&k2>0) ) { if (a1==0){ switch(modv) { case 0:modv=2;a1=1;OLED_Clear();break; case 1:modv=2;a1=1;OLED_Clear();break; //case 2:modv=3;a1=1;OLED_Clear();break; case 2:modv=4;a1=1;OLED_Clear();break; case 4:modv=5;a1=1;OLED_Clear();break; case 5:modv=6;a1=1;OLED_Clear();break; case 6:modv=7;a1=1;OLED_Clear();break; case 7:modv=8;a1=1;OLED_Clear();break; case 8:modv=9;a1=1;OLED_Clear();break; case 9:modv=0;a1=1;OLED_Clear();lcd0=0;break; default:modv=0;a1=1;OLED_Clear();lcd0=0;break; } } } // if (modv==4)//³õʼλÖà { if (k10==0&&k3>0&&k2>0&&a1==0){if (x0>0){x0=x0-1;}a1=1;} if (k30==0&&k1>0&&k2>0&&a2==0){if (x0<3){x0=x0+1;}a2=1;} } if (modv==5)//¾«¶È { if (k10==0&&k3>0&&k2>0&&a1==0){if (x1>0){x1=x1-1;}a1=1;} if (k30==0&&k1>0&&k2>0&&a2==0){if (x1<9){x1=x1+1;}a2=1;} } //*/ if (modv==7) { if (k10==0&&k3>0&&k2>0){if (i_tim>1){i_tim=i_tim-1;}} if (k30==0&&k1>0&&k2>0){if (i_tim<255){i_tim=i_tim+1;}} if (k1==0&&k3>0&&k2==0&&a1==0){if (zdkzv>0){zdkzv=zdkzv-1;}a1=1;} if (k3==0&&k1>0&&k2==0&&a2==0){if (zdkzv<4){zdkzv=zdkzv+1;}a2=1;} } if (modv==2)//³õʼ»¯ { Y1=0;Y2=1; if (k1==0 && k2==0&&k3>0){ks=1;Y1=0;Y2=1;} if ( k3==0 && k2==0&&k1>0){ks=1;Y1=0;Y2=1;} if ( ks==1) { if ( jva2==0) { Y1=1;Y2=0;delay_ms(1500); OLED_ShowString(30,6," Waiting...",16); Y2=1;Y1=0;openv=Get_ADC10bitResult(7)+1;jint2=openv+abs((closev-openv)/2); delay_ms(3000); openv=Get_ADC10bitResult(7)-1;jint2=openv+abs((closev-openv)/2); delay_ms(300); jv1=Get_ADC10bitResult(7); if (abs(openv-jv1)<5){jva2=1;Y1=1;delay_ms(300);Y1=1;} //jva2=1; } if (jva2==1) { Y1=1;Y2=0;delay_ms(300);closev=Get_ADC10bitResult(7)-0;jint2=openv+abs((closev-openv)/2); delay_ms(3000); closev=Get_ADC10bitResult(7)-1;jint2=openv+abs((closev-openv)/2); delay_ms(1000); jv1=Get_ADC10bitResult(7); if (abs(closev-jv1)<5){jva2=2;Y2=1;tm10=0;delay_ms(300);Y2=1;} //jva2=2; } if(jva2==2)//¹ØÊ±¼ä { if (Y2==1){Y1=0;ksjv=1;} if(abs(openv-Get_ADC10bitResult(7))<10){Y1=1;ksjv=0;jva2=3;tm20=0;delay_ms(2000);Y1=1;} //jva2=3; } if(jva2==3)//¿ªÊ±¼ä { Y1=1; if (Y1==1){Y2=0;ksjv2=1;} if(abs(closev-Get_ADC10bitResult(7))<10){ksjv2=0;ks=0;jva2=0;delay_ms(1500);Y2=1; closev=closev+0; write_cs(); tm30=tm10; tm31=tm20; OLED_ShowString(30,6," OK! ",16); delay_ms(500);modv=modv0;OLED_Clear();lcd0=0; } } } } /* if (modv==3)//Çý¶¯µÈ¼¶ { if (k10==0&&k3>0&&k2>0&&a1==0){if (g1>0){g1=g1-1;}a1=1;} if (k30==0&&k1>0&&k2>0&&a2==0){if (g1<10){g1=g1+1;}a2=1;} } */ if (k20==0&&k10>0&&k30>0&&bca==0)//±£´æÉèÖà { bca=1; OLED_ShowString(30,6," Waiting...",16); write_cs(); Y1=1;Y2=1; OLED_ShowString(30,6," OK ",16); } if (k20>0)bca=0; if (modv==6)//ÖмäλÉèÖà { if (jint2<openv){jint2=openv+(closev-openv)/2;} if (jint2>closev){jint2=openv+(closev-openv)/2;} if(k10==0&&k2>0&&k3>0&&jint2>openv){jint2=jint2-1;} if(k30==0&&k2>0&&k1>0&&jint2<closev){jint2=jint2+1;} //xst=((abs(jint2-openv)*1000/(closev-openv)))/10; //if (((abs(jint2-openv)*1000/(closev-openv)))/10<5){xst=0;} //if (((abs(jint2-openv)*1000/(closev-openv)))/10>100){xst=100;} xst=((jint2-openv)*1000/(closev-openv))/10; if (xst<5){xst=0;} if (xst>100){xst=0;} } //³õʼλ if (modv==0 && X2B==1) { if ( abs(jinr1-jinr0)>10) {X2=1;X1=1;X3=1;X2B=0;} if ( (abs(jint3-jinr0)>10) && x2==1) {X2=1;X1=1;X3=1;X2B=0;} if (X1==0 ){X2=1;X3=1;X2B=0;} if (X2==0 ){X1=1;X3=1;X2B=0;} if (X3==0 ){X2=1;X1=1;X2B=0;} if (x3>0&& x2==1){X2B=0;} } if (modv==1 && X2B==1) { if (x3>0&& x2==1){X2B=0;} if (X1==0 ){X2=1;X3=1;X2B=0;} if (X2==0 ){X1=1;X3=1;X2B=0;} if (X3==0 ){X2=1;X1=1;X2B=0;} } // //È«¿ªÈ«¹Ø²Ù×÷X1X3 if (modv==0 || modv==1) { if (modv==0) { jint=(unsigned long)(openv+(((closev-openv)*10000ul/817ul)*abs((jint1-200ul)))/10000ul); if (jint<openv){jint=openv;} if (jint>closev){jint=closev;} if (jint<(openv+5)&& X2==1 && X3==1){X1=0;}else{X1=1;} if (jint>(closev-5)&& X2==1 && X1==1){X3=0;}else{X3=1;} } if ((modv==0 &&(X1==0||X3==0||jxvcl==1||jxvop==1)&&x2==0)||(modv==0 &&(x3==1||x3==3)&&x2==1)||(modv==1 && (X1==0||X3==0)&&x2==0)||(modv==1 && (x3==1||x3==3)&&x2==1)) { tj_yc1=0;tj_yc2=0;tj_yc3=0;tj_ma0=0;tj_ma1=0; if (((X1==0&&x2==0)||(jxvop==1&&x2==0)||(x3==1&&x2==1))&&openv<(jinr-2)){L2=1;Y4=1;Y2=1;if (Y3==1){Y1=0;}jint=openv;} if (((X3==0&&x2==0)||(jxvcl==1&&x2==0)||(x3==3&&x2==1))&&closev>(jinr+2)){L2=1;Y4=1;Y1=1;Y2=0;jint=closev;} oled_s1(); if ((X1==0&&x2==0)||(x3==1&&x2==1)){jxvop=0;} if ((X3==0&&x2==0)||(x3==3&&x2==1)){jxvcl=0;} if (kzmd==0) { if (x2==0) { if (((jinr<=openv)||(jinr<openv+2))&&(X1==0||jxvop==1)){jxvop=0;Y1=1;} if (((jinr>=closev)||(jinr>closev-2))&&(X3==0||jxvcl==1)){jxvcl=0;Y2=1;} } if (x2==1) { if (((jinr<=openv)||(jinr<openv+2))&&x3==1){jxvop=0;Y1=1;} if (((jinr>=closev)||(jinr>closev-2))&&x3==3){jxvcl=0;Y2=1;}//¿ª } } if(bz_dz==0) { if ((jinr<=openv)||(jinr<openv+6)) {L2=1;Y4=1;L3=1;L1=0;Y3=0;xsr=0;jrtem1=1200;csv=1;}else{L1=1;Y3=1;csv=0;} if ((jinr>=closev)||(jinr>closev-6)){L1=1;L2=1;Y4=1;L3=0;Y5=0;xsr=100;jrtem1=6000;csv=1;}else{L3=1;Y5=1;csv=0;} } else{ //¹ýŤ¸´Î» //if ((jinr<=openv)||(jinr<openv+4)) {bz_dz=0;} //if ((jinr>=closev)||(jinr>closev-4)) {bz_dz=0;} if (jinr<openv+4) {bz_dz=0;} if (jinr>closev-4) {bz_dz=0;} } //¹ØÊ±¼ä if ((X3==0)||(x3==3&&x2==1)){ksjv11=0;tm11=0;}//&&x2==0 if ((X1==0)||(x3==1&&x2==1)){ksjv12=0;tm21=0;}//&&x2==0 if (((X1==0) ||(x3==1&&x2==1)) && L1==1&&L3==0){ksjv11=1;}//&&x2==0 if(L1==0){ksjv11=0;} //¿ªÊ±¼ä if (((X3==0)||(x3==3&&x2==1)) && L3==1&&L1==0){ksjv12=1;}//&&x2==0 if(L3==0){ksjv12=0;} LoadPWM(jrtem1); delay_ms(2); //if ((L1==0||L3==0 )&& csvbz==1){jinr0 = Get_ADC10bitResult(6);X2B=1;} //if ((L1==0||L3==0 )&& csvbz==1){jinr0 = adv1();X2B=1;} if ((L1==0||L3==0 )&& csvbz==1){jinr0 =Get_ADC10bitResult(6);X2B=1;} } // //Y1¹ØY2¿ª //4-20MAģʽ //Get_ADC10bitResult(6); jint1 = Get_ADC10bitResult(6); //jint1 = adv1(); jinr = adv(); if (x2==1)//Ô¶³Ì¿ØÖÆÖмäÁ¿ { tj_ma0=0;tj_ma1=0; if (modv==0 && x3==0){jint=jint3;tj_yc1=1;}else{tj_yc1=0;} if (modv==0 && x3==2){jint=jint2;tj_yc2=1;}else{tj_yc2=0;} if (modv==1 && x3==2){jint=jint2;tj_yc3=1;}else{tj_yc3=0;} } else//±¾µØ¿ØÖÆÖмäÁ¿ { tj_yc1=0;tj_yc2=0;tj_yc3=0; if (modv==0 && X2==1&& X1==1&& X3==1&&jxvcl==0&&jxvop==0){jint=(unsigned long)(openv+(((closev-openv)*10000ul/817ul)*abs((jint1-208ul)))/10000ul);}//+3ul;} if ((modv==0 && X2==0&& X1==1&& X3==1)||(modv==1&& X2==0&& X1==1&& X3==1) ){jint=jint2;} if (er1==1 && modv==0){ if (x0==1){jint=openv;} if (x0==2){jint=jint2;;} if (x0==3){jint=closev;} } if (er1==0 && modv==0 ){if (X2==1&& X1==1&& X3==1){jint=(unsigned long)(openv+(((closev-openv)*10000ul/817ul)*abs((jint1-208ul)))/10000ul);}} if ((modv==0 && X2==1&& X1==1&& X3==1&&jxvop==0&&jxvcl==0)||(modv==0 && X2==0&& X1==1&& X3==1)){tj_ma0=1;}else{tj_ma0=0;} if (modv==1 && X2==0&& X1==1&& X3==1){tj_ma1=1;}else{tj_ma1=0;} } if ((tj_ma0==1||tj_ma1==1||tj_yc1==1||tj_yc2==1||tj_yc3==1)) { if ((jint>(closev-1-x1) && jint<(closev+1+x1))){jint=closev;jxvcl=1;}else{jxvcl=0;} if ((jint>(openv-1-x1) && jint<(openv+1+x1))){jint=openv;jxvop=1; }else{jxvop=0;} xst=(abs(jint-openv)*100/(closev-openv)); oled_s1(); if (jint<openv){jint=openv;} if (jint>closev){jint=closev;} if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;} if (jint<jinr ) { if (jint<(jinr-1-x1) )//¹Ø***********OPENV { jxvcl=0; oled_s1(); if (jint>(jinr-1-x1) && jint<(jinr+1+x1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;} if (tjdz_bz2_b1==0) {if (Y3==1){Y1=0;Y2=1;}}else{Y1=1;Y2=1;} if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;} if (jint>(jinr-1-x1) && jint<(jinr+1+x1)){Y1=1;} if (L2==0&&bz_dz==0&&Y1==0){kgcs_bz1++;} } } if (jint>jinr ) { if (jint>(jinr+1+x1) )//¿ª***** { jxvop=0; oled_s1(); if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;} if (jint>(jinr-1-x1) && jint<(jinr+1+x1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;} if (tjdz_bz2_b==0) {Y1=1;Y2=0;}else{Y2=1;Y1=1;} if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;} if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y2=1;} if (L2==0&&bz_dz==0&&Y2==0){kgcs_bz2++;} } } jinr = adv(); if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;} //ָʾµÆ if(bz_dz==0) { if (jinr>(openv-(4+x1)) && jinr<(openv+(4+x1)) ) {L1=0;Y3=0;xsr=0;jrtem1=1200;csv=1;bz_dz=0;}else{L1=1;Y3=1;csv=0;} if (jinr>(closev-(4+x1)) && jinr<(closev+(4+x1)) ){L3=0;Y5=0;xsr=100;jrtem1=6000;csv=1;bz_dz=0;}else{L3=1;Y5=1;csv=0;} if (jint>(openv-(4+x1)) && jint<(openv+(4+x1)) ) {xst=0;} if (jint>(closev-(4+x1)) && jint<(closev+(4+x1)) ){xst=100;} if (jint>(jinr-(4+x1)) && jint<(jinr+(4+x1)) && L1==1 && L3==1) {L2=0;Y4=0;csv=1;}else{L2=1;Y4=1;csv=0;bz_dz=0;} } else{ //¹ýŤ¸´Î» if (jinr>(openv-(4+x1)) && jinr<(openv+(4+x1)) ) {bz_dz=0;} if (jinr>(closev-(4+x1)) && jinr<(closev+(4+x1))) {bz_dz=0;} if (jint>(jinr-(4+x1)) && jint<(jinr+(4+x1)) ) {bz_dz=0;} } LoadPWM(jrtem1);delay_ms(1); //if ((L1==0||L2==0||L3==0 )&& csvbz==1){Get_ADC10bitResult(6);jinr0 = Get_ADC10bitResult(6);X2B=1;} if ((L1==0||L2==0||L3==0 )&& csvbz==1){jinr0 = Get_ADC10bitResult(6);X2B=1;} //} } } //ģʽÏÔʾ if (modv==3 || modv==4 ||modv==5 ||modv==6) { OLED_ShowString(1,0," DATA :",16); OLED_ShowString(1,4," Setup:",16); } if (modv==6)//Öмäλ { OLED_ShowNum(55,4,xst,4,16); OLED_ShowString(90,4,"%",16); } if (modv==2)//³õʼ»¯ { OLED_ShowString(1,0," DATA :",16); OLED_ShowString(1,2," KEY1+KEY2",16); } if (modv==4)//³õʼλÖà { OLED_ShowNum(55,4,x0,4,16); } if (modv==5)//¾«¶È { OLED_ShowNum(55,4,x1,4,16); } /* if (modv==3)//Çý¶¯µÈ¼¶ { //if (g1==0){OLED_ShowString(57,4,"Auto ",16);}else{OLED_ShowString(57,4,"Fix ",16);} OLED_ShowString(57,4,"Fix ",16); OLED_ShowNum(88,4,g1,2,16); } */ if (modv==7) { OLED_ShowString(1,0," DATA :",16); OLED_ShowString(1,2," Type:",16); OLED_ShowString(1,4," time:",16); OLED_ShowString(1,4," time:",16); OLED_ShowNum(50,2,zdkzv,1,16); //zdkzv:1-13,2-12321,3-1231,4-1321 OLED_ShowNum(50,4,i_tim,3,16); OLED_ShowString(100,4,"s",16); switch(zdkzv) { case 0:OLED_ShowString(70,2," OFF ",16); break; case 1:OLED_ShowString(70,2," 13 ",16); break; case 2:OLED_ShowString(70,2," 12321",16); break; case 3:OLED_ShowString(70,2," 1231 ",16); break; case 4:OLED_ShowString(70,2," 1321 ",16); break; } } if (modv==8) { //OLED_ShowString(1,0," Model:",16); OLED_ShowString(1,0," ID:",16); OLED_ShowString(1,2," T-OP:",16); OLED_ShowString(1,4," T-CL:",16); OLED_ShowNum(34,0,IDV1,5,16);OLED_ShowNum(74,0,IDV2,5,16); //OLED_ShowString(35,0,LCD_line0,16); OLED_ShowNum(50,2,tm22,6,16); OLED_ShowNum(50,4,tm12,6,16); OLED_ShowNum(0,6,tim0/60,6,16);OLED_ShowString(50,6," H ",16); OLED_ShowNum(75,6,tim0%60,2,16);OLED_ShowString(95,6," M ",16); } if (modv==9) { //OLED_ShowString(1,0," Model:",16); OLED_ShowString(1,0,"N-OP:",16); OLED_ShowString(1,2,"N-MD:",16); OLED_ShowString(1,4,"N-CL:",16); OLED_ShowNum(40,0,L1T,8,16); OLED_ShowNum(40,2,L2T,8,16); OLED_ShowNum(40,4,L3T,8,16); //OLED_ShowNum(0,6,tm10,4,16); //OLED_ShowNum(60,6,tm20,4,16); } } } void oled_s1() { //jint1 = Get_ADC10bitResult(6); jint1 =adv1(); jinr = adv(); oled_x(); if ((abs(jint-openv)*100/(closev-openv))<4){xst=0;} if ((abs(jint-openv)*100/(closev-openv))>97){xst=100;} if ((abs(jinr-openv)*100/(closev-openv))<4){xsr=0;} if ((abs(jinr-openv)*100/(closev-openv))>97){xsr=100;} jrtem1=(120000ul+48ul*((abs(jinr-openv)*10000ul/(closev-openv))))/100ul; jrtem1=jrtem1-jrtem1/100ul; if (xst==0){jrtem1=1200;} if (xst==100){jrtem1=6000;} LoadPWM(jrtem1); } void oled_x() { jinr = adv(); xst=(abs(jint-openv)*100/(closev-openv)); xsr=(abs(jinr-openv)*100/(closev-openv)); } void kgsj() { if (tm10>=0 && tm10<100){jdjs_v=20;jdjs_v1=22;jdjs_v10=1;jdjs_v20=1;} if (tm10>=100 && tm10<150){jdjs_v=16;jdjs_v1=15;jdjs_v10=1;jdjs_v20=1;} if (tm10>=150 && tm10<200){jdjs_v=12;jdjs_v1=12;jdjs_v10=1;jdjs_v20=1;} if (tm10>=200 && tm10<280){jdjs_v=11;jdjs_v1=11;jdjs_v10=1;jdjs_v20=1;} if (tm10>=280 && tm10<380){jdjs_v=10;jdjs_v1=10;jdjs_v10=1;jdjs_v20=1;} if (tm10>=380 && tm10<500){jdjs_v=9;jdjs_v1=9;jdjs_v10=2;jdjs_v20=2;} if (tm10>=500 && tm10<650){jdjs_v=8;jdjs_v1=8;jdjs_v10=2;jdjs_v20=2;} if (tm10>=650 && tm10<850){jdjs_v=7;jdjs_v1=7;jdjs_v10=2;jdjs_v20=2;} if (tm10>=850 && tm10<1200){jdjs_v=6;jdjs_v1=6;jdjs_v10=2;jdjs_v20=2;} if (tm10>=1200 && tm10<1500){jdjs_v=5;jdjs_v1=5;jdjs_v10=2;jdjs_v20=3;} if (tm10>=1500 && tm10<2000){jdjs_v=4;jdjs_v1=4;jdjs_v10=3;jdjs_v20=3;} if (tm10>=2000 && tm10<2500){jdjs_v=3;jdjs_v1=3;jdjs_v10=3;jdjs_v20=3;} if (tm10>=2500 && tm10<3000){jdjs_v=2;jdjs_v1=2;jdjs_v10=4;jdjs_v20=4;} if (tm10>=3000 && tm10<4000){jdjs_v=1;jdjs_v1=1;jdjs_v10=5;jdjs_v20=5;} if (tm10>=4000 && tm10<6000){jdjs_v=1;jdjs_v1=1;jdjs_v10=6;jdjs_v20=6;} if (tm10>=6000 && tm10<30000){jdjs_v=1;jdjs_v1=1;jdjs_v10=7;jdjs_v20=7;} jdjs_v=jdjs_v+(11-x1)/3; jdjs_v1=jdjs_v; } long int adv() { Get_ADC10bitResult(7); for(j=0, i=0; i<16; i++) { j += Get_ADC10bitResult(7); } return (j/16); } int adv1() { //Get_ADC10bitResult(6); int jst1=0; int ist1; jst1 = Get_ADC10bitResult(6); for( ist1=0; ist1<64; ist1++) { jst1 = (jst1 +Get_ADC10bitResult(6))/2; } return jst1; } //======================================================================== // º¯Êý: void PrintString1(u8 *puts) // ÃèÊö: ´®¿Ú1·¢ËÍ×Ö·û´®º¯Êý¡£ // ²ÎÊý: puts: ×Ö·û´®Ö¸Õë. // ·µ»Ø: none. // °æ±¾: VER1.0 // ÈÕÆÚ: 2014-11-28 // ±¸×¢: //======================================================================== /*void PrintString1(u8 *puts) //·¢ËÍÒ»¸ö×Ö·û´® { for (; *puts != 0; puts++) //Óöµ½Í£Ö¹·û0½áÊø { SBUF = *puts; B_TX1_Busy = 1; while(B_TX1_Busy); } } */ //======================================================================== // º¯Êý: void UART1_config(u8 brt) // ÃèÊö: UART1³õʼ»¯º¯Êý¡£ // ²ÎÊý: brt: Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ. // ·µ»Ø: none. // °æ±¾: VER1.0 // ÈÕÆÚ: 2014-11-28 // ±¸×¢: //======================================================================== void UART1_config(u8 brt) // Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ. { /*********** ²¨ÌØÂÊʹÓö¨Ê±Æ÷2 *****************/ if(brt == 2) { AUXR &= ~(1<<4); //Timer stop ²¨ÌØÂÊʹÓÃTimer2²úÉú AUXR |= 0x01; //S1 BRT Use Timer2; AUXR |= (1<<2); //Timer2 set as 1T mode TH2 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) / 256); TL2 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) % 256); AUXR |= (1<<4); //Timer run enable } /*********** ²¨ÌØÂÊʹÓö¨Ê±Æ÷1 *****************/ else { TR1 = 0; AUXR &= ~0x01; //S1 BRT Use Timer1; AUXR |= (1<<6); //Timer1 set as 1T mode TMOD &= ~(1<<6); //Timer1 set As Timer TMOD &= ~0x30; //Timer1_16bitAutoReload; TH1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) / 256); TL1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) % 256); ET1 = 0; //½ûÖ¹ÖÐ¶Ï INT_CLKO &= ~0x02; //²»Êä³öʱÖÓ TR1 = 1; } /*************************************************/ SCON = (SCON & 0x3f) | 0x40; //UART1ģʽ, 0x00: ͬ²½ÒÆÎ»Êä³ö, 0x40: 8λÊý¾Ý,¿É±ä²¨ÌØÂÊ, 0x80: 9λÊý¾Ý,¹Ì¶¨²¨ÌØÂÊ, 0xc0: 9λÊý¾Ý,¿É±ä²¨ÌØÂÊ PS = 1; //¸ßÓÅÏȼ¶ÖÐ¶Ï ES = 1; //ÔÊÐíÖÐ¶Ï REN = 1; //ÔÊÐí½ÓÊÕ P_SW1 &= 0x3f; P_SW1 |= 0x40; //UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7 (±ØÐëʹÓÃÄÚ²¿Ê±ÖÓ) //PCON2 |= (1<<4); //ÄÚ²¿¶Ì·RXDÓëTXD, ×öÖмÌ, ENABLE,DISABLE //PCON|=0x80; //´®¿Ú²¨ÌØÂʼӱ¶ B_TX1_Busy = 0; TX1_Cnt = 0; RX1_Cnt = 0; } //======================================================================== // º¯Êý: void UART1_int (void) interrupt UART1_VECTOR // ÃèÊö: UART1ÖжϺ¯Êý¡£ // ²ÎÊý: nine. // ·µ»Ø: none. // °æ±¾: VER1.0 // ÈÕÆÚ: 2014-11-28 // ±¸×¢: //======================================================================== void UART1_int (void) interrupt 4 { if(RI) { RI = 0; if(RX1_Cnt >= RX1_Lenth) RX1_Cnt = 0; //·ÀÒç³ö RX1_Buffer[RX1_Cnt++] = SBUF; if (RX1_Buffer[0]!=add_v) RX1_Cnt = 0;//±¾»úµØÖ·ÅÐ¶Ï } if(TI) { TI = 0; //UART1_485_DE=1; if(TX_read != TX_write) { // UART1_485_DE=1; SBUF = TX1_Buffer[TX_read]; if(++TX_read >= TX1_Lenth) TX_read = 0; } //else {B_TX1_Busy = 0;UART1_485_DE=0;} else {B_TX1_Busy = 0;} } } void TX1_write2buff(u8 dat) //дÈë·¢ËÍ»º³å£¬Ö¸Õë+1 { TX1_Buffer[TX_write] = dat; //×°·¢ËÍ»º³å if(++TX_write >= TX1_Lenth) TX_write = 0; if(B_TX1_Busy == 0) //¿ÕÏÐ { TI = 1; //´¥·¢·¢ËÍÖÐ¶Ï B_TX1_Busy = 1; //±ê־æ } } unsigned int CRC16(unsigned char * puchMsg, unsigned int usDataLen) { unsigned int temp=0xffff,temp1,i,j; for(i=0;i<usDataLen;i++) { temp^=*(puchMsg+i); for(j=0;j<8;j++) { temp1=temp; temp>>=1; if(temp1&0x0001) temp^=0xa001; } } return(temp); } void write_fzcs(void) { settmp1[0]=tim0%256; settmp1[1]=(tim0/256)/256; settmp1[2]=(tim0/256)%256; settmp1[3]=L1T%256; settmp1[4]=(L1T/256)/256; settmp1[5]=(L1T/256)%256; settmp1[6]=L2T%256; settmp1[7]=(L2T/256)/256; settmp1[8]=(L2T/256)%256; settmp1[9]=L3T%256; settmp1[10]=(L3T/256)/256; settmp1[11]=(L3T/256)%256; settmp1[12]=tm22/256; settmp1[13]=tm22%256; settmp1[14]=tm12/256; settmp1[15]=tm12%256; settmp1[16]=IDV1/256; settmp1[17]=IDV1%256; settmp1[18]=IDV2/256; settmp1[19]=IDV2%256; EEPROM_SectorErase(0X200);//²Á³ýEEPROM delay_ms(10); EEPROM_write_n(0X200,settmp1,20);//дÈëģʽ delay_ms(10); } void write_cs(void) { settmp[0]=openv/256; settmp[1]=openv%256; settmp[2]=closev/256; settmp[3]=closev%256; settmp[4]=jint2/256; settmp[5]=jint2%256; if (modv==0||modv==1){settmp[6]=modv;modv0=modv;}else{settmp[6]=modv0;} settmp[7]=g1; settmp[8]=tm10/256; settmp[9]=tm10%256; settmp[10]=tm20/256; settmp[11]=tm20%256; settmp[12]=x0; settmp[13]=x1; settmp[14]=add_v; settmp[15]=x5; settmp[16]=x6; settmp[17]=x7; settmp[18]=zdkzv; settmp[19]=i_tim; EEPROM_SectorErase(0X0);//²Á³ýEEPROM delay_ms(10); EEPROM_write_n(0X0,settmp,20);//дÈëģʽ delay_ms(10); } void modbusv(void)//¶ÁÈ¡ËùÓвÎÊý {//01 01 00 65 00 2E 20 XX XX char e1=0; u16 crc; if(RX1_Cnt>7) { crc=CRC16(RX1_Buffer,RX1_Cnt-2); if (RX1_Buffer[RX1_Cnt-2]!=(crc%256) || RX1_Buffer[RX1_Cnt-1]!=(crc/256)) {RX1_Cnt = 0;e1=1;}//ÅжÏÊý¾ÝÊÇ·ñÕýÈ· if (RX1_Buffer[1]==0X01 &&RX1_Buffer[2]==0X00 &&RX1_Buffer[3]==0X65 &&RX1_Buffer[5]==0X2E &&RX1_Buffer[6]==0X20 && e1==0) { modbus_bw(); RX1_Cnt = 0; } } } void modbus_bw(void)//×Ô¶¯±¨ÎÄ--¶ÁÈ¡ËùÓвÎÊý { u8 i; u8 XV1,XV2; u8 X201=0,X202=0,X203=0; u8 Y101=0,Y102=0,Y103=0,Y104=0,Y105=0; u8 L101=0,L102=0,L103=0; u16 crc1; u8 V3[48]; if (modv==0 || modv==1)//01ģʽÏÔʾ { if (((X1==0&&x2==0)||(x3==1&&x2==1))){xst=0;jint=openv;} if (((X3==0&&x2==0)||(x3==3&&x2==1))){xst=100;jint=closev;} } X201=X1;X202=X2;X203=X3; Y101=Y1;Y102=Y2;Y103=Y3;Y104=Y4;Y105=Y5; L101=L1;L102=L2;L103=L3; XV1=_bin(X201,X202,X203,0,0,0,0,0); XV2=_bin(Y101,Y102,Y103,Y104,Y105,L101,L102,L103); V3[6]=XV1;V3[7]=XV2; V3[0]=add_v;//µØÖ· V3[1]=0X01;//Ö¸Áî V3[2]=0X24;//Êý¾Ý³¤¶È V3[3]=0X00+modv;//ģʽ V3[4]=0X00+g1;//Çý¶¯Ä£Ê½ V3[5]=0X00+x1;//¾«¶È V3[6]=0X00+x0;//³õʼλÖà V3[7]=0X00+xst;//Öмäλ V3[8]=0X00+x5;//ÐÄÌø°ü V3[9]=0X00+x6;//×Ô¶¯±¨ÎÄ V3[10]=0X00+x7;//µØÖ·ÏÔʾ V3[11]=zdkzv;//×Ô¶¯¿ØÖÆÀàÐÍ V3[12]=i_tim;//×Ô¶¯¿ØÖƼä¸ô V3[13]=XV1;//X¶Ë V3[14]=XV2;//Y¶Ë V3[15]=jint/256;//ÊäÈë V3[16]=jint%256; V3[17]=jinr/256;//Êä³ö V3[18]=jinr%256; V3[19]=0X00+xst;//ÊäÈ뿪¶È V3[20]=0X00+xsr;//¿ª¶È V3[21]=tim0%256;//ÔËÐÐʱ¼ä·ÖÖÓtim0=(V3[16]*256+V3[17])*256+V3[15]; V3[22]=(tim0/256)/256; V3[23]=(tim0/256)%256; V3[24]=L1T%256;//¿ª´ÎÊý V3[25]=(L1T/256)/256; V3[26]=(L1T/256)%256; V3[27]=L2T%256;//Öмä´ÎÊý V3[28]=(L2T/256)/256; V3[29]=(L2T/256)%256; V3[30]=L3T%256;//¹Ø´ÎÊý V3[31]=(L3T/256)/256; V3[32]=(L3T/256)%256; V3[33]=tm22/256;//¿ªÊ±¼ä V3[34]=tm22%256; V3[35]=tm12/256;//¹ØÊ±¼ä V3[36]=tm12%256; V3[37]=openv/256;//openv V3[38]=openv%256; V3[39]=closev/256;//closev V3[40]=closev%256; V3[41]=IDV1/256;//idǰ5λ V3[42]=IDV1%256; V3[43]=IDV2/256;//idºó5λ V3[44]=IDV2%256; V3[45]=0X20;//ÉèÖÃÀàÐÍ0X01µç¶¯//0X20Æø¶¯¿ª¹ØºÐ crc1=CRC16(V3,46); V3[46]=crc1%256; V3[47]=crc1/256; for(i=0; i<48; i++) {TX1_write2buff(V3[i]);} //Êý¾Ý·µ»Ø } int modbus_ex(char x)//²ÎÊý±à¼­ {//01 06 01 F5 00 01 20 XX XX u8 i; u8 rx3; u16 crc; char e1=0; switch(x) { case 1:rx3=0XF1;break;//µØÖ·add_v 01 06 01 F1 00 01 20 XX XX case 2:rx3=0XF2;break;//ģʽmodv 01 06 01 F2 00 01 20 XX XX case 3:rx3=0XF3;break;//±ê¶¨ 01 06 01 F3 00 01 20 XX XX case 4:rx3=0XF4;break;//¾«¶Èx1 01 06 01 F4 00 01 20 XX XX case 5:rx3=0XF5;break;//³õʼλÖÃx0 01 06 01 F5 00 01 20 XX XX case 6:rx3=0XF6;break;//ÖмäÖµxst 01 06 01 F6 00 01 20 XX XX case 7:rx3=0XF7;break;//network--x2 01 06 01 F7 00 01 20 XX XX case 8:rx3=0XF8;break;//¿ª¹Ø¿ØÖÆ123--x3 01 06 01 F8 00 01 20 XX XX case 9:rx3=0XF9;break;//¿ª¶È¿ØÖÆ--x4 01 06 01 F9 00 01 20 XX XX case 10:rx3=0XFA;break;//ÐÄÌø°ü--x5 01 06 01 FA 00 01 20 XX XX case 11:rx3=0XFB;break;//×Ô¶¯±¨ÎÄ--x6 01 06 01 FB 00 01 20 XX XX case 12:rx3=0XFC;break;//µØÖ·ÏÔʾ--x7 01 06 01 FC 00 01 20 XX XX case 13:rx3=0XFD;break;//×Ô¶¯¿ØÖÆ--zdkzv 01 06 01 FD 00 01 20 XX XX case 14:rx3=0XFE;break;//ʱ¼ä¼ä¸ô--i_tim 01 06 01 FE 00 01 20 XX XX case 15:rx3=0XFF;break;//Êý¾Ý±£´æ--x8 01 06 01 FF 00 01 20 XX XX case 16:rx3=0XE1;break;//Çý¶¯g1 01 06 01 E1 00 01 20 XX XX case 17:rx3=0XE2;break;//Çý¶¯µ¥Ë«kzmd 01 06 01 E2 00 01 20 XX XX } if(RX1_Cnt > 7) { crc=CRC16(RX1_Buffer,RX1_Cnt-2); if (RX1_Buffer[RX1_Cnt-2]!=(crc%256) || RX1_Buffer[RX1_Cnt-1]!=(crc/256)) {RX1_Cnt = 0;e1=1;}//ÅжÏÊý¾ÝÊÇ·ñÕýÈ· if ( RX1_Buffer[1]==0X06 &&RX1_Buffer[2]==0X01 && RX1_Buffer[3]==rx3 && RX1_Buffer[6]==0X20 && e1==0)//¶ÁÈ¡ÊäÈëÃüÁî { for(i=0; i<RX1_Cnt; i++) {TX1_write2buff(RX1_Buffer[i]);} //ÊÕµ½µÄÊý¾ÝÔ­Ñù·µ»Ø RX1_Cnt = 0; return 1; } } return 0; } int modbus_zo(void)//ÔËÐÐÊý¾ÝÇå0¿ª¹ØÊ±¼äÔËÐÐʱ¼ä {//01 06 FF FF 00 00 20 FF FF---01 06 FF 00 00 20 u8 i; u16 crc; char e1=0; if(RX1_Cnt > 7) { crc=CRC16(RX1_Buffer,RX1_Cnt-2); if (RX1_Buffer[RX1_Cnt-2]!=(crc%256) || RX1_Buffer[RX1_Cnt-1]!=(crc/256)) {RX1_Cnt = 0;e1=1;}//ÅжÏÊý¾ÝÊÇ·ñÕýÈ· // if ( RX1_Buffer[1]==0X06 &&RX1_Buffer[2]==0XFF && RX1_Buffer[3]==0XFF&& RX1_Buffer[4]==0X00&& RX1_Buffer[5]==0X00 && RX1_Buffer[6]==0X20&& RX1_Buffer[7]==0XFF&& RX1_Buffer[8]==0XFF&& e1==0)//¶ÁÈ¡ÊäÈëÃüÁî if ( RX1_Buffer[1]==0X06 &&RX1_Buffer[2]==0XFF && RX1_Buffer[5]==0X20 && e1==0)//¶ÁÈ¡ÊäÈëÃüÁî { for(i=0; i<RX1_Cnt; i++) {TX1_write2buff(RX1_Buffer[i]);} //ÊÕµ½µÄÊý¾ÝÔ­Ñù·µ»Ø RX1_Cnt = 0; return 1; } } return 0; } int modbus_id(void)//IDÐÞ¸Ä {//01 06 EE EE 00 00 00 00 20 EE EE //01 06 EE 00 00 00 00 20 u8 i; u16 crc; char e1=0; if(RX1_Cnt > 7) { crc=CRC16(RX1_Buffer,RX1_Cnt-2); if (RX1_Buffer[RX1_Cnt-2]!=(crc%256) || RX1_Buffer[RX1_Cnt-1]!=(crc/256)) {RX1_Cnt = 0;e1=1;}//ÅжÏÊý¾ÝÊÇ·ñÕýÈ· if ( RX1_Buffer[1]==0X06 &&RX1_Buffer[2]==0XEE && RX1_Buffer[7]==0X20 && e1==0)//¶ÁÈ¡ÊäÈëÃüÁî { for(i=0; i<RX1_Cnt; i++) {TX1_write2buff(RX1_Buffer[i]);} //ÊÕµ½µÄÊý¾ÝÔ­Ñù·µ»Ø RX1_Cnt = 0; return 1; } } return 0; } void INIT_SET(void) { settmp1[0]=0; settmp1[1]=0; settmp1[2]=0; settmp1[3]=0; settmp1[4]=0; settmp1[5]=0; settmp1[6]=0; settmp1[7]=0; settmp1[8]=0; settmp1[9]=0; settmp1[10]=0; settmp1[11]=0; settmp1[12]=0; settmp1[13]=0; settmp1[14]=0; settmp1[15]=0; settmp1[16]=0; settmp1[17]=0; settmp1[18]=0; settmp1[19]=0; EEPROM_SectorErase(0X200);//²Á³ýEEPROM delay_ms(10); EEPROM_write_n(0X200,settmp1,20);//дÈëģʽ delay_ms(10); settmp[0]=0; settmp[1]=0; settmp[2]=0; settmp[3]=0; settmp[4]=0; settmp[5]=0; settmp[6]=0; settmp[7]=0; settmp[8]=0; settmp[9]=0; settmp[10]=0; settmp[11]=0; settmp[12]=0; settmp[13]=0; settmp[14]=0; settmp[15]=0; settmp[16]=0; settmp[17]=0; settmp[18]=0; settmp[19]=0; settmp[20]=1; EEPROM_SectorErase(0X0);//²Á³ýEEPROM delay_ms(10); EEPROM_write_n(0X0,settmp,21);//дÈëģʽ delay_ms(10); }

最新推荐

recommend-type

基于MatlabSimulink的纯电动汽车整车仿真模型设计与应用 MatlabSimulink 详细版

如何使用Matlab/Simulink构建纯电动汽车的整车仿真模型。首先阐述了仿真模型的重要性及其在纯电动汽车研发中的关键作用。接着分别讨论了电机模型、电池模型、变速器模型、驾驶员模型和整车动力学模型的具体构建方法和技术细节。每个模型都涵盖了其主要特性及模拟方式,如电机的电气、机械和热特性,电池的电压、电流和温度特性,变速器的齿轮比和传动效率,驾驶员的行为和反应,以及整车的纵向和横向动力学特性。最后,通过整合各子模型并进行仿真测试,展示了如何评估和优化纯电动汽车的整体性能。 适合人群:从事新能源汽车研究的技术人员、高校相关专业师生、汽车行业工程师。 使用场景及目标:适用于需要深入了解纯电动汽车内部机制的研究项目,旨在提高车辆性能、延长续航里程、增强安全性和优化设计流程。 其他说明:文中不仅提供了详细的理论解释,还附有实际操作步骤和案例分析,帮助读者全面掌握仿真建模的方法论。
recommend-type

langchain4j-community-neo4j-retriever-1.0.1-beta6.jar中文文档.zip

1、压缩文件中包含: 中文文档、jar包下载地址、Maven依赖、Gradle依赖、源代码下载地址。 2、使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 3、特殊说明: (1)本文档为人性化翻译,精心制作,请放心使用; (2)只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; (3)不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 4、温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件。 5、本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册。
recommend-type

年轻时代音乐吧二站:四万音乐与图片资料库

根据提供的信息,我们可以梳理出以下知识点: ### 知识点一:年轻时代音乐吧二站修正版 从标题“年轻时代音乐吧二站修正版”可以推断,这是一个与音乐相关的网站或平台。因为提到了“二站”,这可能意味着该平台是某个项目或服务的第二代版本,表明在此之前的版本已经存在,并在此次发布中进行了改进或修正。 #### 描述与知识点关联 描述中提到的“近四万音乐数据库”,透露了该音乐平台拥有一个庞大的音乐库,覆盖了大约四万首歌曲。对于音乐爱好者而言,这表明用户可以访问和欣赏到广泛和多样的音乐资源。该数据库的规模对于音乐流媒体平台来说是一个关键的竞争力指标。 同时,还提到了“图片数据库(另附带近500张专辑图片)”,这暗示该平台不仅提供音乐播放,还包括了视觉元素,如专辑封面、艺人照片等。这不仅增强了用户体验,还可能是为了推广音乐或艺人而提供相关视觉资料。 ### 知识点二:下载 影音娱乐 源代码 源码 资料 #### 下载 “下载”是指从互联网或其他网络连接的计算机中获取文件的过程。在这个背景下,可能意味着用户可以通过某种方式从“年轻时代音乐吧二站修正版”平台下载音乐、图片等资源。提供下载服务需要具备相应的服务器存储空间和带宽资源,以及相应的版权许可。 #### 影音娱乐 “影音娱乐”是指以音频和视频为主要形式的娱乐内容。在这里,显然指的是音乐吧平台提供的音乐播放服务,结合上述的图片数据库,该平台可能还支持视频内容或直播功能,为用户提供丰富的视听享受。 #### 源代码 提到“源代码”和“源码”,很可能意味着“年轻时代音乐吧二站修正版”可能是开源的,或者是该平台允许用户下载其应用程序的源代码。在开源的情况下,开发者社区可以查看、修改和分发源代码,促进更多人参与到平台的建设和改进中。 #### 资料 “资料”则指的是与音乐相关的各种信息资料,如歌词、艺人介绍、音乐评论等。该音乐平台可能提供了丰富的背景信息资料,帮助用户更深入地了解音乐及其背后的故事。 ### 知识点三:压缩包子文件的文件名称列表 文件名称列表中仅提到了“年轻时代音乐吧二站修正版”,这可能暗示着整个平台或其下载包是通过压缩技术进行打包和分发的。压缩文件通常用于减少文件大小,以便于网络传输,同时也为用户提供一个集成化的软件包,方便用户一次性下载安装或更新。 ### 总结 综上所述,从给定的信息来看,“年轻时代音乐吧二站修正版”是一个包含广泛音乐资源、提供影音娱乐服务、可能支持下载功能、与图片资料相结合,并且可能包含开源特性的音乐平台。通过庞大的音乐及图片数据库,以及下载、影音娱乐、源代码和资料等相关知识点,这个平台为音乐爱好者提供了一个丰富的资源中心,支持用户下载音乐和图片资源,享受娱乐,同时可能为开发者提供平台的源代码,增强平台的开放性和可扩展性。
recommend-type

macOS PHP环境管理的艺术:掌握配置多个PHP版本的必备技巧与实践

# 1. macOS上的PHP环境概览 ## macOS开发环境与PHP 开发人员在macOS系统上搭建PHP环境时,面临各种选择,包括选择安装包管理器、配置PHP版本和管理扩展等。macOS作为开发者广泛使用的操作系统之一,提供了对PHP良好的原生支持。Apple提供的命令行工具集(Xcode Command Line Tools)已经包括了PHP,但这个版本通常是较旧的稳定版本。 ## PHP在macOS上的安装途径
recommend-type

can通信的位时间

<think>首先,用户的问题是:“我想理解CAN通信中的位时间设置 请问CAN通信 位时间配置 原理 参数设置”。我需要基于系统级指令来回答这个问题。 系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。 用户的问题是关于CAN通信的位时间配置,包括原理和参数设置。参考引用中提到了CAN的波特率设置,涉及原子时间(TQ)和比特传输的阶段。引用是:[^1],
recommend-type

邮件通知系统:提升网易文章推荐体验

邮件通知程序是一种常见的网络应用程序,主要功能是通过电子邮件为用户提供信息通知服务。这种程序能够根据设定的条件,自动向用户发送邮件,通知他们新的内容或信息,这在信息更新频繁的场景中尤其有用。从描述中可知,这个特定的邮件通知程序可能被用来推荐网易上的好文章,表明它是针对内容推送而设计的。这种类型的程序通常被用作网站或博客的内容管理系统(CMS)的一部分,用来增强用户体验和用户粘性。 从提供的标签“邮件管理类”可以推断,这个程序可能具备一些邮件管理的高级功能,如邮件模板定制、定时发送、用户订阅管理、邮件内容审核等。这些功能对于提升邮件营销的效果、保护用户隐私、遵守反垃圾邮件法规都至关重要。 至于压缩包子文件的文件名称列表,我们可以从中推测出一些程序的组件和功能: - info.asp 和 recommend.asp 可能是用于提供信息服务的ASP(Active Server Pages)页面,其中 recommend.asp 可能专门用于推荐内容的展示。 - J.asp 的具体功能不明确,但ASP扩展名暗示它可能是一个用于处理数据或业务逻辑的脚本文件。 - w3jmail.exe 是一个可执行文件,很可能是一个邮件发送的组件或模块,用于实际执行邮件发送操作。这个文件可能是一个第三方的邮件发送库或插件,例如w3mail,这通常用于ASP环境中发送邮件。 - swirl640.gif 和 dimac.gif 是两个图像文件,可能是邮件模板中的图形元素。 - default.htm 和 try.htm 可能是邮件通知程序的默认和测试页面。 - webcrea.jpg 和 email.jpg 是两个图片文件,可能是邮件模板设计时使用的素材或示例。 邮件通知程序的核心知识点包括: 1. 邮件系统架构:邮件通知程序通常需要后端服务器和数据库来支持。服务器用于处理邮件发送逻辑,数据库用于存储用户信息、订阅信息以及邮件模板等内容。 2. SMTP 协议:邮件通知程序需要支持简单邮件传输协议(SMTP)以与邮件服务器通信,发送邮件到用户指定的邮箱。 3. ASP 编程:由于提及了ASP页面,这表明开发邮件通知程序可能用到 ASP 技术。ASP 允许在服务器端执行脚本以生成动态网页内容。 4. 邮件内容设计:设计吸引人的邮件内容对于提高用户互动和兴趣至关重要。邮件模板通常包括文本、图片、链接,以及可能的个性化元素。 5. 用户订阅管理:邮件通知程序需要提供用户订阅和退订的功能,以便用户可以控制他们接收到的信息类型和数量。 6. 邮件发送策略:为了遵守反垃圾邮件法律并提高邮件送达率,邮件通知程序需要实现合理的发送策略,例如定时发送、避免过度发送、邮件列表管理等。 7. 安全性和隐私保护:发送邮件时需要确保邮件内容的安全性和用户隐私,避免敏感信息泄露,并且遵守相关的数据保护法律和规范。 8. 性能优化:邮件通知程序需要有效地处理大量用户的邮件发送请求,保证邮件发送的高效性,并且优化系统性能以应对高峰时段。 9. 用户体验:良好的用户体验设计能够增加用户的互动和满意度,包括清晰的订阅界面、灵活的邮件设置选项、易于理解的通知内容等。 10. 反馈机制:用户对邮件的反馈,如打开率、点击率和退订率,是衡量邮件通知程序效果的重要指标。有效的反馈机制可以帮助改进邮件内容和发送策略。 通过了解这些知识点,我们可以对邮件通知程序的设计、开发和运作有更全面的认识。
recommend-type

【macOS PHP开发环境搭建新手必备】:使用brew一步到位安装nginx、mysql和多版本php的终极指南

# 1. macOS PHP开发环境概述 ## macOS下PHP开发的重要性 在macOS上设置PHP开发环境是开发高效Web应用程序的关键。macOS为开发者提供了一个稳定且用户友好的操作系统环境,结合了Unix的强大功能和苹果的直观界面设计。由于其Linux类似的核心,macOS常被视为Web开发的理想平台,特别是在搭
recommend-type

windows AD 组策略设置的时候是建议一个功能新建一条组策略么?还是在默认组策略上设置

<think>嗯,用户问的是在Windows AD组策略设置时,是建议每个功能新建一条组策略,还是直接在默认域策略上修改。这个问题涉及到AD管理的最佳实践。 从企业管理的角度思考,默认域策略(Default Domain Policy)作为AD安装时自动生成的策略,其实承担着基础安全配置的角色,比如密码策略、账户锁定策略这些关键设置。如果在这上面随意修改,风险确实很高——万一配置出错会影响整个域的用户和计算机。 我记得微软官方文档特别强调过要保护默认域策略。实际操作中,更合理的做法是针对不同的管理目标创建专用的组策略对象(GPO)。比如单独为"驱动器映射"、"IE安全设置"或"屏幕锁定超时
recommend-type

文件分割神器:快速压缩与管理大文件

标题《快刀斩乱麻》描述了一款文件分割软件的功能和特点。从描述中我们可以提炼出以下几个重要的知识点: 1. 文件分割功能:软件的主要用途是将一个大型文件分割成多个较小的部分。在早期计算机时代,由于存储介质(如软盘)的容量有限,常常需要将大文件拆分存储。而今,这种需求可能在移动存储设备空间受限或网络传输带宽有限的情况下仍然存在。 2. 文件管理:分割后的文件会被放置在新建的文件夹中,使得用户能够轻松管理和查看这些文件片段。这是软件为用户考虑的一个贴心功能,提高了文件的可访问性和组织性。 3. 文件合并功能:在需要的时候,用户可以将分割后的文件重新组合成原始大文件。这一功能确保了文件的完整性,方便用户在需要使用完整文件时能够快速还原。 4. 硬盘空间节省:分割并合并文件后,软件提供了一键删除输出文件的功能,以减少不必要的硬盘占用。这对于硬盘空间紧张的用户来说是非常实用的功能。 5. MP3片段提取:软件能够提取MP3文件的片段,并且从指定位置开始播放,这为音乐爱好者提供了方便。此功能可能涉及音频文件的编辑和处理技术。 6. 批处理功能:支持同时处理多个文件的分割任务。此功能可以提高处理多个大型文件时的工作效率,节省用户的时间和劳动。 7. 界面与易用性:描述中提到该软件拥有一个美观的用户界面,并且非常容易使用,即使是初次使用也能快速掌握。这对于非技术用户来说至关重要,因为它降低了使用软件的技术门槛。 8. 应用场景:软件可以在磁盘空间不足时成为用户的得力助手。这表明软件可以解决一些实际问题,满足用户特定的需求。 【压缩包子文件的文件名称列表】中包含的setup.exe文件名暗示这是一个安装程序,用户通过运行该程序可以在计算机上安装“快刀斩乱麻”软件。而readme.txt通常是一个说明文档,包含了软件的安装指南、功能介绍、操作说明或版权信息等,方便用户在安装或使用软件时查阅相关信息。 总结来说,【标题】中所述的“快刀斩乱麻”是一款针对文件分割和管理任务而设计的软件,具备文件分割、管理、合并、空间节省、音频处理和批处理等实用功能,界面设计简洁且用户友好,适用于多种场景下对文件进行高效管理。
recommend-type

【SD550螺丝刀控制器全方位攻略】:破解操作、维护、升级及故障排除的终极指南

# 摘要 本文全面介绍了SD550螺丝刀控制器的使用和维护,从基础操作到进阶功能探索,再到故障排除和性能优化。文章首先概述了SD550控制器的基本操作,包括界面熟悉和操作参数设定。进阶部分探讨了自定义程序、脚本编写以及多任务操作和管理。维护与升级章节提供了日常维护步骤和软硬件升级的具体指导,确保控制器性能稳定。故障排除章节详细讨论了问题的识别、诊断及常见操作问题的解决方法,并强调了预防性维护的重要性。案例研究和经验分享章节通过分析典型应用案例,分享了维护升级的成功经验和行业专家的见解,对未来技术趋势做出预测。总体而言,本文为用户提供了全面的操作指南、维护策略和故障解决方法,有助于提升SD550