#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define lcd P0
sbit lcden=P2^7;
sbit lcdrs=P2^6;
sbit lcdrw=P2^5;
uchar code table1[]="cm/s";
uchar code table2[]="s";
uchar code table3[]="Speed";
uchar code table4[]="Time";
void delay(uint xms);
sbit ENA=P3^4;//左前pwm使能
sbit ENB=P3^5;//右前电机pwm使能
sbit ENC=P3^6;//左后
sbit END=P3^7;//右后
uchar pwmA=0;//左前轮的占空比
uchar pwmB=0; //右前
uchar pwmC=0;// 左后
uchar pwmD=0;// 右后
sbit left1=P2^0;//四路寻迹左一探头
sbit left2=P2^1;
sbit right1=P2^2;
sbit right2=P2^3;//从左到右依次为左二左一,右一右二
sbit middle=P2^4;
sbit left_front1=P1^0;//四个电机的io口
sbit left_front2=P1^1;
sbit right_front1=P1^2;
sbit right_front2=P1^3;
sbit left_back1=P1^4;
sbit left_back2=P1^5;
sbit right_back1=P1^6;
sbit right_back2=P1^7;
uchar t=0;
uint num,z;
long int miao=0;
long int v;
long int M1,s;
long int M=0;
uchar bai,shi,ge,bait,shit,get;
void T1_init()//用于产生调pwm
{
TMOD=0x10;
TH1=(65536-50)/256;
TL1=(65536-50)%256;
EA=1;
ET1=1;
TR1=1;
}
void timer1() interrupt 3//频率20k,pwm
{
TH1=(65536-50)/256;
TL1=(65536-50)%256;
t++;
if(t<pwmA) {ENA=1;}
else {ENA=0;}
if(t<pwmB) {ENB=1;}
else {ENB=0;}
if(t<pwmC) {ENC=1;}
else {ENC=0;}
if(t<pwmD) {END=1;}
else {END=0;}
if(t>=100)
{t=0;}
}
void straight()
{
left_front1=1;
left_front2=0;
pwmA=99;//60
TR1=1;
right_front1=1;
right_front2=0;
pwmB=99;//35
TR1=1;
left_back1=1;
left_back2=0;
pwmC=99;//35
TR1=1;
right_back1=1;
right_back2=0;
pwmD=99;//
TR1=1;
}
void stop()
{
left_front1=1;
left_front2=1;
right_front1=1;
right_front2=1;
left_back1=1;
left_back2=1;
right_back1=1;
right_back2=1;
}
void lefts()//小幅度左转
{
left_front1=0;
left_front2=0;
pwmA=15;
right_front1=1;
right_front2=0;
pwmB=80;
left_back1=0;
left_back2=0;
pwmC=20;
right_back1=1;
right_back2=0;
pwmD=80;
}
void leftq()//大幅度左转
{
left_front1=0;
left_front2=1;
pwmA=15;
right_front1=1;
right_front2=0;
pwmB=50;
left_back1=0;
left_back2=1;
pwmC=15;
right_back1=1;
right_back2=0;
pwmD=50;
}
void rights()
{
left_front1=1;
left_front2=0;
pwmA=60;
right_front1=1;
right_front2=0;
pwmB=25;
left_back1=1;
left_back2=0;
pwmC=60;
right_back1=1;
right_back2=0;
pwmD=20;
}
void rightq()
{
left_front1=1;
left_front2=0;
pwmA=50;
right_front1=0;
right_front2=1;
pwmB=15;
left_back1=1;
left_back2=0;
pwmC=50;
right_back1=0;
right_back2=1;
pwmD=15;
}
void xunji()
{
uchar flag;
if((left1==1)&&(left2==1)&&(middle==0)&&(right1==1)&&(right2==1)||(left1==0)&&(left2==1)&&(middle==0)&&(right1==0)&&(right2==1))
{
flag=1;//直行
}
else if((left1==1)&&(left2==1)&&(middle==1)&&(right1==0)&&(right2==1)||(left1==1)&&(left2==1)&&(middle==0)&&(right1==0)&&(right2==1))
{
flag=2; //已轻微左转,需右转
}
else if((left1==1)&&(left2==1)&&(middle==1)&&(right1==1)&&(right2==0)||(left1==1)&&(left2==1)&&(middle==1)&&(right1==0)&&(right2==0))
{
flag=3;
//已大左偏,需右转
}
else if((left1==0)&&(left2==1)&&(middle==1)&&(right1==1)&&(right2==1)||(left1==0)&&(left2==1)&&(middle==0)&&(right1==1)&&(right2==1))
{
flag=4; //已轻微右转,需左转
}
else if((left1==1)&&(left2==0)&&(middle==1)&&(right1==1)&&(right2==1)||(left1==0)&&(left2==0)&&(middle==1)&&(right1==1)&&(right2==1))
{
flag=5; //已大右转 ,需左转
}
else if((left1==0)&&(left2==0)&&(middle==1)&&(right1==0)&&(right2==0)||(left1==0)&&(left2==0)&&(middle==0)&&(right1==0)&&(right2==0))
{
flag=6;
}
else if((left1==1)&&(left2==1)&&(middle==1)&&(right1==1)&&(right2==1))
{
flag=7;
}
switch (flag)
{
case 1:straight();
break;
case 2:rights();
break;
case 3:rightq();
break;
case 4:lefts();
break;
case 5:leftq();
break;
case 6:stop();
break;
case 7: if((flag==2)||(flag==3)) {flag=0;rightq();}
if((flag==4)||(flag==5)) {flag=0;leftq();}
if((flag==1)) {flag=0;straight();}
default:break;
}
}
void delay(uint xms)
{
uint a,b;
for(a=xms;a>0;a--)
for(b=120;b>0;b--) ;
}
void write_com(uchar com)
{
lcden=0;
lcdrs=0;
lcdrw=0;
lcd=com;
delay(1);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar dat)
{
lcden=0 ;
lcdrs=1;
lcdrw=0;
lcd=dat;
delay(1);
lcden=1;
delay(5);
lcden=0;
}
void lcdinit()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void T0_init()
{
TMOD = 0x01;
ET0=1;//打开T0中断
EA=1;
TH0 =(65536-45872)/256;
TL0 =(65536-45872)%256;
// TR0=1;
}
void int_init()//外部中断0初始化
{
IT0=1;//跳变有效
EX0=1;//打开外部中断0
EA=1;
}
void my_INT0(void) interrupt 0//外部中断0用于测速
{
M1=M1++;//统计外部中断的次数
}
void timer0() interrupt 1
{
TR0=0;//停止t0
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
if(num==20)
{
s=M1/0.85;//没产生一个中断轮子转过0.85cm 3.14*6.50/24.00=0.85;
miao++;
num=0;
}
TR0=1;//启动T0
}
void display()
{
write_com(0x80);
for(z=0;z<5;z++)
{
write_data(table3[z]);
delay(5);
}
write_com(0x86);
write_data('0'+bai);
write_data('0'+shi);
write_data('0'+ge);
write_com(0x89);
for(z=0;z<4;z++)
{
write_data(table1[z]);
delay(5);
}
write_com(0x80+0x40);
for(z=0;z<4;z++)
{
write_data(table4[z]);
delay(5);
}
write_com(0x80+0x46);
write_data('0'+bait);
write_data('0'+shit);
write_data('0'+get);
write_com(0x80+0x49);
for(z=0;z<1;z++)
{
write_data(table2[z]);
delay(5);
}
}
void main()
{
T0_init();
T1_init();
int_init();
lcdinit();
TR0=1;
while(1)
{
if ((left1==0)&&(left2==0)&&(middle==0)&&(right1==0)&&(right2==0))
break;
else
{xunji();}
}
TR0=0;//关闭定时器中断,停止计数和测距
// TR0=1;
stop();
//delay(500);
while(1)
{
v=s*8/miao;
bai=v/100; shi=v%100/10;ge=v%10;
bait=miao/8/100; shit=miao/8%100/10; get=miao/8%10;
display();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
17. 五路循迹智能小车c源码.zip
共1个文件
c:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 192 浏览量
2024-06-02
12:34:06
上传
评论 4
收藏 2KB ZIP 举报
温馨提示
1.智能循迹寻光小车(原埋图+PCB+程序).zip 2.智能循迹小车程序.zip 3.智能寻迹小车c程序和驱动.zip 4. 智能小车寻迹(含霍尔测連)c程序,zip 5.智能小车完整控制程序,zip 6.智能小车黑线循迹、避障、遥控实验综合程序,zip 7.智能小车测速+12864显示 C程序,zip 8. 智能小车(循迹、避障、遥控、测距、电压检测)原理图及源代码,zip 9.智能灭火小车,zip 10,智能搬运机器人程序.zip 11.智能arduino小车源程序,z1p 12.-种基于STM32的语音蓝牙智能小车,zip 13.循迹小车决赛程序,zip 14.循迹小车51程序(超声波 颜色识别 舵机 步进电机 1602).zip 15.寻光小车,zip 16.小车测速程序,zip 17.五路循迹智能小车c源码.zip 18.无线小车原理图和程序,zip 19.四驱智能小车资料包(源程序+原理图+芯片手册+各模块产品手册).zip 20.4WD小车安装教程及程序,z1p 21.四路红外循迹小车决赛程序,zip 22,适合初学者借鉴的arduino智能小车代码集合,zip 23.脑电波控制小车,zip 24.蓝牙智能避障小车,zip 25.基于树莓派监控小车源码.zip 26.基于视觉的道路识别技术的智能小车导航源代码,zip 27.基于STM32F407的超声波智能跟随小车,zip 28.基于arduino的蓝牙智能小车,zip.zip 29.基于51的蓝牙智能小车,zip 30.基于51单片机的红外遥控控制小车程序,zip
资源推荐
资源详情
资源评论
收起资源包目录
17. 五路循迹智能小车c源码.zip (1个子文件)
五路循迹智能小车.c 7KB
共 1 条
- 1
资源评论
- kmarin112024-11-18资源使用价值高,内容详实,给了我很多新想法,感谢大佬分享~
- 2301_801940352024-07-18感谢大佬分享的资源,对我启发很大,给了我新的灵感。
通信瓦工
- 粉丝: 378
- 资源: 6497
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2025计算机网络技术考试题及答案.docx
- 2025驾驶员交通安全知识测试题及答案.docx
- 2025继续教育公需课必修课考试题库附含答案.docx
- 2025家政服务考试题及答案.docx
- 工程造价咨询企业基于绩效的体系设计.doc
- 2018年造价咨询公司绩效提成方案.doc
- 工程造价从业人员绩效考核制度.doc
- 工程造价企业绩效考核细则.doc
- 工程造价咨询项目考核评分制度(试行).doc
- 项目管理有限公司造价咨询薪酬管理办法.doc
- 造价咨询公司绩效提成方法.doc
- 造价咨询公司薪酬管理办法.doc
- 2025驾照C1证考试科目一必考考试题库带答案.docx
- 2025建筑八大员(材料员基础知识)考试题与答案.docx
- 2025检验类之临床医学检验技术(士)真题库附答案.docx
- 咨询公司薪酬管理办法.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功