找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6307|回复: 4
打印 上一主题 下一主题
收起左侧

蓝牙串口控制电路及程序

[复制链接]
跳转到指定楼层
楼主
基于51单片机的蓝牙串口控制电路原理图

全部资料下载:
蓝牙串口控制电路.zip (15.8 MB, 下载次数: 40)

三按键模式控制程序:
  1. #include<reg51.h>                                                   
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. int Time[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};          //共阴极数码管0~9段码
  5. int hour_shi=2,hour_ge=0,min_shi=1,min_ge=6;
  6. int NLh_shi=0,NLh_ge=0,NLm_shi=0,NLm_ge=0;
  7. int star_flag=1;
  8. int kk=4600;          //一秒钟是75,一分钟是4500(用一个LED灯来做状态指示),但是还是有点误差

  9. char sbuf_in;

  10. sbit jdq=P1^0;
  11. sbit jdq1=P1^1;
  12. sbit jdq2=P1^2;
  13. sbit jdq3=P1^3;
  14. sbit fmq=P1^4;

  15. sbit button4=P2^7;
  16. sbit button3=P2^6;
  17. sbit button2=P2^5;
  18. sbit button1=P2^4;

  19. void delay(uchar i)
  20. {
  21.         uchar j;
  22.         while(i--)
  23.         for(j=0;j<120;j++);
  24. }


  25. void BT_Uart_inti()          //单片机串口初始化
  26. {
  27.         //SCON=0X50;           //串口工作方式1,允许串口接收
  28.         SM0=0;
  29.         SM1=1;
  30.         REN=1;
  31.         //RI=1;  //接收标志位,0:正在接收 1:接收完毕 (如果RI=1就一直执行串口中断)

  32.         TMOD=0X20;           //定时器T1工作方式2
  33.         TH1=0XFD;           //9600bit/s下的定时器初值
  34.         TL1=0XFD;
  35.         TR1=1;                  //启动定时器T1
  36.         EA=1;                  //开总中断
  37.         ES=1;                  //开串行口中断
  38. }

  39. void smg_init()                 //数码管初始化
  40. {
  41.         uint n;
  42.         for(n=0;n<4;n++)
  43.         {
  44.                 P2=(0XFE<<n);
  45.                 P0=0X49;
  46.                 delay(500);
  47.                 P0=0X3F;
  48.                 delay(500);
  49.         }
  50.         fmq=0;                 //关闭蜂鸣器
  51. }

  52. /*void Send_char(uchar dat)          //发送端
  53. {
  54.         SBUF=dat;                  //将字符送入发送寄存器
  55.         while(!TI);                  //T1为发送状态标志位,0:发送中 1:发送结束
  56.         TI=0;                         //手动清零标志位
  57. }*/


  58. void Smg_display()
  59. {
  60.         P2=0XFE;
  61.         P0=Time[hour_shi];
  62.         delay(3);
  63.         P2=0XFD;
  64.         P0=Time[hour_ge];
  65.         delay(3); //若延时大于此数值,则数码管闪烁明显
  66.         P2=0XFB;
  67.         P0=Time[min_shi];
  68.         delay(3);
  69.         P2=0XF7;
  70.         P0=Time[min_ge];
  71.         delay(3); //若延时大于此数值,则数码管闪烁明显
  72. }

  73. void Time_off()
  74. {
  75.         uint k;
  76.         for(k=0;k<20;k++)          //不知为何只循环一半次数
  77.         {
  78.                 Smg_display();  //如果不调用显示函数则无法正常显示数值
  79.                 jdq=~jdq;
  80.                 jdq1=~jdq1;
  81.                 jdq2=~jdq2;
  82.                 jdq3=~jdq3;
  83.                 fmq=~fmq;
  84.                 delay(33);
  85.                 Smg_display();
  86.                 delay(33);
  87.         }
  88. }

  89. void Smg_display2()
  90. {
  91.         P2=0XFE;
  92.         P0=Time[NLh_shi];
  93.         delay(3);
  94.         P2=0XFD;
  95.         P0=Time[NLh_ge];
  96.         delay(3); //若延时大于此数值,则数码管闪烁明显
  97.         P2=0XFB;
  98.         P0=Time[NLm_shi];
  99.         delay(3);
  100.         P2=0XF7;
  101.         P0=Time[NLm_ge];
  102.         delay(3); //若延时大于此数值,则数码管闪烁明显
  103. }



  104. void Button4()
  105. {
  106.         if(button1==0)
  107.         {
  108.                 delay(15);
  109.                 if(button1==0)
  110.                 {
  111.                         star_flag++;
  112.                         if(star_flag>3)
  113.                         star_flag=1;
  114.                 }
  115.         }
  116.         if(star_flag==1)          //启动时钟
  117.         {
  118.                 jdq=0;jdq1=1;jdq2=1;jdq3=0;                        //用LED来做状态显示,靠边的两盏灯常亮表示正在工作
  119.                 Smg_display();  //调用数码管显示函数
  120.                 kk--;
  121.                 if(kk<0)
  122.                 {
  123.                         kk=4600;
  124.                         min_ge++;
  125.                         if(min_ge>9)
  126.                         {
  127.                                 min_ge=0;
  128.                                 min_shi++;
  129.                                 if(min_shi>5)
  130.                                 {
  131.                                         min_shi=0;
  132.                                         hour_ge++;
  133.                                         if(hour_shi==2&&hour_ge>3)
  134.                                         {
  135.                                                 hour_shi=0; hour_ge=0;
  136.                                                 min_shi=0; min_ge=0;
  137.                                         }
  138.                                         if(hour_ge>9)
  139.                                         {
  140.                                                 hour_ge=0;
  141.                                                 hour_shi++;
  142.                                         }
  143.                                 }
  144.                         }
  145.                 }
  146.         }

  147.         if(star_flag==2)                //暂停时钟(用来校准时间)
  148.         {
  149.                 jdq=0;jdq1=0;jdq2=0;jdq3=0;          //四盏灯全亮表示进入暂停状态
  150.                 Smg_display();  //调用数码管显示函数
  151.                 if(button2==0)           //时位自增
  152.                 {
  153.                         delay(88);
  154.                         if(button2==0)
  155.                         {
  156.                                 hour_ge++;
  157.                                 if(hour_shi==2&&hour_ge>3)
  158.                                 {
  159.                                         hour_shi=0;
  160.                                         hour_ge=0;
  161.                                 }
  162.                                 if(hour_ge>9)
  163.                                 {
  164.                                         hour_ge=0;
  165.                                         hour_shi++;
  166.                                 }
  167.                         }
  168.                 }

  169.                 if(button3==0)                //分位自减
  170.                 {
  171.                         delay(88);
  172.                         if(button3==0)
  173.                         {
  174.                                 min_ge--;
  175.                                 if(min_ge<0)
  176.                                 {
  177.                                         min_ge=9;
  178.                                         min_shi--;
  179.                                         if(min_shi<0)
  180.                                                 min_shi=5;
  181.                                 }
  182.                         }
  183.                 }
  184.         }

  185.         if(button4==0)
  186.         {
  187.                 delay(88);
  188.                 if(button4==0)
  189.                         star_flag=3;
  190.         }

  191.         if(star_flag==3)          //设置闹铃时间
  192.         {
  193.                 jdq=1,jdq1=1;jdq2=1;jdq3=1;          //四盏灯全灭表示进入设置闹铃状态
  194.                 Smg_display2();
  195.                 if(button2==0)          //时位自增
  196.                         {
  197.                                 delay(88);
  198.                                 if(button2==0)
  199.                                 {
  200.                                         NLh_ge++;
  201.                                         if(NLh_shi==2&&NLh_ge>3)
  202.                                         {
  203.                                                 NLh_shi=0;
  204.                                                 NLh_ge=0;
  205.                                         }
  206.                                         if(NLh_ge>9)
  207.                                         {        
  208.                                                 NLh_ge=0;
  209.                                                 NLh_shi++;
  210.                                         }
  211.                                 }
  212.                         }
  213.                 }

  214.                 if(button3==0)                //分位自减
  215.                 {
  216.                         delay(88);
  217.                         if(button3==0)
  218.                         {
  219.                                 NLm_ge--;
  220.                                 if(NLm_ge<0)
  221.                                 {
  222.                                         NLm_ge=9;
  223.                                         NLm_shi--;
  224.                                         if(NLm_shi<0)
  225.                                                 NLm_shi=5;
  226.                                 }
  227.                         }
  228.                 }
  229. }

  230. /*void Add_Sub(void)
  231. {
  232.         smg_ge--;
  233.         if(smg_ge<0)
  234.         {smg_shi--;smg_ge=9;}
  235.         if(smg_shi<0)
  236.         {smg_shi=9;smg_ge=9;}
  237. }*/

  238. void main()
  239. {
  240.         BT_Uart_inti();
  241.         Time_off();
  242.         smg_init();
  243.         while(1)
  244.         {
  245.                 Button4();
  246.                 if(hour_shi==NLh_shi&&hour_ge==NLh_ge&&min_shi==NLm_shi&&min_ge==NLm_ge)
  247.                                 Time_off();


  248.         }
  249. }

  250. void BT_serial_smg()        interrupt 4    //中断编号4为串行口中断
  251. {
  252.         //Smg_display();
  253.         if(RI)   //接收标志位,0:正在接收 1:接收完毕 (如果RI=1就一直执行中断)
  254.         {//Smg_display();k--;if(k==0){Add_Sub();k=66;}
  255.                 RI=0;           //同样需要手动清零
  256.                 sbuf_in=SBUF;         //将接收缓冲器接收的字符送入变量中
  257.         }

  258. }
复制代码


评分

参与人数 2黑币 +55 收起 理由
hou1232 + 5 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:140926 发表于 2016-10-1 15:56 | 只看该作者
感谢楼主的分享!!!!!!!!!!!
回复

使用道具 举报

板凳
ID:166036 发表于 2017-2-23 12:02 | 只看该作者
51单片机的蓝牙串口控制电路原理图
回复

使用道具 举报

地板
ID:188933 发表于 2017-4-14 18:03 | 只看该作者
感谢分享
回复

使用道具 举报

5#
ID:147735 发表于 2017-5-10 15:35 | 只看该作者
看看,学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表