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

📄 jac-ets.c

📁 pic16c73 MAPLAB C语言写的汽车集控器程序
💻 C
📖 第 1 页 / 共 3 页
字号:
	/*********************************************
 example program for PIC download develop board
 16F877A @3.6864MHz
 test portd 8led
 www.mcufan.com
*********************************************/
#include <pic.h>

//#include	<pic16f7x.h>
typedef    unsigned char   uchar  ;        
//#define    TMR1_H          0X4c
//#define    TMR1_L          0X00
#define    TMR1_H          0X3c
#define    TMR1_L          0Xb0
#define    POUR_WATER_TIME1  13
#define    POUR_WATER_TIME3  60
#define    RAIN_STOP_TIME    40
#define    KEY_DELAY         50
#define    LOCK_TIME         10
#define    STORE_TIME        10
#define    FLASH_TIME        10
#define    WARN_ON_TIME      10   //0.5s
#define    WARN_OFF_TIME     10   //0.5s
#define    WARN_ON_TIME2      20   //1s
#define    WARN_ON_TIME3      540  //27s
#define    WARN_OFF_TIME3     200  //10s
#define    FLASH_ON_TIME      10   //0.5s
#define    FLASH_OFF_TIME     10   //0.5s
#define    FLASH_ON_TIME2      20  //1s
#define    FLASH_ON_TIME3      540 //27s
#define    FLASH_OFF_TIME3     200 //10s
#define    DELAY_30S           600 //30s
#define    STORE_WARN_DELAY_TIME  40
#define    ONE_SECOND        20
//============输入开关信号定义
bit            left_door_sw,right_door_sw,back_door_sw;
bit            back_store_sw;
bit            back_remove_fro_sw;
bit            engineer_sw;
bit            back_door_state_sw;
bit            rain_jx_sw,rain_water_sw,rain_rst_sw;
bit            left_door_state_sw,right_door_state_sw;
bit            safe_belt_sw;
bit            warn_door_sw;
bit            fore_fro_sw,back_fro_sw;
bit            light_sw,little_light_sw;
bit            on_sw,start_sw;
bit            srs_sw;
bit            charge_sw;
bit            null_sw;
bit            sd_sw;
//============//中间标志
uchar          OutPut1,OutPut2;
bit            door_open_flag;
bit  b;
bit            onkey_flag;
//bit            fore_door_sw_flag;
bit            light_key_flag;
unsigned char  light_key_timer;

bit            left_door_state_sw_flag,right_door_state_sw_flag;
bit            lock_out,unlock_out;
unsigned char  lock_out_t,unlock_out_t;
bit            all_door_lock_flag;
//unsigned char  all_door_unlock_t;
bit            speed_over_40km_flag;
unsigned char  speed_over_40km_t;
bit            on_sw_flag2;

bit            remove_fro_flag,remove_fro_sw_flag;
unsigned int   remove_fro_timer;

bit            back_fro_out,back_fro_sw_flag;
unsigned char  brake_sw;
bit            sound_flag;
unsigned char  sound_timer;

unsigned char  rain_sw_1;
bit            rain_water_sw_flag,rain_jx_sw_flag,rain_water_sw_begin,rain_work_flag;
bit            rain_circle3_flag,rain_circle1_flag;
bit            rain_1,rain_2;
unsigned char  rain_timer,water_sw_time,RstPointRain,rain_water_sw_time;
unsigned char  rain_water_sw_t,rain_jx_sw_t;

bit            left_door_sw_flag;
bit            safe_belt_sw_flag,onkey_safe_belt_flag;
bit            safe_belt_sound,safe_belt_led;
unsigned char  safe_belt_sound_t,safe_belt_led_t;
unsigned char  safe_belt_sound_c,safe_belt_led_c;

unsigned char  driver_door_sw;
bit            power_windows_out,onkey_windows_flag;
unsigned int   power_windows_t;

