#按下按键,电机无相应
#通过蓝牙通讯发送数字 0 1 2 3 进行电机的转动和调速,使用的stc89c52rc单片机和l298n电机驱动
#能否帮我看看代码是否正确
#include
#include
unsigned char tmp;
unsigned int c=0;
sbit ENA = P1^4;//为1 电机使能
sbit IN1 = P1^2;//为1 电机正转
sbit IN2 = P1^3;//为1 电机反转
void init(); //串口初始化
void send(unsigned char a); //单字节发送函数
void ctrl(); //接收处理函数
void main()
{
init();
while(1)
{
if(RI==1)//是否有数据到来
{
RI = 0;
tmp = SBUF; //暂存接收到的数据
ctrl();
}
}
}
void init()//串口初始化
{
ES=0;//关中断
SCON = 0x50;// REN=1允许串行接受状态,串口工作模式1,
//10位UART(1位起始位,8位数据位,1位停止位,无奇偶校验),波特率可变
TMOD = 0x20;//定时器1工作于方式2,8位自动重载模式,用于产生波特率
TH1=TL1=0xFD;//波特率9600
PCON &= 0x7f;//波特率不倍增
TR1 = 1;//定时器1开始工作,产生波特率
//发送标志位置0
TI=0; //接收标志位置0
RI=0;
//EA=0;
ES=1;
ENA=0;
IN1=0;
IN2=0;// 使电机全部停止
}
void send(unsigned char a) //单字节数据发送
{
TI=0;
SBUF=a;
while(TI==0);
TI=0;
}
void ctrl()//接收处理函数
{
unsigned int pwm;
switch(tmp)
{
case '1':
/*风扇一档转速*/
//定义一个变量pwm,通过对pwm的累加来调控PWM的占空比
while(1)
{
for(pwm = 0;pwm <= 1000;pwm++)
{
if(pwm == 500)
{
ENA = 1;
IN1 = 1;
IN2 = 0;
}
else if(pwm == 1000)
{
ENA = 0;
}
}
}
case '2':
/*风扇二档转速*/
while(1)
{
for(pwm = 0;pwm <= 1000;pwm++)
{
if(pwm == 750)
{
ENA = 1;
IN1 = 1;
IN2 = 0;
}
else if(pwm == 1000)
{
ENA = 0;
}
}
}
/*风扇三挡转速函数*/
case '3':
{
ENA = 1;
IN1 = 1;
IN2 = 0;
}
/*关闭风扇函数*/
case '0':
{
ENA = 0;
}
}
}
这个问题你可以这么排查:
1.先看看蓝牙是否可以通信成功
2.不用蓝牙控制调速,可以用个简单的io控制调速
这也就可以确保每个模块的代码都是ok的,然后在用蓝牙去调速。
通过扩散工艺,在本征半导体中掺入少量合适的其他元素,可得到杂质半导体,按照掺入的杂志元素不同可以分为:N型半导体和P型半导体,控制掺入的杂质元素浓度就可以控制杂质半导体的导电性能