蓝牙控制舵机995转向,但是实现不了,求帮忙看下程序
时间:10-02
整理:3721RD
点击:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit led3=P2^3;
sbit pwm =P3^2 ; //PWM信号输出
uint c=0,a=0,t=0;
unsigned char Buffer;
/*延时子程序*//*
void delay(unsigned char i)
{
unsigned char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
/*定时器0 工作1*/
void Time0_Init() //定时器初始化
{
TMOD = 0x01; //定时器0工作在方式1
IE = 0x82;
EA=1;
TH0=(65536-100)/256;
TL0=(65536-100)%256; //0.1ms 的高电平
TR0=1; //定时器开始
}
/*中断1*/
void Time0_Int() interrupt 1 //中断程序
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
t++;
}
/*串口中断子函数*/
void Com_Int(void) interrupt 4
{
EA = 0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
Buffer=SBUF;
RI = 0;
}
EA = 1;
}
/*串口初始化,晶振11.0592,波特率9600,使串口中断*/
void Com_Init(void)
{
TMOD = 0x20; //定时器1工作于方式2,8位自动重载模式,用于产生波特率
PCON &= 0x7f; //是设置波特率不加倍
SCON = 0x50; // REN=1允许串行接受状态,串口工作模式1,
TH1 = 0xFd; //设置波特率 9600
TL1 = 0xFd;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
}
void send(unsigned char a) //单字节数据发送
{
TI=0;
SBUF=a;
while(TI==0);
// TI=0;
if(c%2) //发送指示灯标志,每接收一次,此灯亮灭交替
led3=1;
else
led3=0;
c++;
}
void degree90()
{
if(t<15)
pwm=1;
else
{
pwm=0;
if(t==200)
t=0;
}
}
void degree45()
{
if(t<10)
pwm=1;
else
{
pwm=0;
if(t==200)
t=0;
}
}
void degree135()
{
if(t<20)
pwm=1;
else
{
pwm=0;
if(t==200)
t=0;
}
}
void main()
{
Com_Init();//串口初始化
Time0_Init(); //定时器初始化
while(1)
{
switch(Buffer=SBUF)
{
case 1:
degree90();
send(Buffer);
break;
case 2:
degree45();
send(Buffer);
break;
case 3:
degree135();
send(Buffer);
break;
default:
send(Buffer);
break;
}
}
}
#define uint unsigned int
#define uchar unsigned char
sbit led3=P2^3;
sbit pwm =P3^2 ; //PWM信号输出
uint c=0,a=0,t=0;
unsigned char Buffer;
/*延时子程序*//*
void delay(unsigned char i)
{
unsigned char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
/*定时器0 工作1*/
void Time0_Init() //定时器初始化
{
TMOD = 0x01; //定时器0工作在方式1
IE = 0x82;
EA=1;
TH0=(65536-100)/256;
TL0=(65536-100)%256; //0.1ms 的高电平
TR0=1; //定时器开始
}
/*中断1*/
void Time0_Int() interrupt 1 //中断程序
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
t++;
}
/*串口中断子函数*/
void Com_Int(void) interrupt 4
{
EA = 0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
Buffer=SBUF;
RI = 0;
}
EA = 1;
}
/*串口初始化,晶振11.0592,波特率9600,使串口中断*/
void Com_Init(void)
{
TMOD = 0x20; //定时器1工作于方式2,8位自动重载模式,用于产生波特率
PCON &= 0x7f; //是设置波特率不加倍
SCON = 0x50; // REN=1允许串行接受状态,串口工作模式1,
TH1 = 0xFd; //设置波特率 9600
TL1 = 0xFd;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
}
void send(unsigned char a) //单字节数据发送
{
TI=0;
SBUF=a;
while(TI==0);
// TI=0;
if(c%2) //发送指示灯标志,每接收一次,此灯亮灭交替
led3=1;
else
led3=0;
c++;
}
void degree90()
{
if(t<15)
pwm=1;
else
{
pwm=0;
if(t==200)
t=0;
}
}
void degree45()
{
if(t<10)
pwm=1;
else
{
pwm=0;
if(t==200)
t=0;
}
}
void degree135()
{
if(t<20)
pwm=1;
else
{
pwm=0;
if(t==200)
t=0;
}
}
void main()
{
Com_Init();//串口初始化
Time0_Init(); //定时器初始化
while(1)
{
switch(Buffer=SBUF)
{
case 1:
degree90();
send(Buffer);
break;
case 2:
degree45();
send(Buffer);
break;
case 3:
degree135();
send(Buffer);
break;
default:
send(Buffer);
break;
}
}
}
解决了,晚点完成了作品后跟大家分享下。我菜鸟努力的小成果
小编 你是啥问题呢 说好的分享呢。
按键输入怪怪的.