📄 jac-ets.c
字号:
/*********************************************
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 + -