超简陋循迹小车_2012.07

本文介绍了一款基于51单片机的简易循迹小车制作过程,使用红外对管进行路线跟踪,并通过简单的代码实现左右转向控制。

和DYL同学一起做的非常简陋的循迹小车,使用51单片机和一排红外对管,记得只有十来行代码,大概如下:

{
  while (1)
  {
    if (left)
    {
      turnRight();
    }
    else if (right)
    {
      turnLeft();
    }
  }   
}

 

 

转载于:https://www.cnblogs.com/albumcover/p/7339570.html

继续在循迹小车的主题下注释这个模块的代码#include "exti.h" #include "led.h" #include "key.h" #include "delay.h" #include "usart.h" //KEY1对应PA7,硬件接3.3v高电平,所以配制成下拉输入和上升沿触发,可以收到明确的上升开关信号 //KEY2对应PA12,硬件接地,配制成上拉输入和下降沿出发 //外部中断0服务程序 void EXTIX_Init(void) { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; KEY_Init(); // 按键端口初始化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能复用功能时钟 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource12); EXTI_InitStructure.EXTI_Line=EXTI_Line12; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource7); EXTI_InitStructure.EXTI_Line=EXTI_Line7; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器 NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //用7,5-9合并 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //用12,15-10合并 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //子优先级1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 // EXTI_InitStructure.EXTI_LineCmd = ENABLE; } void EXTI9_5_IRQHandler(void) { delay_ms(10);//消抖 if(KEY1==1) //按键KEY1,按下为高 { LED=!LED; } EXTI_ClearITPendingBit(EXTI_Line7); //清除LINE7上的中断标志位 } //外部中断3服务程序 void EXTI15_10_IRQHandler(void) { delay_ms(10);//消抖 if(KEY2==0) //按键KEY2 { LED=!LED; } EXTI_ClearITPendingBit(EXTI_Line12); //清除LINE3上的中断标志位 }
最新发布
10-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值