📄 hongwai.c
字号:
#include<spce061a_chf.h>
void right();
void left();//左转和右转函数
void up();
void down();//前进和后退函数
void stop();//停车函数
void initnal();//初始化函数
void khz_38();//产生方波的函数
void delay100();//各个过程之间的时间间隔
void delay();
unsigned int flag=1;//识别有障碍物的标志,没有障碍物时候就为1,否则为0
extern count;
int main()
{
initnal();
while(1)
{
while(flag)//没有障碍物就一直前进
{
Watchdog_Clear();
khz_38();//先产生方波
up();//一开始是前进
}
flag=1;
stop();//识别到有障碍物就先停车
delay100();//先暂停
right();//程序规定车子先右转
delay();//转弯要用的时间
stop();//转弯结束后再将车子停下
if(!flag)/////////如果转了弯后还有障碍物的话就后退
{
flag=1;
left();
delay100();
delay100();//在原来位置反转180
stop();
}
if(!flag)////////在原来的位置若还有障碍物就反转到与开始的位置相反的方向
{
flag=1;
left();
delay100();
stop();
}
}
}
/////////////////////////////初始化函数/////////////////////////////////////////////
void initnal()
{
Set_IOA_Dir(0x000f);
Set_IOA_Attrib(0x000f);
Set_IOA_Data(0x0000);//低4位控制电机
Set_IOB_Dir(0x0200);
Set_IOB_Attrib(0x0200);
Set_IOB_Data(0x0200);//IOB9为38KHz的方波输出端,IOB3为外部中断2的输入,设置为输入方式
Set_SystemClock(0x0078);//PLL:40.96MHz,Fosc:40.96MHz
*P_TimerB_Ctrl=0x0200; //TimerA:20.48MHz,占空比为8/16
*P_TimerB_Data=0xFFDF; //13us
*P_INT_Ctrl=0x8200;//开PWM INT和EXT2中断
asm("INT fiq"); //开PWM中断
asm("int irq");//开ext2中断
}
///////////////////////////产生方波的函数////////////////////////
void khz_38()
{
unsigned int i=0x0200;
if(count==10000)//定时发送方波的程序
{
count=0;
i^=0x0200;
*P_TimerB_Ctrl=i;
}
}
//////////////////////////////////车子右转函数/////////////////////////////
void right()
{
Set_IOA_Data(0x000c);
}
//////////////////////////////////车子左转函数/////////////////////////////
void left()
{
Set_IOA_Data(0x0005);
}
//////////////////////////////////车子前进函数/////////////////////////////
void up()
{
Set_IOA_Data(0x0002);
}
//////////////////////////////////车子后退函数/////////////////////////////
void down()
{
Set_IOA_Data(0x0001);
}
/////////////////////////////////车子停车函数/////////////////////////////////
void stop()
{
Set_IOA_Data(0x0000);
}
///////////////////////////////延时函数///////////////////////
void delay100()
{
unsigned int i=1000;
while(i--)
{
Watchdog_Clear();
}
}
////////////////////////////转弯要用到的时间/////////////////////
void delay()
{
unsigned int i=10000;
while(i--)
{
Watchdog_Clear();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -