手机控制蓝牙花式点灯制作

蓝牙花式点灯制作

本产品是基于51单片机金沙滩开发板并结合UART串口通信,进行制作。
注:本教材是利用App Inventor进行安卓应用开发,所以要求学者具备一定的App Inventor的使用能力。建议读者到网易云公开课学习App Inventor课程。

1、 资料准备:
HC06蓝牙模块 1个
51 单片机最小系统 1个
手机(安卓系统) 1台
LED灯 若干个

2、 手机安卓程序代码
① 首先登陆网 http://app.gzjkw.net/login/
② 然后用QQ登陆
手机控制蓝牙花式点灯制作_第1张图片③ 安卓开发程序
手机控制蓝牙花式点灯制作_第2张图片④ 下载程序到手机中
手机控制蓝牙花式点灯制作_第3张图片⑤ 然后用手机扫描二维码即可下载并安装应用

3、 程序代码
mian.c程序:

#include 

//74HC138译码器引脚定义
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

//全局变量定义
//串口接收和发送的字符
unsigned char ch;               
//选择那个灯的形式标志位
unsigned char flagls = 0;   

//函数声明
//串口配置函数
void ConfigUART(unsigned int baud); 
//第一个  左移
extern void leftLED();
//第二个  右移
extern void rightLED(); 
//第三个  来回移动
extern void BothWay();
//第四个  1 3 5 7 灯闪烁
extern void LED1(); 
//第五个  2 4 6 8 灯闪烁
extern void LED2(); 
//第六个  自左向右移动,每次加一个灯
extern void LED3(); 
//第七个,自右向左移动,每次加一个灯
extern void LED4();
//第八个,全部灯闪烁

void main()
{
    //74HC138译码器选择LED灯
    ENLED = 0;                              
    ADDR3 = 1;
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;

    //使能总中断打开
    EA = 1;         
    //设置波特率9600   
    ConfigUART(9600);                       
    
    while(1)
    {
        //第一个  左移
        if(flagls == 1)             
        {   
             leftLED();
        }
        //第二个  右移
        if(flagls == 2)             
        {
            rightLED();
        }
        //第三个  来回移动
        if(flagls == 3)             
        {
            BothWay();
        }
        //第四个  1 3 5 7 灯闪烁
        if(flagls == 4)             
        {
            LED1();
        }
        //第五个  2 4 6 8 灯闪烁
        if(flagls == 5)             
        {
            LED2();
        }
        //第六个  自左向右移动,每次加一个灯
        if(flagls == 6)             
        {
            LED3();
        }
        //第七个,自右向左移动,每次加一个灯
        if(flagls == 7)             
        {
            LED4();

        }   
    }
}


void ConfigUART(unsigned int baud)
{
    //选择串口通讯模式1
    SCON = 0x50;    
    //选择定时器工作模式2  
    TMOD &= 0x0F;
    TMOD |= 0x20;                   
    //计算T1重载值 
    TH1 = 256 - (11059200/12/32)/baud;  
    //初值等于重载值
    TL1 = TH1;  
    //禁止T1中断    
    ET1 = 0;    
    //使能串口中断    
    ES = 1; 
    //启动T1定时器 
    TR1 = 1;                                                        
}

void InterruptUART() interrupt 4
{
    //接收到字节
    if(RI)                                                  
    {
        //手动清零接收中断标志位
        RI = 0;     
        //将接收到数据发送给ch     
        ch = SBUF;                                  
        switch(ch)         
        {
            case'a': flagls=1; break;       
            case'b': flagls=2; break;       
            case'c': flagls=3; break;       
            case'd': flagls=4; break;       
            case'e': flagls=5; break;       
            case'f': flagls=6; break;       
            case'g': flagls=7; break;           
            default: break;     
            
        }
    }
    //字节发送完毕
    if(TI)                                  
    {
        //手动清零发送中断标志位
        TI = 0;                             
    }
}

led.c程序:

#include 

//定义循环变量i,用于软件延时
unsigned int i = 0;   
//定义移位方向变量dir,用于控制移位的方向
unsigned char dir = 0;   
//定义循环移位变量shift,并赋初值0x01
unsigned char shift = 0x01;  
unsigned int cnt = 0;

//LED左移函数
void leftLED()               
{
    P0 = ~(0x01 <>cnt);
    for(i=0; i<23000; i++);
    cnt++; 
    cnt = cnt & 0x07;
}

