找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1383|回复: 0
收起左侧

单片机蓝牙+oled程序接受不到信息

[复制链接]
ID:220936 发表于 2021-1-13 12:47 | 显示全部楼层 |阅读模式
各位师傅,麻烦看下我的程序哪有问题,怎么接收不到信息呢这也是参考本坛一位高手写的程序修改的,在此一并谢过
55.jpg
单片机源程序如下:
#include "reg52.h"
#include "oled.h"
#include "bmp.h"
#include "ds18b20.h"
#include <stdio.h>
#include "ds1302.h"



sbit key_s2 = P2^4;//独立按键S2

uchar rev=0; //蓝牙接收缓存值
bit flag=0;        //接收标志
uint d=1;
#define MHz     1000000U        // 定义 MHz
#define gCLK    11059200   // 系统时钟频率

#define UART_BAUD   9600        // 定义所用的波特率

//串口初始化
void UARTInit()
{
        
        SCON  = 0x50;               // Mode 1: 8-bit UART, 允许接收
    TMOD |= 0x20;               // 定时器1 Mode 2: 8-Bit reload
    PCON  = 0x80;               // SMOD = 1
    TH1   =  0xfd;
          TL1   =  0xfd;
    TR1   = 1;                  // 定时器 1 启动
    ES    = 1;                  // 串行中断允许
        EA=1;
}

/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
***********************************************************************/
void Com_Int(void) interrupt 4
{
       ES = 0;//关闭串口中断
        if(RI == 1) //当硬件接收到一个数据时,RI会置位
                {
                rev = SBUF;//数据传输缓存
                RI = 0;//清零
                flag=1; //置一
                }
        ES = 1;                //打开串口中断
}

void gongneng()//功能
{
  switch(rev)//缓存数据
                {
                        case 'E':d ==0; break;

                        default:break;
                }
  flag=0;//标志清零
}

int main(void)
{        
         extern uint temp_ds;  //传递当前温度值
         
         
        OLED_Init();                        //初始化OLED  
        OLED_Clear();                         //OLED清屏
        UARTInit();                         //串口初始化


        DS1302Init();                          //DS1302初始化
        OLED_ShowCHinese(0,6,0);           //温
        OLED_ShowCHinese(16,6,1);           //度
        OLED_ShowString(32,6,":",16);
        OLED_ShowCHinese(88,6,2);           //℃
                                         
        OLED_ShowCHinese(0,4,5);           //重
        OLED_ShowCHinese(16,4,6);           //量
        OLED_ShowString(32,4,":",16);



        while(1)
        {               
    gongneng();
    OLED_ShowNum(45,4,rev,2,16);
               
                OLED_ShowNum(60,4,d,2,16);
                if(d == 0)//判断S2是否被按下
                {
                //        delay_ms(20);//按键消抖
        //                if(key_s2 == 0)
                        {
                                TI = 1;
                                printf("temp is  %d.%d C\n",temp_ds/10,temp_ds%10);                //检测有误按键按下 输出当前温度值给手机APP
                                while(!RI);
                                RI = 0;
        //                        while(!key_s2);//松手检测
                        }        
                }

                Test_Temp();         //温度显示
                Test_Time();          //时间显示

        }         
        
}

重量后面是rev的值还有d的值,rev有时显示35,48等,但和发送的字符对不上啊,d一直是1.
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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