一、例程简介

本例程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. 重装操作系统的20条原则(转载)
  2. Mybatis入门:1(Mybatis框架的环境搭建)
  3. HTML5跳转页面并传值以及localStorage的用法
  4. AIO-3128C四核高性能主板
  5. 【 FPGA/IC 】addsub 的实现
  6. [javaSE] 多线程(守护线程)
  7. 华容道6×6图解_2008款马自达6仪表盘图解,仪表盘故障指示灯图解
  8. 【汇编语言学习之路】第一章 汇编语言核心方法论
  9. 同步机制之--java之CountDownLatch闭锁
  10. vue v-if判断数组元素的值_我对Vue项目上线做的一些基本优化
  11. matlab 视频制作,利用Matlab制作AVI视频基础教程
  12. kibana更改时间显示格式
  13. 自控原理学习笔记-系统稳定性分析(1)-BIBO稳定及Routh判据
  14. 东方联盟郭盛华:物联网安全是供应链问题
  15. Android Studio如何连接手机设备
  16. Processing介绍及几个python模式下的案例
  17. 测试管理005:面对用户反馈的缺陷,测试人员能做些什么?
  18. Linux周测(一些简单命令touch cat mkdir cp mv rm的简单练习)
  19. 更改 IE 收藏夹 位置
  20. Spring中DAO层、Service层、Controller层的定义

热门文章

  1. 右键桌面刷新,反应迟钝,刷新后很长一段时间才能显示出桌面图标的解决办法(重点是如何删除workfolders)
  2. h200和gr1108_华三H3C GR1108-P 路由器性能极限
  3. C++中值传递(pass-by-value)和引用传递(pass-by-reference)
  4. 攒机需要注意的8条技巧 转太平洋网
  5. DNS域名解析问题排查
  6. Dapper,大规模分布式系统的跟踪系统
  7. 解决Ubuntu更新后无线网卡不能使用的问题
  8. Codeforces 786A Berzerk(博弈论)
  9. 怎么退出自适应巡航_定速巡航和自适应定速巡航的区别
  10. 大彩科技新品首发--新1代HMI人机界面!