unsigned char  key_in_sw;
bit            chime_bell_flag;
unsigned char  chime_bell_t;
unsigned char rain_rst_flag;
bank1 unsigned int   speedtimer1,timer1h,timer1l;
bank1 unsigned char   extcount;
bank1 unsigned char   speedresult;
bank1 unsigned char speed_cleartime;
bank1 const unsigned char jxdelaytime[]={220,210,200,190,180,170,160,150,140,130,120,110,100,90,80,70,60,50,40,30,20};
bank1 unsigned char jxtime;
bank1 unsigned char speed_last;
bank1 unsigned char thief_warning;
bank1 unsigned char accident_flash,avertthief_flash;
bank1 unsigned char warningflash_time,warningstop_time,flashtime;
bank1 unsigned char frist_run,warning_time,key_warn;
bank1 unsigned char sos_state,warning_state,ulock_flag;
//===========尾灯自动关闭控制
//unsigned char  tail_light_sw;
bit            tail_light_sw_flag,tail_left_door_sw_flag;
bit            tail_light_out,tail_light_auto_off_flag;
bit            remote_onkey_flag;
unsigned char  tail_light_out_t;

bit            tx_lock_signal,tx_ulock_signal;
bit            tx_lock_flag;
//bit            lock_ctrl,ulock_ctrl;
//unsigned char  lock_time;
bit            warn_state,lock_state,flash_on;
unsigned char  flash_cycle,flash_time;
bit            entrance_sw,entrance_sw_flag;
bit            warn_on,start_inhibit_relay,actuator;
bit            warn_door,onkey_warn_flag;
unsigned int   warn_time;
unsigned char  warn_cycle;
bit            entrance_flag,warn_entrance_flag,delay_ent_warn_flag;
bit             on_sw_flag3;
unsigned int    delay_time_30s;
bit            tx_store_signal,tx_store_flag;
bit            store_state_sw,tx_store_out;
bit            store_out,store_state_sw_flag;
bit            store_uwarn_flag,tx_open_store_flag;
unsigned char  store_out_t,store_warn_delay_time;
unsigned char count_loop;
bank1 unsigned char  testtime,testdat;
//float  xx;         
void CCP1INIT(void);
void  interrupt Time0_int(void);
void time0_init(void);
void time1_init(void);
void safe_belt_led_ctrl(void);
void safe_belt_sound_ctrl(void);
void safe_belt_init_ctrl(void);
void write_74hc595(unsigned char d);
unsigned char Sort_Port_Bit(uchar d0,uchar d1,uchar d2,uchar d3,
                            uchar d4,uchar d5,uchar d6,uchar d7);
void exint0_init(void);

#define 	PORTBIT(adr,bit)  ((unsigned)(&adr)*8+(bit))	/*绝对寻址位操作指令*/
  //=================*/
//static    bit   I31_RB3  @ PORTBIT(PORTB,0);
static    bit   RCLK_595 @ PORTBIT(PORTB,1);
static    bit   SER_595  @ PORTBIT(PORTB,2);
static    bit   SRCLK_595@ PORTBIT(PORTB,3);
static    bit   K4_RB4   @ PORTBIT(PORTB,4);
static    bit   K3_RB5   @ PORTBIT(PORTB,5);
static    bit   K2_RB6   @ PORTBIT(PORTB,6);
static    bit   K1_RB7   @ PORTBIT(PORTB,7);

static    bit   I37_RC0  @ PORTBIT(PORTC,0);
static    bit   JO1_RC1  @ PORTBIT(PORTC,1);
static    bit   JO2_RC2  @ PORTBIT(PORTC,2);
static    bit   JO3_RC3  @ PORTBIT(PORTC,3);
static    bit   JO4_RC4  @ PORTBIT(PORTC,4);
static    bit   JO5_RC5  @ PORTBIT(PORTC,5);
static    bit   B_RC6    @ PORTBIT(PORTC,6);

static    bit   SD_RA0   @ PORTBIT(PORTA,0);
static    bit   I32_RA1  @ PORTBIT(PORTA,1);
static    bit   I33_RA2  @ PORTBIT(PORTA,2);
static    bit   I34_RA3  @ PORTBIT(PORTA,3);
static    bit   I35_RA4  @ PORTBIT(PORTA,4);
static    bit   I36_RA5  @ PORTBIT(PORTA,5);

