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

📄 system.c

📁 超声波倒车雷达的设计程序 利用SPCE061A单片机实现超声波倒车雷达的测量计算方法。程序中采用软件校正
💻 C
字号:
//========================================================
//	文件名称:	system.c
//	功能描述:	系统初始化、部分功能程序
//	日期:	    2006-4-20	
//========================================================
//========================================================
#include "SPCE061A.h"
#include "S480.h"
//下面的函数定义在Speech.c当中,播放A2000语音资源子程序
extern void PlaySnd_Auto(unsigned int uiSndIndex,unsigned int uiDAC_Channel);
extern void Speech_Result(unsigned int uiResult,unsigned int Direction);
extern void LCD_DISP(unsigned int lcd_dat0,unsigned int lcd_dat1);
extern void Led_Disp(unsigned int uiResult0,unsigned int uiResult1);
extern void User_Delay(unsigned int iTimers);
extern void wr_com(unsigned int comm);
unsigned int Show_Freq_Set[2] = {0,0};
unsigned int Show_Counter_1KHz[2] = {0,0};
extern unsigned int uiLCD_EN_flag;		//使能标识位
extern unsigned int Too_Freq;
extern unsigned int Counter_2Hz;
//=======================================================================
//	语法格式:	void Initial_IO(void)
//	实现功能:	系统端口初始化程序
//	参数:		无
//	返回值:	无
//=======================================================================
void Initial_IO(void)
{
/*	*P_IOA_Dir = *P_IOA_Dir|0xff00;
	*P_IOA_Attrib = *P_IOA_Attrib|0xff00;
	*P_IOA_Data = *P_IOA_Buffer&0x00ff;*/
	*P_IOA_Dir=0xffff;
	*P_IOA_Attrib=0xffff;	
	*P_IOB_Dir = *P_IOB_Dir|0x0003;
	*P_IOB_Attrib = *P_IOB_Attrib|0x0003;
	*P_IOB_Data = *P_IOB_Buffer&0xFFFc;
}
//=======================================================================
//	语法格式:	void Channel_Sel(unsigned int ch)
//	实现功能:	传感器通道选择
//	参数:		ch   选择的通道号(0~1)
//	返回值:	无
//=======================================================================
void Channel_Sel(unsigned int ch)
{
	unsigned int uiTemp;
	ch = ch&0x0003;										//只取低二位,因为系统设计仅使用了IOB0和IOB1
	uiTemp = *P_IOB_Buffer;								//采用先读,再计数,再写的方式
	uiTemp = uiTemp&0xfffc;								//保证其它端口状态不变
	uiTemp = uiTemp|ch;
	*P_IOB_Data = uiTemp;
}
//=======================================================================
//	语法格式:	void Result_Check(unsigned int ch,unsigned int Result[3])
//	实现功能:	测量结果处理程序   更新状态显示频率设置值,更新状态显示
//				针对测量结果进行语音播报
//	参数:		unsigned int ch		通道号数
//				unsigned int Result	该通道的测量值
//	返回值:	无
//=======================================================================
void Result_Check(unsigned int ch,unsigned int Result[2])
{
	unsigned int Result_tmp;
/*	if(Result[ch]<50)									//判断测量结果是否大于150cm?
	{													//小于,则设置显示频率值
		//if(Result[ch]>0)	Show_Freq_Set[ch] = Result[ch]*6;	//如果非零,则结果乘以6
		if(Result[ch]>0)	Show_Freq_Set[0] = Result[ch]*6;
		else Show_Freq_Set[ch] = 100;					//如果结果为零,则设置为100
	}*/													//数值越大,则频率越低
/*	else 
	{
		Show_Freq_Set[ch] = 0;							//测量值大于150cm
		switch(ch)
		{												//对应通道的状态显示进行熄灭操作
			case 0:*P_IOA_Data = *P_IOA_Buffer&(~0x0100); break;
			case 1:*P_IOA_Data = *P_IOA_Buffer&(~0x0200); break;
			//case 2:*P_IOA_Data = *P_IOA_Buffer&(~0x0400); break;
			default: break;
		}
	}*/
	Led_Disp(Result[0],Result[1]);//
	LCD_DISP(Result[0],Result[1]);
if((Result[0]<30||Result[1]<30)==1)
{
	Too_Freq=1;
	if(Counter_2Hz>Too_Freq)
	{
	PlaySnd_Auto(15,3);
		Counter_2Hz = 0;
		*P_INT_Ctrl = *P_INT_Ctrl_New|0x0008;			//重新打开IRQ5的2Hz中断		
	}
}


else
	{
		Too_Freq=9;
		if(Counter_2Hz<Too_Freq)
		{			
			*P_INT_Ctrl = *P_INT_Ctrl_New|0x0008;			//重新打开IRQ5的2Hz中断
		}
	if((Result[0]<50||Result[1]<50)==1)
	{	
//	wr_com(0x01);
// 	delay50us();
// 	wr_com(0x38);
// 	delay50us();
 	wr_com(0x08);
// 	delay50us();
// 	wr_com(0x06);
 	User_Delay(5000);
 	wr_com(0x0c); 	
// 	delay50us();		
//	LCD_DISP(Result[0],Result[1]);
	}

	else if((Result[0]<150&&Result[1]<150)==1)
	{	
		Result_tmp=Result[0];
		if(Result_tmp>Result[1])
		{
			Result_tmp=Result[1];
		}
		Speech_Result(Result_tmp,14);
	}		
	else if(Result[1]<150)//||Result[0]<150&&Result[2]<150
	{
		//PlaySnd_Auto(13,3);
		Speech_Result(Result[1],13);
	}
	else if(Result[0]<150)
	{
		//PlaySnd_Auto(12,3);
		Speech_Result(Result[0],12);
	}
//}
/*	else if(Result[2]<150)
	{
		PlaySnd_Auto(2,3);*/
	}

}
//=======================================================================
//	语法格式:	void Show_Flag(void)
//	实现功能:	状态显示程序,在IRQ4的1KHz中断当中调用
//	参数:		无
//	返回值:	无
//=======================================================================
/*void Show_Flag(void)
{	
	if(Show_Freq_Set[0]!=0)								//第一组传感器(左)
	{													//该显示频率设置的变量非零,表示要进行状态显示
		Show_Counter_1KHz[0] = Show_Counter_1KHz[0]+1;	//计数器加1
		if(Show_Counter_1KHz[0]>Show_Freq_Set[0])		//如果计数达到了显示频率设置的值,表示需要对端口
		{												//输出进行翻转
			Show_Counter_1KHz[0] = 0;					//计数器清零
			//P_IOA_Data = *P_IOA_Buffer^0x0100;			//与1进行异或, 相当于对该位进行取反
			uiLCD_EN_flag = uiLCD_EN_flag^0x0001;
		}
	}
	switch(uiLCD_EN_flag)
		{
			case 0:wr_com(0x0c); break;//uiLCD_EN_flag=1;User_Delay(10);
			case 1:wr_com(0x08); break;//uiLCD_EN_flag=0;User_Delay(10);
			default: break;
		}*/
/*	if(Show_Freq_Set[1]!=0)								//第二组传感器(中)
	{
		Show_Counter_1KHz[1] = Show_Counter_1KHz[1]+1;
		if(Show_Counter_1KHz[1]>Show_Freq_Set[1])
		{
			Show_Counter_1KHz[1] = 0;
			//P_IOA_Data = *P_IOA_Buffer^0x0200;
		}
	}*/
	/*if(Show_Freq_Set[2]!=0)								//第三组传感器(右)
	{
		Show_Counter_1KHz[2] = Show_Counter_1KHz[2]+1;
		if(Show_Counter_1KHz[2]>Show_Freq_Set[2])
		{
			Show_Counter_1KHz[2] = 0;
			*P_IOA_Data = *P_IOA_Buffer^0x0400;
		}
	}
}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -