我的一个涉及计数的程序不工作,求指导
/*--------------------------------------------------------------------------------------
文件: Main.c
--------------------------------------------------------------------------------------*/
#include "50js_STC89.H" // STC89系列单片机头文件
#include "50js_Type.h" // 数据类型声明头文件
#include "50js_Board.h" // 按键引脚定义及相关功能头文件
#include "50js_Si24R1.h" // Si24R1无线数传模块驱动头文件
uint8 key_down=0; // 按键按下标志.为0时代表没有按键按下,为1时代表已有按键按下.
uint8 key_code=0; // 按键编号,为0时无按键按下.
int relay=0;
//int time1=0;
int time;
int z=0;
int u=0;
int w;
int time1;
// 函数: Soft_Dly()
// 描述: 软件延时
// 参数: 无
void Soft_Dly(uint8 i)
{
while(i--);
}
void delay(unsigned int k)
{
unsigned int j;
for(;k>0;k--){
for(j=0;j<5;j++)
{;}
}
}
// 函数:自摆
// 描述: 回转电机左转,同时计数变量开始计数。按键放开,电机回转,计数变量减1,到0,又反转,直至J7、J8任一键按下,这个过程停止。
// 参数: 无
void swing(int x,int y)
{
int z1=1;
int ct=1;
int i=0;
int h=1;
int g=1;
w=x;
time1=y;
TMOD=0x60;
TH1=0xff;
TL1=0xff;
TF1=0;
TR1=1;
while(z1)
{
time1=y;
g=1;
switch(w)
{
case 15:{J5=0;delay(100);J6=1;delay(100); break;}
case 16:{J6=0;delay(100);J5=1;delay(100); break;}
}
for(i=1;i<=time1;i++)
{
TR1=1;
while(!TF1);
delay(10);
TF1=0;
delay(10);
}
if(ct==1)
{
if(y==16)y=15;
else y=16;
delay(1000);
}
}
}
// 函数: right_swing()
// 描述: 使M1电机右转动并受控制
// 参数: 无
void right_swing()
{
J5=0;
J6=1;
z=1;
time=0;
TMOD=0x60;
TH1=0xff;
TL1=0xff;
TF1=0;
TR1=1;
while(z)
{
if(sR1_Check_IRQ(sR1_RX_Buff)){
relay=sR1_RX_Buff[0];
if(relay!=0)
{
while(!TF1);
delay(10);
TF1=0;
delay(10);
time++;
}else
{ //time=50;
swing(16,time);z=0;
}
}
}
}
// 函数: left_swing()
// 描述: 使M1电机左转动并受控制
// 参数: 无
void left_swing()
{
J6=0;
J5=1;
time=0;
z=1;
TMOD=0x60;
TH1=0xff;
TL1=0xff;
TF1=0;
TR1=1;
while(z)
{
if(sR1_Check_IRQ(sR1_RX_Buff)){
relay=sR1_RX_Buff[0];
if(relay!=0)
{
while(!TF1);
delay(10);
TF1=0;
delay(10);
time++;
}
else{swing(15,time);z=0;}
}
}
}
// 函数: LED_Show()
// 描述: 点亮相应的LED
// 参数: kc 编码信息
void LED_Show(uint8 kc)
{
if(kc!=0)
{
switch (kc) // 根据编码执行相应动作
{
case 1:J2=0;J1=1;break; // P2^5 口置1,继电器J1动作,M1电机正转
case 2:J1=0;J2=1;break; // P2^4 口置1,继电器J2动作,M1电机反转
case 3:if(P13==0)break;else{J4=0;J3=1;break;} // P2^3 口置1,继电器J3动作,M2电机正转
case 4:if(P14==0)break;else{J3=0;J4=1;break;} // P2^2 口置1,继电器J4动作,M2电机反转
case 5:J6=0;J5=1;break; // P2^1 口置1,继电器J5动作,M3电机正转
case 6:J5=0;J6=1;break; // P2^0 口置1,继电器J6动作,M3电机反转
case 7:left_swing();break; // 编码3=点亮LED3
case 8:right_swing();break; // 编码3=点亮LED3
}
}else
{
J1=0;J2=0;J3=0;J4=0;J5=0;J6=0;J7=0;J8=0; // 熄灭全部指示灯
}
}
void main(void)
{
Soft_Dly(100); // 等待Si24R1模块上电并稳定
J1=0;J2=0;J3=0;J4=0;J5=0;J6=0;J7=0;J8=0;
P34=1;
sR1_Init_IO(); // 初始化Si24R1模块IO
sR1_Turn_RX(); // 初始化Si24R1,并将其设置为接收模式
TMOD=0x60;
TH1=0xff;
TL1=0xff;
TF1=0;
TR1=1;
while(1){
if(sR1_Check_IRQ(sR1_RX_Buff)){ // 检查IRQ引脚状态
relay=sR1_RX_Buff[0]; // 接收处理
LED_Show(relay);
}
}
}
|