单片机连接hc-05_蓝牙模块hc-05连接51单片机 - CSDN
精华内容
参与话题
  • 51单片机使用和配置HC-05蓝牙模块

    万次阅读 多人点赞 2020-03-13 00:51:50
    要想使用HC-05蓝牙模块进行单片机之间通讯或者单片机和蓝牙设备之间通讯,首先要配置好HC-05蓝牙模块的参数。设置好蓝牙的名称、密码、波特率等待。 step1: 连接usb转ttl模块和蓝牙模块,把两个模块的VCC口相连...

    需要的工具:

    usb转ttl模块*1


    模块如下:

            要想使用HC-05蓝牙模块进行单片机之间通讯或者单片机和蓝牙设备之间通讯,首先要配置好HC-05蓝牙模块的参数。设置好蓝牙的名称、密码、波特率等待。

    step1:

            连接usb转ttl模块蓝牙模块,把两个模块的VCC口相连,GND口相连,TX和RX交叉相连(既TX连RX,RX连TX)。

    然后下载蓝牙串口配置软件进行配置:提取码:6d32

    软件界面如下:

    step2:

            连接好两个模块之后,按住蓝牙模块上的小按钮(按住上电是配置模式,直接上电是正常使用模式),然后把usb转ttl模块插上电脑。

    选择好端口设置上的COM口,其它配置默认不需要改,点击打开串口。如果硬件连接和端口设置没问题的话这时候就可以连接成功了。

    之后点击AT按钮,如果左边界面出现OK字样就证明已经连接成功了,然后就开始根据需求进行配置


    手机连接51单片机+蓝牙

    1. 点击设置从机。
    2. 点击设置模式,在右上角改1为0然后点击手动发送。
    3. 点击设置波特率,PS:这里设置的波特率和刚刚端口设置中的波特率是不一样的,这个是正常模式下蓝牙和单片机通讯的波特率,端口设置中的波特率是配置模式下的波特率,修改这里的波特率不是改变配置模式的波特率,下次配置蓝牙模块的端口设置中的波特率还是保持默认。波特率要和单片机的波特率设置为一样,通常51单片机的程序都是用9600,这里默认9600。
    4. 设置密码,看个人喜好。
    5. 设置名称,看个人喜好。

    如果以上设置中出现什么问题的话,点击恢复出厂设置重新设置一边。如果没问题的话就可以开始把蓝牙换到单片机上进行使用了。

     

    step3:

            吧蓝牙和单片机串口进行连接,蓝牙和单片机的连接和上面的一样,注意TX和RX之间要交叉连接。

            只要连接好蓝牙,烧录好单片机程序,蓝牙就会把单片机串口发送来的数据向已经连接上的蓝牙设备进行发送。

    51单片机的demo:

    /*串口初始化配置*/
    void UartConfiguration()  
    {
        TMOD=0x20;      //设置计数器1的工作方式2
        TH1=0xfd;	    //设置计数器1的初值,决定波特率
        TL1=0xfd;		//设置计数器1的初值,决定波特率
        PCON=0x00;      // 波特率倍增0x00不加倍	 0x80加倍
        SCON=0x50;		//设置工作方式1 开启接受允许
        EA=1;		    //开启总中断
        ES=1;			//开启串口接受中断
        TR1=1;			//计数器1开始运行
    }
    /*发送数据*/
    void sendDate(char date)
    {
        SBUF=date;		  //接收到的数据放入发送缓存器发送
        while(!TI);       //等待发送数据完成
        TI=0;			  //清除发送完成标志位
    }
    
    /*主函数*/
    void main()
    {
        UartConfiguration();
    
        sendDate('1');  //发送字符1
    
        while(1);
    }
    
    /*中断函数*/
    void Uart() interrupt 4
    {
        uchar date;
        date=SBUF;        //取出接受到的数据
        RI=0;			  //清除接受中断标志位
    
        //收到的数据是date
    	
    }
    

    这是51单片机向串口发送数据的例程,其中while(!TI)是等待消息发送成功,如果发送不成功的话会一直等待阻塞程序。

            而且51单片机的串口中断是一个字节一个字节地接收数据的,比如手机向单片机发送了数据“123”,单片机中的中断函数Uart()会进入三次,把数据“123”分三次接收完,一次接收一个字符,所以要在其中添加自己的逻辑把单个字符组合成一个字符串来进行处理。

                                               

    展开全文
  • d手机通信程序 程序完成了51单片机和手机的字符和数字通信,并有完整的注释,原理介绍可查看我的其他文章 前找了很久才找到了,传上来更大家共享下,希望对大家有帮助,欢迎下载或者永久保存。
  • 实现蓝牙HC-05、06与单片机连接及与手机通信

    万次阅读 多人点赞 2019-03-19 00:18:15
    蓝牙(Bluetooth):是一种无线技术标准,可实现固定设备、移动设备...蓝牙技术最初由电信巨头爱立信公司于1994年创制,当时是作为RS232数据线的替代方案, 蓝牙可连接多个设备,在与单片机连接使用也得到了广泛应用。

    蓝牙(Bluetooth):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4—2.485GHz的ISM波段的UHF无线电波)。蓝牙技术最初由电信巨头爱立信公司于1994年创制,当时是作为RS232数据线的替代方案, 蓝牙可连接多个设备,在与单片机连接使用也得到了广泛应用。

    1、端口连接
    与单片机串口连接时,两者之间 相互可以读写。例如51给HC-05传递数据,即51向HC-05写数据,HC-05从51读取数据,那么串口连接处51的写端P3.1引脚(TXD)就与HC-05读端(RXD)相连,反之蓝牙向51传递数据时,HC-05写端(TXD)T与51的读端P3.0引脚(RXD)相连,所以通常为以下连接方式即可实现数据传送。
    注意:只有正确连接读写端才能正常通信。
    端口连接
    2、电平选择
    一般情况下,蓝牙不能正常工作的原因出在电源这得可能比较小,大多数蓝牙模块电压范围比较大,像HC-05蓝牙模块一般在3.3~6V,单片机电源都在这个范围内。不过不排除部分3.3V蓝牙,所以在连接电源前一定按照技术手册,连接正确电源,并保证正负极不能接反。
    3、蓝牙配置
    设置决定了蓝牙模块自动连接工作后的角色,主角色(Master)会自动搜索配对连接,从角色(Slave)只被动接受连接,不会主动搜索,回环角色(Loopback),属于被动连接,接收远程蓝牙主设备数据并将数据原样返回给远程蓝牙主设备。如果两个HC05模块要建立连接,其中一个必须设置为主角色,另外一个可以设置为从角色或回环角色,如果一个HC05模块和电脑蓝牙或者手机蓝牙通信,一般电脑或手机可以主动建立连接,所以HC05可以使用从角色,出厂默认也是设置为从角色的。
    4、AT指令
    在控制电平信号下,可以对蓝牙的一些特性参数进行查询课更改。
    AT+XXX? //查询参数XXX
    AT+XXX=mmm //设置参数XXX为mmm
    例如: 命令: AT+NAME?\r\n //查询蓝牙名称
    返回:+NAME:ChunyuY19 //蓝牙名称为:ChunyuY19
    命令: AT+NAME=Xidian\r\n //设置蓝牙名称为:Xidian
    返回: OK //返回提示符:OK
    命令: AT+PSWD?\r\n //查询蓝牙配对密码
    返回:+PSWD:1234 //配对密码为:1234
    命令: AT+ROLE?\r\n //查询蓝牙模式
    返回:+ROLE:0 //0:从角色,1:主角色,2:回环角色
    注意!!每行命令必须以更多AT命令\r\n结尾,更多的AT指令一般技术手册都会给出,活在网上查询。
    5、实现基于STC51单片机的蓝牙与手机通信
    首先,给单片机载入串口通信程序,注意!!一般下载程序时单片机与蓝牙断开,避免因蓝牙占用单片机串口导致程序无法烧写。载入程序后,按照上图给出的读写连接方式连接,并给给单片机及HC-05连接合适电源,一般都用单片机板子上电源。手机端需先在浏览器上搜索并下载“蓝牙串口调试助手”。
    上电后,蓝牙指示灯一般进入快闪状态,即等待蓝牙连接(从模式),用手机搜索并连接单片机上的蓝牙,配对密码默认为1234。配对成功就可以发送数据给蓝牙,如下图,至此基于STC51单片机的蓝牙与手机通信成功。

    因为毕业设计需要用到无线传输,第一次接触蓝牙串口通信,芯片用的HC-05。调试了一天,复制了不少例程,一直无解认为是程序问题。直到看到这篇文章才发现自己引脚就接错了……
    一定记住单片机TX接蓝牙RX,单片机RX接蓝牙TX。一定记住单片机TX接蓝牙RX,单片机RX接蓝牙TX。一定记住单片机TX接蓝牙RX,单片机RX接蓝牙TX。重要的事说三次。

    附基于STM32的HC-05串口通信框架代码

    #include "stm32f10x.h"    
    #include "stm32f10x_rcc.h"    
    #include "stm32f10x_gpio.h"    
    #include "stm32f10x_usart.h"   
    #include "stm32f10x_crc.h"  
    #include "system_stm32f10x.h"   
    #include "stdio.h"   
      
    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)  
      
    void RCC_Configuration(void);    
    void GPIO_Configuration(void);   
    void USART_Configuration(void);   
    void delay_ms(u16 time);  
    void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data);  
    void UART_PutStr (USART_TypeDef* USARTx, uint8_t *str);
    int Putchar(int c);
      
    int main()  
    {  
        SystemInit();  
        RCC_Configuration();    
        GPIO_Configuration();     
        USART_Configuration();
    		GPIO_SetBits(GPIOB,GPIO_Pin_5);		
        while(1)  
        {  
          UART_PutStr(USART1, "hello world!"); 
    			delay_ms(1000);			
        }   
          
    }  
    void RCC_Configuration(void)      
    {       
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB,ENABLE);       
    }     
        
    void GPIO_Configuration(void)      
    {      
      GPIO_InitTypeDef GPIO_InitStructure;      
          
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;           
      GPIO_Init(GPIOA, &GPIO_InitStructure);                
          
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;           
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;        
      GPIO_Init(GPIOA, &GPIO_InitStructure);                 
           
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    
      GPIO_Init(GPIOB, &GPIO_InitStructure);     
    }  
    void USART_Configuration(void)
    {    
           
        USART_InitTypeDef USART_InitStructure;                   
      
        USART_InitStructure.USART_BaudRate = 9600;                    
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;   
        USART_InitStructure.USART_StopBits = USART_StopBits_1;       
        USART_InitStructure.USART_Parity = USART_Parity_No;        
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; 
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;   
        USART_Init(USART1,&USART_InitStructure);                    
        USART_Cmd(USART1,ENABLE);    
    }  
    void delay_ms(u16 time)       
    {      
      u16 i=0;      
      while(time--)       
      {      
        i=12000;      
        while(i--);      
      }      
    }   
    int Putchar(int c)                                             
    {    
        if (c == '\n'){putchar('\r');}                                
        USART_SendData(USART1,c);                                  
    		while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET){};
        return c;                                                       
    }   
    void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data)  
    {  
        USART_SendData(USARTx, Data);  
        while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET){}  
    }  
    void UART_PutStr (USART_TypeDef* USARTx, uint8_t *str)    
    {    
        while (0 != *str)    
        {    
            UART_PutChar(USARTx, *str);    
            str++; 		
        }    
    }  
    
    

    程序员开源交流QQ群 792272915

    展开全文
  • 蓝牙模块HC-05与51单片机连接

    万次阅读 多人点赞 2017-06-07 14:09:14
    手机安装HC-PDA-ANDROID.apk软件后,开启系统。手机打开蓝牙可以搜索到蓝牙芯片并可以连接连接码为1234。系统开启后数码管全0,继电器低电平,LED灯不亮。 手机连接到系统后,扫描二维码,得到一串数字后,输入该...

    一.实验结果

    手机安装HC-PDA-ANDROID.apk软件后,开启系统。手机打开蓝牙可以搜索到蓝牙芯片并可以连接,连接码为1234。系统开启后数码管全0,继电器低电平,LED灯不亮。

    手机连接到系统后,扫描二维码,得到一串数字后,输入该串密码,得以解锁继电器。输入密码,支持断点续传密码,如本次输入“123”,再次输入“456”,即可完成输入“123456”。输入错误可以选择按键S5清空输入后重新输入。单片机暂时内部设置密码为“12345678”。输入密码的过程中,流水灯会展示输入密码的最后一个字符的ASCII码,用于指示传输过程中字符是否正确被接收。如果输入了错误的密码,则会返回一串错误提示消息,并将数码管清空。输入错误的字符后,流水灯全亮。

    输入正确的密码后,继电器高电平,LED构成回路后点亮,返回给手机端计费信息和成功解锁提示。数码管开始计时,每10毫秒变动一次,8个数码管两个一组,分别显示小时、分钟、秒、十毫秒。当处于计费状态时,手机端发送数据,返回无法发送的字样。按下按键S4后,停止计费,返回到手机端计时时长和本次费用,数码管清零,等待下次解锁。

    二.单片机工作原理

    51单片机有P0、P1、P2、P3四个端口。本次实验将其中P0用于数码管的显示数字,P1用于流水灯的显示,P2端口的第1位(P2^1)接在继电器的DIO端,在单片机内控制高低电平。P3端口的第0位连接蓝牙的TX端,是单片机串口的接收端,P3端口的第1位连接蓝牙的RX端,是单片机串口的发送端。按键S4在内部连接P3端口的第2位,为外部中断0。按键S5在内部连接P3端口的第3位,为外部中断1。开启定时器0,设置好计数器的初始值;外部中断0,1打开;串口中断打开,设置好波特率9600,0,0与蓝牙模块一致即可。

    串口的中断触发后,需要软件清除RI(接收中断)与TI(发送中断)值为0,SBUF存放串口接收数据或发送数据,在C语言代码中赋值相同寄存器,在物理上分为发送和接收,每次1字节缓冲。

    定时器0设置工作方式0,13位计数器,计数到8192。晶振为11.0592MHz,每个机器周期需要12个时钟周期,计数5000次,所以每次进入中断的时间为5000*12/11.0592M=0.00543s,所以每次进入中断时间为0.005秒,数码管需要每10ms进入一次,所以每次加到2的时候,数码管变动。计数器初值为(8192-5000),分别存放入TH0与TL0,高低位。

    外部中断直接设置触发方式ITx=0/1低电平触发或下降沿触发后,开启外部中断,EXx=1后,编写相应中断函数即可。

    蓝牙模块首先按住复位键上电,即进入AT指令模式,对它输入AT指令进行设置名字、串口波特率、主从回环等后,连接到单片机上即可使用。

    三.模块工作原理

    二维码扫描APP:

    通过谷歌开源ZXing库开发了一款安卓APP,并安装到手机,扫描出数据后通过蓝牙模块输入到单片机中。

    扫描后为“12345678”。


    蓝牙模块HC-05:

    TX连接单片机P3.0口,RX连接单片机P3.1口。

    在蓝牙模块连接到单片机上前,首先通过USB-TTL转接器,连接到电脑上后,通过串口调试助手调试。首先进入命令调试模式,输入AT指令,设置模块的参数。

    设置蓝牙的名称,用指令

    AT+name=”LiMou”\r\n          设置蓝牙模块名字为LiMou,方便后续查找。

    设置自动连接模式的串口波特率为9600,用指令

    AT+uart=9600,0,0\r\n             设置波特率为9600,停止位1位,无校验位。

    用于手机与单片机之间的通信者,发送密码到密码上,在接入计费系统时,向手机端发送解锁成功标志,并提供计费标准。解锁失败发送解锁失败指示。

    测试问题:

    如果串口收不到数据,换一个模块。

    如果单片机收到数据错误,调整波特率,通过串口助手调节。

    继电器模块:

           继电器电源连接VCC,GND接地,DIO连接单片机P2.1端口,继电器的模块的开闭表示单车的开闭锁。在继电器下接入一个LED的小灯,用它的亮灭来表示继电器是否上电,是否已经开锁。

           LED:

    连接通过继电器构成回路,长脚(正极)接电源,短脚(负极)接继电器常闭端,继电器公共触点引到地,构成回路,点亮小灯(在继电器DIO高电平时)。


    数码管:

           给P1口送编码即可,0-F的编码分别为0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71。

    其中P2^6为段选通,P2^7为位选通。

    用于计时模块和指示通过蓝牙传入的密码数据。

    按键:

           根据不同按键连接的端口触发不同的中断,编写对应的中断函数。在本系统中,外部中断0通过独立键盘模块按键S4实现,低电平触发,在计费状态下,停止计费,并向手机发送计费结果。

           外部中断1通过独立键盘模块按键S5实现,下降沿触发,当在非计费状态下,清空数码管显示为全0。

          

    流水灯:

    流水灯连接到单片机的P1端口,直接对P1口赋值即可,高电平为灭,低电平亮。用于指示接收数据的ASCII码和错误输入提示,全亮。


    51单片机代码:

    #include "reg51.h"
    #include <intrins.h>
    sbit lock = P2 ^ 1;
    sbit dula = P2 ^ 6;
    sbit wela = P2 ^ 7;
    
    unsigned char digit_led_pointer = 0;
    unsigned char count = 0;
    unsigned char opened = 0;
    
    unsigned char code table[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };	// 数码管0-f表
    
    unsigned char led[] = { 0, 1, 2, 3, 4, 0, 0, 0 };	//存放8个数码管显示的数字
    
    
    void delay(unsigned int i)		//延迟函数
    {
    	while (--i);
    }
    
    void clear_digit(void)			//清空数码管,全变成0
    {
    	unsigned char i = 0;
    	for (; i < 8; ++i)
    		led[i] = 0;
    	digit_led_pointer = 0;
    }
    
    
    void send(unsigned char dat)	//通过串口发送到蓝牙模块上,蓝牙模块发送出去一个字节的字符
    {
    	ES = 0;
    	SBUF = dat;
    	while (!TI);
    	TI = 0;
    	ES = 1;
    }
    
    void send_str(unsigned char * str)	//通过蓝牙模块发送一个字符串
    {
    	while (*str != '\0')
    		send(*str++);
    }
    
    
    void display(unsigned char dig)		//输入密码阶段的显示,在已经输入的密码后续进行输入
    {
    	led[digit_led_pointer++] = dig;
    	if (digit_led_pointer == 8)
    	{
    		//判断如果输入密码为12345678的话,返回解锁成功
    		if (led[7] == 8 && led[6] == 7 && led[5] == 6 && led[4] == 5 && led[3] == 4 && led[2] == 3 && led[1] == 2 && led[0] == 1 && (opened == 0))
    		{
    			//开锁状态置位
    			opened = 1;
    			lock = 1;	//开锁继电器,高电平,点亮LED
    			clear_digit();
    			send_str("price: 1Yuan/min\n");
    			send_str("lock successfully!\n");
    		}
    		else
    		{
    			delay(10000000);	//输入8位密码后,延迟显示错误密码
    			clear_digit();
    			//解锁失败
    			send_str("lock fail!\n");	//向手机发送提示信息
    		}
    		digit_led_pointer = 0;
    	}
    }
    
    
    //计时模块,每次进入该函数,为10毫秒
    void time_add_10ms()
    {
    	led[7]++;
    	//100进位,每次10毫秒
    	if (led[7] == 10)
    	{
    		led[7] = 0; led[6]++;
    	}
    
    	if (led[6] == 10)
    	{
    		led[6] = 0; led[5]++;
    	}
    
    	//60进位,为秒数
    	if (led[5] == 10)
    	{
    		led[5] = 0; led[4]++;
    	}
    
    	if (led[4] == 6)
    	{
    		led[4] = 0; led[3]++;
    	}
    	//分钟数
    	if (led[3] == 10)
    	{
    		led[3] = 0; led[2]++;
    	}
    
    	if (led[2] == 10)
    	{
    		led[2] = 0; led[1]++;
    	}
    	//小时数,如果100个小时清零
    	if (led[1] == 10)
    	{
    		led[1] = 0; led[0]++;
    	}
    
    	if (led[0] == 10)
    		clear_digit();
    }
    
    //定时器0,为1号中断
    void timer0_ISR(void) interrupt 1
    {
    	if (opened == 1)
    	{
    		//晶振为11.0592MHz,每个机器周期需要12个时钟周期,计数5000次,所以每次进入中断的时间为
    		//	5000*12/11.0592M=0.00543s,每次进入add_10ms函数需要计数2次,所以每次count==2的时候,数码管显示+1
    		TL0 = (8192 - 5000) % 32;
    		TH0 = (8192 - 5000) / 32;
    		count++;
    		if (count == 2)
    		{
    			//达到10ms了
    			time_add_10ms();
    			count = 0;
    		}
    	}
    }
    
    
    
    void uart() interrupt 4
    {
    	unsigned char ky;
    
    	if (RI)
    	{
    		RI = 0;		//需要软件清除标志位
    		ky = SBUF;	//接收到的数据保存到
    		if (opened == 1)
    		{
    			send_str("can't stop, please press the button S4!\n");	//计费状态不接受输入,并返回提示信息。
    			return;
    		}
    		ES = 0;
    		P1 = ky;	//data send to Port 1,通过流水灯显示接收到的数据的ASCII码
    
    		//根据收到的数据进行异常处理或数码管输入
    		if (ky >= '0'&&ky <= '9')
    		{
    			display(ky - '0');
    		}
    		else if (ky >= 'a' && ky < 'f')
    		{
    			display((unsigned char)((ky - 'a') + 10));
    		}
    		else
    		{
    			//错误数据,流水灯全亮。
    			P1 = 0x00;
    		}
    		ES = 1;
    	}
    }
    
    void init_uart()
    {
    	TMOD = 0x25;            //定时器1工作方式2,计数器0工作方式1
    	SCON = 0x50;            //串口工作方式1
    	EA = 1;             //开总中断
    	ES = 1;             //开串口中断
    	TH1 = 0xfd;            //串口波特率9600
    	TL1 = 0xfd;
    	TR1 = 1;             //定时器1工作	
    }
    
    void timer0_init(void)
    {
    	TMOD &= 0xF0;	//计数器0方式0
    	TL0 = (8192 - 5000) % 32;	//计数5000次
    	TH0 = (8192 - 5000) / 32;
    	count = 0;
    	ET0 = 1;		//开启计时器和中断
    	TR0 = 1;		
    }
    
    void init_EX(void)
    {
    	EX0 = 1;
    	IT0 = 0;
    	EX1 = 1;		//开启外部中断 0
    	IT1 = 1;          //设置成低电平触发,1为下降沿触发
    }
    
    //把计时费用转换成字符串发送给手机端
    void num2str(int cost)
    {
    	while (1)
    	{
    		if (cost / 10 != 0)
    			send(cost / 10 + '0');
    		else
    		{
    			send(cost + '0');
    			break;
    		}
    		cost %= 10;
    	}
    }
    
    //外部中断0,S4按下停止计费
    void Ex0_IRQ(void) interrupt 0
    {
    	//不在计费状态下没反应
    	if (opened == 1)
    	{
    
    		int time;
    		opened = 0;
    		send_str("duration:");
    		send(led[0] + '0'); send(led[1] + '0'); send(':');
    		send(led[2] + '0'); send(led[3] + '0'); send(':');
    		send(led[4] + '0'); send(led[5] + '0');
    		send('\n');
    		time = ((led[0] + led[1]) * 60 + (led[2] * 10 + led[3]));
    		send_str("cost: RMB "); num2str(time + 1); send('\n');
    		lock = 0;
    		clear_digit();
    	}
    }
    
    //外部中断1,2号中断,S5按下后清空数码管
    void Ex1_IRQ(void) interrupt 2
    {
    	//不在计费状态下才有反应
    	if (opened == 0)
    	{
    		digit_led_pointer = 0;
    		clear_digit();
    	}
    }
    
    void main()
    {
    	unsigned char num = 0;
    	//初始化
    	init_uart();
    	timer0_init();
    	clear_digit();
    	init_EX();
    	lock = 0;
    	while (1)
    	{
    		//显示数码管
    		for (num = 0; num < 8; ++num)
    		{
    			wela = 1;
    			P0 = _crol_(0xfe, num);	//选中数码管,循环左移
    			wela = 0;
    			dula = 1;
    			P0 = table[led[num]];
    			delay(100);
    			dula = 0;
    		}
    	}
    }


    展开全文
  • HC-05蓝牙无线模块设置

    万次阅读 多人点赞 2016-08-23 15:36:20
    于是,某宝上买了两套HC-05蓝牙无线模块,HC-05是主从一体的蓝牙模块,所以比只能当从机的HC-6要贵一点。下面讲述HC-05配置过程。1、引脚说明1. RXD: 接收端 2. TXD: 发送端 3. AT: 设置工作模式

    USB转串口的有线转接方式,实在太难看了,尤其是寻接头,那是相当的不方便。其它电器厂商都想把是接头做小,做精致,唯独串口接头还是那么庞大,感觉应该换一换了,都已经完全不符合这个时代的审美观了。

    于是,某宝上买了两套HC-05蓝牙无线模块,HC-05是主从一体的蓝牙模块,所以比只能当从机的HC-6要贵一点。下面讲述HC-05配置过程。

    这里写图片描述

    1、引脚说明

    1. RXD: 接收端
    2. TXD: 发送端
    3. AT: 设置工作模式
        1) 工作模式: 自动连接(automatic connection),又称为透传模式() 又稱為透通模式(transparent communication)
        2) AT指令设置模式: 命令回应(order-response),又称为AT模式(AT mode) 
    4. VCC: 模块供电正极(5V)
    5. GND: 模块供电负极
    6. EN:使能端,需要进入AT模式时接3.3V。其实不接也没有关系
    6. STATE:我也不知道有什么用,没有用到

    2、接线方式
    1) 蓝牙<—->USB
    这里写图片描述
    2) 蓝牙<—->单片机
    这里写图片描述
    (注意TXD,RXD连接正确)

    引脚EN,我发现接到3.3V与不接都一样,上电后也无法自动进入AT模式。
    3、进入AT模式
    HC-05与HC-06不同,HC-06没有连接上时,就是AT模式,而HC-05需要有个开关,注意到模块上的小黑点没有,按下它再上电就使HC-05进入AT模式了,严格的讲,它只是一个开的作用,无法退出AT模式。此时指示灯慢闪(1秒亮一次),模块进入AT状态。

    4、基本配置
    模块默认波特率为9600、默认配对密码为1234、默认名称为HC-05,
    AT模式波特率固定38400,8位数据位、1位停止位、无奇偶校验的通信格式。

    AT+NAME="XXX"           修改蓝牙模块名称为XXX
    AT+ROLE=0               蓝牙模式为从模式
    AT+CMODE=1              蓝牙连接模式为任意地址连接模式,也就是说该模块可以被任意蓝牙设备连接
    AT+PSWD=1234            蓝牙配对密码为1234
    AT+UART=9600,0,0        蓝牙通信串口波特率为9600,停止位1位,无校验位

    更多配置请参考HC-05AT命令文档。

    5、模块指示灯说明:
    1.将模块上电同时(或者之前),将KEY接高电平,此时指示灯慢闪(1秒亮一次),模块进入AT状态,此时波特率固定38400。
    2.将模块上电后,将KEY悬空或者接地,此时指示灯快闪(1秒2次),表示模块进入可配对状态。此时如果将KEY接高电平,模块也会进入AT状态。但是指示灯依然是快闪(1秒2次)。
    3.模块配对成功,此时STA双闪(一次闪2下,2秒闪一次)。

    6、设置过程中遇到的两个问题
    正常情况下,按照上面的配置,基本上都能成功。但如果没有成功,要怎么自检。
    本人就遇到过来成功配对后无法通信的问题,结果是由于蓝牙模块设置的波特率与单机片烧写的波特率不一样所致。开始一直怀疑是蓝牙模块本身有问题。弄了一下午,测输出波形,更换连接串口,浪费了很多时间。
    自检方法也很简单,单片机给蓝牙模块供电,单片机端的蓝牙模块TX与RX直接相连,自发自收,电脑端能收到串口信号,则说明主从模块没有问题。
    遇到的另一个问题是用串口助手发送AT命令没有反应。我也不知道怎么原因,开始一直以为是自己操作或者数据格式的问题,后来去网上查,网上说不能用串口助手配置,换了个串口调试工具就可以了。

    7、资料工具
    (BlueTooth.pdf)http://download.csdn.net/detail/zx3517288/9610538
    (HC05指令集)http://download.csdn.net/detail/zx3517288/9610541
    (蓝牙测试软件.exe)http://download.csdn.net/detail/zx3517288/9610568
    (XCOM V2.0.exe)http://download.csdn.net/detail/zx3517288/9610546

    展开全文
  • 使用无底板的HC-05蓝牙模块,包括连线,通过SSCOM32进行配置,编写安卓端的程序实现和蓝牙模块的通信,数据传输
  • 51单片机使用HC-SR501人体红外感应器C语言 前言 买到该产品后问客服和面向百度编程,发现在51单片机上 使用的教程不多,且不够细致,使用存在困难,烦躁了很久,为了不让后来者跟我一样,写一篇 文章,第一次写,...
  • HC-05蓝牙模块连接STC89C52单片机控制LED灯

    万次阅读 热门讨论 2017-05-22 13:33:48
    **首先声明我用的是52单片机,板子型号为HC6800-ES V2.0;如果 非同类型,实现不了,概不认账。** 要实现这个玩法,首先得掌握串口通信的知识,不需要太多,只要知道如何接收/发送数据就行。 串行通信: 按照...
  • 实现蓝牙HC-05、06与单片机连接

    千次阅读 2016-12-28 17:02:59
    蓝牙(Bluetooth):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4—2.485GHz的ISM波段的UHF无线电波)。蓝牙技术最初由电信巨头爱立信公司于1994年...例如51给HC-05传递
  • HC-05的使用-详细

    2020-01-10 20:14:20
    蓝牙转串口模块HC-05模块使用记录 最近在弄一个需要无线传输数据的项目,虽然以前也接触过HC-05这个模块,但是始终只是知道简单的使用,借这个机会更加深入的学习一下这个模块。 初识HC-05 BLK-MD-HC-05蓝牙模块是专...
  • Android通过蓝牙接收单片机发来的数据。
  • 基于51单片机HC-06蓝牙模块使用,里面包含程序方便新手入门
  • 蓝牙模块hc-05在青少年科技类比赛项目中经常使用,通过蓝牙模块和手机app连接,可组成移动式控制器。该内容是蓝牙模块的测试程序,希望对大家有所帮助
  • HC-05蓝牙模块arduino通信实例代码以及注意事项HC-05的接线及使用进入蓝牙的设置模式进入AT命令模式(设置蓝牙参数)注意事项进入AT模式的代码(注意在通电之前让蓝牙模块进入设置模式)进入AT模式响应常用AT命令...
  • HC-05使用经验

    2020-04-23 23:35:05
    使用一块HC-05单片机与PC(自带蓝牙)无线通信是十分简单的,但对于第一次使用该类模块的新手来说会有很多不起眼的,网上其他大神都懒得说的坑,我当时就在这些坑中待了差不多一个星期。 目的:使用一块HC-05让...
  • 蓝牙hc-05模块(3.3v,5v都有)含原理图及PCB,电路板已测试,工作正常。。。。。。。。。。。。。。。。。。。。。。。。。
  • HC-05模块使用

    2020-05-15 19:56:06
    接口出错:HC-05的TXD要接板子的RXD;RXD接板子的TXD。 进入AT模式波特率设置出错:如果是上电同时给KEY接口一个高电平的话,此时HC-05的波特率是38400,但是实验中我是采用上电时KEY悬空,上电后再给KEY一个高电平...
  • 背景 最近在做一个学校老师手上的微小卫星项目,为了模拟卫星向地面站数据实时遥传...这里在模块选择上给大家一点告诫,由于HC-06只能作为从机使用,因此两个HC-06之间是无法直接建立这种通信的,方便起见建议直接用...
  • 蓝牙HC-05与51单片机通信乱码问题

    千次阅读 2019-05-31 22:23:09
    一、问题 通过蓝牙助手(或串口调试助手)...与89C51相连接HC-05也能接收到数据,但接收到的是乱码。 二、解决办法 波特率一致(我设置的是4800); 波特率加倍(不知道为啥要加倍,或者可能是我设置了什么)。 ...
  • msp430f149通过蓝牙HC-05与手机通…

    千次阅读 2016-12-26 10:23:06
    前面一篇实现蓝牙HC-05、06与单片机连接及与手机通信的总结中详细介绍了蓝牙与STC系列MCU的连接与配置,这次将msp430f149通过UART1与蓝牙HC-05连接,并实现与手机通信作简单总结。  通信效果:发送一段字码,蓝牙...
1 2 3 4 5 ... 20
收藏数 1,997
精华内容 798
关键字:

单片机连接hc-05