电磁组智能车全国一等奖代码

void main(void)

{

while(1) {

AD_GetValue(); //获得传感器AD 值

Cal_PostitionA(); //获得? if(SenA!=50)

{

Delayms(500);

break;

}

Delayms(50);

SenA=50;

}

#include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions*/

#define SERVO_MIDDLE_VALUE 1184 舵机中值

#define SERVO_RANGE 180 舵机转动范围

void Set_PWM(uint PWM1,uint PWM2)

{

PWMDTY1=PWM1;

PWMDTY0=PWM2;

}

void Set_Servo(uchar value) //舵机

{

uint i;

if(value>100||value

last_value=value;

if(value

if(value>50) i=SERVO_MIDDLE_VALUE+(value-50)*18/5;

PWMDTY23=i;

}

void Pwm_Init(void) //PWM初始化

{

PWME=0X00; //禁止PWM 输出

PWMCTL_CON23=1; //2和3联合成16位PWM ,并且2的寄存器为级联后寄存器

的高8位

PWMCAE_CAE3=0; //左对齐方式,即占空比常数所决定的时间为从周期原点开始计时, 此时计数器只使用加法计数

PWMCNT23 = 0; //计数器清零

PWMPOL_PPOL3=1; //设置输出极性,即先默认为高电平

PWMPRCLK = 0X01; // clockB 不分频,clockB=64MHz;CLK A 2 分频:32Mhz PWMSCLB = 0x20; // clock SB 64分频 clock=clockB/64=1MHz 0.001ms PWMCLK_PCLK3 = 1; //选择clock SB 做时钟源

PWMPER23 =10000; //将PWM 的周期设置为10ms

PWMPOL_PPOL0=1;

PWMPOL_PPOL1=1;

PWMCLK_PCLK0=1;

PWMCLK_PCLK1=1;

PWMCAE_CAE0=0;

PWMCAE_CAE1=0;

Set_PWM(0,0);

}

uchar Moto_PID()

if(err>8)

{

Set_PWM(100,0);

return 0;

}

if(err

{

Set_PWM(100,100);

return 0;

}

Set_PWM(M_PWM,0);

}

uchar Servo_PID()

if(Rel_SenA>43)

{

Set_Servo(100);

return 0;

}

if(Rel_SenA

{ //PWM0 首先输出高电平 //PWM1 首先输出高电平 // PWM0 用 SA 做时钟源 // PWM1 用 SA 做时钟源 //左对齐输出 //左对齐输出 //电机的PID 控制 //舵机的PID 控制

Set_Servo(0);

return 0;

}

}

#include /* common defines and macros */

#include "derivative.h" /* derivative-specific definitions*/

uchar AD_Value[16];

uint Sen_Value;

uint SenA;

void ADC_Init(void) // ADC初始化

{

ATD0CTL1=0x00; //不设置外部终端,只设置8位精度

ATD0CTL2=0x40; //禁止外部触发,中断禁止,转换后自动清除寄存器 ATD0CTL3=0x80;

ATD0CTL4=0x03;

PRS=7, divider=8;

ATD0CTL5=0x30; //连续转换,多通道转换,通道AN0开始

ATD0DIEN=0x00; //相应的数字信号输入禁止

}

void AD_GetValue() //获取AD 值

{

while(ATD0STAT2_CCF0==0); //判断通道0是否转换完成

AD_Value[0]=ATD0DR0;

AD_Value[1]=ATD0DR1;

AD_Value[2]=ATD0DR2;

}

uchar Cal_PostitionA()

{

uchar i;

uint sum;

for(i=0;i

{

if(AD_Value[i]

}

sum=AD_Value[0]+AD_Value[1]+AD_Value[2];

if(sum!=0)

{

sum=sum/(AD_Value[0]+AD_Value[2]+AD_Value[5]);

SenA=sum;

return 0;

}

else return 1;

}

#include

#include "derivative.h"

void Key_Init()

{

KEY_IN;

}

uchar Key_Scan()

{

if(KEY==0) return 1;

return 0;

}

void Switch_Init()

{

SWTICH_IN;

}

uchar Switch_Scan()

{

return (PORTB&0x0f);

}

void Stop()

{

Target_Speed=0;

while(1)

{

Set_PWM(100,100);

AD_GetValue();

Cal_PostitionA();

Set_Servo(100-SenA);

}

}

void INT_Init(void)/

{

PITCFLMT_PITE=0;

PITCE=0x07;

PITMTLD0=128;

PITLD0=2000;

PITLD1=12500;

}

#pragma CODE_SEG __NEAR_SEG NON_BANKED

void interrupt 66 PIT0(void) //定时器0初始化

{

PITTF_PTF0=1;

System_Feed_Speed=PACNT;

}

void interrupt 67 PIT1(void) //25ms

{

static i;

PITTF_PTF1=1; //清除PIT1的标记

System_RunTime_Count++;

}

#define LEFT AD_Value[0]

#define RIGHT AD_Value[1]

static uchar AD_VALUE_MAX;

uchar SenA2;

uchar Cal_2_A()

if(LEFT

if(AD_VALUE_MAXRIGHT)

{

if(RIGHT>10)

{

SenA2=(AD_VALUE_MAX-LEFT)*20/AD_VALUE_MAX; }

}

else

{

if(LEFT>10)

{

SenA2=RIGHT*20/AD_VALUE_MAX;

}

}

#include /* common defines and macros */

#include "derivative.h" /* derivative-specific definitions*/

static void Reed_Switches_Init(void) //干簧开关端口初始化模块 {

DDRJ = 0X00;

PPSJ_PPSJ6 =1;

PIEJ_PIEJ6 = 1

PERJ = 0xff; //

}

void main(void)

{

while(1) {

AD_GetValue(); //获得传感器AD 值

Cal_PostitionA(); //获得? if(SenA!=50)

{

Delayms(500);

break;

}

Delayms(50);

SenA=50;

}

#include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions*/

#define SERVO_MIDDLE_VALUE 1184 舵机中值

#define SERVO_RANGE 180 舵机转动范围

void Set_PWM(uint PWM1,uint PWM2)

{

PWMDTY1=PWM1;

PWMDTY0=PWM2;

}

void Set_Servo(uchar value) //舵机

{

uint i;

if(value>100||value

last_value=value;

if(value

if(value>50) i=SERVO_MIDDLE_VALUE+(value-50)*18/5;

PWMDTY23=i;

}

void Pwm_Init(void) //PWM初始化

{

PWME=0X00; //禁止PWM 输出

PWMCTL_CON23=1; //2和3联合成16位PWM ,并且2的寄存器为级联后寄存器

的高8位

PWMCAE_CAE3=0; //左对齐方式,即占空比常数所决定的时间为从周期原点开始计时, 此时计数器只使用加法计数

PWMCNT23 = 0; //计数器清零

PWMPOL_PPOL3=1; //设置输出极性,即先默认为高电平

PWMPRCLK = 0X01; // clockB 不分频,clockB=64MHz;CLK A 2 分频:32Mhz PWMSCLB = 0x20; // clock SB 64分频 clock=clockB/64=1MHz 0.001ms PWMCLK_PCLK3 = 1; //选择clock SB 做时钟源

PWMPER23 =10000; //将PWM 的周期设置为10ms

PWMPOL_PPOL0=1;

PWMPOL_PPOL1=1;

PWMCLK_PCLK0=1;

PWMCLK_PCLK1=1;

PWMCAE_CAE0=0;

PWMCAE_CAE1=0;

Set_PWM(0,0);

}

uchar Moto_PID()

if(err>8)

{

Set_PWM(100,0);

return 0;

}

if(err

{

Set_PWM(100,100);

return 0;

}

Set_PWM(M_PWM,0);

}

uchar Servo_PID()

if(Rel_SenA>43)

{

Set_Servo(100);

return 0;

}

if(Rel_SenA

{ //PWM0 首先输出高电平 //PWM1 首先输出高电平 // PWM0 用 SA 做时钟源 // PWM1 用 SA 做时钟源 //左对齐输出 //左对齐输出 //电机的PID 控制 //舵机的PID 控制

Set_Servo(0);

return 0;

}

}

#include /* common defines and macros */

#include "derivative.h" /* derivative-specific definitions*/

uchar AD_Value[16];

uint Sen_Value;

uint SenA;

void ADC_Init(void) // ADC初始化

{

ATD0CTL1=0x00; //不设置外部终端,只设置8位精度

ATD0CTL2=0x40; //禁止外部触发,中断禁止,转换后自动清除寄存器 ATD0CTL3=0x80;

ATD0CTL4=0x03;

PRS=7, divider=8;

ATD0CTL5=0x30; //连续转换,多通道转换,通道AN0开始

ATD0DIEN=0x00; //相应的数字信号输入禁止

}

void AD_GetValue() //获取AD 值

{

while(ATD0STAT2_CCF0==0); //判断通道0是否转换完成

AD_Value[0]=ATD0DR0;

AD_Value[1]=ATD0DR1;

AD_Value[2]=ATD0DR2;

}

uchar Cal_PostitionA()

{

uchar i;

uint sum;

for(i=0;i

{

if(AD_Value[i]

}

sum=AD_Value[0]+AD_Value[1]+AD_Value[2];

if(sum!=0)

{

sum=sum/(AD_Value[0]+AD_Value[2]+AD_Value[5]);

SenA=sum;

return 0;

}

else return 1;

}

#include

#include "derivative.h"

void Key_Init()

{

KEY_IN;

}

uchar Key_Scan()

{

if(KEY==0) return 1;

return 0;

}

void Switch_Init()

{

SWTICH_IN;

}

uchar Switch_Scan()

{

return (PORTB&0x0f);

}

void Stop()

{

Target_Speed=0;

while(1)

{

Set_PWM(100,100);

AD_GetValue();

Cal_PostitionA();

Set_Servo(100-SenA);

}

}

void INT_Init(void)/

{

PITCFLMT_PITE=0;

PITCE=0x07;

PITMTLD0=128;

PITLD0=2000;

PITLD1=12500;

}

#pragma CODE_SEG __NEAR_SEG NON_BANKED

void interrupt 66 PIT0(void) //定时器0初始化

{

PITTF_PTF0=1;

System_Feed_Speed=PACNT;

}

void interrupt 67 PIT1(void) //25ms

{

static i;

PITTF_PTF1=1; //清除PIT1的标记

System_RunTime_Count++;

}

#define LEFT AD_Value[0]

#define RIGHT AD_Value[1]

static uchar AD_VALUE_MAX;

uchar SenA2;

uchar Cal_2_A()

if(LEFT

if(AD_VALUE_MAXRIGHT)

{

if(RIGHT>10)

{

SenA2=(AD_VALUE_MAX-LEFT)*20/AD_VALUE_MAX; }

}

else

{

if(LEFT>10)

{

SenA2=RIGHT*20/AD_VALUE_MAX;

}

}

#include /* common defines and macros */

#include "derivative.h" /* derivative-specific definitions*/

static void Reed_Switches_Init(void) //干簧开关端口初始化模块 {

DDRJ = 0X00;

PPSJ_PPSJ6 =1;

PIEJ_PIEJ6 = 1

PERJ = 0xff; //

}


相关文章

  • 电子科技大学博士招生简章2014
  • 电子科技大学 2014年博士研究生 招生简章 教育部直属重点大学 国家"211工程"."985工程"重点建设高校 学校代码10614 yz.uestc.edu.cn 目 录 学校概况 ........ ...查看


  • 2011-2016年全国大学生信息安全竞赛作品获奖情况
  • 作品题目 "机"不可失--基于蓝牙检测的android手机防盗系统"天机"-基于地理位置信息的安全通信系统Android下基于SM2和分形的语音隐秘通信系统 ApkGo-基于大数据深度学习的Andro ...查看


  • 郑州大学计算机研究生导师信息
  • 1. 导师姓名:范 明 科研方向:数据库 197k年郑州大学毕业,后在美国.加拿大进修及合作研究,教授,硕士生导师.省重点学科计算机软件与理论的学术带头人,兼任中国计算机学会数据库专业委员会委员.中国计算机学会CAD与计算机图形学专业委员会 ...查看


  • 智能车电磁组-德州学院-极速终结者技术报告
  • 第七届"飞思卡尔"杯全国大学生 智能汽车竞赛 技 术 报 告 学 校: 德州学院 队伍名称: 极速终结者 参赛队员: 卢瑞剑 高祥 朱振阳 带队教师:姚俊红 关于技术报告和研究论文授权的使用说明 本人完全了解第六届&qu ...查看


  • 物联网技术,题库,职称
  • 继续教育 最全的物联网技术试题及答案库 绝对保通过 1. (A )针对下一代信息浪潮提出了"智慧地球"战略. A.IBM B.NEC C.NASA D.EDTD 2.日本在 ( C )年提出了U-JAPAN战略. A.2 ...查看


  • 2015年非上海生源应届生落户宝典
  • <2015年非上海生源应届生落户宝典> 一.前言 每年上海都有针对非上海生源的应届普通高校毕业生出台打分落户政策.结 合过去2014年的落户政策,上海玉振知识产权代理有限公司为大家精心制作了 这份<2015年非上海生源应届 ...查看


  • 蓝宙电子智能创新实验室
  • 智能创新实验室建设方案 芜湖蓝宙电子科技有限公司 -飞思卡尔大学计划官方合作伙伴 版 本:Version 2.0 所 有 者:蓝宙电子 日 期:2014.03.12 目录 一. 二. 实验室介绍 . .................... ...查看


  • 毕业设计 智能循迹小车
  • 摘 要 本文论述了基于单片机的智能循迹小车的控制过程.智能循迹是基于自动引导机器人系统,用以实现小车自动识别路线,以及选择正确的路线.智能循迹小车是一个运用传感器.单片机.电机驱动及自动控制等技术来实现按照预先设定的模式下,不受人为管理时能 ...查看


  • 物联网技术与应用题库20150902
  • 物联网基础与实践 单项选择题 1. ( A )针对下一代信息浪潮提出了"智慧地球"战略. A.IBM B.NEC C.NASA D.EDTD 2.日本在 ( C )年提出了U-JAPAN战略. A.2002B.2003C ...查看


热门内容