📄 dema.lst
字号:
1: /*******************************************************************************************
2: * 对标定函数的说明:
3: * 1 与标定操作有关的按键: "WEIGH_DEMA","FORCE_DEMA"
4: * "ESC","ENSURE","MOVE","ADD_ONE"
5: * 2 进入标定的条件: "WEIGH_DEMA"或"FORCE_DEMA"按下超过5秒钟
6: *******************************************************************************************/
7: #include <pic.h> //包含系统头文件
8: #include "total.h" //包含项目头文件
9:
10: ////////////////////////////////////////////////////////////////////////////////////////////
11: void Send_C(bank3 unsigned char *ptr,unsigned char number)
12: {
13: for (;number > 0; number--){
14: while(TRMT == 0){
15: ; //等待发送器为空
16: }
17: TXREG = *(ptr++); //将要发送的数据装载到发数寄存器中
18: }
19: }
20:
21: /*******************************************************************************************
22: * 最近修改日期: 05-4-14
23: * 修改原因: 更改算法
24: * 修改人: 饶阳胜
25: * 说明: 1 这种方法不好,是死循环
26: /*******************************************************************************************
27: * 函数名称: void Froce_Dema_Release(void)
28: * 功能: 确认标键全部被松开
29: * 入口参数: 无
30: * 出口参数: 无
31: * 全局变量: 无
32: * 调用模块: 无
33: * 设计者: 饶阳胜
34: * 日期: 05/3/4
35: * 说明:
36: *******************************************************************************************/
37: void Dema_Release()
38: {
39: while(1){
40: while(1){
41: if(ESC & MOVE & ENSURE & ADD_ONE & WEIGH_DEMA & FORCE_DEMA) break; //判断 标定、移位、确认、加1按键全部松开
42: }
43: Delay(D_SHAKE_H, D_SHAKE_L); //去抖动延时
44: if(ESC & MOVE & ENSURE & ADD_ONE & WEIGH_DEMA & FORCE_DEMA) break; //判断 标定、移位、确认、加1按键全部松开
45: }
46: }
47:
48: /*******************************************************************************************
49: * 最近修改日期: 05-4-1
50: * 修改原因: 增加可移植性
51: * 修改人: 饶阳胜
52: /*******************************************************************************************
53: * 函数名称: void Clear_Zero(unsigned char SideSelect)
54: * 功能: 校正0点
55: * 入口参数: *ptr 指向标定对象的指针
56: * ad_change 当前0点的AD值
57: * 出口参数: 无
58: * 全局变量: 无
59: * 调用模块: 无
60: * 设计者: 饶阳胜
61: * 日期: 05/3/17
62: * 说明: ptr指针指向的第一个对象是:标定的点数
63: * ----------二-------:标定点的AD值
64: * ----------三-------:标定点的力值
65: * 后面依次类推
66: *******************************************************************************************/
67: void Clear_Zero(unsigned short *ptr,unsigned short ad_change)
68: {
69: unsigned char i,j;
70:
71: ad_change -= ptr[1]; //现在0点 - 原来的0点
72: for(i = 0,j = 1; i <= ptr[0]; i++,j += 2){ //对所有的标定进行调整
73: ptr[j] += ad_change; //更新标定点的AD值
74: }
75: }
76:
77: /*******************************************************************************************
78: * 最近修改日期: 05-4-1
79: * 修改原因: 简化代码
80: * 修改人: 饶阳胜
81: /*******************************************************************************************
82: * 函数名称: unsigned char Dema(void)
83: * 功能: 标定
84: * 入口参数:
85: * 出口参数: 无
86: * 全局变量:
87: * 调用模块:
88: * 设计者: 饶阳胜
89: * 日期: 05-3-4
90: * 说明: 1 轴重标定时,当前轴重在第0显示窗口显示
91: * 制动力标定时,当前制动力值在第1个显示窗口显示
92: ********************************************************************************************
93: * 修 改 人: 饶阳胜
94: * 日 期: 06-3-16
95: * 原 因: 增加实时发送数据,加在进入标定后.
96: *******************************************************************************************/
97: unsigned char Dema(short *ptr,unsigned char object,unsigned char address)
98: {
99: unsigned char i;
100: unsigned short set_value; //制动力设定值
101: unsigned char bit_value; //当前位的设定值
102: unsigned char current_bit; //当前的操作位
103: static bit flicker; //利用此标志位,来实现当前设定位闪烁显示
104: unsigned short temp;
105: unsigned char point_number; //标定点数
106: unsigned short realtime; //
107:
108: display_data[0] = 0xFFFF;
109: display_data[1] = 0xFFFF;
110: display_data[2] = 0xFFFF;
111: Display(display_data,DISPLAY_SIZE); //所有显示变为"----",提示已进入轴重标定状态
112: Dema_Release(); //等待按键松开
113:
114: if(object == WEIGH)
115: display_weigh = 2; //打开显示轴重标识
116:
117: //依据标定对象的不同,关闭相关的显示
118: display_data[TWO] = 0xeeee;
119: display_data[object ^ 0x01] = 0xeeee;
120:
121: i = 0;
122: Init_Tmr1();
123: //进入制动力正式标定前的功能选项
124: while(1){
125: if(TMR1IF){
126: Init_Tmr1();
127: ++i;
128: if(i >= 3){
129: i = 0;
130: display_data[object] = Hex_Bcd(Count_Force(ptr,Adc_Adverage(object))); //算出当前制动力
131:
132: if(object == WEIGH){
133: send_buffer[0] = 0xf1;
134: }else{
135: send_buffer[0] = 0xf2;
136: }
137: send_buffer[1] = display_data[object] >> 8;
138: send_buffer[2] = display_data[object];
139: send_buffer[3] = 0xf3;
140: Send_Computer(send_buffer,4); //向上位机送果
141:
142: Display(display_data,DISPLAY_SIZE); //显示当前制动力
143: }
144: }
145: if(!ESC){ //标定键按下
146: Delay(D_SHAKE_H,D_SHAKE_L); //去抖动延时
147: if(!ESC){ //标定键确实被按下
148: Dema_Release(); //等待按键被松开
149:
150: //不知道是什么原因,如果只调用一次,写入的第一个字节的数据会出错,找不到原因
151: //不得已,调用了两次写EEPROM函数
152: My_Write(ptr,DEMA_POINT_SIZE,address);
153: My_Write(ptr,DEMA_POINT_SIZE,address); //将制动力标定数据写到EEPROM中
154: Normal_Display();
155: return FALSE; //标定返回
156: }
157: }else if(!ENSURE){ //确认键按下
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -