首页 > 代码库 > 嵌入式开发之项目---遥控小车课题设计
嵌入式开发之项目---遥控小车课题设计
C语言控制程序:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//此变量用于记录小车目前所处的操作状态
uint opchoice=0;
//次变量用于控制小车速度的档位
uint speed=2;
//前进
sbit KF=P3^0;
//后退
sbit KB=P3^1;
//左转
sbit KL=P3^4;
//右转
sbit KR=P3^5;
//延时子函数
void DelayMs(uint ms)
{
uchar t;
while(ms--)
for(t=0;t<120;t++);
}
//小车前进
void forward()
{
P2=100*speed;
DelayMs(10);
P1=100*speed;
P0=0x02;
}
//小车停止
void backward()
{
P2=0;
DelayMs(10);
P1=0;
P0=0x04;
}
//小车左转
void turnleft()
{
P2=100*speed;
DelayMs(10);
P1=50*speed;
P0=0x08;
}
//小车右转
void turnright()
{
P2=50*speed;
DelayMs(10);
P1=100*speed;
P0=0x10;
}
//主程序
void main()
{
P2=0;
DelayMs(10);
P1=0;
EA=1; //总中断允许
IT0=1; //中断触发方式边沿触发
EX0=1; //允许INT0中断
while(1)
{
//上电开始检测KF,KB,KL,KR的状态
if(KF==0)opchoice=1;
if(KB==0)opchoice=2;
if(KL==0)opchoice=3;
if(KR==0)opchoice=4;
switch(opchoice)
{
case 0:backward();break;
case 1:forward();break;
case 2:backward();break;
case 3:turnleft();break;
case 4:turnright();break;
default:;
}
}
}
//换挡中断
void EX_INT0()interrupt 0
{
speed=speed%3+1;
// opchoice=0;
}
红外控制部分:
问题:
1、 当A处开关S闭合时,左边电路发射红外线,右边电路检测到红外线后,在OUT输出端得到的是单峰脉冲吧?
A处应加入38kHz的一段脉冲波形(用NE555或单片机),红外接收模块才输出一个脉冲。
2、 A处和B处的器件有什么替代器件么?
A处可以买任意型号的红外发射管,B处可以买任意型号一体化红外接收组件(38kHz,能响应连续的红外载波,三个脚的),电子市场很多,管脚定义可能不同,可以问买家。
3、 这个电路可以较好的实现以下功能吗?
功能描述:当左边按键S按下时,在CPU处能得到一个单峰脉冲,表征左边电路按键S按下。
不行,按键S必须接NE555。
硬件电路部分:
http://blog.sina.com.cn/s/blog_70c2b7560100qskk.html
嵌入式开发之项目---遥控小车课题设计