📄 motortrig.c
字号:
/**********************************************************************************************
* File: motor_trig.c
* 功能: 摩托制动/称重仪表主程
* 设计者: 饶阳胜
* 日期: 05/2/27
**********************************************************************************************/
#include <pic.h> //包含系统头文件
#include "total.h" //包含项目头文件
/**********************************************************************************************
* 最后修改日期: 05-4-29
* 修改原因: 简化代码,添加注释
* 修改人: 饶阳胜
/**********************************************************************************************
* 函数名称: void Check(void)
* 功能: 检测轴重标定,力标定按键有没有按下
* 入口参数: 无
* 出口参数:
* 全局变量: display_weigh 轮重显示
* dema_weigh 轮重标定数据
* dema_force 制动力标定数据
*
* 调用模块: Init_Tmr1() TMR1初始化函数
* Dema() 标定函数
*
* 设计者: 饶阳胜
* 日期: 05-4-4
* 说明: 1 按键是低电平有效,如:WEIGH_DEMA,FORCE_DEMA
* 2 按键要被按住不放5秒钟,有效
**********************************************************************************************/
void Check_Key()
{
unsigned char i;
//检测轴重标定按键
if(!WEIGH_DEMA){
Init_Tmr1(); //初始化TMR1,用它来设定5秒钟定时
for(i = 0; i < 50; i++){
while(!TMR1IF) //检测TMR1溢出标志
if(WEIGH_DEMA) return; //如果"WEIGH_DMEA"键被松开,退出
Init_Tmr1();
}
Dema(dema_weigh,WEIGH,WEIGH_ADDRESS); //调用标定函数
display_weigh = 0; //关闭显示轴重标识
}else if(!FORCE_DEMA){
//检测制动力标定按键
Init_Tmr1(); //初始化TMR1,用它来设定5秒钟定时
for(i = 0; i < 50; i++){
while(!TMR1IF) //检测TMR1溢出标志
if(FORCE_DEMA) return; //如果"WEIGH_DMEA"键被松开,退出
Init_Tmr1();
}
Dema(dema_force,FORCE,FORCE_ADDRESS); //调用标定函数
}
}
/***************************************************************************************************
* File: interrupt.c
* 功能: 中断函数
* 入口参数: 接收到上位机的命令
* 出口参数: 无
* 全局变量: command 接收到的命令
* 调用模块: 无
* 设计者: 饶阳胜
* 日期: 05-4-29
* 说明: 只使用了接收中断
***************************************************************************************************/
void interrupt rc_int(void)
{
if(RCIF){ //如果有接收数据
command = RCREG; //将数据送到command中
}
RCIF = FALSE; //清接收中断标志
switch (command){
/*
case 0x03: //接收到的是检测前轮轮重命令
weigh_side = 0;
break;
case 0x04: //接收到的是检测后轮轮重命令
weigh_side = 1;
break;
*/
default:
break;
}
}
/**********************************************************************************************
* 最后修改时间: 05-4-29
* 修改原因: 添加注释
* 修改人: 饶阳胜
/**********************************************************************************************
* 函数名称: void main(void)
* 功能: 系统主函数
* 入口参数: 系统上电
* 出口参数: 无
* 全局变量: display_data 显示数组
* dema_force 制动力标定数据
* dema_weigh 轮重标定数据
* command 上位机命令
* display_weigh 显示轮重
*
* 调用模块: System_Init() 系统初始化函数
* Delay() 软件延时函数
* Display() 显示函数
* My_Read() 读取EEPROM函数
* Normal_Display() 正常显示函数
* Init_Tmr1() TMR1初始化函数
* Check_Key() 查按键函数
* Count_Force() 计算函数
* Measure_Weigh() 检测轮重函数
* Measure_Trig() 检测制动力函数
* Clear_Zer0 清0函数
*
* 设计者: 饶阳胜
* 日期: 05-2-28
* 说明: 有关系统流程,请参看流程图
***********************************************************************************************/
void main(void)
{
unsigned short current_AD; //当前AD值
unsigned short current_weigh; //当前轮重
unsigned char i;
unsigned char times; //时间计数
System_Init(); //系统初始化
display_data[0] = 0x8888;
display_data[1] = 0x8888;
display_data[2] = 0x8888;
Display(display_data,THREE); //检测笔段显示
Delay(1800,500); //延时5秒
My_Read(dema_force,DEMA_POINT_SIZE,FORCE_ADDRESS); //读入制动力标定数据
My_Read(dema_weigh,DEMA_POINT_SIZE,WEIGH_ADDRESS); //读入轴重标定数据
Normal_Display(); //显示正常态
Init_Tmr1();
Clear_Zero(dema_weigh, Adc_Adverage(WEIGH)); //调用清0函数
while(1){
Check_Key(); //标定处理
if(Count_Force(dema_weigh, Adc_Adverage(WEIGH)) > 100){ //判断轴重是否大于10Kg
di(); //取上位机命令,取之前关中断,取后开中断
i = command;
ei();
if(i != NO_WEIGH){ //是否有无需检测命令
display_weigh = 1; //显示轴重全局变量为1
Measure_Weigh(); //检测轴重
display_weigh = 0;
}
}
if(!ARRIVE){
// 前轮检测踏板有效
di(); //取上位机命令,取之前关中断,取后开中断
i = command;
ei();
if(i != NO_TRIG) //是否有无需检测命令
Measure_Trig(FRONT); //检测前轮制动
}
if(!BACK_ARRIVE){
// 后轮检测踏板有效
di();
i = command;
ei();
if(i != NO_TRIG)
Measure_Trig(BACK); //检测后轮制动
}
if(TMR1IF){
Init_Tmr1();
++times;
if(times > 5){
times = 0; //刷新时间
current_AD = Adc_Adverage(WEIGH);
if(current_AD < dema_weigh[1])
{
current_AD = dema_weigh[1] + (dema_weigh[1] - current_AD);
}
current_weigh = Count_Force(dema_weigh, current_AD);
if((current_weigh > 0) && (current_weigh <= 2)) //当前轮重小于0.1Kg,调整0点
Clear_Zero(dema_weigh, current_AD); //调用清0函数
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -