资源简介
这是用加强型单片机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轮播图片切换图片
相关资源
- STC8951系列单片机中方指南
- The Secret Path 3D 3D魔方迷宫[源码][scra
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51单片机PWM程序,占空比、周期可调整
- 单片机和adc0809数字电压表
- PIC单片机完成的电子密码锁
- 单片机、ADC0808809设计简易数字电压表
- 51单片机多功能自行车测速仪
- 单片机做的6位时分秒数字钟
- 单片机电子时钟 闹钟 日历
- 音乐代码转换软件 单片机编程时用
- 单片机课程设计 篮球计分器
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 51单片机基于protues的几个仿真实例
- 基于52单片机的直流电压测量
- 38k单片机红外发送代码、keil
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 武汉理工大学 单片机课程设计 16*16点
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- 浙江工业大学2005-2006学年单片机习题
- 单片机与PC机串口通讯仿真
- 毕业设计 单片机 对讲机 protues仿真
评论
共有 条评论