找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3330|回复: 4
收起左侧

单片机通过蓝牙将停车位信息发送到手机APP

[复制链接]
ID:290266 发表于 2019-4-24 18:40 | 显示全部楼层
单片机源程序如下:
  1. /********************************************************************
  2. * 文件名  : 串口接收试验.c
  3. * 描述    :  该文件实现通过单片机从电脑接收数据。
  4.              该试验使用的晶振是11.0592
  5. ***********************************************************************/

  6. #include<reg52.h>
  7. #include<intrins.h>

  8. #define uchar unsigned char
  9. #define uint  unsigned int

  10. uchar uart_receive_buffer[30];  //从串口接收的数据
  11. uchar uart_receive_number=0;    //指示串口接收个数


  12. /********************************************************************
  13. * 名称 : Delay_1ms()
  14. * 功能 : 延时子程序,延时时间为 1ms
  15. * x * 输入 : x (延时一毫秒的个数)
  16. * 输出 : 无
  17. ***********************************************************************/
  18. void Delay_1ms(uint i)//1ms延时
  19. {
  20.   uchar x,j;
  21.   
  22.   for(j=0;j<i;j++)
  23.     for(x=0;x<=148;x++);
  24. }

  25. /********************************************************************
  26. * 名称 : Com_Int()
  27. * 功能 : 串口中断子函数
  28. * 输入 : 无 * 输出 : 无
  29. ***********************************************************************/
  30. void Com_Int(void) interrupt 4
  31. {
  32.   static uchar i = 7;  //定义为静态变量,当重新进入这个子函数时 i 的值不会发生改变
  33.   
  34.   EA = 0;
  35.   if(RI == 1){  //当硬件接收到一个数据时,RI会置位
  36.     RI = 0;
  37.     uart_receive_buffer[uart_receive_number] = SBUF;  //这里减去48是因为从电脑中发送过来的数据是ASCII码。
  38.     uart_receive_number++;
  39.   }
  40.   EA = 1;
  41. }

  42. /********************************************************************
  43. * 名称 : Com_Init()
  44. * 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
  45. * 输入 : 无
  46. * 输出 : 无
  47. ***********************************************************************/
  48. void Com_Init(void) {
  49.   TMOD = 0x20;
  50.   PCON = 0x00;
  51.   SCON = 0x50;
  52.   TH1 = 0xFd;  //设置波特率 9600
  53.   TL1 = 0xFd;
  54.   TR1 = 1;  //启动定时器1
  55.   ES = 1;  //开串口中断
  56.   EA = 1;  //开总中断
  57. }

  58. /********************************************************************
  59. * 名称 : Main()
  60. * 功能 : 主函数
  61. * 输入 : 无
  62. * 输出 : 无
  63. ***********************************************************************/
  64. void Main()
  65. {
  66.   uchar uart_receive_number_old=0;
  67.   
  68.   Com_Init();
  69.   
  70.   while(1){
  71.    
  72.     if(uart_receive_number_old!=uart_receive_number){
  73.       uart_receive_number_old=uart_receive_number;
  74.     }
  75.    
  76.     //如果单片机接收来自HC-xx模块不少于1字节的串口数据,一定要加延时后再判断是否
  77.     //还有串口数据在发送,这样才能完整的接收一帧串口数据
  78.     Delay_1ms(30);
  79.    
  80.     //一段时间之后仍然相等,表示上位机发来的一串数据结束
  81.     if(uart_receive_number_old==uart_receive_number){
  82.       if(uart_receive_number)
  83.         break;
  84.     }
  85.   }
  86.   
  87.   if(uart_receive_number){
  88.     //串口有数据时,该做些什么就做什么吧
  89.   }
  90.   
  91.   while(1);
  92. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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