📄 measure.lst
字号:
1: /******************************************************************************************
2: * 此函数用于检测轴重与制动力
3: ******************************************************************************************/
4: #include <pic.h> //包含系统头文件
5: #include "total.h" //包含项目头文件
6:
7: const unsigned char command_table[3] = {0x03, 0x02, 0x01};
8: /******************************************************************************************
9: * 最后修改日期: 05-4-30
10: * 修改原因: 添加注释
11: * 修改人: 饶阳胜
12: /******************************************************************************************
13: * 函数名称: unsigned char Measure_Weign(void)
14: * 功能: 轮重检测
15: * 入口参数: 无
16: * 出口参数: 无
17: * 全局变量: f_motor_weigh 前轮重
18: * b_motor_weigh 后轮重
19: * weigh_side 轮标识
20: * display_weigh 轴重标识
21: * display_data[] 显示数组
22: * send_buffer[] 发送数据数组
23: *
24: * 调用模块: Init_Tmr1(); 初始化TMR1函数
25: * Count_Force(); 计算函数
26: * Display(); 显示函数
27: * Send_Computer(); 向上位机发送数据函数
28: * Hex_Bcd(); 16进制数转BCD码函数
29: * di(); 关中断函数
30: * ei(); 开中断函数
31: *
32: * 设计者: 饶阳胜
33: * 日期: 05-3-4
34: * 说明: 1 检测前轮时,在第0个窗口显示
35: * 检测后轮时,在第1个窗口显示
36: * 2 要显示小数点
37: *******************************************************************************************/
38: unsigned char Measure_Weigh(void)
39: {
40: unsigned char i;
41: unsigned short temp_weigh; //轮重的临时变量
42:
43: if(!(weigh_side & 0x01)){
44: f_motor_weigh = 0; // 前轮重清0
45: b_motor_weigh = 0; // 后轮重清0
46: display_data[1] = 0; // 第1显示窗口清0
47: }
48: Init_Tmr1();
49: for(i = 0; i < 100; i++){ //要连续10S钟超过10Kg
50: while(!TMR1IF){
51: if((temp_weigh = Count_Force(dema_weigh,Adc_Adverage(WEIGH))) < 100)
52: {
53: display_data[weigh_side] = 0;
54: display_data[2] = display_data[0] + display_data[1];
55: Display(display_data,DISPLAY_SIZE); //显示
56: return;
57: }
58: if(!weigh_side ) //是前轮
59: f_motor_weigh = temp_weigh; //取前轮重
60: else //是后轮
61: b_motor_weigh = temp_weigh; //取后轮重
62: display_data[weigh_side] = Hex_Bcd(temp_weigh);
63: display_data[2] = Hex_Bcd(f_motor_weigh + b_motor_weigh); //第2个显示窗口显示总重
64: }
65: Init_Tmr1();
66: if(!(i % 2))
67: Display(display_data,DISPLAY_SIZE); //显示
68: }
69: Display(display_data,DISPLAY_SIZE); //显示最终结果
70: send_buffer[0] = 0xFE;
71: if(!weigh_side){
72: send_buffer[1] = 0xAA;
73: }else{
74: send_buffer[1] = 0xBB;
75: }
76: send_buffer[2] = display_data[weigh_side] >> 8;
77: send_buffer[3] = display_data[weigh_side];
78: send_buffer[4] = 0xED;
79: Send_Computer(send_buffer,5); //向上位机送果
80: LIGHT = 1; //制动灯亮,提示称重完成
81: SelectDisplay273();
82: while(Count_Force(dema_weigh,Adc_Adverage(WEIGH)) >= 50); //等待车辆离台(轮重小于5Kg)
83: LIGHT = 0; //制动灯灭
84: SelectDisplay273();
85: di(); //关中断,用于调整标志
86: weigh_side ^= 0x01; //处理前后轮
87: ei(); //开中断
88: Delay(1000,500);
89: }
90:
91: /******************************************************************************************
92: * 函数名称: unsigned char Measure_Trig()
93: * 功能: 制动检测
94: * 入口参数:
95: * 出口参数:
96: * 全局变量:
97: * 调用模块: Init_Tmr1() TMR1初始化函数
98: * SelectDisplay273() 选通输出函数
99: * Delay() 延时函数
100: *
101: *
102: * 设计者: 饶阳胜
103: * 日期: 05-4-20
104: * 说明: 1 检测前轮制动力时,在第0个窗口显示
105: * 检测后轮制动力时,在第1个窗口显示
106: *******************************************************************************************/
107: unsigned char Measure_Trig(unsigned char side)
108: {
109: unsigned char i;
110: short temp_force; //力的临时变量
111:
112: for(i = 0; i < 5; i++){ //到位信号要保持0.5秒钟
113: Init_Tmr1();
114: do{
115: if(side == FRONT){
116: if(ARRIVE) return;
117: }
118: else{
119: if(BACK_ARRIVE) return;
120: }
121: }while(!TMR1IF);
122: }
123: send_buffer[0] = 0xcc;
124: Send_Computer(send_buffer,1);
125: LOCK = 1; //松锁
126: SelectDisplay273();
127: Delay(1080,500); //延时5秒
128: LOCK = 0;
129: MOTOR = 1; //启动电机
130: SelectDisplay273();
131: Delay(720,500); //延时2S
132: if(side == FRONT){
133: f_trig_force = 0;
134: b_trig_force = 0;
135: display_data[1] = 0;
136: // 如果当前检的是前轮,则前轮和后轮的制动力清0
137: }
138: LIGHT = 1; //制动灯亮
139: SelectDisplay273();
140: Init_Tmr1();
141: for(i = 0; i < 200; i++){ //采制动力,15S
142: while(!TMR1IF){
143: temp_force = Count_Force(dema_force,Adc_Adverage(FORCE));
144: // 算当前制动力
145: if(side == FRONT){ //存储最大制动力
146: if(temp_force > f_trig_force)
147: f_trig_force = temp_force;
148: }else{
149: if(temp_force > b_trig_force)
150: b_trig_force = temp_force;
151: }
152: display_data[side] = Hex_Bcd(temp_force); // 当前轮的制动力
153: display_data[2] = Hex_Bcd(f_trig_force + b_trig_force); // 制动和(最大和)
154: }
155: Init_Tmr1();
156: if(!(i % 2))
157: Display(display_data,DISPLAY_SIZE); //显示实时制动力
158: }
159: display_data[0] = Hex_Bcd(f_trig_force); //取最大制动力显示
160: display_data[1] = Hex_Bcd(b_trig_force);
161: Display(display_data,DISPLAY_SIZE); //显示
162: send_buffer[0] = 0xff;
163: if(side == FRONT){
164: send_buffer[1] = 0xAA;
165: }else{
166: send_buffer[1] = 0xBB;
167: }
168: send_buffer[2] = display_data[side] >> 8;
169: send_buffer[3] = display_data[side];
170: send_buffer[4] = 0xee;
171: Send_Computer(send_buffer,5); //向上位机送结果
172: // 送检测结果,数据序列如下: FF -- XX XX EE
173: LIGHT = 0; //制动灯灭
174: MOTOR = 0; //电机关
175: BACK_CLOSE = 1; //后夹动作
176: SelectDisplay273();
177: Delay(540,500); //延时3秒
178: BACK_CLOSE = 0;
179: SelectDisplay273();
180:
181: while(1){ //等待到位信号无效
182: while(1){
183: if(ARRIVE & BACK_ARRIVE)
184: break;
185: }
186: Delay(D_SHAKE_H,D_SHAKE_L);
187: if(ARRIVE & BACK_ARRIVE)
188: break;
189: }
190: }
191:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -