智能车源程序.docx

上传人:b****4 文档编号:3707849 上传时间:2022-11-24 格式:DOCX 页数:47 大小:25.78KB
下载 相关 举报
智能车源程序.docx_第1页
第1页 / 共47页
智能车源程序.docx_第2页
第2页 / 共47页
智能车源程序.docx_第3页
第3页 / 共47页
智能车源程序.docx_第4页
第4页 / 共47页
智能车源程序.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

智能车源程序.docx

《智能车源程序.docx》由会员分享,可在线阅读,更多相关《智能车源程序.docx(47页珍藏版)》请在冰豆网上搜索。

智能车源程序.docx

智能车源程序

#include/*commondefinesandmacros*/

#include/*derivativeinformation*/

#include"math.h"

#pragmaLINK_INFODERIVATIVE"mc9s12xs128"

/*********************DEFINE************************/

#defineWHITE50

#defineBLACK40

#defineKD0

#defineEnableSCIReIntSCI0CR2|=0x20

#defineDisableSCIReIntSCI0CR2&=0xDF

#defineRTI_SWITCH_ONCRGINT_RTIE=1

#defineRTI_SWITCH_OFFCRGINT_RTIE=0

#defineIC_SWITCH_ONTSCR1_TEN=1

#defineIC_SWITCH_OFFTSCR1_TEN=0

//-----------------definekey---------------------//

#defineKEY_RUN_OR_LCDPORTK_PK0

#defineKEY_START_RUNPORTA_PA1

#defineKEY_UPPORTA_PA2

#defineKEY_DOWNPORTA_PA3

#defineKEY_ENTERPORTA_PA4

//-----------------partoflcd---------------------//

#defineLINE10

#defineLINE21

#defineLINE1_HEAD0x80

#defineLINE2_HEAD0xC0

#defineDATA_MODE0x38//8bitdatatransmissionmode,doubleline

#defineCLR0x01

#defineBUSY0x80//LCDBusyTag

#defineCURSOR_RESET0x02

#defineINPUTMODE_CUR_R0x06

#defineINPUTMODE_CUR_L0x04

#defineINPUTMODE_ALL_E0x05

#defineINPUTMODE_ALL_D0x04

#defineSCREEN_OPEN0x0C

#defineSCREEN_OPEN_CUR0x02

#defineSCREEN_OPEN_FLASH0x01

#defineSCSHIFT_CUR_L0x10//ScreenorCursorshift

#defineSCSHIFT_CUR_R0x14

#defineSCSHIFT_SCR_L0x18

#defineSCSHIFT_SCR_R0x1C

//-----------------definelcdpins--------------------//

#defineRSPORTA_PA5//DataCommandPin1data0command

#defineRWPORTA_PA6//ReadWritePin1read0write

#defineENPORTA_PA7//LCDEnableSignal

#defineLCD_DATAPTH

#defineLCD_DATA_DIRDDRH

#defineLCD_DIR_IN0x00

#defineLCD_DIR_OUT0xff

/*********************END************************/

/***************HARDWAREINITFUNDECLARE******************/

voiduart_init(void);

externvoiduart_PutChar(unsignedchar);

unsignedcharTERMIO_GetChar(void);

voidprintp(char*,...);

voidCPU_Init(void);

voidIO_Init(void);

voidSciTx(unsignedchartext);

charSciRx(void);

voidRTI_Init(void);

voidIC_Init(void);

voidOC7_Init(void);

voidPTI0_Init(void);

voidPWM_Init(void);

voidAD_Init(void);

//-----------------partoflcd---------------------//

voidLcdCommand(unsignedcharcommand,unsignedcharBusyC);

voidLcdData(unsignedchartemp,unsignedcharBusyC);

voidLcdInit(void);

unsignedcharReadStatus(void);

voidGotoXY(unsignedcharx,unsignedchary);

voidPrint(unsignedchar*str);

voidLcd_Print_Str(unsignedcharx,unsignedchary,char*s);

voidLcd_Print_Int(unsignedcharx,unsignedchary,unsignedintdata);

voidLcd_Print_Char(unsignedcharx,unsignedchary,unsignedchardata);

voidLcd_Print_uChar(unsignedcharx,unsignedchary,chardata);

/*********************END************************/

/***************SOFTWAREFUNDECLARE******************/

voidlight_flip(void);

voidAD_DATA_HIGHT(void);

voidAD_DATA_LOW(void);

voidVOL_Normaliz(void);

voiderr_calculate_hight(void);

voiderr_calculate_low(void);

signedintPID(void);

voidkey_scan_deal(void);

voidLCD_DISPLAY(void);

uinterr_Std(void);

voidcheck_line(void);

voidLcdDelay(bytek);

voidDly_ms(intms);

voiddelay(unsignedintref);

/*********************END************************/