//来回移动
void BothWay()          
{
    //P0等于循环移位变量取反,控制8个LED
    P0 = ~shift;     
    //软件延时  
    for (i=0; i<23000; i++);  
    //移位方向变量为0时,左移
    if (dir == 0)             
    {
            //循环移位变量左移1位
            shift = shift << 1;  
            //左移到最左端后,改变移位方向        
            if (shift == 0x80)    
            {
                    dir = 1;
            }
    }
    //移位方向变量不为0时,右移
    else                      
    {
            //循环移位变量右移1位
            shift = shift >> 1; 
            //右移到最右端后,改变移位方向        
            if (shift == 0x01)   
            {
                    dir = 0;
            }
    }
}

//第一个  左移
void LED1()
{
    P0 = 0xAA;
    for(i=0; i<23000; i++);
    P0 = 0xFF;
    for(i=0; i<23000; i++);
}

//第二个  右移
void LED2()
{
    P0 = 0x55;
    for(i=0; i<23000; i++);
    P0 = 0xFF;
    for(i=0; i<23000; i++);
}

//第三个  来回移动
void LED3()
{
    P0 = 0xFE;
    for(i=0; i<23000; i++);
    P0 = 0xFC;
    for(i=0; i<23000; i++);
    P0 = 0xF8;
    for(i=0; i<23000; i++);
    P0 = 0xF0;
    for(i=0; i<23000; i++);
    P0 = 0xE0;
    for(i=0; i<23000; i++);
    P0 = 0xC0;
    for(i=0; i<23000; i++);
    P0 = 0x80;
    for(i=0; i<23000; i++);
    P0 = 0x00;
    for(i=0; i<23000; i++);
    P0 = 0x00;
    for(i=0; i<23000; i++);
    P0 = 0xFF;
    for(i=0; i<23000; i++);
}

//第四个  1 3 5 7 灯闪烁
void LED4()
{
    P0 = 0x7F;
    for(i=0; i<23000; i++);
    P0 = 0x3F;
    for(i=0; i<23000; i++);
    P0 = 0x1F;
    for(i=0; i<23000; i++);
    P0 = 0x0F;
    for(i=0; i<23000; i++);
    P0 = 0x07;
    for(i=0; i<23000; i++);
    P0 = 0x03;
    for(i=0; i<23000; i++);
    P0 = 0x01;
    for(i=0; i<23000; i++);
    P0 = 0x00;
    for(i=0; i<23000; i++);
    P0 = 0x00;
    for(i=0; i<23000; i++);
    P0 = 0xFF;
    for(i=0; i<23000; i++);
}

//第五个  2 4 6 8 灯闪烁
void LED5()
{
    P0 = 0xFE;
    for(i=0; i<23000; i++);
    P0 = 0xFC;
    for(i=0; i<23000; i++);
    P0 = 0xF8;
    for(i=0; i<23000; i++);
    P0 = 0xF0;
    for(i=0; i<23000; i++);
    P0 = 0xE0;
    for(i=0; i<23000; i++);
    P0 = 0xC0;
    for(i=0; i<23000; i++);
    P0 = 0x80;
    for(i=0; i<23000; i++);
    P0 = 0x00;
    for(i=0; i<23000; i++);
    P0 = 0x7F;
    for(i=0; i<23000; i++);
    P0 = 0x3F;
    for(i=0; i<23000; i++);
    P0 = 0x1F;
    for(i=0; i<23000; i++);
    P0 = 0x0F;
    for(i=0; i<23000; i++);
    P0 = 0x07;
    for(i=0; i<23000; i++);
    P0 = 0x03;
    for(i=0; i<23000; i++);
    P0 = 0x01;
    for(i=0; i<23000; i++);
    P0 = 0x00;
    for(i=0; i<23000; i++);
    P0 = 0xFF;
    for(i=0; i<23000; i++);
}

//第六个  自左向右移动,每次加一个灯
void LED6()
{
    P0 = 0x00;
    for(i=0; i<23000; i++);
    P0 = 0xFF;
    for(i=0; i<23000; i++);
}

//第七个,自右向左移动,每次加一个灯
void LED7()
{
    P0 = 0xFF;
}

4、 蓝牙模块HC-06与单片机线连接
蓝牙模块HC-06的
TX --> P3^0(51单片机的RX)
RX --> P3^1(51单片机的TX)
VCC --> +5V
GND --> GND

5、连接完成后即可可以使用安卓手机进行控制LED灯的流动。

你可能感兴趣的:(手机控制蓝牙花式点灯制作)