/***********************************************************
蓝牙数码管显示加LED指示灯
STC89c52与蓝牙连线:
单片机P30接蓝牙模块TXD
单片机P31接蓝牙模块RXD
蓝牙模块可以从开发板上取5V电源供电
蓝牙模块VCC接开发板上VCC注意VCC要为5V的电压
蓝牙模块GND接开发板上GND
先烧录程序再接上蓝牙模块的TXD与RXD引脚否则会无法烧录程序
手机采用蓝牙串口通信助手发送信息
开发板数码管显示手机app上发送的数据,采用1位数码管显示
数码管驱动电路带有锁存器数据口接的P0口
发送不同的数值P1口的流水灯模块也会对应的亮起
此程序只适用于清翔51单片机开发板MCS51,其他硬件平台需要对程序做一定修改
***********************************************************/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar dat = '0'; //蓝牙数据暂存,默认值初始化为字符0
sbit P27=P2^7;
sbit P26=P2^6;
sbit P25=P2^5;
sbit P24=P2^4;
sbit A=P2^1;
sbit Z=P2^2;
sbit C=P2^0;
uchar Flag=0,QF,HF,TF,ZF,YF;
char code str[] = "temp12345";
//串口初始化
void boothint(void)
{
SCON = 0x50; // SCON: 模式1, 8-bit UART, 使能接收
TMOD |= 0x20;
TH1=0xfd; //波特率9600 初值
TL1=0xfd;
TR1= 1;
EA = 1; //开总中断
ES= 1; //打开串口中断
}
/******************************************************************/
/* 串口中断程序*/
/******************************************************************/
void UART_SER () interrupt 4
{
if(RI) //判断是接收中断产生
{
RI=0; //标志位清零
dat=SBUF; //读入缓冲区的值
Flag=1;
}
// SBUF=dat; //把接收到的数据发送出去
// while(TI==0);
// TI=0;
}
void send_str( )
// 传送字串
{
unsigned char i = 0;
Flag=0;
while(str[i] != '\0')
{
SBUF = str[i];
while(!TI); // 等特数据传送
TI = 0; // 清除数据传送标志
i++; // 下一个字符
}
}
void delayms( unsigned char ms)//延时子程序
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void main()
{
boothint(); //串口初始化
while(1)
{
if(Flag==1)
{ ES=0;
delayms(50);
switch(dat) //点亮对应P1口上的LED
{
case '1': P1=0XFF; break; //关闭P1上所有流水灯
case '0': P1=0; break;
case '2': P1=0;P26=1;P25=0;P24=1; break;
case '3': P1=1;P26=0;P25=0;P24=1; break;
case '4': P1=0;P26=1;P25=1;P24=0; break;
case '5': P1 = 0XEF; break;
case '6': P1 = 0XDF; break;
case '7': P1 = 0XBF; break;
case '8': P1 = 0X7F; break;
case '9': P1 = 0; break; //点亮P1上所有灯
default: P1 = 0XFF; break; //关闭P1上所有灯
}
ES=1;
}
}
}
|