⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hongwai.c

📁 这里有很多我自己做的凌阳单片机源程序
💻 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 + -