从打算搞一个小车到现在已经很久了,昨天买的两个db120到手了,于是赶紧刷了op。经过一天的捣腾,现在通过电脑控制端发送控制命令,路由器的ttl口上完全可以输出,路由器ttl输出的命令也可以收到。可是对于命令,单片机却没有任何动作。
我用的是开发板 板子P2口接8个led
下面是程序
#include <reg51.h>
#include <intrins.h>
#include < stdio.h >
//定义继电器的管脚
sbit K0_0 = P2^0; //对应继电器
sbit K0_1 = P2^1; //对应继电器
sbit K0_2 = P2^2; //对应继电器
sbit K0_3 = P2^3; //对应继电器
sbit K0_4 = P2^4; //对应继电器
sbit K0_5 = P2^5; //对应继电器
sbit K0_6 = P2^6; //对应继电器
sbit K0_7 = P2^7; //对应继电器
//控制左右旋转
sbit A0=P2^0; //定义步进电机连接端口
sbit B0=P2^1;
sbit C0=P2^2;
sbit D0=P2^3;
#define Coil_A0 {A0=1;B0=0;C0=0;D0=0;}//A相通电,其他相断电
#define Coil_B0 {A0=0;B0=1;C0=0;D0=0;}//B相通电,其他相断电
#define Coil_C0 {A0=0;B0=0;C0=1;D0=0;}//C相通电,其他相断电
#define Coil_D0 {A0=0;B0=0;C0=0;D0=1;}//D相通电,其他相断电
#define Coil_OFF0 {A0=0;B0=0;C0=0;D0=0;}//全部断电
//控制上下旋转
sbit A1=P2^4; //定义步进电机连接端口
sbit B1=P2^5;
sbit C1=P2^6;
sbit D1=P2^7;
#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF1 {A1=0;B1=0;C1=0;D1=0;}//全部断电
unsigned char Speed;
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
void delay(unsigned int ms)
// 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
unsigned char tmp;
main()
{
int i;
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
SCON = 0x50; // 设定串行口工作方式
PCON &= 0xef; // 波特率不倍增
TR1 = 1; // 启动定时器1
IE = 0x0; // 禁止任何中断
for (i=0;i<=500;i++)
{
delay (1000);//延时1秒
}
while(1)
{
if(RI) // 是否有数据到来
{
RI = 0;
tmp = SBUF; // 暂存接收到的数据
switch(tmp-48) //判断12345678
{
case 1:K0_0=!K0_0;break;
case 2:K0_1=!K0_1;break;
case 3:K0_2=!K0_2;break;
case 4:K0_3=!K0_3;break;
case 5:K0_4=!K0_4;break;
case 6:K0_5=!K0_5;break;
case 7:K0_6=!K0_6;break;
case 8:K0_7=!K0_7;break;
case 91=0x00;break; //全开
case 01=0xff;break; //全关
}
if (tmp==82) //输入L
{
Speed=10; //调整速度
for (i=0;i<=4;i++)
{
Coil_A0 //遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替
DelayMs(Speed); //改变这个参数可以调整电机转速 ,
//数字越小,转速越大,力矩越小
Coil_B0
DelayMs(Speed);
Coil_C0
DelayMs(Speed);
Coil_D0
DelayMs(Speed);
Coil_OFF0
}
}
if (tmp==76) //输入R
{
Speed=10; //调整速度
for (i=0;i<=4;i++)
{
Coil_D0 //遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替
DelayMs(Speed); //改变这个参数可以调整电机转速 ,
//数字越小,转速越大,力矩越小
Coil_C0
DelayMs(Speed);
Coil_B0
DelayMs(Speed);
Coil_A0
DelayMs(Speed);
Coil_OFF0
}
}
if (tmp==68) //输入D
{
Speed=10; //调整速度
for (i=0;i<=4;i++)
{
Coil_A1 //遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替
DelayMs(Speed); //改变这个参数可以调整电机转速 ,
//数字越小,转速越大,力矩越小
Coil_B1
DelayMs(Speed);
Coil_C1
DelayMs(Speed);
Coil_D1
DelayMs(Speed);
Coil_OFF1
}
}
if (tmp==85) //输入U
{
Speed=10; //调整速度
for (i=0;i<=4;i++)
{
Coil_D1 //遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替
DelayMs(Speed); //改变这个参数可以调整电机转速 ,
//数字越小,转速越大,力矩越小
Coil_C1
DelayMs(Speed);
Coil_B1
DelayMs(Speed);
Coil_A1
DelayMs(Speed);
Coil_OFF1
}
}
}
}
}
无论是直接通过电脑串口给单片机命令 还是通过路由器输出的命令,都不亮灯。程序是在数码之家炒的,一个智能家居系统的。原理跟小车类似,目前手里没有其他材料,所以先打算用这个练练。求高手 不甚感激
|