/*********************DEFINEVAR************************/

//---------------sensordatavar-----------------//

ucharTHRESHOLD_black=40;

ucharmax_vol[9],min_vol[9]={255,255,255,255,255,255,255,255,255};

ucharWHITE_MIN=240,WHITE_MAX=250;

ucharpercent[9],data[9],det_vol[9],flip_data[9];

scharerr[100],err_e[3];

ucharL_times=130;

byteflip=0,max_num_p=0;

//---------------sensor_2datavar-----------------//

uchardata_2[5],THRESHOLD_2=200,flip_data_2[5],err_e2[3];

//-----------------speedvar---------------------//

byteload_bit=0;

ucharpluse_1=0,pluse_2=0,get_speed=0,set_speed=30,now_speed=0;

ucharMAX_SPEED=30;

//-----------------checkvar--------------------//

uintcheck_pluse=0;

ucharstart_line=0,stop=0,stop_delay=0,slope_time=0,slope_timing=0;

bytecheck=0,check_bit=0,line_num=0,triangle_status=0,slope_bit=0,black_bit=0;

//------------------key&lcdvar----------------------//

bytekey_r_o_l=0,lcd_print=1;

ucharmenu=1,menu_option=1,bits=0;

//-----------------calcvar---------------------//

ucharKP=8,period_1=0,period_2=0;

charstd_err[10];

inttemp_std;

/*********************END************************/

voidmain()

{

DisableInterrupts;

CPU_Init();

IO_Init();

uart_init();

//EnableSCIReInt;

LcdInit();

PWM_Init();

AD_Init();

VOL_Normaliz();

Dly_ms(3000);

Dly_ms(2000);

RTI_Init();

IC_Init();

for(;;)

{

EnableInterrupts;

//err_calculate_hight();

key_scan_deal();

}

}

//--------------------------------------------------------------

//HARDWAREFUNSTART

//--------------------------------------------------------------

voidCPU_Init()

{

CLKSEL=0X00;

PLLCTL_PLLON=1;

REFDV=0x01;//BUS_CLOCK=40M

SYNR=0x04;

_asm(nop);

_asm(nop);

while(!

(CRGFLG_LOCK==1));

CLKSEL_PLLSEL=0x01;

FCLKDIV=0x0F;//FlashClockDivideFactor40M/16=?

M

}

voidSciTx(unsignedchartext)

{

unsignedchartemp;

temp=SCI0SR1;/*clearflag*/

while(!

(SCI0SR1&0x80));/*waitforoutputbufferempty*/

SCI0DRH=0;

SCI0DRL=text;

}

charSciRx(void)

{

unsignedcharresult,temp;

temp=SCI0SR1;/*clearflag*/

while(!

(SCI0SR1&0x20));

result=SCI0DRL;

returnresult;

}

voidRTI_Init()

{

RTICTL=0b10010011;//0010000=2*10^3,10010011=8*10^3=0.5ms,10001111=16*10^3=1ms,11000111=160x10^3=10ms,11101111=1.6*10^6=100ms

//CRGINT_RTIE=1;

}

voidIC_Init(){

DisableInterrupts;

TIOS_IOS0=0;//channel0inputcapture

TCTL4_EDG0B=1;

TCTL4_EDG0A=1;

TIE_C0I=1;//channel0interruptenable

TSCR2=0x03;//TIMEclock=40M/8=0.2us

TFLG1=0xFF;

TFLG2=0x80;

//TSCR1_TEN=1;//Timerenable

EnableInterrupts;

}

voidOC7_Init()

{

TSCR2_TCRE=1;

TSCR2_PR=0;

TIOS_IOS7=1;

TC7=0x5dc0;//24000,1ms

TCTL1=0x00;

TIE_C7I=1;

TSCR1_TEN=1;

}

/*

voidPTI0_Init()

{

PITCFLMT=0x00;

PITCE_PCE0=1;

PITMUX_PMUX0=0;

PITMTLD0=0x01;

PITLD0=0x0001;//2x2x25ns=1us;

PITINTE_PINTE0=1;

PITCFLMT_PITE=1;

}

*/

voidPWM_Init()

{

PWME=0xaa;//enablec_1,c_3,c_5,c_7

PWMPOL=0xaa;

PWMCAE=0X00;

PWMCTL=0xf0;//com0&12&34&5

PWMPRCLK=0x00;

PWMCLK_PCLK1=1;//0&1---SA

PWMSCLA=0x04;//SA=5M

PWMPER01=50000;//舵机:

5000000/50000=100Hz;

PWMDTY01=7100;

PWMPER23=5000;//电机:

24000000/12000=2000Hz;24000000/2400=10000Hz;40000000/5000=8000Hz

PWMDTY23=2500;

PWMPER45=5000;

PWMDTY45=2500;

}

