找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1294|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机循迹小车

[复制链接]
跳转到指定楼层
楼主
ID:441016 发表于 2018-12-6 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
智能循迹小车程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//D0-D7:f,b,a,e,d,h,c,g 共阴依次编码
//74LS04反相器驱动数码管
uchar code table[10] = {0x5F,0x42,0x9E,0xD6,0xC3,0xD5,0xDD,0x46,0xDF,0xD7};
uchar i = 0; //用于0-3数码管轮流显示
uint j = 0; //计时的次数
uint time=0; //计时
uint pwm=16; //占空比
uint speed; //调制PWM波的当前的值
sbit R=P3^2; //右边传感器P3^2
sbit L=P3^3; //左边传感器P3^3
//电机驱动口定义
sbit E NB=P1^0; //前轮电机停止控制使能
sbit E NA=P1^1; //后轮控制调速控制端口
sbit I N1=P1^2; //前轮
sbit I N2=P1^3; //前轮
sbit I N3=P1^4; //后轮
sbit I N4=P1^5; //后轮
void Init()
{
TMOD = 0x12; //定时器0用方式2,定时器1用方式1
TH0=(256-200)/256; //pwm
TL0=(256-200)/256;
TH1 = 0x0F8; //定时2ms
TL1 = 0x30;
EA = 1;
ET0 = 1;
ET1 = 1;
TR0 = 1;
TR1 = 1;
}
void tim0(void) interrupt 1 //产生PWM
{
speed ++;
if(speed <= pwm) //pwm 就相当于占100的比例
{
ENA = 1;
}
else if(speed < 100)
{
ENA = 0;
}
else
speed = 0;
}
void time1() interrupt 3 //定时2ms
{
TH1 = 0x0F8;
TL1 = 0x30;
i =(i+1) % 4; //0-3循环
j++;
if(i == 0) //显示最低位数码管
{
P0 = 0x00; //段选清零防止乱码
P0 = table[time%10]; //送段码信号
}
if(i == 1)
{
P0 = 0x00;
P0 = table[time/ 10% 10];
}
if(i == 2)
{
P0 = 0x00;
P0 = table[time/ 100% 10];
}
if(i == 3)
{
P0 = 0x00;
P0 = table[time/ 1000% 10];
}
P2 = ( 0x10 << i ); //送位选信号
if(j == 500)
{
time ++; //500次为1秒
j = 0;
}
}
void forward() //前进
{
IN2=1;
IN1=0;
}
void back() //后退
{
IN2=0;
IN1=1;
}
void left() //左转
{
ENB=1; //打开使能
IN3=1;
IN4=0;
}
void right() //右转
{
ENB=1; //打开使能
IN3=0;
IN4=1;
}
void stop() //停止
{
IN2=0;
IN1=0;
IN3=0;
IN4=0;
}
void main()
{
Init(); //定时器初始化
while(1)
{
if(R==0 && L==1) //右传感器检测到黑线
{
right(); //右转
forward();
while(R==0 && L==1);
}
if(R==1 && L==0) //左传感器检测到黑线
{
left();
forward();
while(R==1 && L==0);
}
if(R==0 && L==0) //都检测到黑线则停止
{
stop();
j = 0; //定时器仍在工作,计数时间清空}
else //都没有检测到黑线
{
ENB = 0; //关闭转向控制
forward();
}
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表