原理图:
程序运行图:
部分程序:
/*******************************************************************************
* 文件名称:main.c
* 说明:本文件为小车控制的主函数
* 功能:1.看门狗定时器初始化
*******************************************************************************/
#include #include /******************************************************** *函数名称:void main() *函数功能:调用函数 *函数入口:无 *函数出口:无 ********************************************************/ void main() { WDT_CONTR=0x3b; timer_init(); //初始化 while(1) { keyboard(); //键盘扫描 // jieshou(); //遥控信号检测,要与传感器实物连接才能正常使用. xunji(); //循迹检测 bizhang(); //避碍物检测 stop(); //目标站点检测 WDT_CONTR=0x3b; //喂狗 } } /******************************************************************************* * 文件名称:kongzhi.c * 说明:本文件为小车控制的c文件 * 功能:1.检测障碍物传感器查询 2.小车的状态控制 *******************************************************************************/ #include #define kongzhi_GLOBAL 1 #include uchar PWM_t,PWM_t0; //PWM_t为脉冲宽度(0~100)时间为0~10ms uchar time_count; //定时计数 uint number,number1; uchar flag; //flag为小车状态标志,0:停止,1:前进,2:后退 uchar flag2; //flag2为小车状态恢复寄存区,当小车遇到障碍物停止,等到障碍物排除之后,小车在停止之前的状态就寄存在flag2中 uchar flag3; //flag3为小车避障停止延时标志,初始化为0,等待障碍排除之后赋值为1,开始计时,数秒之后恢复停止前的行进状态 uchar flag4; //--flag4为看门狗复位后状态恢复寄存区 uchar kind = 0; //传感器的种类 /******************************************************** *函数名称:void bizhang() *函数功能:遇到障碍物时的处理函数 *函数入口:无 *函数出口:无 ********************************************************/ void bizhang() { zhang_ai = 1; if(zhang_ai == 0) { flag2=flag; flag=0; while(zhang_ai == 0) { keyboard(); xunji(); stop(); WDT_CONTR=0x3b; } flag3=1; } } /******************************************************** *函数名称:void stop() *函数功能:到达目标点的控制函数 *函数入口:无 *函数出口:无 ********************************************************/ void stop() { stop_1=1; //目标站点1 if(stop_1==0)flag=0; stop_2=1; //目标站点2 if(stop_2==0)flag=0; stop_3=1; //目标站点3 if(stop_3==0)flag=0; } /******************************************************* *函数名称:void timer_init() *函数功能:定时器初始化设置 *函数入口:无 *函数出口:无 ********************************************************/ void timer_init() { flag=0;flag3=0; key = 0xFF; TMOD = 0x20; //定时器1为模式2(8位自动重装) TF1 = 0; //清中断标志 TH1 = timer_data; //保证定时时长为0.1ms TL1 = TH1; ET1 = 1; //允许T0中断 TR1 = 1; //开始计数 EA = 1; //中断允许 ENA = 0; //电机禁止 PWM_t = PWM_t0; //看门狗复位后速度恢复 flag = flag4; //看门狗复位后小车状态恢复 } /******************************************************* *函数名称:void IntTime1() interrupt 3 using 2 *函数功能:定时器中断处理,小车行走控制 *函数入口:无 *函数出口:无 ********************************************************/ void IntTime1()interrupt 3 using 2 { time_count++; if(flag3)number++; if(number==6000){number=0;number1++;} if(number1==8){flag3=0;number1=0;flag=flag2;} if(flag==0)ENA=0; //小车停止,flag=0,小车停止标志 if(flag==1) //小车前进,flag=1,小车前进标志 { ENA=1; //PWM波输出使能 DR=0; //直流电机一端接低电平 DR2=0; //直流电机一端接低电平 if(kind==0) //没有传感器检测到黑线,走直线 { if(time_count else {PWM=0;PWM2=0;} } if(kind==1) //左边第一个传感器检测到黑线 { if(time_count<(PWM_t-20)) {PWM=1;} else {PWM=0;} if(time_count else {PWM2=0;} } if(kind==2) //左边第二个传感器检测到黑线 {
上一篇:基于51单片机的舞蹈机器人步进机仿真设计
下一篇:基于51单片机的四位数字频率计数码管显示设计
推荐阅读最新更新时间:2024-10-23 11:10
设计资源 培训 开发板 精华推荐
- 基于NXP的NFC礼卡
- ADV3222-EVALZ,ADV3222 800 MHz、4:1模拟多路复用器评估板
- 具有关断功能的 LT1109CZ 3V 至 5V 转换器的典型应用电路
- LT3748EMS 演示板,22V VIN 75V,VOUT = 12V @ 2.5A 低电压
- VCT2 离线语音模组-涂鸦智能 单电源供电
- 2相单极步进电机驱动IC(12件)
- ST1S31 3 A DC降压开关稳压器的典型应用
- ZSR800GTA 8 伏固定正电压稳压器的典型应用
- TCR5SB47A、150mA、4.7V 输出电压 CMOS 低压降稳压器的典型应用
- AD8346-EVALZ,AD8346 评估板,800 MHz 至 2500 MHz 正交调制器