📄 dema.lst
字号:
158: Delay(D_SHAKE_H,D_SHAKE_L); //去抖动延时
159: if(!ENSURE){
160: Dema_Release(); //等待按键松开
161: break; //退出循环,进入标定
162: }
163: }else if(!ADD_ONE){ //加1键按下
164: Delay(D_SHAKE_H,D_SHAKE_L); //去抖动延时
165: if(!ADD_ONE){
166: Dema_Release(); //等待按键松开
167: Clear_Zero(ptr,Adc_Adverage(object)); //调用清0函数
168: }
169: }
170: }
171:
172: //对控制参数初始化
173: i = 0;
174: point_number = 0;
175: flicker = 0;
176: bit_value = 0;
177: current_bit = 3;
178: set_value = 0;
179: Init_Tmr1();
180:
181: //正式进入标定状态
182: while(1){
183: //判断要做何种操作
184: if(!ESC){
185: Delay(D_SHAKE_H,D_SHAKE_L);
186: if(!ESC){ //标定键按下
187: Dema_Release();
188:
189: //不知道是什么原因,如果只调用一次,写入的第一个字节的数据会出错,找不到原因
190: //不得已,调用了两次写EEPROM函数
191: My_Write(ptr,DEMA_POINT_SIZE,address);
192: My_Write(ptr,DEMA_POINT_SIZE,address); //将制动力标定数据写到EEPROM中
193: Normal_Display();
194: return FALSE;
195: }
196: }else if(!ENSURE){
197: Delay(D_SHAKE_H,D_SHAKE_L);
198: if(!ENSURE){ //确认键按下
199: Dema_Release();
200: if(point_number < 9){
201: ptr[point_number * 2 + 1] = Adc_Adverage(object); //存放当前标定点的AD值
202: //存放当前标定点的设定值,转换成16进制格式 ,设定值为BCD码
203: ptr[point_number * 2 + 2] = Bcd_Hex(set_value);
204: }
205: ++point_number;
206: if(point_number >= 2 && point_number != 0xa)
207: ptr[0] = point_number;
208: if(point_number == 0xa){ //如果到达允许的标定点数,返回
209:
210: //不知道是什么原因,如果只调用一次,写入的第一个字节的数据会出错,找不到原因
211: //不得已,调用了两次写EEPROM函数
212: My_Write(ptr,DEMA_POINT_SIZE,address);
213: My_Write(ptr,DEMA_POINT_SIZE,address); //将制动力标定数据写到EEPROM中
214: Normal_Display();
215: return FALSE;
216: }
217: bit_value = 0; //进入对下一点的标定,复位相关设定值
218: current_bit = 3;
219: set_value = 0x0;
220: }
221: }else if(!MOVE){
222: Delay(D_SHAKE_H,D_SHAKE_L);
223: if(!MOVE){ //移位键按下
224: Dema_Release();
225: --current_bit; //操作位加1
226: bit_value = 0; //位设置值设定为0
227: if(current_bit > 3){
228: current_bit = 3; //操作位溢出,刷新位操作
229: }
230: }
231: }else if(!ADD_ONE){
232: Delay(D_SHAKE_H,D_SHAKE_L);
233: if(!ADD_ONE){ //加1键按下
234: Dema_Release();
235: ++bit_value; //位设定值加1
236: if(bit_value > 9){
237: bit_value = 0; //位设定值溢出,位设定值清0
238: }
239:
240: //将当前操作位的值填入制动设置变量中
241: switch(current_bit){
242: case ZER0: //当前设定位是最低位
243: set_value &= 0xfff0;
244: set_value |= bit_value;
245: break;
246: case ONE: //当前设定位是次低位
247: set_value &= 0xff0f;
248: set_value |= bit_value << 4;
249: break;
250: case TWO: //当前设定位是次高位
251: set_value &= 0xf0ff;
252: set_value |= bit_value << 8;
253: break;
254: case THREE: //当前设定位是最高位
255: set_value &= 0x0fff;
256: set_value |= bit_value << 12;
257: break;
258: default: //出错
259: break;
260: }
261: display_data[TWO] = set_value;
262: }
263: }else if(TMR1IF ){ //检测闪烁时间是否已到
264: // 每隔0.1秒向上位机发送实时数据
265: realtime = Hex_Bcd(Count_Force(ptr,Adc_Adverage(object)));
266: send_buffer[0] = '*';
267: send_buffer[1] = (unsigned char)(realtime >> 12 & 0x0f) + '0';
268: send_buffer[2] = (unsigned char)(realtime >> 8 & 0x0f) + '0';
269: send_buffer[3] = (unsigned char)(realtime >> 4 & 0x0f) + '0';
270: send_buffer[4] = (unsigned char)(realtime & 0x0f) + '0';
271: send_buffer[5] = '#';
272: Send_Computer(send_buffer, 6); // 向上位机送数
273:
274: Init_Tmr1(); //更新TMR1设定
275: i++; //时间参数加1
276: if(i >= 3){
277: // display_data[object] = Hex_Bcd(Count_Force(ptr,Adc_Adverage(object))); //算出当前制动力
278: display_data[object] = realtime;
279: Display(display_data,DISPLAY_SIZE); //开显示
280: i = 0; //时间已到,时间参数复位
281: flicker ^= 0x1; //标志位取反
282: if(!flicker){
283: display_data[TWO] = set_value; //显示设定值
284: }else{
285: temp = set_value;
286: switch(current_bit){
287: case ZER0: //当前设定位是最低位
288: temp &= 0xfff0;
289: temp |= 0xe;
290: break;
291: case ONE: //当前设定位是次低位
292: temp &= 0xff0f;
293: temp |= 0xe0;
294: break;
295: case TWO: //当前设定位是次高位
296: temp &= 0xf0ff;
297: temp |= 0xe00;
298: break;
299: case THREE: //当前设定位是最高位
300: temp &= 0x0fff;
301: temp |= 0xe000;
302: break;
303: default: //出错
304: break;
305: }
306: display_data[TWO] = temp; //显示屏蔽掉当前位的设定值
307: }
308: }
309: }
310: }
311: }
312:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -