找回密码
 立即注册

QQ登录

只需一步,快速开始

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

蓝牙串口如何一次发送两个字符数据啊?

[复制链接]
跳转到指定楼层
楼主
ID:900977 发表于 2021-5-16 12:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是源代码,现在只能发送0-9或者是单个字符数据,如何改成一次可以发送两个或者两个以上的字符数据,比如发送10,11之类两位数的数据???
#include <reg52.h>

#include <intrins.h>
#define uint unsigned int           //用"uint"代替"unsigned int"   无符号整数
#define uchar unsigned char                                        //用"uchar"代替"unsigned char" 无符号字符
unsigned char tmp;
uint bai;
sbit h1=P2^0;   //四个红外传感器
sbit h2=P2^1;
sbit h3=P2^2;
sbit h4=P2^3;
uint shu=0;
uint ji1,ji2,ji3,ji4;





void init();   //串口初始化

void send(unsigned char a);     //单字节发送函数

void ctrl(); //接收处理函数



void main()

{

                   init();

          while(1)

          {         

                  if(RI==1)                     //是否有数据到来

                  {

                   RI = 0;

                  tmp = SBUF;                   //暂存接收到的数据

                                       ctrl();

                                       }      

          }

}



void init()        //串口初始化

{

                   ES=0;                                                                       //关中断

                     SCON = 0x50;                        // REN=1允许串行接受状态,串口工作模式1,

                                                                                                         //10位UART(1位起始位,8位数据位,1位停止位,无奇偶校验),波特率可变



                     TMOD = 0x20;                        //定时器1工作于方式2,8位自动重载模式,用于产生波特率

          TH1=TL1=0xFD;                       //波特率9600



          PCON &= 0x7f;                       //波特率不倍增

          TR1 = 1;                                                                  //定时器1开始工作,产生波特率

                                                                                                         //发送标志位置0

                     TI=0;                                                                        //接收标志位置0

                     RI=0;



                     //EA=0;

               ES=1;






                                                  

}



void send(unsigned char a)      //单字节数据发送

{                                                                //注意:若单片机TXD(P3.1)无上拉能力,必须在P3.1端接上拉电阻。本次测试需要接上拉电阻

         TI=0;         

         SBUF=a;

         while(TI==0);

         TI=0;





}



void ctrl()                      //接收处理函数

{

                                     switch(tmp)

                                       {

                                            case '1':

                                                                bai=shu%10+'0';
                                                                                                      
                                                        send(shu);

                                                        break;                                          

                                                                           }



        if(ji1==0&&ji2==0&&ji3==0&&ji4==0)                                                //如果四个红外传感器都感应到人
   {      
   shu=4;                                                                                                                                                                //则说明4人到场
   }  
     if(ji1==1&&ji2==1&&ji3==1&&ji4==1)                                        //如果四个红外传感器都没有感应到人
   {
   shu=0;                                                                                                                                                                //则0人到场,全部旷课
   }

      

        if(ji1==0&&ji2==0&&ji3==0&&ji4==1)                                                //如果有三个传感器感应到人,则说明三人到场
        {
        shu=3;
        }
                if(ji1==0&&ji2==0&&ji3==1&&ji4==0)
        {
        shu=3;
        }
                if(ji1==0&&ji2==1&&ji3==0&&ji4==0)
        {
        shu=3;
        }
                if(ji1==1&&ji2==0&&ji3==0&&ji4==0)
        {
        shu=3;
        }




        if(ji1==0&&ji2==0&&ji3==1&&ji4==1)                                                //如果两个传感器感应到人,则两人到场
        {
        shu=2;
        }
                if(ji1==1&&ji2==1&&ji3==0&&ji4==0)
        {
        shu=2;
        }
                if(ji1==0&&ji2==1&&ji3==1&&ji4==0)
        {
        shu=2;
        }
                if(ji1==1&&ji2==0&&ji3==0&&ji4==1)
        {
        shu=2;
        }

                   if(ji1==0&&ji2==1&&ji3==0&&ji4==1)
        {
        shu=2;
        }

                           if(ji1==1&&ji2==0&&ji3==1&&ji4==0)
        {
        shu=2;
        }

                                      if(ji1==0&&ji2==1&&ji3==1&&ji4==0)
        {
        shu=2;
        }

                           if(ji1==1&&ji2==0&&ji3==0&&ji4==1)
        {
        shu=2;
        }





                   if(ji1==0&&ji2==1&&ji3==1&&ji4==1)                                                        //如果有一个传感器感应到人,说明一人到场
        {
        shu=1;
        }


                                   if(ji1==1&&ji2==0&&ji3==1&&ji4==1)
        {
        shu=1;
        }

                           if(ji1==1&&ji2==1&&ji3==0&&ji4==1)
        {
        shu=1;
        }

                           if(ji1==1&&ji2==1&&ji3==1&&ji4==0)
        {
        shu=1;
        }

  if(h1==0)                                                //此处是红外传感器的感应触发,无实际意义,下同
  {
  ji1=0;  //低电平触发
  }
  else
  {
  ji1=1;
  }

    if(h2==0)
  {
  ji2=0;
  }
  else
  {
  ji2=1;
  }

    if(h3==0)
  {
  ji3=0;
  }
  else
  {
  ji3=1;
  }

    if(h4==0)
  {
  ji4=0;
  }
  else
  {
  ji4=1;
  }

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

使用道具 举报

沙发
ID:900977 发表于 2021-5-16 14:42 | 只看该作者
就是我用蓝牙发送数字1给单片机,单片机有反应有反馈,现在我想改成发送数字15给单片机,它也能有反应
就是发送一位数字和两位数字的区别,程序怎么改啊???大哥们能不能给点建议,,谢谢大家了

回复

使用道具 举报

板凳
ID:900977 发表于 2021-5-16 14:44 | 只看该作者
就是我用蓝牙发送数字1给单片机,单片机有反应,现在我想改成发送数字15有反应
就是发送一位数字和两位数字的区别,程序怎么改啊大哥们,谢谢大家了!!!!

回复

使用道具 举报

地板
ID:139866 发表于 2021-5-16 18:09 | 只看该作者
中断处理函数呢?
回复

使用道具 举报

5#
ID:452950 发表于 2021-5-16 21:08 | 只看该作者
  用printf("%d",x);       
回复

使用道具 举报

6#
ID:367369 发表于 2021-5-17 15:30 | 只看该作者
串口收发的寄存器为一个字节,可以定义一个发送缓冲区的数组和一个接收缓冲区数组,
一个一个字节的发,先发SENDBUF[0],再发SENDBUF[1];
一个一个的收,将接收的第一个存到RECVBUF[0],第二个存到RECVBUF[1];然后将数据取走清空缓冲区
回复

使用道具 举报

7#
ID:367369 发表于 2021-5-17 15:31 | 只看该作者
罗大韩 发表于 2021-5-16 14:44
就是我用蓝牙发送数字1给单片机,单片机有反应,现在我想改成发送数字15有反应
就是发送一位数字和两位数 ...

发0-255 都是可以直接发的,就是0x00--0xff都是可以一个字节实现的
回复

使用道具 举报

8#
ID:900977 发表于 2021-5-17 15:34 | 只看该作者
game灬boy 发表于 2021-5-17 15:31
发0-255 都是可以直接发的,就是0x00--0xff都是可以一个字节实现的

我是直接发送字符15,但是程序里边,case'15'这样写不行呀,我发送字符15过去,它只读第一位,也就是只读1
回复

使用道具 举报

9#
ID:900977 发表于 2021-5-17 15:36 | 只看该作者
game灬boy 发表于 2021-5-17 15:31
发0-255 都是可以直接发的,就是0x00--0xff都是可以一个字节实现的

我发送的是字符,接收到也是字符,我想实现发送字符15,她能读到我发的是15,而不是只读到1读不到5,该怎么改呢?
回复

使用道具 举报

10#
ID:900977 发表于 2021-5-17 15:44 | 只看该作者
game灬boy 发表于 2021-5-17 15:30
串口收发的寄存器为一个字节,可以定义一个发送缓冲区的数组和一个接收缓冲区数组,
一个一个字节的发,先 ...

大哥,能帮我写写吗?在原来的程序上改一下,我真的找了好多例子但是都不能接收两个字符的,你帮我写一下好吗,谢谢你
回复

使用道具 举报

11#
ID:367369 发表于 2021-5-18 15:09 | 只看该作者
罗大韩 发表于 2021-5-17 15:36
我发送的是字符,接收到也是字符,我想实现发送字符15,她能读到我发的是15,而不是只读到1读不到5,该怎 ...

我还说了一个使用缓冲数组,要是觉得麻烦那你发送十六进制0xff
回复

使用道具 举报

12#
ID:367369 发表于 2021-5-18 15:12 | 只看该作者
罗大韩 发表于 2021-5-17 15:44
大哥,能帮我写写吗?在原来的程序上改一下,我真的找了好多例子但是都不能接收两个字符的,你帮我写一下 ...

你可以参考我发过的ESP8266控制电机的那个贴子,那个发送了8个字节,你可以根据需要发你要的两个字节自行修改,那是在学校写的逻辑也是比较简单
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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