一、例程简介

本例程51单片机与蓝牙模块连接,可通过蓝牙模块接收和发送字符串,从而控制测试灯的亮灭。其中使用51单片机的串行口2的工作方式1,即8位UART,波特率可变。波特率设为9600。缺省UART2在P1口。

测试程序实现的功能:

1、蓝牙模块接收到“0”~“6”字符串时,分别实现LED0~4的不同亮灭效果;

2、执行字符串“6”对应效果后,通过蓝牙模块发送字符串“\rHello!”到模块连接的蓝牙设备。

二、硬件部分

C51芯片:STC12C5A60S2 PDIP-40

蓝牙模块:HC-05

晶振:11.0592MHz

-- 连接电路 --

最小系统

(测试用BST-V51 51单片机学习板)

蓝牙模块

+5V 接 单片机VCTC

GND 接 单片机GND

TX 接 P1.2/RxD2

RX 接 P1.3/TxD2

其它引脚悬空

三、软件部分

-- C语言代码 --

#include "reg51.h"
#include "intrins.h"
#include "string.h"typedef unsigned char uchar;
typedef unsigned int uint;#define FOSC 11059200L //System frequency
#define BAUD 9600 //UART baudrate
#define PARITYBIT NONE_PARITY //Testing none parity/*Define UART parity mode*/
/* Copy from STC12C5A60S2 Data Sheet*/
#define NONE_PARITY 0 //None parity
#define ODD_PARITY 1 //Odd parity
#define EVEN_PARITY 2 //Even parity
#define MARK_PARITY 3 //Mark parity
#define SPACE_PARITY 4 //Space parity/*Declare SFR associated with the UART2 */
/* Copy from STC12C5A60S2 Data Sheet*/
sfr AUXR = 0x8e; //Auxiliary register
sfr AUXR1 = 0xa2;
sfr S2CON = 0x9a; //UART2 control register
sfr S2BUF = 0x9b; //UART2 data buffer
sfr BRT = 0x9c; //Baudrate generator
sfr IE2 = 0xaf; //Interrupt control 2
#define S2RI 0x01 //S2CON.0
#define S2TI 0x02 //S2CON.1
#define S2RB8 0x04 //S2CON.2
#define S2TB8 0x08 //S2CON.3/* Define variables associated with the UART2*/
char UART_buff;
char Str[16];
uchar j = 0;/*Define pin of LED for testing*/
sbit LED0 = P1^0;
sbit LED1 = P1^4;
sbit LED2 = P1^5;
sbit LED3 = P1^6;
sbit LED4 = P1^7;// delay for x ms
void delayxms(uint x)
{uint i;uchar a,b;for(i=0;i<x;i++)for(b=18;b>0;b--)for(a=152;a>0;a--) ;
}/* Copy from STC12C5A60S2 Data Sheet*/
void Uart2_Init()
{#if (PARITYBIT == NONE_PARITY)S2CON = 0x50; //8-bit variable UART#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)S2CON = 0xda; //9-bit variable UART, parity bit initial to 1#elif (PARITYBIT == SPACE_PARITY)S2CON = 0xd5; //9-bit variable UART, parity bit initial to 0#endifBRT = -(FOSC/32/BAUD); //Set auto-reload vaule of baudrate generatorAUXR = 0x14; //Baudrate generator work in 1T mode
//  AUXR1  |= 0x10; // If needed, switch UART2 Pin from P1 to P4IE2 = 0x01; //Enable UART2 interruptEA = 1; //Open master interrupt switch
}/*----------------------------
Send a string to UART
Input: s (address of string)
Output:None
----------------------------*/
void SendString(char *s)
{int i = 0;int l = strlen(s);for(i; i<l; i++){S2BUF = s[i];while(!(S2CON&S2TI)) ;S2CON &= ~S2TI;;}
}void main()
{Uart2_Init();LED0 = 1;LED1 = 1;LED2 = 1;LED3 = 1;LED4 = 1;while(1) ;
}/*----------------------------
UART2 interrupt service routine
----------------------------*/
void Uart2() interrupt 8 using 1
{if (S2CON & S2RI){S2CON &= ~S2RI; //Clear receive interrupt flagUART_buff = S2BUF; //UART_buff to save UART dataif(UART_buff != '\0') // When it's not the end of message,{Str[j++] = UART_buff; // Continue to record character.}else // When message ends, do the specific job{Str[j] = UART_buff;if(strcmp(Str, "0") == 0){LED0 = ~LED0;delayxms(100);}else if(strcmp(Str, "1") == 0){LED1 = ~LED1;delayxms(100);}else if(strcmp(Str, "2") == 0){LED2 = ~LED2;delayxms(100);}else if(strcmp(Str, "3") == 0){LED3 = ~LED3;delayxms(100);}else if(strcmp(Str, "4") == 0){LED4 = ~LED4;delayxms(100);}else if(strcmp(Str, "5") == 0){LED1 = 0;LED2 = 0;LED3 = 0;LED4 = 0;delayxms(100);}else if(strcmp(Str, "6") == 0){LED1 = 1;LED2 = 1;LED3 = 1;LED4 = 1;delayxms(100);SendString("\rHello!");}strcpy(Str, "");j = 0;}}if (S2CON & S2TI){S2CON &= ~S2TI; //Clear transmit interrupt flag}
}

C51单片机-串行口2-蓝牙模块-应用例程相关推荐

  1. 单片机实验汇编案例---单片机串行口与PC机通讯实验

    一.实验要求 利用8031单片机串行口,实现与PC机通讯. 本实验实现以下功能,将从实验机键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到实验机的数码管上. 二.实验 ...

  2. 单片机 串行口实验解数据流怎么到发光二极管来显示的

    [斯鹭]徐良军利用8031单片机串行口,实现与PC机通讯.本实验实现以下功能,将从实验机键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到实验机的数码管上.二.实验目的 ...

  3. 51单片机串行口的使用与串行通信

    51单片机串行口的使用与串行通信 串行通信: 俩个概念: RS232接口标准: 串行口的使用: 串行口的结构: 串行口相关寄存器: 串行口的工作方式: 方式0:同步移位寄存器方式 利用方式0扩展并行I ...

  4. 51单片机串行口程序c语言编程,单片机C语言编程串行口通讯.ppt

    单片机C语言编程串行口通讯 第7章 MCS-51单片机串行口 第7章 MCS-51单片机串行口 目 录 7.1 串行通信基本知识 7.2 串行口结构及控制 7.3 串行口工作方式 7.4 串行口应用举 ...

  5. (九)单片机串行口 内部结构的讲解 01

    1. 基本概念 常用于数据通信的传输方式有单工.半双工.全双工和多工方式. 单工方式:数据仅按一个固定方向传送.因而这种传输方式的用途有限,常用于串行口的打印数据传输与简单系统间的数据采集. 半双工方 ...

  6. 串行异步通信_单片机串行口介绍

    串行口是单片机与外界进行信息交换的工具,8051单片机的通信方式有两种: 并行通信:数据的各位同时发送或接收. 串行通信:数据一位一位次序发送或接收. 串行通信的方式 异步通信 用一个起始位0表示字符 ...

  7. 串行口通信c语言代码,问一下单片机串行口通信用c语言实现的问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这个是上面项目中用的子程序: /************************************************************* ...

  8. 51单片机串行口c语言编程,51单片机串口通信c语言编程

    这只是个模板,参考一下 /*----------------------------------------------- 名称:串口通信 网站:www.doflye.net 编写:shifang 日 ...

  9. 快速复习51单片机的外部中断、计数/定时器中断和串行口中断,加代码实现

    目录 1.中断系统的概念 1.1中断的概念 1.2中断系统的概念 1.3中断系统的优点 1.4我们要说的三种中断源 2.外部中断 2.1 外部中断0 代码示范 2.2 外部中断 分析 3.计数/定时器 ...

最新文章

  1. IC基础知识(4)电源管理简介:稳压器IC
  2. Plenty Of Tricks to Get Irradiance Caching Practical
  3. 【iOS】【项目全局动态埋点】Runtime+Aspects(hook)
  4. artDialog对话框在PHP下的简单应用-artDialog弹出层篇
  5. 小白都能看懂的干货!大数据这朵“后浪”,能卷起多大的风浪?
  6. Spark Streaming揭秘 Day13 数据安全容错(Driver篇)
  7. Python 教你自动发微博,每日一句英语
  8. PyQt5, PushButton
  9. 钉钉在线求饶?五星分期付款?爬取钉钉App Store真实评价数据并分析
  10. python实现按照给定范围随机生成小数,偶数,奇数,整数,正态分布,均匀分布数据以及图片
  11. java实现康威生命游戏
  12. 阿里云ecs云服务器和域名的购买,绑定及备案教程
  13. 手把手带你搭建一个自己的云服务器并部署Web程序
  14. 漂亮的css网站js资源无限下载
  15. 评估软件项目的经济价值
  16. svn快速入门使用教程
  17. copy.copy()与copy.deepcopy()的详解
  18. (zz)Lambda 表达式(C# 编程指南)
  19. Centos中Samba共享目录无法访问
  20. chrome浏览器字体小于12px的解决方式

热门文章

  1. 抄板PCB,好麻烦!
  2. 虚拟机ipv4和6都没访问权限_ipv4和ipv6无网络访问权限 win10
  3. oracle数据库description,DESCRIPTION=(ADDRESSOracle12c环境下的EM配置和使用方法
  4. 蹩脚的CSDN手机绑定
  5. MSRA-TD500数据集坐标转换
  6. Oracle数据库的毗邻
  7. (41.1)【JWT-KID漏洞】KID之目录遍历、命令注入、SQL注入
  8. torch-fidelity 简便计算FID,ISC,KID,PPL
  9. C语言-函数案例-计算圆周长
  10. (一)城市三维基础展示方案