/***********************************************************
藍牙數碼管顯示加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;
}
}
}
|