📄 main.c
字号:
//==========================================================================
// The information contained herein is the exclusive property of
// Sunnnorth Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//============================================================================
//============================================================================
// 工程名称: Car_Radar
// 功能描述: 超声波倒车雷达应用方案,配合2005~2006新版毕业设计大礼包发行
// IDE环境: SUNPLUS u'nSPTM IDE 2.0.0(or later)
// 涉及的库: CMacro1016.lib
// 组成文件: main.c
// UserFunction.c 超声波测距子程序
// IntDocument.c 中断服务程序,超声波测距的部分代码也在其中
// system.c 系统端口初始化、部分功能程序
// Speech.c 语音播放程序
// isr.asm 语音播放使用的FIQ中断服务程序
// hardware.asm 语音播放使用的支持文件(用户无需修改)
//
// 硬件连接: IOA8、IOA9、IOA10外接三个发光二极管
// IOB0、IOB1接CD4052(模拟开关)的A0、A1,作为通道先择用
// IOB2 作为回波信号接收,请参考提供的电路图连接
// IOB3 作为超声波模组发射使能,请参考提供的电路图连接
// 日期: 2005-12-13 v1.0
//============================================================================
//========================================================
// 文件名称: main.c
// 功能描述: 主程序文件
// 维护记录: 2005-12-13 v1.0
//========================================================
#include "SPCE061A.h"
//for Measure 以下变量,函数在UserFunction.c中定义
extern unsigned int M_TIMER_DELAY;
extern unsigned int M_LOW_DISTEN;
extern unsigned int M_TIMER_OFFSET;
extern unsigned int M_TIMER_SEND;
extern unsigned int M_MUT_DATA;
extern void InitMeasure(void);
extern unsigned int BeginMeasure(void);
//..end
extern void Initial_IO(void);
extern void Channel_Sel(unsigned int ch); //通道选择
//Result_Check函数为测量结果处理程序,
//包括显示更新、语音播报
extern void Result_Check(unsigned int ch,unsigned int Result[3]);
//=======================================================================
// 语法格式: void Delay_1ms(unsigned int Timers)
// 实现功能: 利用IRQ4的1KHz中断的ms延时程序
// 参数: 需要延时的ms数
// 返回值: 无
//=======================================================================
unsigned int Counter_1KHz = 0; //用于1KHz中断里作为后台计数器用,用于延时
void Delay_1ms(unsigned int Timers)
{
Counter_1KHz = 0; //清零
while(Counter_1KHz<Timers) //循环等待该计数器在1KHz中断当中计数
{ //达到预定值
*P_Watchdog_Clear = 0x0001;
}
}
//=======================================================================
// 语法格式: int main(void)
// 实现功能: 多组超声波模组巡回测距、状态显示Demo程序
// (超声波倒车达雷)主程序
// 参数: 无
// 返回值: 无意义
//=======================================================================
int main(void)
{
unsigned int Back_Data[3];
unsigned int ch_Sel = 0;
InitMeasure(); //测距初始化
Initial_IO(); //初始化系统所使用的端口
*P_INT_Ctrl = *P_INT_Ctrl_New|0x0020; //打开IRQ4的1KHz中断
M_TIMER_DELAY = 200; //初始化测距所需要的参数....
M_LOW_DISTEN = 30;
M_TIMER_OFFSET = 20;
M_TIMER_SEND = 15;
M_MUT_DATA = 32300; //...end
while(1)
{
Channel_Sel(ch_Sel); //选择通道
Back_Data[ch_Sel] = BeginMeasure(); //进行一次测距
Result_Check(ch_Sel,Back_Data); //对每一通道测量结果进行处理
ch_Sel++; //通道号数自加1
if(ch_Sel>2) ch_Sel = 0; //如果通道数超过了预设的,则归零
Delay_1ms(20); //延时20ms后再进行下一通道的测量
*P_Watchdog_Clear = 0x0001;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -