⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motortrig.lst

📁 这个是汽车制动台控制程序的C语言版本. 用于实际产品中.单片机用的是PIC16F877A.
💻 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 + -