《2022年飞思卡尔智能车的数据采集程序,舵机,电机控制程序 .pdf》由会员分享,可在线阅读,更多相关《2022年飞思卡尔智能车的数据采集程序,舵机,电机控制程序 .pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、* * Test.c * Description: This file includes I/ O function for test, the PWM outputs function for test, function * testing sensors. * (c) Copyright 2006,Zhao Cheng * All Rights Reserved * * By : Zhao Cheng * Note : Dont change this file if possible. */ #include #include #define HIGHSPEED 8000 #defin
2、e LOWSPEED 11000 /* 速度变量, 0-24000 数值越大,速度越慢*/ void PWMout(int, int); /* 24000-20000 */ void IOtest(void) static unsigned char i=0,j=0 x01,k; DDRB = DDRA = 0 xFF; PORTB = 0 xf0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - for(;) k=(j)&0
3、 x7f; PORTA = PORTB = k; while (TCNT != 0 x0000); while (TCNT = 0 x0000) if(i9) j=j=0 x80) j=0 x01; void PWMtest(void) int counter=-4500; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - DDRB = 0 xff; PORTB = 0 xff; TSCR1 = 0 x80; /* enable
4、 timer TCNT */ TSCR2 = 0 x00; /* TCNT prescaler setup */ for(;) while (TCNT != 0 x0000); while (TCNT = 0 x0000); counter=counter+30; if(counter = 3000) counter = 0; PWMout(4500, LOWSPEED); if(counter = 1500) PWMout(-4500, LOWSPEED); PORTB = (char)(counter/100); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
5、 - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - void SignalTest(void) unsigned char signal; int Direction, Velocity; Direction = 0; Velocity = LOWSPEED; DDRA = 0 x00; DDRB = 0 xff; signal = PORTA; PORTB = signal; switch(signal) case 0 x08: /* 0001 1000 */ case 0 x10: Direction
6、 = 800; Velocity = HIGHSPEED; break; case 0 x04: /* 0010 0100 */ case 0 x20: Direction = 1500; Velocity = HIGHSPEED; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - break; case 0 x02: /* 0100 0010 */ case 0 x40: Direction = 2800; Velocity
7、= HIGHSPEED; break; case 0 x01: /* 1000 0001 */ case 0 x80: Direction = 4000; Velocity = LOWSPEED; break; case 0 x3c: /* 0011 1100 over start line */ case 0 xff: /* 1111 1111 over crossing line */ case 0 x00: /* 0000 0000 go straight not need changed state */ default: break; if(signal 0 x0f) Directi
8、on = -Direction; PWMout(Direction, LOWSPEED); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 - - - - - - - - - /* * * LCD1620.c * ICC-AVR application builder : 2006-1-8 21:43:48 * Target : M8 * Crystal: 4.0000Mhz * * Note : Dont change this file if possibl
9、e. */ #define CMD_CLEAR 0 x01 #define CMD_RESET 0 x02 #include #include #define LCD_DATA 0 xff #define LCD_EN 0 x01 /PORTC 0 #define LCD_RS 0 x02 /PORTC 1 #define LCD_RW 0 x04 /PORTC 2 #define LCD_DATAPORT PORTB #define LCD_ENPORT PORTA #define LCD_RSPORT PORTA #define LCD_RWPORT PORTA 名师资料总结 - - -精
10、品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 11 页 - - - - - - - - - void lcd_init(void); void lcd_write_cmd(unsigned cmd,unsigned data); void lcd_setxy(unsigned char x,unsigned char y); void lcd_write_string(unsigned char X,unsigned char Y,unsigned char *str); void delay_
11、nus(unsigned int n); void delay_nms(unsigned int n); void lcd_init(void) DDRB |= LCD_DATA; DDRA |= LCD_EN | LCD_RS | LCD_RW; LCD_RWPORT&=LCD_RW; LCD_DATAPORT=0 x30; /控制字规则: 5:8bit,4:16x2,3:5x7 LCD_ENPORT|=LCD_EN; delay_nus(1); LCD_ENPORT&=LCD_EN; delay_nus(40); lcd_write_cmd(0,0 x38); /8bit test lcd
12、_write_cmd(0,0 x0c); /显示开lcd_write_cmd(0,0 x01); /显示清屏lcd_write_cmd(0,0 x06); /显示光标移动设置 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 11 页 - - - - - - - - - void lcd_write_cmd(unsigned cmd,unsigned data) if(cmd=0) LCD_RSPORT&=LCD_RS; else LCD_RSPORT|=LCD_RS; L
13、CD_DATAPORT&=0 x00; LCD_DATAPORT=data; LCD_ENPORT|=LCD_EN; delay_nus(10); LCD_ENPORT&=LCD_EN; delay_nus(10); void lcd_setxy(unsigned char x,unsigned char y) unsigned char addr; if(y=0) addr=x+0 x80; else addr=x+0 xc0; lcd_write_cmd(0,addr); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师
14、精心整理 - - - - - - - 第 8 页,共 11 页 - - - - - - - - - void lcd_write_string(unsigned char X,unsigned char Y,unsigned char *str) lcd_setxy(X,Y); while(*str) lcd_write_cmd(1,*str); str+; void delay_1us(void) /1us延时函数 asm(nop); void delay_nus(unsigned int n) /N us延时函数 unsigned int i=0; for (i=0;in;i+) dela
15、y_1us(); void delay_1ms(void) /1ms延时函数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 11 页 - - - - - - - - - unsigned int i; for (i=0;i1140;i+); void delay_nms(unsigned int n) /N ms延时函数 unsigned int i=0; for (i=0;in;i+) delay_1ms(); /call this routine to initial
16、ize all peripherals void main(void) lcd_init(); while(1) lcd_write_cmd(0,0 x01); /清屏delay_nms(2); lcd_write_string(0,0,happy new year); delay_nms(100); lcd_write_string(0,1,LCD successful!); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 11 页 - - - - - - - - - delay_nms(100); /* 程序结束*/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 11 页 - - - - - - - - -