资源简介
这是用加强型单片机stc12c5a60s2为控制核心制作的迷宫小吃,本车利用前方五个红外传感器进行黑线循迹,采用右手法则和底部两个光电传感器进行拐弯。
代码片段和文件信息
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define LEFTPMW 0x40
#define RIGHTPWM 0x43
#define TURNL1PWM 0x33
#define TURNR1PWM 0x36
#define TURNL2PWM 0x25
#define TURNR2PWM 0x28
/*stc12c5a60s2相关宏定义*/
sfr AUXR = 0X8E;
sfr CCON = 0xD8; //PCA控制寄存器
sfr CMOD = 0xD9; //PCA模式寄存器
sfr CCAPM0 = 0xDA; //PCA模块0模式寄存器
sfr CCAPM1 = 0xDB; //PCA模块1模式寄存器
sfr CL = 0xE9; //PCA 定时寄存器 低位
sfr CH = 0xF9; //PCA 定时寄存器 高位
sfr CCAP0L = 0xEA; //PCA模块0的 捕获寄存器 低位
sfr CCAP0H = 0xFA; //PCA模块0的 捕获寄存器 高位
sfr CCAP1L = 0xEB; //PCA模块1的 捕获寄存器 低位
sfr CCAP1H = 0xFB; //PCA模块1的 捕获寄存器 高位
sfr PCA_PWM0 = 0xF2; //PCA PWM 模式辅助寄存器0
sfr PCA_PWM1 = 0xF3; //PCA PWM 模式辅助寄存器1
sbit CF = 0xDF; //PCA计数溢出标志位
sbit CR = 0xDE; //PCA计数器 运行控制位
sbit CCF1 = 0xD9; //PCA模块1中断标志
sbit CCF0 = 0xD8; //PCA模块0中断标志
/*电机控制口以及红外传感器控制口*/
sbit p20zuo = P2^0;
sbit p21zuo = P2^1;
sbit p22you = P2^2;
sbit p23you = P2^3;
sbit youhong1 = P0^0;
sbit youhong2 = P0^1;
sbit zhonghong = P0^2;
sbit zuohong2 = P0^3;
sbit zuohong1 = P0^4;
/*变量定义*/
uint speed1 = 0;
uint speed2 = 0;
bit flag1 = 0;
bit flag2 = 0;
uchar stopnum = 0;
uchar turnflag = 0;
uchar temp = 0;
void delay(uchar a)
{
uchar b;
while(a--)
{
for(b=0;b<=115;b++)
{;}
}
}
/*芯片初始化,开中断允许*/
void init()
{
EA=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
ET0=1;
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
}
/*初始化pwn控制器*/
void pwn_init()
{
CMOD = 0x0a;
CL = 0;
CH = 0;
CCAP0L = CCAP0H = LEFTPMW; //控制左电机的PCA模块
CCAPM0 = 0x42;
CCAP1L = CCAP1H = RIGHTPWM; //控制右电机的PCA模块
CCAPM1 = 0X42;
CR = 1; //启动计数器
}
/*小车行走功能函数*/
/*到达迷宫出口*/
void stopforever()
{
p20zuo = 1;
p21zuo = 1;
p22you = 1;
p23you = 1;
while(1)
{}
}
/*小车短暂停顿为拐弯做准备*/
void stop()
{
p20zuo = 1;
p21zuo = 1;
p22you = 1;
p23you = 1;
TR0 = 1;
while(1)
{
if(stopnum==10)
{
stopnum = 0;
TR0 = 0;
break;
}
}
}
/*直走调速函数*/
/*直线行走,左加速*/
void speed_regulation1(uint condition)
{
if(condition==2)
{
CCAP0L = CCAP0H = TURNL2PWM;
p22you = 1;
delay(3);
p22you = 0;
CCAP0L = CCAP0H = LEFTPMW;
}
else
{
if(condition==6)
{
CCAP0L = CCAP0H = TURNL1PWM;
delay(20);
CCAP0L = CCAP0H = LEFTPMW;
}
}
}
/*直线行走,右加速*/
void speed_regulation2(uint condition)
{
if(condition==12)
{
CCAP1L = CCAP1H = TURNR1PWM;
delay(20);
CCAP1L = CCAP1H = RIGHTPWM;
}
else
{
if(condition==8)
{
CCAP1L = CCAP1H = TURNR2PWM;
p20zuo = 1;
delay(3);
p20zuo = 0;
CCAP1L = CCAP1H = RIGHTPWM;
}
}
}
/*直线行走,保持原速*/
void speed_regulation3()
{
CCAP0L = CCAP0H = LEFTPMW;
CCAP1L = CCAP1H = RIGHTPWM;
delay(30);
}
void gostraight(uint condition)
{
switch(condition)
{
case 2:speed_regulation1(condition);break; //直线行走,
- 上一篇:mingui编写时钟程序
- 下一篇:纯div+css轮播图片切换图片
相关资源
- 飞思卡尔智能车电机PID的通俗理解及
- 单片机与西门子S7-200通信
- 基于51单片机的记分器
- AT89C51RC2驱动TFT320240显示图片
- 单片机温度测量,与protues仿真
- 基于51单片机的比赛用记分器
- 用DS1302与LCD12864设计的可调电子钟及仿
- 单片机串口通信程序.rar
- 单片机图形
- ADF4350单片机MSP430控制程序
- PROTUSE仿真自动避障or寻迹小车
- 基于MSP430单片机的交流电压测量设计
- 51单片机nrf24L01遥控小车
- 51单片机的数字温度,使用DS18B20,数
- 51单片机的步进电机控制,lcd1602显示
- 强大的液晶菜单
- BEACONSTC8G1K08.zip
- 基于C8051F340单片机通过串口升级的解
- 单片机气缸控制电路
- stc 51单片机实现的交通灯包括keil程序
- 51单片机光敏电阻寻光程序
- 用CPLD实现单片机并行I/O接口的扩展
- 基于模糊自适应PID的智能车辆路径跟
- 十天学会单片机100
- 单片机课程设计--数字温度计
- 智能台灯--基于单片机设计
- 基于单片机控制的智能五子棋
- 基于51单片机的遥控小车设计小车和遥
- 单片机电子秤重量检测与显示设计
- 单片机知识总结 适合考研面试等
评论
共有 条评论