📄 system.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 + -