内容包含智能小车相关应用程序,
电路原理图如下:
单片机源程序如下:
- #include<reg52.h>
- #include<math.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar Buffer =0; //从串口接收的数据
- uint URTAReceivedCount=0,n=1;
- uchar data Tempdatatable[5],CommandDatatable[5];//数据包
- uchar serVal[2];
- uint pwm[]={1382,1382,1382,1382,1382,1382,1382,1382}; //初始90度,(实际是1382.4,取整得1382)
- uchar pwm_flag=0;
- uchar Robots_Run_Status;
- uint code ms0_5Con=461; //0.5ms计数
- uint code ms2_5Con=2304; //2.5ms计数
- bit key_stime_ok;
- sbit StatusLight=P2^0; //状态灯
- sbit MainLight=P2^1; //主大灯
- sbit Input_Detect_LEFT=P2^3; //右侧探头
- sbit Input_Detect_RIGHT=P2^4; //左侧探头
- sbit Input_Detect0=P2^2; //右侧探头
- sbit Input_Detect1=P2^5; //左侧探测
- sbit servo0=P2^6; //舵机控制
- sbit servo1=P2^7;
- /********************************************************************
- * 名称 : Delay_1ms()
- * 功能 : 延时子程序,延时时间为 1ms * x
- * 输入 : x (延时一毫秒的个数)
- * 输出 : 无
- ***********************************************************************/
- void Delay_1ms(uint i)//1ms延时
- {
- uchar x,j;
- for(j=0;j<i;j++)
- for(x=0;x<=148;x++);
- }
- void TurnOnStatusLight()
- {
- StatusLight=0;
- }
- /********************************************************************
- * 名称 : Send_Data()
- * 功能 : 向上位机传送字符
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- void Send_Data(uchar type,uchar cmd,uchar dat)
- {
- uchar data Buffer[5];//构建数据包
- uchar *p;
- uint Send_Count=0;
- p = Buffer;
- Buffer[0]=0XFF;
- Buffer[1]=type;
- Buffer[2]=cmd;
- Buffer[3]=dat;
- Buffer[4]=0XFF;
- while(1)
- {
- if(*p==0XFF)
- {
- Send_Count++; //0XFF标志统计位
- }
- SBUF = *p; //发送
- while(!TI) //如果发送完毕,硬件会置位TI,等待发送完毕
- {
- _nop_();
- }
- p++;
- TI = 0;
- if(Send_Count == 2) //当统计到两次出现0XFF,则认为一个数据包发送完毕,跳出循环
- {
- TI = 0;
- break;
- }
- }
- }
复制代码
声波测距,超声波避障,红外循迹,红外避障等,希望大家互相学习交流
全部资料51hei下载地址:
智能小车相关资料.rar
(5.2 MB, 下载次数: 109)
|