📄 motortrig.lst
字号:
1: /**********************************************************************************************
2: * File: motor_trig.c
3: * 功能: 摩托制动/称重仪表主程
4: * 设计者: 饶阳胜
5: * 日期: 05/2/27
6: **********************************************************************************************/
7: #include <pic.h> //包含系统头文件
8: #include "total.h" //包含项目头文件
9:
10: /**********************************************************************************************
11: * 最后修改日期: 05-4-29
12: * 修改原因: 简化代码,添加注释
13: * 修改人: 饶阳胜
14: /**********************************************************************************************
15: * 函数名称: void Check(void)
16: * 功能: 检测轴重标定,力标定按键有没有按下
17: * 入口参数: 无
18: * 出口参数:
19: * 全局变量: display_weigh 轮重显示
20: * dema_weigh 轮重标定数据
21: * dema_force 制动力标定数据
22: *
23: * 调用模块: Init_Tmr1() TMR1初始化函数
24: * Dema() 标定函数
25: *
26: * 设计者: 饶阳胜
27: * 日期: 05-4-4
28: * 说明: 1 按键是低电平有效,如:WEIGH_DEMA,FORCE_DEMA
29: * 2 按键要被按住不放5秒钟,有效
30: **********************************************************************************************/
31: void Check_Key()
32: {
33: unsigned char i;
34:
35: //检测轴重标定按键
36: if(!WEIGH_DEMA){
37: Init_Tmr1(); //初始化TMR1,用它来设定5秒钟定时
38: for(i = 0; i < 50; i++){
39: while(!TMR1IF) //检测TMR1溢出标志
40: if(WEIGH_DEMA) return; //如果"WEIGH_DMEA"键被松开,退出
41: Init_Tmr1();
42: }
43: Dema(dema_weigh,WEIGH,WEIGH_ADDRESS); //调用标定函数
44: display_weigh = 0; //关闭显示轴重标识
45: }else if(!FORCE_DEMA){
46: //检测制动力标定按键
47: Init_Tmr1(); //初始化TMR1,用它来设定5秒钟定时
48: for(i = 0; i < 50; i++){
49: while(!TMR1IF) //检测TMR1溢出标志
50: if(FORCE_DEMA) return; //如果"WEIGH_DMEA"键被松开,退出
51: Init_Tmr1();
52: }
53: Dema(dema_force,FORCE,FORCE_ADDRESS); //调用标定函数
54: }
55: }
56:
57: /***************************************************************************************************
58: * File: interrupt.c
59: * 功能: 中断函数
60: * 入口参数: 接收到上位机的命令
61: * 出口参数: 无
62: * 全局变量: command 接收到的命令
63: * 调用模块: 无
64: * 设计者: 饶阳胜
65: * 日期: 05-4-29
66: * 说明: 只使用了接收中断
67: ***************************************************************************************************/
68: void interrupt rc_int(void)
69: {
70: if(RCIF){ //如果有接收数据
71: command = RCREG; //将数据送到command中
72: }
73: RCIF = FALSE; //清接收中断标志
74: switch (command){
75: /*
76: case 0x03: //接收到的是检测前轮轮重命令
77: weigh_side = 0;
78: break;
79: case 0x04: //接收到的是检测后轮轮重命令
80: weigh_side = 1;
81: break;
82: */
83: default:
84: break;
85: }
86: }
87:
88: /**********************************************************************************************
89: * 最后修改时间: 05-4-29
90: * 修改原因: 添加注释
91: * 修改人: 饶阳胜
92: /**********************************************************************************************
93: * 函数名称: void main(void)
94: * 功能: 系统主函数
95: * 入口参数: 系统上电
96: * 出口参数: 无
97: * 全局变量: display_data 显示数组
98: * dema_force 制动力标定数据
99: * dema_weigh 轮重标定数据
100: * command 上位机命令
101: * display_weigh 显示轮重
102: *
103: * 调用模块: System_Init() 系统初始化函数
104: * Delay() 软件延时函数
105: * Display() 显示函数
106: * My_Read() 读取EEPROM函数
107: * Normal_Display() 正常显示函数
108: * Init_Tmr1() TMR1初始化函数
109: * Check_Key() 查按键函数
110: * Count_Force() 计算函数
111: * Measure_Weigh() 检测轮重函数
112: * Measure_Trig() 检测制动力函数
113: * Clear_Zer0 清0函数
114: *
115: * 设计者: 饶阳胜
116: * 日期: 05-2-28
117: * 说明: 有关系统流程,请参看流程图
118: ***********************************************************************************************/
119: void main(void)
120: {
121: unsigned short current_AD; //当前AD值
122: unsigned short current_weigh; //当前轮重
123: unsigned char i;
124: unsigned char times; //时间计数
125:
126: System_Init(); //系统初始化
127: display_data[0] = 0x8888;
128: display_data[1] = 0x8888;
129: display_data[2] = 0x8888;
130: Display(display_data,THREE); //检测笔段显示
131: Delay(1800,500); //延时5秒
132: My_Read(dema_force,DEMA_POINT_SIZE,FORCE_ADDRESS); //读入制动力标定数据
133: My_Read(dema_weigh,DEMA_POINT_SIZE,WEIGH_ADDRESS); //读入轴重标定数据
134: Normal_Display(); //显示正常态
135: Init_Tmr1();
136: Clear_Zero(dema_weigh, Adc_Adverage(WEIGH)); //调用清0函数
137: while(1){
138: Check_Key(); //标定处理
139: if(Count_Force(dema_weigh, Adc_Adverage(WEIGH)) > 100){ //判断轴重是否大于10Kg
140: di(); //取上位机命令,取之前关中断,取后开中断
141: i = command;
142: ei();
143: if(i != NO_WEIGH){ //是否有无需检测命令
144: display_weigh = 1; //显示轴重全局变量为1
145: Measure_Weigh(); //检测轴重
146: display_weigh = 0;
147: }
148: }
149: if(!ARRIVE){
150: // 前轮检测踏板有效
151: di(); //取上位机命令,取之前关中断,取后开中断
152: i = command;
153: ei();
154: if(i != NO_TRIG) //是否有无需检测命令
155: Measure_Trig(FRONT); //检测前轮制动
156: }
157: if(!BACK_ARRIVE){
158: // 后轮检测踏板有效
159: di();
160: i = command;
161: ei();
162: if(i != NO_TRIG)
163: Measure_Trig(BACK); //检测后轮制动
164: }
165: if(TMR1IF){
166: Init_Tmr1();
167: ++times;
168: if(times > 5){
169: times = 0; //刷新时间
170: current_AD = Adc_Adverage(WEIGH);
171: if(current_AD < dema_weigh[1])
172: {
173: current_AD = dema_weigh[1] + (dema_weigh[1] - current_AD);
174: }
175: current_weigh = Count_Force(dema_weigh, current_AD);
176: if((current_weigh > 0) && (current_weigh <= 2)) //当前轮重小于0.1Kg,调整0点
177: Clear_Zero(dema_weigh, current_AD); //调用清0函数
178: }
179: }
180: }
181: }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -