迷宫鼠出厂主程序.docx
《迷宫鼠出厂主程序.docx》由会员分享,可在线阅读,更多相关《迷宫鼠出厂主程序.docx(40页珍藏版)》请在冰豆网上搜索。
迷宫鼠出厂主程序
/****************************************Copyright(c)****************************************************
**GuangzhouZHIYUANelectronicsCo.,LTD.
**
**
**
**--------------FileInfo---------------------------------------------------------------------------------
**Filename:
main.c
**LastmodifiedDate:
2011-03-11
**LastVersion:
V1.01
**Descriptions:
Themain()functionexampletemplate
**
**--------------------------------------------------------------------------------------------------------
**Createdby:
廖茂刚
**Createddate:
2008-02-14
**Version:
V1.00
**Descriptions:
MicroMouse615上的无记忆功能的走迷宫实验
**
**--------------------------------------------------------------------------------------------------------
**Modifiedby:
FanLinyun
**Modifieddate:
2011-03-11
**Version:
V1.01
**Descriptions:
移植到MicroMouse1752上
**
**Recheckedby:
*********************************************************************************************************/
#include"..\config.h"
#include"zlg7289.h"
/*********************************************************************************************************
按键宏定义
*********************************************************************************************************/
#defineKEY(1<<6)/*按键连接的端口*/
#defineKEY_PRESS()(!
(FIO2PIN&KEY))/*按键是否按下判断*/
/*********************************************************************************************************
IR相关宏定义
*********************************************************************************************************/
#defineIR_SIDE_LFT(1ul<<0)/*左方传感器输出的信号*/
#defineIR_DIG_LFT(1ul<<1)/*左前方传感器输出的信号*/
#defineIR_FRONT(1ul<<4)/*前方传感器输出的信号*/
#defineIR_DIG_RGT(1ul<<8)/*右前方传感器输出的信号*/
#defineIR_SIDE_RGT(1ul<<9)/*右方传感器输出的信号*/
#defineFRONT_SIDE_PWM_INDEX1/*左前右驱动传感器PWM索引号*/
#defineDIG_PWM_INDEX2/*左前右前驱动传感器PWM索引号*/
#definePWM_RESET()PWM1TCR=0x02/*PWM复位*/
#definePWM_START()PWM1TCR=0x05/*PWM使能*/
#definePWM_FRQ_SET(x)PWM1MR0=(FPCLK/(x))/*PWM频率设置*/
#defineFRONTSIDE_PWM_PULSE_SET(x)PWM1MR2=(x)/*左前右PWM占空比设置*/
#defineDIG_PWM_PULSE_SET(x)PWM1MR1=(x)/*左前右前PWM占空比设置*/
#defineFRONTSIDE_PWM_EN()PWM1PCR|=(1<<10)/*左前右PWM输出使能*/
#defineDIG_PWM_EN()PWM1PCR|=(1<<9)/*左前右前PWM输出使能*/
#defineFRONTSIDE_PWM_DIS()PWM1PCR&=~(1<<10)/*左前右PWM输出禁能*/
#defineDIG_PWM_DIS()PWM1PCR&=~(1<<9)/*左前右前PWM输出禁能*/
#defineIR_PIN_MODE_IN()FIO1DIR&=/*配置传感器检测引脚为输入*/\
~(IR_SIDE_LFT|IR_DIG_LFT|IR_FRONT|IR_DIG_RGT|IR_SIDE_RGT)
#defineIR_READ()FIO1PIN/*红外信号读取*/
/*********************************************************************************************************
电机相关宏定义
*********************************************************************************************************/
/*
*左电机接口
*/
#defineMT_LFT_A1(1<<2)
#defineMT_LFT_A2(1<<3)
#defineMT_LFT_B1(1<<4)
#defineMT_LFT_B2(1<<5)
/*
*右电机接口
*/
#defineMT_RGT_A1(1<<25)
#defineMT_RGT_A2(1<<26)
#defineMT_RGT_B1(1<<28)
#defineMT_RGT_B2(1<<29)
/*
*左电机拍数宏定义
*/
#defineMT_LFT_OFF()FIO2CLR=(MT_LFT_A1|MT_LFT_A2|MT_LFT_B1|MT_LFT_B2)
#defineMT_LFT_STEP1_SET()FIO2CLR=MT_LFT_A1|MT_LFT_A2|MT_LFT_B1|MT_LFT_B2;\
FIO2SET=MT_LFT_A1
#defineMT_LFT_STEP2_SET()FIO2CLR=MT_LFT_A1|MT_LFT_A2|MT_LFT_B1|MT_LFT_B2;\
FIO2SET=MT_LFT_A1|MT_LFT_B1
#defineMT_LFT_STEP3_SET()FIO2CLR=MT_LFT_A1|MT_LFT_A2|MT_LFT_B1|MT_LFT_B2;\
FIO2SET=MT_LFT_B1
#defineMT_LFT_STEP4_SET()FIO2CLR=MT_LFT_A1|MT_LFT_A2|MT_LFT_B1|MT_LFT_B2;\
FIO2SET=MT_LFT_A2|MT_LFT_B1
#defineMT_LFT_STEP5_SET()FIO2CLR=MT_LFT_A1|MT_LFT_A2|MT_LFT_B1|MT_LFT_B2;\
FIO2SET=MT_LFT_A2
#defineMT_LFT_STEP6_SET()FIO2CLR=MT_LFT_A1|MT_LFT_A2|MT_LFT_B1|MT_LFT_B2;\
FIO2SET=MT_LFT_A2|MT_LFT_B2
#defineMT_LFT_STEP7_SET()FIO2CLR=MT_LFT_A1|MT_LFT_A2|MT_LFT_B1|MT_LFT_B2;\
FIO2SET=MT_LFT_B2
#defineMT_LFT_STEP8_SET()FIO2CLR=MT_LFT_A1|MT_LFT_A2|MT_LFT_B1|MT_LFT_B2;\
FIO2SET=MT_LFT_A1|MT_LFT_B2
/*
*右电机拍数宏定义
*/
#defineMT_RGT_OFF()FIO1CLR=(MT_RGT_A1|MT_RGT_A2|MT_RGT_B1|MT_RGT_B2)
#defineMT_RGT_STEP1_SET()FIO1CLR=MT_RGT_A1|MT_RGT_A2|MT_RGT_B1|MT_RGT_B2;\
FIO1SET=MT_RGT_A1
#defineMT_RGT_STEP2_SET()FIO1CLR=MT_RGT_A1|MT_RGT_A2|MT_RGT_B1|MT_RGT_B2;\
FIO1SET=MT_RGT_A1|MT_RGT_B1
#defineMT_RGT_STEP3_SET()FIO1CLR=MT_RGT_A1|MT_RGT_A2|MT_RGT_B1|MT_RGT_B2;\
FIO1SET=MT_RGT_B1
#defineMT_RGT_STEP4_SET()FIO1CLR=MT_RGT_A1|MT_RGT_A2|MT_RGT_B1|MT_RGT_B2;\
FIO1SET=MT_RGT_A2|MT_RGT_B1
#defineMT_RGT_STEP5_SET()FIO1CLR=MT_RGT_A1|MT_RGT_A2|MT_RGT_B1|MT_RGT_B2;\
FIO1SET=MT_RGT_A2
#defineMT_RGT_STEP6_SET()FIO1CLR=MT_RGT_A1|MT_RGT_A2|MT_RGT_B1|MT_RGT_B2;\
FIO1SET=MT_RGT_A2|MT_RGT_B2
#defineMT_RGT_STEP7_SET()FIO1CLR=MT_RGT_A1|MT_RGT_A2|MT_RGT_B1|MT_RGT_B2;\
FIO1SET=MT_RGT_B2
#defineMT_RGT_STEP8_SET()FIO1CLR=MT_RGT_A1|MT_RGT_A2|MT_RGT_B1|MT_RGT_B2;\
FIO1SET=MT_RGT_A1|MT_RGT_B2
/*********************************************************************************************************
ADC宏定义
*********************************************************************************************************/
#defineADC_SMP_ON()AD0CR|=(1<<24)/*ADC采样开始*/
#defineADC_DATA_READY_FLG()(ADSTAT&(1<<5))/*ADC采样结束判断*/
#defineADC_DATA_GET()((ADDR5>>4)&0xFFF)/*ADC数据获取*/
/*********************************************************************************************************
定时器宏定义
*********************************************************************************************************/
#defineTIMER0_INT_CLR()T0IR=0x01/*定时器0清中断标志*/
#defineTIMER1_INT_CLR()T1IR=0x01/*定时器1清中断标志*/
#defineTIMER0_LOAD_SET(x)T0TCR=0x02;/*定时器0装载值设定*/\
T0MR0=x;\
T0TCR=0x01
#defineTIMER1_LOAD_SET(x)T1TCR=0x02;/*定时器1装载值设定*/\
T1MR0=x;\
T1TCR=0x01
/*********************************************************************************************************
迷宫类型宏定义
*********************************************************************************************************/
#defineMAZETYPE8/*8:
四分之一迷宫;16:
全迷宫*/
/*********************************************************************************************************
前进一个迷宫格步进电机需要走的步数宏定义
*********************************************************************************************************/
#defineONEBLOCK125
/*********************************************************************************************************
电脑鼠状态宏定义
*********************************************************************************************************/
#defineSTOP0/*电脑鼠停止*/
#defineGO_AHEAD1/*电脑鼠前进*/
#defineTURN_LEFT3/*电脑鼠向左转*/
#defineTURN_RIGHT4/*电脑鼠向右转*/
#defineTURN_BACK5/*电脑鼠向后转*/
/*********************************************************************************************************
传感器宏定义
*********************************************************************************************************/
#defineLEFT0/*左方传感器*/
#defineFRONTL1/*左前方传感器*/
#defineFRONT2/*前方传感器*/
#defineFRONTR3/*右前方传感器*/
#defineRIGHT4/*右方传感器*/
/*********************************************************************************************************
电机状态宏定义
*********************************************************************************************************/
#defineMOTOR_STOP0/*电机停止*/
#defineWAITONE_STEP1/*电机暂停一步*/
#defineMOTOR_RUN2/*电机运行*/
/*********************************************************************************************************
常量宏定义--电机运行方向
*********************************************************************************************************/
#defineMOTOR_GO_AHEAD0/*电机前进*/
#defineMOTOR_GO_BACK1/*电机后退*/
/*********************************************************************************************************
结构体定义
*********************************************************************************************************/
structmotor{
volatileINT8ScState;/*电机运行状态*/
volatileINT8ScDir;/*电机运行方向*/
volatileINT32UulPulse;/*电机需要转动的步数*/
volatileINT32UulPulseCtr;/*电机已转动的步数*/
volatileINT32SlSpeed;/*电机转动速度*/
};
typedefstructmotorMOTOR;
/*********************************************************************************************************
定义全局变量
*********************************************************************************************************/
staticMOTORGmRight={MOTOR_STOP,MOTOR_GO_AHEAD,0,0,0};/*定义并初始化右电机状态*/
staticMOTORGmLeft={MOTOR_STOP,MOTOR_GO_AHEAD,0,0,0};/*定义并初始化左电机状态*/
staticvolatileINT8UGucMouseState=STOP;/*保存电脑鼠当前运行状态*/
staticINT32UGulAccelTable[300]={0};/*电机加减速各阶段定时器值*/
staticINT32SGlMaxSpeed=60;/*保存允许运行的最大速度*/
staticvolatileINT8UGucDistance[5]={0};/*记录传感器状态*/
/*********************************************************************************************************
**Functionname:
myDelay
**Descriptions:
软件延时
**inputparameters:
延时时间,单位为us
**outputparameters:
无
**Returnedvalue:
无
*********************************************************************************************************/
voiddelayMs(INT32UulTime)
{
INT32Ui;
while(ulTime--){
for(i=0;i<(FCCLK/1000/3);i++);
}
}
/*********************************************************************************************************
**Functionname:
lftMtCtrl
**Descriptions:
左步进电机驱动时序
**inputparameters:
GmLeft.cDir:
电机运行方向
**outputparameters:
无
**Returnedvalue:
无
*********************************************************************************************************/
voidlftMtCtrl(void)
{
staticI