📄 robot_function.c
字号:
#include "bsrSD.h"
#include "s480.h"
#include "robot_s.h"
void Robot_SystemInit(void);
void PlaySnd(unsigned int);
void Robot_LeftLegGo(unsigned int n);
void Robot_LeftLegBack(unsigned int n);
void Robot_RightLegGo(unsigned int n);
void Robot_RightLegBack(unsigned int n);
void Robot_Light(unsigned int n);
void Robot_DanceAgain(unsigned int n);
void Robot_Dance(unsigned int n);
void Robot_Go(unsigned int n);
void Robot_Backup(unsigned int n);
void Robot_TurnLeft(unsigned int n);
void Robot_TurnRight(unsigned int n);
void Robot_HeadTurnLeft(unsigned int n);
void Robot_HeadTurnRight(unsigned int n);
extern void SACM_S480_ServiceLoop();
extern unsigned int SACM_S480_Status();
extern void Delay(unsigned int n);
extern void Set_IOB_Bit(unsigned int,unsigned int,unsigned int
,unsigned int,unsigned int);
void Robot_SystemInit(void)
{
*(unsigned int *)0x7012 = 1;
Delay(500);
*P_IOB_Data = 0xffff;
*P_IOB_Attrib = 0xffff;
*P_IOB_Dir = 0xffff;
*P_IOB_Data = 0x0000;
Delay(500);
}
void PlaySnd(unsigned int SndIndex)
{
BSR_StopRecognizer();
SACM_S480_Initial(1);
SACM_S480_Play(SndIndex,3,3);
while((SACM_S480_Status()&0x0001) != 0)
{
SACM_S480_ServiceLoop();
*(unsigned int *)0x7012 = 1;
}
SACM_S480_Stop();
BSR_InitRecognizer(BSR_MIC);
BSR_EnableCPUIndicator();
}
void Robot_LeftLegGo(unsigned int n)
{
unsigned int uiP_IOB_Data;
unsigned int uiP_IOB_Dir;
unsigned int uiP_IOB_Attrib;
*(unsigned int *)0x7012 = 1;
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x0200; //改变IOB9位
uiP_IOB_Attrib |= 0x0200;
uiP_IOB_Data |= 0x0200;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB9为高电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
Delay(n);
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x0200; //改变IOB9位
uiP_IOB_Attrib |= 0x0200;
uiP_IOB_Data &= 0xfdff;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB9为低电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
}
void Robot_LeftLegBack(unsigned int n)
{
unsigned int uiP_IOB_Data;
unsigned int uiP_IOB_Dir;
unsigned int uiP_IOB_Attrib;
*(unsigned int *)0x7012 = 1;
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x0100; //改变IOB8位
uiP_IOB_Attrib |= 0x0100;
uiP_IOB_Data |= 0x0100;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB8为高电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
Delay(n);
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x0100; //改变IOB8位
uiP_IOB_Attrib |= 0x0100;
uiP_IOB_Data &= 0xfeff;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB8为低电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
}
void Robot_RightLegGo(unsigned int n)
{
unsigned int uiP_IOB_Data;
unsigned int uiP_IOB_Dir;
unsigned int uiP_IOB_Attrib;
*(unsigned int *)0x7012 = 1;
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x0800; //改变IOB11位
uiP_IOB_Attrib |= 0x0800;
uiP_IOB_Data |= 0x0800;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB11为高电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
Delay(n);
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x0800; //改变IOB11位
uiP_IOB_Attrib |= 0x0800;
uiP_IOB_Data &= 0xf7ff;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB11为低电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
}
void Robot_RightLegBack(unsigned int n)
{
unsigned int uiP_IOB_Data;
unsigned int uiP_IOB_Dir;
unsigned int uiP_IOB_Attrib;
*(unsigned int *)0x7012 = 1;
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x0400; //改变IOB10位
uiP_IOB_Attrib |= 0x0400;
uiP_IOB_Data |= 0x0400;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB10为高电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
Delay(n);
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x0400; //改变IOB10位
uiP_IOB_Attrib |= 0x0400;
uiP_IOB_Data &= 0xfbff;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB10为低电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
}
void Robot_Light(unsigned int n)
{
unsigned int uiP_IOB_Data;
unsigned int uiP_IOB_Dir;
unsigned int uiP_IOB_Attrib;
*(unsigned int *)0x7012 = 1;
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x1000; //改变IOB12位
uiP_IOB_Attrib |= 0x1000;
uiP_IOB_Data |= 0x1000;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB12为高电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
Delay(n);
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x1000; //改变IOB12位
uiP_IOB_Attrib |= 0x1000;
uiP_IOB_Data &= 0xefff;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB12为低电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
}
void Robot_DanceAgain(unsigned int n)
{
unsigned int uiCount;
unsigned int uiP_IOB_Data;
unsigned int uiP_IOB_Dir;
unsigned int uiP_IOB_Attrib;
*(unsigned int *)0x7012 = 1;
for(uiCount = 0;uiCount < n;uiCount++)
{
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x2900; //改变IOB8、IOB11、IOB13位
uiP_IOB_Attrib |= 0x2900;
uiP_IOB_Data |= 0x2900;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB8、IOB11、IOB13为高电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
PlaySnd(D24);
Robot_SystemInit();
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x4600; //改变IOB9、IOB10、IOB14位
uiP_IOB_Attrib |= 0x4600;
uiP_IOB_Data |= 0x4600;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB9、IOB10、IOB14为高电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
PlaySnd(D25);
Robot_SystemInit();
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x0900; //改变IOB8、IOB11位
uiP_IOB_Attrib |= 0x0900;
uiP_IOB_Data |= 0x0900;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB8、IOB11为高电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
PlaySnd(D26);
Robot_SystemInit();
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x0a00; //改变IOB9、IOB11位
uiP_IOB_Attrib |= 0x0a00;
uiP_IOB_Data |= 0x0a00;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB9、IOB11为高电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
PlaySnd(D24);
Robot_SystemInit();
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x0500; //改变IOB8、IOB10位
uiP_IOB_Attrib |= 0x0500;
uiP_IOB_Data |= 0x0500;
*P_IOB_Dir = uiP_IOB_Dir; //设置IO8、IOB10为高电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
PlaySnd(D25);
Robot_SystemInit();
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x0a00; //改变IOB9、IOB11位
uiP_IOB_Attrib |= 0x0a00;
uiP_IOB_Data |= 0x0a00;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB9、IOB11为高电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
PlaySnd(D26);
Robot_SystemInit();
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x2200; //改变IOB9、IOB13位
uiP_IOB_Attrib |= 0x2200;
uiP_IOB_Data |= 0x2200;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB9、IOB13为高电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
PlaySnd(D27);
Robot_SystemInit();
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x4800; //改变IOB11、IOB14位
uiP_IOB_Attrib |= 0x4800;
uiP_IOB_Data |= 0x4800;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB11、IOB14为高电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
PlaySnd(D28);
Robot_SystemInit();
uiP_IOB_Dir = *P_IOB_Dir; //读回IOB口的状态值
uiP_IOB_Attrib = *P_IOB_Attrib;
uiP_IOB_Data = *P_IOB_Data;
uiP_IOB_Dir |= 0x0200; //改变IOB9位
uiP_IOB_Attrib |= 0x0200;
uiP_IOB_Data |= 0x0200;
*P_IOB_Dir = uiP_IOB_Dir; //设置IOB9为高电平输出
*P_IOB_Attrib = uiP_IOB_Attrib; //其它IO口不变
*P_IOB_Data = uiP_IOB_Data;
PlaySnd(D29);
Robot_SystemInit();
}
Robot_SystemInit();
}
void Robot_Dance(unsigned int n)
{
unsigned int uiCount;
*(unsigned int *)0x7012 = 1;
for(uiCount = 0;uiCount < n;uiCount++)
{
Set_IOB_Bit(11,1,1,1,1);
PlaySnd(MUSIC1);
Set_IOB_Bit(11,1,1,0,0);
Set_IOB_Bit(9,1,1,1,1);
*(unsigned int *)0x7012 = 0x0001;
PlaySnd(MUSIC2);
Set_IOB_Bit(9,1,1,0,0);
Set_IOB_Bit(11,1,1,1,1);
Set_IOB_Bit(9,1,1,1,1);
*(unsigned int *)0x7012 = 0x0001;
PlaySnd(MUSIC3);
Set_IOB_Bit(11,1,1,0,0);
Set_IOB_Bit(9,1,1,0,0);
Set_IOB_Bit(13,1,1,1,1);
*(unsigned int *)0x7012 = 0x0001;
PlaySnd(MUSIC4);
Set_IOB_Bit(13,1,1,0,0);
Set_IOB_Bit(14,1,1,1,1);
Set_IOB_Bit(9,1,1,1,1);
*(unsigned int *)0x7012 = 0x0001;
PlaySnd(MUSIC4);
Set_IOB_Bit(9,1,1,0,0);
Set_IOB_Bit(8,1,1,1,1);
Set_IOB_Bit(11,1,1,1,1);
Set_IOB_Bit(14,1,1,1,1);
*(unsigned int *)0x7012 = 0x0001;
Delay(400);
Robot_SystemInit();
}
Robot_SystemInit();
}
void Robot_Go(unsigned int n)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < n;uiCount++)
{
Set_IOB_Bit(9,1,1,1,1);
PlaySnd(WALK);
Set_IOB_Bit(9,1,1,0,0);
Set_IOB_Bit(11,1,1,1,1);
Delay(2000);
*(unsigned int *)0x7012 = 0x0001;
PlaySnd(WALK);
Set_IOB_Bit(9,1,1,1,1);
Set_IOB_Bit(11,1,1,0,0);
Delay(2000);
*(unsigned int *)0x7012 = 0x0001;
PlaySnd(WALK);
Set_IOB_Bit(9,1,1,0,0);
Set_IOB_Bit(11,1,1,1,1);
Delay(2000);
*(unsigned int *)0x7012 = 0x0001;
PlaySnd(WALK);
Set_IOB_Bit(9,1,1,1,1);
Set_IOB_Bit(11,1,1,0,0);
Delay(2000);
*(unsigned int *)0x7012 = 0x0001;
PlaySnd(WALK);
Set_IOB_Bit(9,1,1,0,0);
Set_IOB_Bit(11,1,1,1,1);
Delay(2000);
*(unsigned int *)0x7012 = 0x0001;
PlaySnd(WALK);
Set_IOB_Bit(9,1,1,1,1);
Set_IOB_Bit(11,1,1,0,0);
Delay(2000);
*(unsigned int *)0x7012 = 0x0001;
PlaySnd(WALK);
Set_IOB_Bit(9,1,1,0,0);
Set_IOB_Bit(11,1,1,1,1);
Delay(2000);
*(unsigned int *)0x7012 = 0x0001;
Robot_SystemInit();
}
Robot_SystemInit();
}
void Robot_Backup(unsigned int n)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < n;uiCount++)
{
Set_IOB_Bit(8,1,1,1,1);
PlaySnd(WALK);
Set_IOB_Bit(8,1,1,0,0);
Set_IOB_Bit(10,1,1,1,1);
Delay(2000);
PlaySnd(WALK);
Set_IOB_Bit(8,1,1,1,1);
Set_IOB_Bit(10,1,1,0,0);
Delay(2000);
PlaySnd(WALK);
Set_IOB_Bit(8,1,1,0,0);
Set_IOB_Bit(10,1,1,1,1);
Delay(2000);
Robot_SystemInit();
}
Robot_SystemInit();
}
void Robot_TurnLeft(unsigned int n)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < n;uiCount++)
{
Set_IOB_Bit(9,1,1,1,1);
Set_IOB_Bit(10,1,1,1,1);
PlaySnd(WALK);
Delay(2000);
Robot_SystemInit();
}
}
void Robot_TurnRight(unsigned int n)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < n;uiCount++)
{
Set_IOB_Bit(8,1,1,1,1);
Set_IOB_Bit(11,1,1,1,1);
PlaySnd(WALK);
Delay(2000);
Robot_SystemInit();
}
}
void Robot_HeadTurnLeft(unsigned int n)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < n; uiCount++)
{
Set_IOB_Bit(13,1,1,1,1);
PlaySnd(TURNHEAD);
Delay(200);
Robot_SystemInit();
}
}
void Robot_HeadTurnRight(unsigned int n)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < n;uiCount++)
{
Set_IOB_Bit(14,1,1,1,1);
PlaySnd(TURNHEAD);
Delay(200);
Robot_SystemInit();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -