第8页
PINSEL1=0X00000000;
PINSEL2&=~(0x00000006); //设置所有I/O口为普通GPIO口 IO0DIR =MOTOCON; // 配置LED控制I/O方向 LCD12864_init();
//液晶端口初始化
while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key4)&&(IO0PIN&key5)!=0) {
initinal();
lcd_mesg(IC_DAT6); //显示界面 }
while(1) {
if ((IO0PIN&key1)==0) MOTO_Mode1(10);
else if((IO0PIN&key4)==0) MOTO_Mode10(10);
// A-B-C-D else if ((IO0PIN&key2)==0) MOTO_Mode2(10);
else if((IO0PIN&key4)==0) MOTO_Mode20(10);
// AB-BC-CD-DA-AB else if ((IO0PIN&key3)==0) MOTO_Mode3(10);
else if((IO0PIN&key4)==0)
MOTO_Mode30(10); // A-AB-B-BC-C-CD-D-DA-A
else if((IO0PIN&key5)==0) // 停止 initinal();
lcd_mesg(IC_DAT5); IO0CLR=MOTOCON; }
return(0); }
/**************************************************************************** * 名 称:DelayNS()
第9页
* 功 能:长软件延时 * 入口参数:dly 延时参数,值越大,延时越久 * 出口参数:无
****************************************************************************/ void DelayNS(uint32 dly) { uint32 i;
for(; dly>0; dly--) {
for(i=0; i<5000; i++); } }
/**************************************************************************** * 名 称:MOTO_Mode1() * 功 能:单四拍程序 * 入口参数:uint8 i 延时参数,值越大,延时越久 * 出口参数:无
****************************************************************************/ void MOTO_Mode1(uint8 i) // A-B-C-D {
while((IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key4)&&(IO0PIN&key5)!=0) {
initinal();
lcd_mesg(IC_DAT1); //显示汉字界面1 /* A */
GPIOSET(MOTOA); DelayNS(i);
GPIOCLR(MOTOA); /* B */
GPIOSET(MOTOB); DelayNS(i);
GPIOCLR(MOTOB); /* C */
GPIOSET(MOTOC); DelayNS(i);
GPIOCLR(MOTOC);
/* D */
GPIOSET(MOTOD); DelayNS(i);
GPIOCLR(MOTOD); }
第10页
}
void MOTO_Mode10(uint8 i) // D - C -B- A {
while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key5)!=0) {
initinal();
lcd_mesg(IC_DAT4); /* D */
GPIOSET(MOTOD); DelayNS(i);
GPIOCLR(MOTOD); /* C */
GPIOSET(MOTOC); DelayNS(i);
GPIOCLR(MOTOC); /* B */
GPIOSET(MOTOB); DelayNS(i);
GPIOCLR(MOTOB);
/* A */
GPIOSET(MOTOA); DelayNS(i);
GPIOCLR(MOTOA); } }
/**************************************************************************** * 名 称:MOTO_Mode2() * 功 能:双四拍程序 * 入口参数:uint8 i 延时参数,值越大,延时越久 * 出口参数:无
****************************************************************************/ void MOTO_Mode2(uint8 i) // AB-BC-CD-DA-AB {
while((IO0PIN&key1)&&(IO0PIN&key3)&&(IO0PIN&key4)&&(IO0PIN&key5)!=0) {
initinal();
lcd_mesg(IC_DAT2); //显示汉字界面2 GPIOSET(MOTOA); GPIOSET(MOTOB); DelayNS(i);
第11页
GPIOCLR(MOTOA); GPIOCLR(MOTOB); /* BC */
GPIOSET(MOTOB); GPIOSET(MOTOC); DelayNS(i);
GPIOCLR(MOTOB); GPIOCLR(MOTOC);
/* CD */
GPIOSET(MOTOC); GPIOSET(MOTOD); DelayNS(i);
GPIOCLR(MOTOC); GPIOCLR(MOTOD); /* DA */
GPIOSET(MOTOD); GPIOSET(MOTOA); DelayNS(i);
GPIOCLR(MOTOD); GPIOCLR(MOTOA); } }
void MOTO_Mode20(uint8 i) // AD-DC- CB-BA- AD {
while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key5)!=0) {
initinal();
lcd_mesg(IC_DAT4); GPIOSET(MOTOA); GPIOSET(MOTOD); DelayNS(i);
GPIOCLR(MOTOA); GPIOCLR(MOTOD); /* DC */
GPIOSET(MOTOD); GPIOSET(MOTOC); DelayNS(i);
GPIOCLR(MOTOD); GPIOCLR(MOTOC);
/* CB */