手机蓝牙控制SMT32LED灯亮

1.硬件

通过蓝牙通讯 使用手机来控制 单片机 上 LED 灯的亮灭。

1)硬件使用 SMT32 单片机
2)蓝牙模块(HC-05)
3) Android 手机一部(含蓝牙助手,可自行开发APP)

手机 —(蓝牙连接)—> HC-05 ----(串口通信)–> 单片机 -----> LED

2.硬件连接 

1)蓝牙模块VCC、GND、TXD、RXD
2)单片机VCC、GND、RXD、TXD

蓝牙模块上的 VCC 接 到开发板上的 VCC 针脚,蓝牙模块的 GND 接到开发板上的 GND 针脚,蓝牙模块的 TXD 接到开发板上的 RXD 针脚,蓝牙模块的 RXD 接到开发板上的TXD针脚。
单片机上电之后,手机会搜索到 一个蓝牙名称为 “HC-05” 的蓝牙信号,就是这个蓝牙模块。;连接输入密码1234,连接成功。

 3.代码(mian.c)

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "hc05.h"
#include "usart2.h"			 	 
#include "string.h"	 
#include "key.h"
void HC05_Role_Show(void)
{
	if(HC05_Get_Role()==1)LCD_ShowString(30,140,200,16,16,"ROLE:M");	//主
	else LCD_ShowString(30,140,200,16,16,"ROLE:S ");			 		//从
}
void HC05_Sta_Show(void)
{												 
	if(HC05_LED)LCD_ShowString(120,140,120,16,16,"STA:C ");			//连接成功
	else LCD_ShowString(120,140,120,16,16,"STA:S");	 			//连接失败				 
}	  
int main(void)
 {
	uint8_t rx=0; 
	u8 t;
	u8 key;
	u8 sendmask=0;
	u8 sendcnt=0;
	u8 sendbuf[20];	  
	u8 reclen=0;
	u16 data;
	delay_init();	
    uart_init(9600);	 	
	LED_Init();				
	KEY_Init();				
	LCD_Init();					 	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
	
   
	POINT_COLOR=RED;
	LCD_ShowString(30,30,200,16,16," STM32 ^_^");	
	LCD_ShowString(30,50,200,16,16,"HC05 ");	
	LCD_ShowString(30,70,200,16,16,"ATOM@ALIENTEK");
	while(HC05_Init()) 		 
	{
		LCD_ShowString(30,90,200,16,16,"HC05 Error!"); 
		delay_ms(500);
		LCD_ShowString(30,90,200,16,16,"Please Check!!!"); 
		delay_ms(100);
	}	 										   	   
	LCD_ShowString(30,90,200,16,16,"WK_UP:ROLE KEY0:SEND/STOP");  
	LCD_ShowString(30,110,200,16,16,"ATK-HC05 Standby!");  
  	LCD_ShowString(30,160,200,16,16,"Send:");	
	LCD_ShowString(30,180,200,16,16,"Receive:");	

	POINT_COLOR=BLUE;
	HC05_Role_Show();	  
 	while(1) 
	{		
		key=KEY_Scan(0);
		if(key==WKUP_PRES)						
		{
   			key=HC05_Get_Role();
			if(key!=0XFF)
			{
				key=!key;  					   
				if(key==0)HC05_Set_Cmd("AT+ROLE=0");
				else HC05_Set_Cmd("AT+ROLE=1");
				HC05_Role_Show();
				HC05_Set_Cmd("AT+RESET");	
			}
		}else if(key==KEY0_PRES)
		{
			sendmask=!sendmask;					 
			if(sendmask==0)LCD_Fill(30+40,160,240,160+16,WHITE);
		}else delay_ms(10);	   
		if(t==50)
		{
			if(sendmask)					
			{
				sprintf((char*)sendbuf,"ALIENTEK HC05 %d\r\n",sendcnt);
	  			LCD_ShowString(30+40,160,200,16,16,sendbuf);	
				u2_printf("ALIENTEK HC05 %d\r\n",sendcnt);		
				sendcnt++;
				if(sendcnt>99)sendcnt=0;
			}
			HC05_Sta_Show();  	  
			t=0;
			LED0=!LED0; 	     
		}			
		if(USART2_RX_STA&0X8000)			
		{
			LCD_Fill(30,200,240,320,WHITE);	
 			reclen=USART2_RX_STA&0X7FFF;	
		  	USART2_RX_BUF[reclen]=0;	 	
			if(reclen==9||reclen==8) 		
			{
				if(strcmp((const char*)USART2_RX_BUF,"+LED1 ON")==0)LED1=0;	//打开LED1
				if(strcmp((const char*)USART2_RX_BUF,"+LED1 OFF")==0)LED1=1;//关闭LED1
			}
 			LCD_ShowString(30,200,209,119,16,USART2_RX_BUF);
 			USART2_RX_STA=0;				
		}	
		
		if(USART_ReceiveData(USART2) == '1')	 
		{
			LED1=0;
	    delay_ms(10);	
	}
		else
		{
				LED1=1;
    delay_ms(10);	 //其他情况灯灭
		}
		t++;	
	}											    
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值