飞思卡尔智能车程序汇总_第1页
飞思卡尔智能车程序汇总_第2页
飞思卡尔智能车程序汇总_第3页
飞思卡尔智能车程序汇总_第4页
飞思卡尔智能车程序汇总_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.流水灯程序:#include /* common defines and macros */#include derivative.h /* derivative-specific definitions */void delay(unsigned int ms) unsigned int i;unsigned char j;for(i=0;ims;i+) for(j=0;j100;j+);void main(void) /* put your own code here */EnableInterrupts;DDRA=0x00;DDRB_DDRB0=1;for(;) delay(2500

2、0); PORTB_PB0=1; delay(25000); PORTB_PB0=0; 2.液晶屏按键程序#include /* common defines and macros */#include derivative.h /* derivative-specific definitions */#include lcd5110.h#include 24c02.h#include button.hvoid delay(unsigned int ms) unsigned int i;unsigned char j;for(i=0;ims;i+) for(j=0;j100;j+);/*倍频*

3、/void vPLLInit(void) unsigned char refdv;refdv=3;CLKSEL=0X00;/disengage PLL to systemPLLCTL_PLLON=1;/turn on PLLSYNR =0xc0 | (80/(refdv+1)-1); REFDV=0x40 | refdv; POSTDIV=0x00; /pllclock=2*osc*(1+SYNR)/(1+REFDV)=160MHz;_asm(nop); /BUS CLOCK=80M_asm(nop);while(!(CRGFLG_LOCK=1); /when pll is steady ,t

4、hen use it;CLKSEL_PLLSEL =1; /engage PLL to system; /*倍频*/void main(void) /* put your own code here */ unsigned char i; unsigned char setnum12; unsigned char cur_sel; const char lcd_show124=MID0,LEF0,RIG0,Kp 0,Kd 0,K1 0,K2 0,STP0,MAX0,MIN0,HTM0,HTX0;vPLLInit();lcd_init();init_24c02();init_btn();/ En

5、ableInterrupts; for(i=0;i12;i+)setnumi=RdEEPROM(i); /读取24c02 for(i=0;i12;i+) /显示初值 disply_listchar(i/6)*42,i%6,lcd_showi,1); disply_number(i/6)*42+16,i%6,setnumi,5); if(btn_change() cur_sel=0;for(i=0;i11)cur_sel=0;for(i=0;i12;i+) disply_listchar(i/6)*42,i%6,lcd_showi,(cur_sel=i)?0:1);if(btn_sav() fo

6、r(i=0;i12;i+)WrEEPROM(i,setnumi); disply_listchar(0,0, SMART CAR ,1); disply_listchar(0,1, SAVE OK ,1); disply_listchar(0,2,=,1); disply_listchar(0,3, TURN POWER OFF ,1); disply_listchar(0,4,=,1); disply_listchar(0,5, ,1); while(1); DDRA=0x00;DDRB_DDRB0=1;for(;) delay(setnum0*100); PO

7、RTB_PB0=1; delay(setnum1*100); PORTB_PB0=0; 3.电机程序#include /* common defines and macros */#include derivative.h /* derivative-specific definitions */#include lcd5110.h#include 24c02.h#include button.h#define servo_period 20 /ms#define motor_pwm_frequ 1 /khz void delay(unsigned int ms) unsigned int i

8、;unsigned char j;for(i=0;ims;i+) for(j=0;j100;j+);/*倍频*/void vPLLInit(void) unsigned char refdv;refdv=3;CLKSEL=0X00;/disengage PLL to systemPLLCTL_PLLON=1;/turn on PLLSYNR =0xc0 | (80/(refdv+1)-1); REFDV=0x40 | refdv; POSTDIV=0x00; /pllclock=2*osc*(1+SYNR)/(1+REFDV)=160MHz;_asm(nop); /BUS CLOCK=80M_

9、asm(nop);while(!(CRGFLG_LOCK=1); /when pll is steady ,then use it;CLKSEL_PLLSEL =1; /engage PLL to system; /*倍频*/* PWM初始化*/void Init_PWMout(void)PWME = 0x00; /禁止输出PWMPOL = 0xff;/极性寄存器,1 先输出高电平 后为低电平 0 先输出低电平 后为高电平PWMCTL = 0xf0; /01 23 45 67 通道级联PWMPRCLK=0x55; /Clock A=Bus Clock/32 ; Clock B=Bus Cloc

10、k/32;PWMCLK=0b; /选择clock:7B,6B,5A,4A,3B,2B,1A,0APWME = 0xaa; /pp1,pp3,pp5,pp7口输出PWMPER67 = 80/4*125/motor_pwm_frequ; PWMPER45 = 80/4*125/motor_pwm_frequ;PWMPER23 = 80/4*servo_period*125; PWMPER01 = 80/4*servo_period*125; PWMDTY67 =0;PWMDTY45 =0;PWMDTY23 =0;PWMDTY01 =0;void main(void) /* put your own

11、 code here */ unsigned char i; unsigned char setnum12; unsigned char cur_sel; const char lcd_show124=MID0,LEF0,RIG0,Kp 0,Kd 0,K1 0,K2 0,STP0,MAX0,MIN0,HTM0,HTX0;vPLLInit();lcd_init();init_24c02();init_btn(); Init_PWMout();EnableInterrupts; for(i=0;i12;i+)setnumi=RdEEPROM(i); /读取24c02 for(i=0;i12;i+)

12、 /显示初值 disply_listchar(i/6)*42,i%6,lcd_showi,1); disply_number(i/6)*42+16,i%6,setnumi,5); if(btn_change() cur_sel=0;for(i=0;i11)cur_sel=0;for(i=0;i12;i+) disply_listchar(i/6)*42,i%6,lcd_showi,(cur_sel=i)?0:1);if(btn_sav() for(i=0;i12;i+)WrEEPROM(i,setnumi); disply_listchar(0,0, SMART CAR ,1); disply

13、_listchar(0,1, SAVE OK ,1); disply_listchar(0,2,=,1); disply_listchar(0,3, TURN POWER OFF ,1); disply_listchar(0,4,=,1); disply_listchar(0,5, ,1); while(1); DDRA=0x00;DDRB_DDRB0=1; for(;) delay(setnum0*1000); PORTB_PB0=1; PWMDTY67=0; PWMDTY45=1000; delay(setnum0*1000); PORTB_PB0=0; PW

14、MDTY67=0; PWMDTY45=0; delay(setnum0*1000); PORTB_PB0=0; PWMDTY45=0; PWMDTY67=1000; delay(setnum0*1000); PORTB_PB0=0; PWMDTY67=0; PWMDTY45=0; 4.码盘控速#include /* common defines and macros */#include derivative.h /* derivative-specific definitions */#include lcd5110.h#include 24c02.h#include button.h#de

15、fine servo_period 20 /ms#define motor_pwm_frequ 1 /khz void delay(unsigned int ms) unsigned int i;unsigned char j;for(i=0;ims;i+) for(j=0;j100;j+);/*倍频*/void vPLLInit(void) unsigned char refdv;refdv=3;CLKSEL=0X00;/disengage PLL to systemPLLCTL_PLLON=1;/turn on PLLSYNR =0xc0 | (80/(refdv+1)-1); REFDV

16、=0x40 | refdv; POSTDIV=0x00; /pllclock=2*osc*(1+SYNR)/(1+REFDV)=160MHz;_asm(nop); /BUS CLOCK=80M_asm(nop);while(!(CRGFLG_LOCK=1); /when pll is steady ,then use it;CLKSEL_PLLSEL =1; /engage PLL to system; /*倍频*/* PWM初始化*/void Init_PWMout(void)PWME = 0x00; /禁止输出PWMPOL = 0xff;/极性寄存器,1 先输出高电平 后为低电平 0 先输

17、出低电平 后为高电平PWMCTL = 0xf0; /01 23 45 67 通道级联PWMPRCLK=0x55; /Clock A=Bus Clock/32 ; Clock B=Bus Clock/32;PWMCLK=0b; /选择clock:7B,6B,5A,4A,3B,2B,1A,0APWME = 0xaa; /pp1,pp3,pp5,pp7口输出PWMPER67 = 80/4*125/motor_pwm_frequ; PWMPER45 = 80/4*125/motor_pwm_frequ;PWMPER23 = 80/4*servo_period*125; PWMPER01 = 80/4*

18、servo_period*125; PWMDTY67 =0;PWMDTY45 =0;PWMDTY23 =0;PWMDTY01 =0;/* PWM初始化*/测速增加部分/int cur_speed;int cur_time;/*测速初始化*/void speed_Init(void) PACTL_PAMOD=0;/0 Event counter mode.PACTL_PEDGE=1;/1 Rising edges on IOC7 pin cause the count to be incremented.PACTL_PAEN=1;/1 Pulse Accumulator system enabl

19、ed. /stl测速定时器中断/void Init_INT_Timer(void) TSCR2_PR=5; TSCR2_TOI|=1; TSCR1_TEN=1;#pragma CODE_SEG _NEAR_SEG NON_BANKEDvoid interrupt 16 INT_Timer0(void) cur_speed=PACNT; PACNT=0; cur_time+;TFLG2_TOF=1;/测速增加部分/void main(void) /* put your own code here */ unsigned char i; unsigned char setnum12; unsign

20、ed char cur_sel; int pwm_motor; Bool open=FALSE; const char lcd_show124=MID0,LEF0,RIG0,Kp 0,Kd 0,K1 0,K2 0,STP0,MAX0,MIN0,HTM0,HTX0;vPLLInit();lcd_init();init_24c02();init_btn(); Init_PWMout(); speed_Init(); cur_time=0 ; pwm_motor=0;PACNT=0;Init_INT_Timer();EnableInterrupts; for(i=0;i12;i+)setnumi=R

21、dEEPROM(i); /读取24c02 for(i=0;i12;i+) /显示初值 disply_listchar(i/6)*42,i%6,lcd_showi,1); disply_number(i/6)*42+16,i%6,setnumi,5); if(btn_change() cur_sel=0;for(i=0;i11)cur_sel=0;for(i=0;i12;i+) disply_listchar(i/6)*42,i%6,lcd_showi,(cur_sel=i)?0:1);if(btn_sav() for(i=0;i=setnum0)open=!open;cur_time=0;pw

22、m_motor=0; if(FALSE=open) PORTB_PB0=1; PWMDTY67=0; pwm_motor=(setnum4-cur_speed/3)*20; if(pwm_motorPWMPER45) PWMDTY45=PWMPER45; else if(pwm_motor0) PWMDTY45=pwm_motor; else PWMDTY45=0; else if(TRUE=open) PORTB_PB0=0; PWMDTY45=0; pwm_motor=(setnum4-cur_speed/3)*20; if(pwm_motorPWMPER67) PWMDTY67=PWMP

23、ER45; else if(pwm_motor0) PWMDTY67=pwm_motor; else PWMDTY67=0; /* for(;) disply_number(16,5,cur_speed/5,5); pwm_motor=(setnum4-cur_speed/5)*25; if(pwm_motorPWMPER45) PWMDTY45=PWMPER45; else if(pwm_motor0) PWMDTY45=pwm_motor; else PWMDTY45=0; */5.电磁车程序#include /* common defines and macros */#include

24、#include derivative.h /* derivative-specific definitions */#include lcd5110.h#include 24c02.h#include button.h/延迟函数/void delay(unsigned int ms) unsigned int i;unsigned char j;for(i=0;ims;i+) for(j=0;jSERVO_LIMIT)servo=SERVO_LIMIT; if(servoPWMPER67) PWMDTY67=PWMPER67; else if(pwm_motor0) PWMDTY67=pwm

25、_motor; else PWMDTY67=0; /控速函数/*测速初始化*/void speed_Init(void) PACTL_PAMOD=0;/0 Event counter mode.PACTL_PEDGE=1;/1 Rising edges on IOC7 pin cause the count to be incremented.PACTL_PAEN=1;/1 Pulse Accumulator system enabled. /stl测速定时器中断/void Init_INT_Timer(void) TSCR2_PR=7; TSCR2_TOI|=1; TSCR1_TEN=1;#

26、pragma CODE_SEG _NEAR_SEG NON_BANKEDvoid interrupt 16 INT_Timer0(void) cur_speed=PACNT/100; PACNT=0; cur_length+=cur_speed; TFLG2_TOF=1;/SCI初始化/void ini_SCI(void)SCI0BD=(80*/16); /=(busclk*/SCI0BD/16);SCI0CR1=0x00;SCI0CR2=0x0C;void TERMIO_PutChar(unsigned char ch)while(!(SCI0SR1&0x80); SCI0DRL=ch;/*

27、SCI初始化*/A/D初始化/void ini_AD(void) ATD0DIEN=0x00; /禁止数字输入ATD0CTL1=0x00;ATD0CTL2=0b; /0b; /ATD0CTL3=0b; /A/D转换序列长度为8ATD0CTL4=0b; /8位精度,ATDclock=Busclock/(PRS+1)/2=BusClock/40=2MHz,要求ATDclock=500KHz/ATD0CTL4=0x81; / 8位精度, 2个时钟, ATDClock=BusClock*0.5/PRS+1 ; PRS=1, divider=12ATD0CTL5=0b; /右对齐无符号数,连续转换序列模

28、式,2通道采样,AN0-AN7模拟量通道输入/A/D初始化/*读取转换结果*byte ReadATD(byte ch) byte ad=0; while(!ATD0STAT0_SCF); switch(ch) default: case 0: ad= ATD0DR0L; break; case 1: ad= ATD0DR1L; break; case 2: ad= ATD0DR2L; break; case 3: ad= ATD0DR3L; break; /* case 4: ad= ATD0DR4L; break; case 5: ad= ATD0DR5L; break; case 6: a

29、d= ATD0DR6L; break; case 7: ad= ATD0DR7L; break; */ return ad;/*读取转换结果*void main(void) /* put your own code here */ unsigned int i; unsigned int j; int pwm_motor; unsigned int setnum18; / unsigned char cur_sel; /新加/ float sumxy1,sumy1,sumxy2,sumy2; /新加 float Kp,Kd,flag,Identify; /新加 float setted_spe

30、ed_n; /新加 float dif_old,dif,dif_old2,dif_old1; /新加 unsigned char miny,minx,miny2,minx2; /新加 float K1,K2,K3; /新加 int servo_change; /新加 /新加/ int sped1=15,sped2=25; int speed=0; / const char ad44=A00,A10,A20,A30;/ const char lcd_show124=MID0,LIM0,RIG0,Sp10,Sp20,K1 0,K2 0,Spd0,MAX0,MIN0,HTM0,HTX0; const

31、 char lcd_show124=A00,A10,A20,A30,MID0,spd0,K1 0,K2 0,MAX0,MIN0,HTM0,HTX0;/新加/unsigned char AD_wData4; /全局变量存放 AD结果/unsigned char j;unsigned char max_v4=0,0,0,0;/int min_v8=255,255,255,255,255,255,255,255;const unsigned char min_v4=0,0,0,0;/const float dif_x4=-12+0.45,-6.3+0.45,6.8-0.45,11.7-0.45;co

32、nst float dif_x4=-11.3,-4.6,3.4,10.6;K1=4;K2=10;K3=0; /新加/vPLLInit();lcd_init();init_24c02();init_btn();Init_PWMout();speed_Init();PACNT=0;Init_INT_Timer();ini_AD();EnableInterrupts;/cur_length=0; for(i=3;i18;i+)setnumi=RdEEPROM(i); /读取24c02 setnum0=setnum12*256+setnum13; setnum1=setnum14*256+setnum

33、15; setnum2=setnum16*256+setnum17; if(btn_change() cur_sel=0;for(i=0;i12;i+) disply_listchar(i/6)*42,i%6,lcd_showi,(cur_sel=i)?0:1); disply_number(i/6)*42+16,i%6,setnumi,5); for(;) if(btn_add() setnumcur_sel+; disply_number(cur_sel/6)*42+16,cur_sel%6,setnumcur_sel,5); for(i=0;i255;i+) for(j=0;j255;j+) delay(2); if(btn_add()=0) break; if(j255)break; while(btn_add() delay(800);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论