标题:
蓝牙串口控制电路及程序
[打印本页]
作者:
阿里郎呀嘿
时间:
2016-5-30 23:37
标题:
蓝牙串口控制电路及程序
基于51单片机的蓝牙串口控制电路原理图
0.png
(87.23 KB, 下载次数: 214)
下载附件
2016-6-3 13:43 上传
全部资料下载:
蓝牙串口控制电路.zip
(15.8 MB, 下载次数: 40)
2016-5-30 23:36 上传
点击文件名下载附件
蓝牙串口控制电路
下载积分: 黑币 -5
三按键模式控制程序:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
int Time[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0~9段码
int hour_shi=2,hour_ge=0,min_shi=1,min_ge=6;
int NLh_shi=0,NLh_ge=0,NLm_shi=0,NLm_ge=0;
int star_flag=1;
int kk=4600; //一秒钟是75,一分钟是4500(用一个LED灯来做状态指示),但是还是有点误差
char sbuf_in;
sbit jdq=P1^0;
sbit jdq1=P1^1;
sbit jdq2=P1^2;
sbit jdq3=P1^3;
sbit fmq=P1^4;
sbit button4=P2^7;
sbit button3=P2^6;
sbit button2=P2^5;
sbit button1=P2^4;
void delay(uchar i)
{
uchar j;
while(i--)
for(j=0;j<120;j++);
}
void BT_Uart_inti() //单片机串口初始化
{
//SCON=0X50; //串口工作方式1,允许串口接收
SM0=0;
SM1=1;
REN=1;
//RI=1; //接收标志位,0:正在接收 1:接收完毕 (如果RI=1就一直执行串口中断)
TMOD=0X20; //定时器T1工作方式2
TH1=0XFD; //9600bit/s下的定时器初值
TL1=0XFD;
TR1=1; //启动定时器T1
EA=1; //开总中断
ES=1; //开串行口中断
}
void smg_init() //数码管初始化
{
uint n;
for(n=0;n<4;n++)
{
P2=(0XFE<<n);
P0=0X49;
delay(500);
P0=0X3F;
delay(500);
}
fmq=0; //关闭蜂鸣器
}
/*void Send_char(uchar dat) //发送端
{
SBUF=dat; //将字符送入发送寄存器
while(!TI); //T1为发送状态标志位,0:发送中 1:发送结束
TI=0; //手动清零标志位
}*/
void Smg_display()
{
P2=0XFE;
P0=Time[hour_shi];
delay(3);
P2=0XFD;
P0=Time[hour_ge];
delay(3); //若延时大于此数值,则数码管闪烁明显
P2=0XFB;
P0=Time[min_shi];
delay(3);
P2=0XF7;
P0=Time[min_ge];
delay(3); //若延时大于此数值,则数码管闪烁明显
}
void Time_off()
{
uint k;
for(k=0;k<20;k++) //不知为何只循环一半次数
{
Smg_display(); //如果不调用显示函数则无法正常显示数值
jdq=~jdq;
jdq1=~jdq1;
jdq2=~jdq2;
jdq3=~jdq3;
fmq=~fmq;
delay(33);
Smg_display();
delay(33);
}
}
void Smg_display2()
{
P2=0XFE;
P0=Time[NLh_shi];
delay(3);
P2=0XFD;
P0=Time[NLh_ge];
delay(3); //若延时大于此数值,则数码管闪烁明显
P2=0XFB;
P0=Time[NLm_shi];
delay(3);
P2=0XF7;
P0=Time[NLm_ge];
delay(3); //若延时大于此数值,则数码管闪烁明显
}
void Button4()
{
if(button1==0)
{
delay(15);
if(button1==0)
{
star_flag++;
if(star_flag>3)
star_flag=1;
}
}
if(star_flag==1) //启动时钟
{
jdq=0;jdq1=1;jdq2=1;jdq3=0; //用LED来做状态显示,靠边的两盏灯常亮表示正在工作
Smg_display(); //调用数码管显示函数
kk--;
if(kk<0)
{
kk=4600;
min_ge++;
if(min_ge>9)
{
min_ge=0;
min_shi++;
if(min_shi>5)
{
min_shi=0;
hour_ge++;
if(hour_shi==2&&hour_ge>3)
{
hour_shi=0; hour_ge=0;
min_shi=0; min_ge=0;
}
if(hour_ge>9)
{
hour_ge=0;
hour_shi++;
}
}
}
}
}
if(star_flag==2) //暂停时钟(用来校准时间)
{
jdq=0;jdq1=0;jdq2=0;jdq3=0; //四盏灯全亮表示进入暂停状态
Smg_display(); //调用数码管显示函数
if(button2==0) //时位自增
{
delay(88);
if(button2==0)
{
hour_ge++;
if(hour_shi==2&&hour_ge>3)
{
hour_shi=0;
hour_ge=0;
}
if(hour_ge>9)
{
hour_ge=0;
hour_shi++;
}
}
}
if(button3==0) //分位自减
{
delay(88);
if(button3==0)
{
min_ge--;
if(min_ge<0)
{
min_ge=9;
min_shi--;
if(min_shi<0)
min_shi=5;
}
}
}
}
if(button4==0)
{
delay(88);
if(button4==0)
star_flag=3;
}
if(star_flag==3) //设置闹铃时间
{
jdq=1,jdq1=1;jdq2=1;jdq3=1; //四盏灯全灭表示进入设置闹铃状态
Smg_display2();
if(button2==0) //时位自增
{
delay(88);
if(button2==0)
{
NLh_ge++;
if(NLh_shi==2&&NLh_ge>3)
{
NLh_shi=0;
NLh_ge=0;
}
if(NLh_ge>9)
{
NLh_ge=0;
NLh_shi++;
}
}
}
}
if(button3==0) //分位自减
{
delay(88);
if(button3==0)
{
NLm_ge--;
if(NLm_ge<0)
{
NLm_ge=9;
NLm_shi--;
if(NLm_shi<0)
NLm_shi=5;
}
}
}
}
/*void Add_Sub(void)
{
smg_ge--;
if(smg_ge<0)
{smg_shi--;smg_ge=9;}
if(smg_shi<0)
{smg_shi=9;smg_ge=9;}
}*/
void main()
{
BT_Uart_inti();
Time_off();
smg_init();
while(1)
{
Button4();
if(hour_shi==NLh_shi&&hour_ge==NLh_ge&&min_shi==NLm_shi&&min_ge==NLm_ge)
Time_off();
}
}
void BT_serial_smg() interrupt 4 //中断编号4为串行口中断
{
//Smg_display();
if(RI) //接收标志位,0:正在接收 1:接收完毕 (如果RI=1就一直执行中断)
{//Smg_display();k--;if(k==0){Add_Sub();k=66;}
RI=0; //同样需要手动清零
sbuf_in=SBUF; //将接收缓冲器接收的字符送入变量中
}
}
复制代码
作者:
知足123
时间:
2016-10-1 15:56
感谢楼主的分享!!!!!!!!!!!
作者:
hou1232
时间:
2017-2-23 12:02
51单片机的蓝牙串口控制电路原理图
作者:
美猴王HLM
时间:
2017-4-14 18:03
感谢分享
作者:
1240683710
时间:
2017-5-10 15:35
看看,学习学习
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1