voidAD_Init()

{

//[3:

0]---WRAP

//ATD0CTL0=0x00;

//7---ETRIGSEL,[6:

5]---ResolutionSelect,4---Discharge,[3:

0]---ExternalTriggerChannelSelect

ATD0CTL1=0x00;

//6---AFFC;5---ICLKSTP;[4:

3]---ExternalTriggerEdge/Polarity;2---ETRIGE;

//1---ASCIE,SequenceCompleteInterruptEnable;0---ACMPIE,CompareInterruptEnable

ATD0CTL2=0x40;

//7---DJM,DataJustification;[6:

3]---S8C,S4C,S2C,S1C,SequenceLength;2---FIFO;

//[1:

0]---BackgroundDebugFreezeEnable;

ATD0CTL3=0x98;

//[7:

5]---SMP,SampleTimeSelect;[4:

0]---PRS,fATDCLK=fBUS/2/(PRS+1)

ATD0CTL4=0x01;

//6---SC5,SpecialChannelConversion;5---SCAN,ContinuousConversionSequenceMode

//4---MULT,Multi-ChannelSampleMode;[3:

0]---AnalogInputChannelSelectCodeCD,CC,CB,CA

//ATD0CTL5=0x01;

//ATD0CMPE_CMPE0=1;

//ATD0CMPHT_CMPHT0=0;//>AD0

//ATD0DR0L=0x000f;

ATD0DIEN=0x00;

}

voidIO_Init(){

//SENSOR

DDRB=0xff;

PORTB=0x00;

DDRA=0x01;

PORTA_PA0=0;

//KEYDEFINE

DDRK_DDRK0=0;

DDRA_DDRA1=0;

DDRA_DDRA2=0;

DDRA_DDRA3=0;

DDRA_DDRA4=0;

DDRK_DDRK1=0;

DDRK_DDRK2=0;

DDRK_DDRK3=0;

//LCDCONTORL

DDRA_DDRA5=1;

DDRA_DDRA6=1;

DDRA_DDRA7=1;

//LED

DDRK_DDRK4=1;

DDRK_DDRK5=1;

PORTK_PK4=0;

PORTK_PK5=0;

//sensor_2

DDRK_DDRK7=1;

PORTK_PK7=0;

}

voidDly_ms(intms)

{

intii,jj;

if(ms<1)ms=1;

for(ii=0;ii

for(jj=0;jj<2670;jj++);//busclk:

16MHz--1ms

}

voiddelay(unsignedintref){

uintkk;

for(kk=0;kk

asmnop;

}

}

/************************LCDdrivestart*************************/

voidLcdInit(){

LCD_DATA_DIR=LCD_DIR_OUT;

LcdDelay(21);

LcdCommand(DATA_MODE,1);//set8bitdatatransmissionmode

LcdDelay(7);

LcdCommand(DATA_MODE,1);//set8bitdatatransmissionmode

LcdDelay(7);

LcdCommand(DATA_MODE,1);//set8bitdatatransmissionmode

LcdCommand(CLR,0);//clearscreen

LcdCommand(DATA_MODE,1);//set8bitdatatransmissionmode

LcdCommand(INPUTMODE_CUR_R|INPUTMODE_ALL_D,1);//cursorright,disablemoving

LcdCommand(SCREEN_OPEN,1);//opendisplay(enablelcddisplay)

LcdCommand(LINE1_HEAD,1);//setlcdfirstdisplayaddress

LcdCommand(CLR,1);//clearscreen

}

unsignedcharReadStatus(void)

{

unsignedcharcRtn;

LCD_DATA_DIR=LCD_DIR_IN;

RS=0;

RW=1;

EN=0;

delay(500);

EN=1;

while(LCD_DATA&BUSY);//TestBusyState

cRtn=LCD_DATA_DIR;//ifNotsavetheportvalue,itshouldbechange

LCD_DATA_DIR=LCD_DIR_OUT;

return(cRtn);

}

voidLcdCommand(unsignedcharcommand,unsignedcharBusyC){

if(BusyC)

ReadStatus();//Testitbusyornot

LCD_DATA=command;

RS=0;

RW=0;

EN=0;

delay(500);

EN=1;

}

voidLcdData(unsignedchardat,unsignedcharBusyC)

{

if(BusyC)

ReadStatus();//Testitbusyornot

LCD_DATA=dat;

RS=1;

RW=0;

EN=0;

delay(500);

EN=1;

}

voidLcdDelay(bytek){//k=7=5ms

uinti,j;

for(i=0;i

for(j=0;j<4780;j++);

}

voidGotoXY(unsignedcharx,unsignedchary){

unsignedcharaddress;

if(y==LINE1)

address=LINE1_HEAD+x;

else

address=LINE2_HEAD+x;

LcdCommand(addres

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1