📄 main.c
字号:
#include <hidef.h> /* for EnableInterrupts macro */
#include <MC68HC908GR16.h> /* include peripheral declarations */
#include "SPI.h"
#include "type.h"
#include "mirror.h"
#include "VSCI.h"
#include "seatmotor.h"
#include"fault_diagnose.h"
#define buzzer PTC_PTC6
#define red_led PTA_PTA7 //红灯亮,指示控制器处于工作状态;红灯灭,控制器处于休眠状态
#define green_led PTA_PTA6 //故障指示灯
#define speed_signal PTB_PTB5
#define slide_forward_begun 1
#define slide_forward 2
#define slide_backward_begun 3
#define slide_backward 4
#define slide_stopped 5
#define back_counterclockwise_begun 6
#define back_counterclockwise 7
#define back_clockwise_begun 8
#define back_clockwise 9
#define back_stopped 10
#define front_up_begun 11
#define front_up 12
#define front_down_begun 13
#define front_down 14
#define front_stopped 15
#define rear_up_begun 16
#define rear_up 17
#define rear_down_begun 18
#define rear_down 19
#define rear_stopped 20
#define recall1 21
#define recall2 22
#define recall3 23
#define handed_recall1 24
#define handed_recall2 25
#define handed_recall3 26
#define memory1_wait3S 27
#define memory1_ready 28
#define memory2_wait3S 29
#define memory2_ready 30
#define memory3_wait3S 31
#define memory3_ready 32
#define left_mirror_left_begun 33
#define left_mirror_left 34
#define left_mirror_right_begun 35
#define left_mirror_right 36
#define left_mirror_up_begun 37
#define left_mirror_up 38
#define left_mirror_down_begun 39
#define left_mirror_down 40
#define left_mirror_stopped 41
#define right_mirror_left_begun 42
#define right_mirror_left 43
#define right_mirror_right_begun 44
#define right_mirror_right 45
#define right_mirror_up_begun 46
#define right_mirror_up 47
#define right_mirror_down_begun 48
#define right_mirror_down 49
#define right_mirror_stopped 50
#define reverse_recall 51
#define wait_for_show 52
#define show_error 53
#define themflag 0x80
#define intflag 0x40
#define slide_forward_flag 0x01
#define slide_backward_flag 0x02
#define front_up_flag 0x04
#define front_down_flag 0x08
#define rear_up_flag 0x10
#define rear_down_flag 0x20
#define back_clockwise_flag 0x40
#define back_counterclockwise_flag 0x80
#define set 0x01
#define key1 0x02
#define key2 0x04
#define key3 0x08
#define door 0x10
#define autoflag 0x20
#define reverse 0x20
#define park 0x40
#define ignition 0x40
#define mirror_right 0x02
#define mirror_left 0x01
#define mirror_up 0x04
#define mirror_down 0x08
#define left_right_flag 0x10
Bool door_closed;
Bool ignition_on;
Bool auto_on;
Bool set_on;
Bool key1_on;
Bool key2_on;
Bool key3_on;
Bool slide_forward_on;
Bool slide_backward_on;
Bool back_counterclockwise_on;
Bool back_clockwise_on;
Bool front_up_on;
Bool front_down_on;
Bool rear_up_on;
Bool rear_down_on;
Bool reverse_on;
Bool park_on;
Bool right_mirror;
Bool mirror_right_on;
Bool mirror_left_on;
Bool mirror_up_on;
Bool mirror_down_on;
UINT8 switchstatus[6];
UINT8 seat_status=0;
UINT8 timer_counter;
UINT8 left_mirror_x;
UINT8 left_mirror_y;
UINT8 right_mirror_x;
UINT8 right_mirror_y;
UINT8 left_mirror_recall1_x@0x0100=0x70;
UINT8 left_mirror_recall1_y@0x0101=0x70;
UINT8 right_mirror_recall1_x@0x0102=0x70;
UINT8 right_mirror_recall1_y@0x0103=0x70;
UINT8 left_mirror_recall2_x@0x0104=0x70;
UINT8 left_mirror_recall2_y@0x0105=0x70;
UINT8 right_mirror_recall2_x@0x0106=0x70;
UINT8 right_mirror_recall2_y@0x0107=0x70;
UINT8 left_mirror_recall3_x@0x0108=0x70;
UINT8 left_mirror_recall3_y@0x0109=0x70;
UINT8 right_mirror_recall3_x@0x010A=0x70;
UINT8 right_mirror_recall3_y@0x010B=0x70;
UINT8 left_mirror_reverse1_x@0x010C=0x70;
UINT8 left_mirror_reverse1_y@0x010D=0x70;
UINT8 right_mirror_reverse1_x@0x010E=0x70;
UINT8 right_mirror_reverse1_y@0x010F=0x70;
UINT8 left_mirror_reverse2_x@0x0110=0x70;
UINT8 left_mirror_reverse2_y@0x0111=0x70;
UINT8 right_mirror_reverse2_x@0x0112=0x70;
UINT8 right_mirror_reverse2_y@0x0113=0x70;
UINT8 left_mirror_reverse3_x@0x0114=0x70;
UINT8 left_mirror_reverse3_y@0x0115=0x70;
UINT8 right_mirror_reverse3_x@0x0116=0x70;
UINT8 right_mirror_reverse3_y@0x0117=0x70;
UINT8 mirror_position@0x0118=0;
UINT8 push_times@0x0119=0;
UINT8 tens_digit=0;
UINT8 number=0;
UINT8 delay_time=0;
Bool inter_time_flag=0;
Bool tens_flag=0;
void main(void) {
Bool flag1=0;
Bool flag2=0;
Bool flag3=0;
Bool flag4=0;
Bool flag5=0;
Bool flag6=0;
Bool flag7=0;
Bool flag8=0;
Bool flag9=0;
Bool flag10=0;
Bool flag11=0;
Bool flag12=0;
Bool flag13=0;
Bool flag14=0;
Bool flag15=0;
Bool flag16=0;
Bool flag17=0;
Bool flag18=0;
Bool previous_state;
UINT16 slide_recall1_position;
UINT16 back_recall1_position;
UINT16 front_recall1_position;
UINT16 rear_recall1_position;
UINT16 slide_recall2_position;
UINT16 back_recall2_position;
UINT16 front_recall2_position;
UINT16 rear_recall2_position;
UINT16 slide_recall3_position;
UINT16 back_recall3_position;
UINT16 front_recall3_position;
UINT16 rear_recall3_position;
CONFIG1=0x03;
CONFIG2=0x03;
PCTL_PLLON=0;
PBWC_AUTO=1;
PCTL_VPR0=0;
PCTL_VPR1=1;
PMSH=0x02;
PMSL=0x58;
PMRS=0x80;
PMDS=0x01;
PCTL_PLLON=1;
PCTL_BCS=1;
TBCR_TBR0=0;
TBCR_TBR1=0;
TBCR_TBR2=0;
TBCR_TBIE=1;
ADCLK=0x54;
ADR=0x00;
ADSCR=0x43;
T2SC_TRST=1;
T2SC0=0x4C;
T2MODH=0x02;
T2MODL=0x00;
red_led=0;
green_led=0;
DDRA_DDRA7=1;
DDRA_DDRA6=1;
PTC=0;
DDRC=0xff;
VTX=1;
DDRB_DDRB6=1;
DDRE_DDRE2=1;
DDRE_DDRE3=1;
DDRE_DDRE4=1;
SPIinit();
SPI33689(0x1F);
red_led=1;
SPI33972(0x09,0x00,0x00,0x09,0x00,0x00);
SPI33972(0x0A,0x00,0x00,0x0A,0x00,0x00);
SPI33972(0x04,0x00,0x00,0x04,0x00,0x00);
SPI33972(0x05,0x00,0x00,0x05,0x00,0x00);
SPI33972(0x01,0x00,0xfe,0x01,0x00,0xff);
INTKBSCR_MODEK=1;
INTSCR_IMASK=1;
INTKBIER_KBIE2=1;
INTKBSCR_ACKK=1;
INTSCR_IMASK=0;
EnableInterrupts;
LIN_Init();
//初始化开始
slide_motor_move_forward();
while(!margin_position_reached()){ //等待滑动电机滑到最前端边缘位置
if(motor_circuit_fault()){
slide_motor_fault=1; //滑动电机电路发生故障
break;
}
}
slide_motor_stop();
if(!slide_motor_fault){
slide_current_position=0xff; //标定滑动方向最前端边缘位置
slide_motor_move_backward();
while(!margin_position_reached()){ //等待滑动电机滑到最后端边缘位置
if(motor_circuit_fault()){
slide_motor_fault=1; //滑动电机电路出现故障
break;
} else {
slide_sensor_check();
}
if(slide_sensor_fault) break; //滑动电机的传感器电路发生故障
}
slide_motor_stop();
if((!slide_motor_fault)&&(!slide_sensor_fault)){
slide_backward_margin_position=slide_current_position; //标定滑动方向最后端边缘位置
}
}
back_motor_move_clockwise();
while(!margin_position_reached()){ //等待后背电机顺时针移动到边缘位置
if(motor_circuit_fault()){
back_motor_fault=1; //后背电机电路出现故障
break;
}
}
back_motor_stop();
if(!back_motor_fault){
back_current_position=0xff; //标定座椅顺时针方向的最边缘位置
back_motor_move_counterclockwise();
while(!margin_position_reached()){ //等待后背电机逆时针移动到最边缘位置
if(motor_circuit_fault()){
back_motor_fault=1; //后背电机电路出现故障
break;
} else {
back_sensor_check();
}
if(back_sensor_fault) break; //后背电机的传感器电路发生故障
}
back_motor_stop();
if((!back_motor_fault)&&(!back_sensor_fault)){
back_counterclockwise_margin_position=back_current_position; //标定座椅后背逆时针方向的最边缘位置
}
}
front_motor_move_down();
while(!margin_position_reached()){ //等待座椅前部电机移动到最上端边缘位置
if(motor_circuit_fault()){
front_motor_fault=1; //前部电机电路出现故障
break;
}
}
front_motor_stop();
if(!front_motor_fault){
front_current_position=0x00ff; //标定座椅前部最下端边缘位置
front_motor_move_up();
while(!margin_position_reached()){ //等待座椅前部电机移动到最下端边缘位置
if(motor_circuit_fault()){
front_motor_fault=1; //前部电机电路出现故障
break;
} else {
front_sensor_check();
}
if(front_sensor_fault) break; //前部电机的传感器电路发生故障
}
front_motor_stop();
if((!front_motor_fault)&&(!front_sensor_fault)){
front_up_margin_position=front_current_position; //标定座椅前部最上端边缘位置
}
}
rear_motor_move_down();
while(!margin_position_reached()){ //等待座椅后端电机滑到最上端边缘位置
if(motor_circuit_fault()){
rear_motor_fault=1; //座椅后端电机电路出现故障
break;
}
}
rear_motor_stop();
if(!rear_motor_fault){
rear_current_position=0x00ff; //标定座椅后部的最下端边缘位置
rear_motor_move_up();
while(!margin_position_reached()){ //等待后部电机移动到最下端边缘位置
if(motor_circuit_fault()){
rear_motor_fault=1;//后部电机电路出现故障
break;
} else {
rear_sensor_check();
}
if(rear_sensor_fault) break; //后部电机的传感器电路发生故障
}
rear_motor_stop();
if((!rear_motor_fault)&&(!rear_sensor_fault)){
rear_up_margin_position=rear_current_position; //标定后部最上端边缘位置
}
}
recall(slide_backward_margin_position*1/2,back_counterclockwise_margin_position*3/4,front_up_margin_position*1/2,rear_up_margin_position*1/2,0x70,0x70,0x70,0x70);
//设置记忆位置的缺省值
slide_recall1_position=slide_backward_margin_position*1/2;
back_recall1_position=back_counterclockwise_margin_position*3/4;
front_recall1_position=front_up_margin_position*1/2;
rear_recall1_position=rear_up_margin_position*1/2;
slide_recall2_position=slide_backward_margin_position*1/2;
back_recall2_position=back_counterclockwise_margin_position*3/4;
front_recall2_position=front_up_margin_position*1/2;
rear_recall2_position=rear_up_margin_position*1/2;
slide_recall3_position=slide_backward_margin_position*1/2;
back_recall3_position=back_counterclockwise_margin_position*3/4;
front_recall3_position=front_up_margin_position*1/2;
rear_recall3_position=rear_up_margin_position*1/2;
for(;;){
switch(seat_status)
{
case slide_forward_begun:
red_led=1;
slide_motor_move_forward();
seat_status=slide_forward;
break;
case slide_forward:
if(margin_position_reached()||(slide_motor_fault=motor_circuit_fault())){
seat_status=slide_stopped; break;
}
if(!slide_forward_on){
if(!auto_on||speed_signal==1){
flag1=0;
flag2=0;
seat_status=slide_stopped;
}else if(flag2){
flag2=0;
seat_status=slide_stopped;
}else{
flag1=1;
}
}else if(flag1){
flag1=0;
flag2=1;
}
break;
case slide_backward_begun:
red_led=1;
slide_motor_move_backward();
seat_status=slide_backward;
break;
case slide_backward:
if(margin_position_reached()||(slide_motor_fault=motor_circuit_fault())){
seat_status=slide_stopped; break;
}
if(!slide_backward_on){
if(!auto_on||speed_signal==1){
flag3=0;
flag4=0;
seat_status=slide_stopped;
}else if(flag4){
flag4=0;
seat_status=slide_stopped;
}else{
flag3=1;
}
}else if(flag3){
flag3=0;
flag4=1;
}
break;
case slide_stopped:
slide_motor_stop();
seat_status=none;
break;
case back_counterclockwise_begun:
red_led=1;
back_motor_move_counterclockwise();
seat_status=back_counterclockwise;
break;
case back_counterclockwise:
if(margin_position_reached()||(back_motor_fault=motor_circuit_fault())){
seat_status=back_stopped; break;
}
if(!back_counterclockwise_on){
if(!auto_on||speed_signal==1){
flag5=0;
flag6=0;
seat_status=back_stopped;
}else if(flag6){
flag6=0;
seat_status=back_stopped;
}else{
flag5=1;
}
}else if(flag5){
flag5=0;
flag6=1;
}
break;
case back_clockwise_begun:
red_led=1;
back_motor_move_clockwise();
seat_status=back_clockwise;
break;
case back_clockwise:
if(margin_position_reached()||(back_motor_fault=motor_circuit_fault())){
seat_status=back_stopped; break;
}
if(!back_clockwise_on){
if(!auto_on||speed_signal==1){
flag7=0;
flag8=0;
seat_status=back_stopped;
}else if(flag8){
flag8=0;
seat_status=back_stopped;
}else{
flag7=1;
}
}else if(flag7){
flag7=0;
flag8=1;
}
break;
case back_stopped:
back_motor_stop();
seat_status=none;
break;
case front_up_begun:
red_led=1;
front_motor_move_up();
seat_status=front_up;
break;
case front_up:
if(margin_position_reached()||(front_motor_fault=motor_circuit_fault())){
seat_status=front_stopped; break;
}
if(!front_up_on){
if(!auto_on||speed_signal==1){
flag9=0;
flag10=0;
seat_status=front_stopped;
}else if(flag10){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -