每日一記—藍牙模塊應用(一)

日期:2018.9.27


最近在研究藍牙模塊,先是手機藍牙串口通信的軟件開發,雖然有很多例子,但是對於小白的我還是弄了挺長時間。今天先介紹一下硬件部分的程序設計和仿真。硬件電路採用的是51單片機和藍牙模塊HC-05的連接。單片機程序如下:

#include <reg52.h>

sbit P1_0 = P1^0;        //Êä³ö¿Ú1
sbit P1_1 = P1^1;        //Êä³ö¿Ú2

#define uchar unsigned char;    //´æ´¢½ÓÊÕµ½µÄÐÅÏ¢
uchar tempbuf;

/*³õʼ»¯´®¿Ú*/
void BlueteethInit()
{
	SCON = 0x50;        //´®¿Úģʽ1£¬ÔÊÐí½ÓÊÕ
	TMOD = 0x20;        //T1¹¤×÷ģʽΪ2£¬×Ô¶¯ÖØ×°
	PCON = 0x00;        //²¨ÌØÂʲ»±¶Ôö
	
	REN = 1;
	
	TH1 = 0xfd;         //ÉèÖò¨ÌØÂÊΪ9600
	TL1 = 0xfd;
	
	RI = 0;
	
	EA = 1;             //¿ª×ÜÖжÏ
	ES = 1;             //¿ª´®¿Ú½ÓÊÕÖжÏ
	
	TR1 = 1;            //¶¨Ê±Æ÷¿ªÆô
}
void main()
{
	BlueteethInit();
	P1_0 = 0;
	P1_1 = 1;
	TI = 0;
	while(1)
	{
		if(tempbuf == 0x31)   //Ê®½øÖÆΪ49£¬¶ÔÓ¦ASCIIÂë¿ØÖÆ×Ö·ûΪ1
			P1_0 = 1;
		if(tempbuf == 0x30)   //Ê®½øÖÆΪ48£¬¶ÔÓ¦ASCIIÂë¿ØÖÆ×Ö·ûΪ0
			P1_0 = 0;
		if(tempbuf == 'A')   //Ê®½øÖÆΪ49£¬¶ÔÓ¦ASCIIÂë¿ØÖÆ×Ö·ûΪ1
			P1_1 = 1;
		if(tempbuf == 'B')   //Ê®½øÖÆΪ48£¬¶ÔÓ¦ASCIIÂë¿ØÖÆ×Ö·ûΪ0
			P1_1 = 0;
	}
}
void Serial(void) interrupt 4
{
	RI = 0; //¶Á±êÖ¾ÇåÁã
	ES = 0; //¹Ø±Õ´®¿ÚÖжÏ
	tempbuf = SBUF;
	ES = 1;
	SBUF = tempbuf;  //½«ÄÚÈÝ·µ»Øµ½ÊÖ»ú¶Ë£¬¿ÉÔÚÊÖ»ú²é¿´·¢Ë͵ÄÄÚÈÝ
	while(!TI)
		TI = 0;  //д±êÖ¾ÇåÁã
}

由於我是用KEIL編寫的,導致複製到這裏註釋全部亂碼,需要注意的就是while循環裏的判斷,0x31是ASCII數值,對應的十進制字符就是1,0x30對應的是0。然後生成我們需要使用的HEX文件。


protus仿真:

搭建仿真電路

用到的器件如下:

AT89C51、Resistor(Generic)、CRYSTAL、Capacitors(Generic)、LED-、button、compim

需要注意的是X1晶振的數值和U1單片機的數值設置到11.0592MHz,

P1端口的設置

最後在設置中的“program file”中選擇剛纔生成的HEX,就可以進行仿真了,仿真效果如下,

接下來就是如何測試串口通信效果了。

用Virtual Serial Port Driver 軟件實現虛擬串口的連接

虛擬出了com1和com2的連接,從設備管理器中看會更清晰

最後我們把仿真電路中的P1設置爲com1,然後打開串口調試助手AccessPort,設置相同的波特率,然後打開串口com2,寫入字符1或0,或者A或B,可以實現仿真。

當我輸入0後可以將D1的藍色關閉,同時我再次輸入B後可以打開D2爲藍色,

這樣我們就實現了硬件電路的仿真工作,將單片機的P1串口替換爲藍牙模塊後,通過手機發送相應的字符to那個樣會實現點亮和關閉D1和D2的控制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章