[在线研讨会] 蓝牙在电脑串口上显示乱码

[复制链接]
452|2
 楼主 | 2018-1-11 14:43 | 显示全部楼层 |阅读模式
#include<reg51.h>          //温度在数码管显示,但是闪烁
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int      
sbit Data=P3^6;   //定义数据线
sbit D=P1^0;
uchar T[8];
unsigned char code wei[8] = {0x08,0x04,0x00,0x0c,0x10,0x14,0x18,0x1c};//位选控制   查表的方法控制
unsigned char code duan[17] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
void DHT11_delay_us(uchar n)
{
    while(--n);
}

void DHT11_delay_ms(uint z)
{
   uint i,j;
   for(i=z;i>0;i--)
      for(j=110;j>0;j--);
}
//void xiamshi(uchar T)
//{
//     uchar T1,T2,T3;
//         T1=T/10;
//     T2=T%10;
//         P0=duan[T1];
//         P2=wei[2];
//         P0=duan[T2];
//         P2=wei[1];
//         P0=duan[12];
//         P2=wei[0];
//}
void DHT11_start()
{
   Data=1;
   DHT11_delay_us(2);
   Data=0;
   DHT11_delay_ms(20);   //延时18ms以上
   Data=1;
   DHT11_delay_us(30);
}

uchar DHT11_rec_byte()      //接收一个字节
{
   uchar i,dat=0;
  for(i=0;i<8;i++)    //从高到低依次接收8位数据
   {         
      while(!Data);   ////等待50us低电平过去
      DHT11_delay_us(8);     //延时60us,如果还为高则数据为1,否则为0
      dat<<=1;           //移位使正确接收8位数据,数据为0时直接移位
      if(Data==1)    //数据为1时,使dat加1来接收数据1
         dat+=1;
      while(Data);  //等待数据线拉低   
    }  
    return dat;
}

void DHT11_receive()      //接收40位的数据
{
    uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
    DHT11_start();
    if(Data==0)
    {
        while(Data==0);   //等待拉高     
        DHT11_delay_us(40);  //拉高后延时80us
        R_H=DHT11_rec_byte();    //接收湿度高八位  
        R_L=DHT11_rec_byte();    //接收湿度低八位  
        T_H=DHT11_rec_byte();    //接收温度高八位  
        T_L=DHT11_rec_byte();    //接收温度低八位
        revise=DHT11_rec_byte(); //接收校正位

        DHT11_delay_us(25);    //结束

        if((R_H+R_L+T_H+T_L)==revise)      //校正
        {
            RH=R_H;
            RL=R_L;
            TH=T_H;
            TL=T_L;
        }
      
            T[0]=TH/10+'0';
        T[1]=TH%10+'0';
            T[2]='c';
                T[3]=' ';
                T[4]=RH%10+'0';
                T[5]=RH/10+'0';
                T[6]='h';
                T[7]='r';
    }
}
/*发送数据*/
void delay(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
        for(j=114;j>0;j--);
}

//void send(uchar T[6])            
//{
//  SBUF=T[6];                           
//        while(TI==0);                       
//        TI=0;                             
//}

void init_uart()
{
    TMOD=0x20;                        
        SCON=0x40;                        
        PCON=0x00;                       
        TH1=0xfd;                          
        TL1=0xfd;   //2¨ì??ê9600     0xf4 2¨ì??ê?a2400
        TR1=1;         
}

void send(unsigned char ch)

{

SBUF=ch;

while(TI==0);

TI=0;

}

//向串口发送一个字符串,strlen为该字符串长度

void send_String(uchar *T,unsigned int strlen)

{

unsigned int k=0;

do
  {
  send(T[k]);
  k++;
  }
  while(k < strlen);
}
void main()
{  
   
   uint i;       
   init_uart();
   while(1)
   {   
       DHT11_delay_ms(1500);    //DHT11上电后要等待1S以越过不稳定状态在此期间不能发送任何指令
       DHT11_receive();
          
           send_String(T,8);
          
       for(i=0;i<=5;i++)
                    {
                            
                        P2=wei[i];//位选,选择让哪一位亮
                        P0=duan[T[i]];   //段选,让数码管显示什么
                        DHT11_delay_ms(12);  //延时使显示充分
                        P1=0x00;         //消隐         
                               
                    }   
         send('\n');      
    }
}
| 2018-1-11 15:51 | 显示全部楼层
波特率是否对上了?
发送数据之间应该是需要间隔时间的。
 楼主 | 2018-1-12 09:25 | 显示全部楼层
混子黄 发表于 2018-1-11 15:51
波特率是否对上了?
发送数据之间应该是需要间隔时间的。

都是9600
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /6 下一条

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