#include <pic.h> //甲车
__CONFIG(0xFF32);
#define uchar unsigned char
#define uint unsigned int
char flag=0; //标志转弯,识别超车区
char flag_chaochequ=0;
char flag_zuo=0;
char flag_leixing=0; //0--默认 1--赶超者 2--被超者
char flag_hou=0; //进入超车区等待后传感调整
char flag_chaoche=0; //标志赶超者超越被超者
char flag_bizuo=0; //标志小车转出超车区时屏蔽左传感器
char flag_houjishu=0; //累计后传感器次数将转出超车区屏蔽的左传感器开启
char flag_zuihouzhuan=0; //最后转弯角度加大标记,使小车顺利转弯;
char flag_jiansu=0;
char flag_time=0;
char flag_1=0;
char flag_bihou=0;
void qianjin(void);
void houtui(void);
void zuozhuan(int time);
void youzhuan(int time);
void zhizhuan(char du);
void DelayMs(uint x);
//==================================NEWMSG-JASK3000=============================
//=============================================================================
void main()
{
TRISC=0;
PORTC=0;
TRISB=0XFF; //RB0--未用,RB1--左传感,RB2--后传感,RB3--右传感,RB4--右后探测
PORTB=0;
T2CON=0x0c; //启动TMR2,预分频1:1,后分频1:2
CCP1M3=1;
CCP1M2=1; //CCP1M3 CCP1M2 CCP1M1 CCP1M0 =11XX设定为PWM工作方
PR2=100; //设定PWM波的周期
CCPR1L=100; //设定DCXB的高8位
CCP1X=0;
CCP1Y=0; //设定DCXB的低2位
TRISC2=0; //将CCP引脚设为输出
CCP2M3=1;
CCP2M2=1; //CCP1M3 CCP1M2 CCP1M1 CCP1M0 =11XX设定为PWM工作方
PR2=100; //设定PWM波的周期
CCPR2L=100; //设定DCXB的高8位
CCP2X=0;
CCP2Y=0; //设定DCXB的低2位
TRISC1=0; //将CCP引脚设为输出
TMR2ON=1; //开启TMR2
INTCON=0xC0;
PIE1=0x01; //设置第一外设中断,定时器1中断
TMR1L=(65535-50000)%256;
TMR1H=(65535-50000)/256;
T1CON=0X01;
DelayMs(10);
qianjin();
TRISE=0XFF;
if(RE2==1)
flag_leixing=2; //甲车模式切换
else flag_leixing=0;
while(1)
{
if(RB1==1)
{
if(RB1==1)
{
if(flag_bizuo==0)
{
if(flag>=2)
{
flag_bihou=0;
if(flag_leixing==0)
{
CCPR1L=98;
CCPR2L=95;
}
else if(flag_leixing==1)
{
flag_time=1;
flag_1=0;
}
CCPR2L=100;
CCPR1L=100;
youzhuan(40);
}
else
youzhuan(10);
qianjin();
if(flag) //如果flag=1,标志转弯完毕,之后两车轮转速相等
{
youzhuan(10);
CCPR2L=100;
CCPR1L=100;
flag=0;
}
}
}
else if(flag_bizuo==1)
{
flag_bizuo=0;
flag_zuihouzhuan=0;
zhizhuan(75);
DelayMs(3000);
CCPR2L=90;
CCPR1L=100;
flag=1;
if(flag_leixing==1)
flag_leixing=2;
else if(flag_leixing==2)
flag_leixing=1;
}
}
if(RB3==1) //右边沿触线
{
DelayMs(1);
if(RB3==1)
{
zuozhuan(10);
if(flag_hou==1)
{
CCPR2L=100;
CCPR1L=100;
flag_hou=0;
zuozhuan(40);
flag_chaoche=1;
flag_chaochequ=0;
flag=0;
}
if(flag) //如果flag=1,标志转弯完毕,之后两车轮转速相等
{
CCPR2L=100;
CCPR1L=100;
if(flag>=2)
{
flag_bihou=0;
CCPR1L=97;
CCPR2L=100 ;
if(flag_leixing==2) //在2模式此时开启定时器
{
flag_time=1;
flag_1=0;
}
}
flag=0;
}
qianjin();
}
}
if(RB2==1) //屁股后边触线
{
DelayMs(1);
if(RB2==1)
{
while(RB2==1);
if(flag_bihou==0)
{
flag++;
if(flag)
{
CCPR2L=80;
CCPR1L=80;
}
if(flag>=2)
{
if(flag_leixing==0)
{
CCPR2L=77; //被超者向右靠角度控制
CCPR1L=100;
}
else if(flag_leixing==1)
{
flag_chaochequ=1;
flag_bihou=1;
CCPR2L=0;
CCPR1L=75;
flag_zuo=0;
}
else if(flag_leixing==2)
{
CCPR2L=77; //被超者向右靠角度控制
CCPR1L=100;
}
}
else if(flag_chaochequ==1&&flag_leixing==1)
{
CCPR1L=65;
CCPR2L=100;
DelayMs(60);
CCPR1L=0;
CCPR2L=78;
flag_hou=1;
}
else if(flag_zuihouzhuan)
{
flag_zuihouzhuan=0;
flag_bizuo=0;
zhizhuan(75);
DelayMs(2000);
flag=1;
if(flag_leixing==1)
flag_leixing=2;
else if(flag_leixing==2)
flag_leixing=1;
}
else
zhizhuan(82);
}
}
}
if(RB4==0)
{
if(flag_chaoche==1)
flag_chaoche++;
if(flag_chaoche>=100)
flag_chaoche=10;
}
else if(RB4==1)
{
if(flag_chaoche>=2)
{
CCPR2L=100;
CCPR1L=80;
flag_bizuo=1;
flag_chaoche=0;
flag_zuihouzhuan=1;
}
}
}
}
//延时
void DelayMs(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
//前进
void qianjin(void)
{
RC4=0;RC5=1;
RC6=0;RC7=1;
}
//后退
void houtui(void)
{
RC4=1;RC5=0;
RC6=1;RC7=0;
}
//右转
void youzhuan(int time)
{
RC4=0;RC5=1;
RC6=1;RC7=0;
DelayMs(time);
}
//直转
void zhizhuan(char du)
{
CCPR2L=du;
CCPR1L=100;
}
//左转
void zuozhuan(int time)
{
RC4=1;RC5=0;
RC6=0;RC7=1;
DelayMs(time);
}
//中断子函数
void interrupt time1()
{
TMR1IF=0;
if(flag_time==1)
{
flag_1++;
if(flag_1>=30)
{
flag_time=2;
flag_1=0;
CCPR2L=52;
CCPR1L=50;
TMR1L=(65535-50000)%256;
TMR1H=(65535-50000)/256;
flag_chaochequ==0;
}
}
else if(flag_time==2)
{
flag_1++;
if(flag_1>=200)
{
flag_1=0;
flag_time=0;
CCPR2L=100;
CCPR1L=97;
if(flag_leixing==1)
{flag_leixing=2;}
else if(flag_leixing==2)
{flag_leixing=1;}
}
}
}
xiaoche_9.5_A_2.zip_pic16f877a_xiaoche_9.5_A_2
版权申诉
5星 · 超过95%的资源 73 浏览量
2022-09-20
19:39:12
上传
评论
收藏 55KB ZIP 举报
钱亚锋
- 粉丝: 90
- 资源: 1万+
最新资源
- 本地镜像源配置脚本本地镜像源配置脚本
- 与spoon配套使用的jdk
- 基于单片机的便携式粮食水分测试仪的研究
- 测绘基坑支护工程变形监测报告1.pdf
- 基于PHP+swoole实现的微信机器人,依赖vbot和微信网页版的功能,帮助管理微信群/聊天/踢人等+源码+开发文档+运行教程
- com.xunmeng.pinduoduo_Release_cd290ca9_ARM64.apk
- 2788727d-25a0-41b2-b6b4-265d193edb95.doc
- 基于AVR单片机的伺服电机系统研究
- Lab-Electronic Craft Practicum-2-Simulation of a Single Tube Com
- 贪吃蛇基于TypeScript
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