__CONFIG(WDTDIS & HS & PWRTDIS & BORDIS);

main()
{ 
  
  //=================*/
 	TRISB=0xF1;
 	TRISC=0xC1;
    RBPU=0;		
	TRISA=0xff;
    ADCON1|=0X06;  //I/O
    CCP1INIT();
    
 	T2CON=0X04;		//打开TMR2,且使其前分频为1,
    time1_init();
    time0_init();
    exint0_init();
    GIE=1;
    testdat=0;
    extcount=0;
    flashtime=10;
//    speed_jx=0;
	while(1)
	{
//============//开关采集OK
     JO5_RC5=0;
     JO4_RC4=0;
     JO3_RC3=0;
     left_door_sw=!I37_RC0;  //左门开关
     rain_jx_sw=!I36_RA5;    //雨刮器间歇开关
     light_sw=!I35_RA4;      //照明开关
     JO5_RC5=1;
     JO4_RC4=0;
     JO3_RC3=0;
     back_store_sw=!I37_RC0; //后仓开关
     fore_fro_sw=!I36_RA5;   //前雾开关
     safe_belt_sw=!I35_RA4;  //安全带开关
     JO5_RC5=0;
     JO4_RC4=1;
     JO3_RC3=0;
     back_door_sw=!I37_RC0; //后门开关
     back_fro_sw=!I36_RA5;  //后雾开关
     rain_rst_sw=!I35_RA4;  //雨刮器延时开关
     JO5_RC5=1;
     JO4_RC4=1;
     JO3_RC3=0;
     right_door_sw=!I37_RC0;   //右门开关
     little_light_sw=!I36_RA5; //小灯开关 //左门闩
     JO5_RC5=0;
     JO4_RC4=0;
     JO3_RC3=1;
     back_remove_fro_sw=!I37_RC0; //后除霜开关
     left_door_state_sw=!I36_RA5; //左门闩
     JO5_RC5=1;
     JO4_RC4=0;
     JO3_RC3=1;
     back_door_state_sw=!I37_RC0; //后门闩
     warn_door_sw=I36_RA5;       //门警开关
     JO5_RC5=0;
     JO4_RC4=1;
     JO3_RC3=1;
    // null_sw=!I37_RC0;
     rain_water_sw=!I36_RA5; //洗涤开关
     JO5_RC5=1;
     JO4_RC4=1;
     JO3_RC3=1;
     engineer_sw=!I37_RC0;  //发动机盖
     right_door_state_sw=!I36_RA5; //右门闩

     charge_sw=!I32_RA1;  //转换开关
     start_sw=!I34_RA3;      //点火开关
     on_sw=!I33_RA2;    //
     sd_sw=!SD_RA0;
     srs_sw=!B_RC6;
//============输出控制OK
     JO1_RC1=1;
     OutPut1=Sort_Port_Bit(
                  (uchar)store_out,  //O8--led8
                  (uchar)unlock_out, //O6--led1
                  (uchar)tail_light_out,    //O5--led3
                  (uchar)power_windows_out, //O4--led2
                  (uchar)lock_out,      //O3--led4
                  (uchar)safe_belt_led,   //O2--led5
                  (uchar)remove_fro_flag, //O1--led6
                   null_sw   //NULL
                );
     OutPut2=Sort_Port_Bit(
                  (uchar)safe_belt_sound||chime_bell_flag, //O9--bell
                  //(uchar)chime_bell_flag,
                  (uchar)warn_on||thief_warning,  //O13--led11
                  (uchar)rain_1,  //O12--led10
                  (uchar)back_fro_out,   //O11--led9
                  (uchar)light_key_flag||key_warn, //O10--led7
                  (uchar)start_inhibit_relay||accident_flash, //O14--led12
                  (uchar)flash_on||avertthief_flash,  //O15--led13
                  0//NULL
                );

     write_74hc595(OutPut1);
     write_74hc595(OutPut2);
     RCLK_595=0;
     testdat<<=1;    //延时
     RCLK_595=1;
//===========速度处理

//if(secspeed_time==0)
{

speed_last=0;
speed_last=speedresult/5;
if(speedresult>100)
{
speed_last=20;
}
jxtime=jxdelaytime[speed_last];
}

//=========第一次上电报警
    if((frist_run==0)||sos_state)
      {
       warning_state=0xff;
      }
    else
      {
       warning_state=0x00;
       }
   if(warning_state)
     {
        thief_warning=0xff;
        key_warn=0xff;
        
       if(flashtime>0)
        {
          if((warningflash_time==0)&&(warningstop_time==0))
          {
            accident_flash=!accident_flash;
            avertthief_flash=!avertthief_flash;
            warningflash_time=5;
            flashtime--;
           }
        }
       else
       {
          warning_time++;
          warningstop_time=30;
          warningflash_time=5;
          flashtime=10;
          accident_flash=0;
          avertthief_flash=0;
       } 
      if(chime_bell_t==0)
         {
            chime_bell_t=9;//0.45s
            chime_bell_flag=!chime_bell_flag;
         } 
      if(warning_time>8)
        {
         frist_run=0xff;
         }
    }
  else
   {
      accident_flash=0;
      avertthief_flash=0;
      thief_warning=0;
      key_warn=0;
      chime_bell_t=0;
      chime_bell_flag=0;
    }

//=========雨刮器处理OK
     rain_work_flag=rain_water_sw|rain_jx_sw;
     if(!rain_work_flag)
	     rain_timer=0;
     if(rain_water_sw)
       {
          rain_water_sw_flag=1;
          rain_water_sw_begin=1;
          if(rain_water_sw_t>=12) //雨刮开关打开超过0.6s
           { 
              rain_circle3_flag=1;
              rain_circle1_flag=0;
           }
          if(water_sw_time!=0)
           {
              rain_water_sw_t=0;
           }
      }
     else
       {
          if((rain_water_sw_t>4)&&(rain_water_sw_t<=12))
           {
             rain_circle1_flag=1;
             rain_circle3_flag=0;
           }
          rain_water_sw_flag=0;
          rain_water_sw_begin=0;
          rain_water_sw_t=0;
       }
/////////////

      if(on_sw)
      {
        
         if(rain_jx_sw)
           {
	         if(rain_timer==0)
	           {
	             if(!rain_1)
	  	            RstPointRain=150; //为了让电机离开复位点
                 rain_1=1;
	           }
	       }
	     else 
           {
              if(rain_circle1_flag) 
                {
                  water_sw_time=POUR_WATER_TIME1;//雨刮电机执行一周停止工作
	              rain_1=1;
                  rain_circle1_flag=0;
	            }
              if(rain_circle3_flag) 
                {
                  water_sw_time=POUR_WATER_TIME3;//雨刮电机执行后2.5s~3.8s停止工作
	              rain_1=1;
                  rain_circle3_flag=0;
	            }
	       }
       }
//=======复位点处理
     if(on_sw)
       {
         if(!rain_rst_sw)//复位点开关(复位点处开关断开)
           {
             if((!rain_work_flag)&&(water_sw_time==0))
               {
                 rain_1=0;
                 rain_water_sw_time=0;
               }
             /*else if((rain_jx_sw)&&(RstPointRain==0))
               {
  	             rain_1=0;
                 RstPointRain=RAIN_STOP_TIME+50;
	             rain_timer=RAIN_STOP_TIME;		
               }*/
           }
         else
           {
            rain_rst_flag=1;
            //RstPointRain=0;;//不在复位点处
            rain_timer=jxtime;
            //rain_timer=11*20;
            rain_1=0;
           }
       }
     else
       {
         rain_water_sw_time=0;
         RstPointRain=0;
         if(!rain_rst_sw)//复位点开关(复位点处开关断开)
            rain_1=0;
       } 
 //=========除雾处理OK
    if(charge_sw)
      {
         if(back_remove_fro_sw)
          {
            if(!remove_fro_sw_flag)
             {
                remove_fro_sw_flag=1;
                if(remove_fro_flag)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -