基于STC89C52单片机的手机蓝牙开关灯

文章目录

整体思路:

 这里的接收到的数据可以有自己进行配置。

一、蓝牙调试app

app名称:手机蓝牙调试器,可以通过它的发送端给蓝牙发送数据

打开手机蓝牙,就会看到HC-05,然后连接,就可以在蓝牙调试器里面进行相应的操作了。

这个app有一个缺点就是苹果手机不能下载。

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、蓝牙模块HC-05

HC-05的传输距离有10米这里我们把HC-05的正极与单片机的+5V相连,GND与单片机GND相连,TXD与单片机的P30口相连,RXD与单片机的P31口相连。

这个HC-05有一个缺点就是苹果手机不能连接。

三、舵机

舵机的正极(红线)与单片机的+5V相连,负极(棕色线)与单片机的GND 相连,信号线与单片机的I/O口相连,这里建议使用P1.0-P1.7口进行连接。本项目中使用的是P1.1口。

四、单片机控制程序

1.UART串口初始化

void UART_Init()
{
	SCON=0x50;
	PCON |= 0x80;
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xFA;		//设定定时初值
	TH1 = 0xFA;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
}

2.定时器T0初始化,用于产生PWM波控制舵机

void Time0_Init()          //定时器初始化
{
    TMOD = 0x01;           //定时器0工作在方式1
    EA = 1;
    ET0 = 1;
    TH0  = 0xfe;
    TL0  = 0x33;                   //11.0592MZ晶振,0.5ms
    TR0 = 1;               //定时器开始
}

3.所有程序

#include <REG52.H>

/*     自定义变量类型    */
typedef unsigned char uchar;   //0~255
typedef unsigned int uint;     //0~65535

uchar Turn_angle, deng;
sbit PWM = P1 ^ 1; //信号线
uchar kk = 0;

//延迟1ms
void delay_ms(uint c)   //误差 0us
{
    uint a, b;
    for(; c > 0; c--)
        for(b = 102; b > 0; b--)
            for(a = 3; a > 0; a--);
}
//串口初始化,用于与hc-05进行串口通信
void UART_Init()
{
	SCON=0x50;
	PCON |= 0x80;
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xFA;		//设定定时初值
	TH1 = 0xFA;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
}

void Time0_Init()          //定时器初始化
{
    TMOD = 0x01;           //定时器0工作在方式1
    EA = 1;
    ET0 = 1;
    TH0  = 0xfe;
    TL0  = 0x33;                   //11.0592MZ晶振,0.5ms
    TR0 = 1;               //定时器开始
}

void main()
{
    Time0_Init();
    UART_Init();
    //PWM = 0;

    while (1)
    {
        kk = 0;
        Turn_angle = 3; //归零   1--0 2--45 3--90 4--135 5--180
        delay_ms(300);
        while(RI == 0);
        RI = 0;
        deng = SBUF;
        if(deng == 0x41)
        {
            kk = 0;
            Turn_angle = 1; //旋转
            delay_ms(300);
            kk = 0;
            Turn_angle = 3; //旋转
            delay_ms(300);
        }
        if(deng == 0x43)
        {
            kk = 0;
            Turn_angle = 4.9; //旋转
            delay_ms(300);
            kk = 0;
            Turn_angle = 3; //旋转
            delay_ms(300);
        }

    }
}

void timer0() interrupt 1
{
    TR0 = 0;  //关闭计时
    TH0  = 0xfe;
    TL0  = 0x33;                   //11.0592MZ晶振,0.5ms

    if(kk <= Turn_angle) //1---0度  2---45度 3---90 4--- 135度  5---180度
    {
        PWM = 1;
    }
    else
    {
        PWM = 0;
    }
    if(kk == 40) //一个周期20ms
    {
        kk = 0;
    }
    kk ++;
    TR0 = 1;  //开启计时
}

总结

不善于总结

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值