谢林彤歌曲:循迹小车 _软件设计

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 17:31:51
说明文件:设计名称:循迹小车时间:2006-12-9关键词:Atemega32 L298 减速电机 光电对管 7812 7805作者:古欣 朱岩 王智涌 原瑞花 喻巧群/*********************************************************/硬件资源分配1.0:12-9PA0-PA5 光电对管检测PB1,PB2,PB3 电机右 PB3为PWMPB4,PB5,PD7 电机左 PD7为PWMPD2 int0 码牌 行程检测/********************************************************/电机转向:PB1 = 1PB2 = 0 右电机前转PB4 = 0PB5 = 1 左电机前转/********************************************************/flag; //小车状态//0未偏 1左偏 2右偏 3前出线 4后出线 5脱轨

主程序:


电机驱动程序:

/****************************************************************** 文件名:motor.c   电机驱动函数****************************************************************/#include "config.h"/************************左电机动作*****************************///左电机前进void motor_left_forward(uint8 speed){motol_uen1;motol_en2;if(speed!=0) //加入调速指令{OCR0=speed;}T0_EN;}//左电机后退void motor_left_backward(uint8 speed){motol_en1;motol_uen2;if(speed!=0) //加入调速指令{OCR0=speed;}T0_EN;}//左电机速度设定void motor_left_speed_set(uint8 speed){if(speed!=0){OCR0=speed;}}//左电机滑行void motor_left_stop(void){motol_uen1;motol_uen2;T0_UEN;}//左电机急停void motor_left_quick_stop(void){motol_en1;motol_en2;T0_UEN;}/*************************右电机动作*****************************///右电机前进void motor_right_forward(uint8 speed){motor_en1;motor_uen2;if(speed!=0) //加入调速指令{OCR2=speed;while(ASSR&(1<

延时程序:

/****************************************************************** 文件名:unit.h   定时函数头文件****************************************************************/
#ifndef _UNIT_H__#define _UNIT_H__ 1//100usextern void Delay100us(uint8 n);//1sextern void Delay1s(uint16 n);//1msextern void Delay1ms(uint16 n);#endif
/****************************************************************** 文件名:unit.c   定时函数****************************************************************/#include "config.h"/***************************************************************************延时公式*/void Delay100us(uint8 n){uint8 i;          //4clockfor(i=147;n!=0;n--)while(--i);      //5 * i clock}void Delay1ms(uint16 n){for (;n!=0;n--){Delay100us(10);}}void Delay1s(uint16 n){n=n*40;for (;n!=0;n--){Delay100us(250);}}

工程定义头文件:

/****************************************************************** 文件名:config.h   工程头文件定义****************************************************************/#ifndef __config_H__#define __config_H__ 1/*********************************************/#define M8    1#define M16   2#define M32   3#define M64   4#define M128  5/*********************************************/#define CPU_TYPE  M32//定义MCU时钟频率//#define F_CPU 14745600#define F_CPU 7372800//**************************************************//包含系统头文件,请根据实际需要进行裁减//**************************************************//#pragma REGPARMS#if CPU_TYPE == M128#include #endif#if CPU_TYPE == M64#include #endif#if CPU_TYPE == M32#include #endif#if CPU_TYPE == M16#include #endif#if CPU_TYPE == M8#include #endif//#include //#include #include //#include //#include //#include #include //#include //#define const code//**************************************************//系统数据类型定义//**************************************************#ifndef TRUE#define TRUE  1#endif#ifndef FALSE#define FALSE 0#endif#ifndef NULL#define NULL 0#endif#define MIN(a,b)   ((ab)?(a):(b))#define ABS(x)    ((x>0)?(x):(-x))typedef unsigned char  uint8;                                   /* 定义可移植的无符号8位整数关键字            */typedef signed   char  int8;                                    /* 定义可移植的有符号8位整数关键字            */typedef unsigned int   uint16;                                  /* 定义可移植的无符号16位整数关键字           */typedef signed   int   int16;                                   /* 定义可移植的有符号16位整数关键字           */typedef unsigned long  uint32;                                  /* 定义可移植的无符号32位整数关键字           */typedef signed   long  int32;                                   /* 定义可移植的有符号32位整数关键字           *///**************************************************//包含工程头文件,请根据需要进行裁减//**************************************************#include "unit.h"//#include "lcddrive.h"#include "main.h"#include "motor.h"//#include "queue.h"//#include "TWI.h"//#include "sio.h"//**************************************************//一下为工程变量、端口定义//**************************************************/********************************//*     "以下为工程配置"         *//********************************/#define T0 used//#define T1 used#define T2 used//#define Int0 used//#define Int1 used//计数器0比较计数中断允许#if T0==used#define T0_EN TIMSK |= (1<
/** moto test  电机运转情况测试程序*********************************************************void main(void){init_devices();straight();Delay1s(5);turn_left();Delay1s(5);turn_right();Delay1s(5);straight_back();Delay1s(5);stop();while(1);}*******************************************************************************/

中断处理;(这里都是定时器比较匹配和溢出中断)

/********************************************************************************* 文件名:interupts.c   中断处理函数*******************************************************************************/#include "config.h"#pragma interrupt_handler timer0_ovf_isr:12void timer0_ovf_isr(void){TCNT0 = 0x01; //reload counter value}#pragma interrupt_handler timer0_comp_isr:11void timer0_comp_isr(void){//compare occured TCNT0=OCR0}#pragma interrupt_handler timer2_ovf_isr:6void timer2_ovf_isr(void){TCNT2 = 0x01; //reload counter value}/******************************************************************************/// T2 控制PWM输出// timer2_comp_isr不需要用,但是必须允许中断,在中断时有信号输出变化/******************************************************************************/#pragma interrupt_handler timer2_comp_isr:5void timer2_comp_isr(void){//compare occured TCNT2=OCR2}