找回密码
 立即注册

QQ登录

只需一步,快速开始

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

本来是单片机usb串口通讯,现在想变成蓝牙串口通讯,求帮助

[复制链接]
跳转到指定楼层
楼主
ID:730545 发表于 2020-4-30 18:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是主程序


#include <stc12c5a60s2.h>
#include <lcd.h>
#include <intrins.h>
#include <BT.h>
#define        uchar        unsigned char
#define uint        unsigned int
        
#define MAIN_Fosc                11059200L
//                                                                7       6      5       4         3      2    1    0   Reset Value
//sfr ADC_CONTR = 0xBC;                ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000      
#define ADC_OFF()        ADC_CONTR = 0
#define ADC_ON                (1 << 7)
#define ADC_90T                (3 << 5)
#define ADC_180T        (2 << 5)
#define ADC_360T        (1 << 5)
#define ADC_540T        0
#define ADC_FLAG        (1 << 4)  
#define ADC_START        (1 << 3)  
#define ADC_CH0                0
#define ADC_CH1                1
#define ADC_CH2                2
#define ADC_CH3                3
#define ADC_CH4                4
#define ADC_CH5                5
#define ADC_CH6                6
#define ADC_CH7                7
sbit        P_TXD1 = P3^1;
sbit k1 = P2^0;
sbit k2 = P2^1;
sbit buzzer = P3^7;

int wind_set = 50;
float wind_speed = 0.0;
float wind_ppm = 0.0;
void wind_Value_Conversion();

void        Tx1Send(uchar dat);


void StartUART( void )
{                     
     SCON = 0x50;
     TMOD = 0x20;
     TH1 = 0xFD;
     TL1 = 0xFD;
     PCON = 0x00;
     TR1 = 1;
}

uint        adc10_start(uchar channel)        //channel = 0~7
{
        uint        adc;
        uchar        i;

        ADC_RES = 0;
        ADC_RESL = 0;

        ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;

        i = 250;
        do{
                if(ADC_CONTR & ADC_FLAG)
                {
                        ADC_CONTR &= ~ADC_FLAG;
                        adc = (uint)ADC_RES;
                        adc = (adc << 2) | (ADC_RESL & 3);
                        return        adc;
                }
        }while(--i);
        return        1024;
}


//Ñóê±oˉêy//
void Delay1(unsigned int time)
{
    unsigned int timeCounter = 0;
        for (timeCounter = time;timeCounter > 0 ;timeCounter --)
                DelayUs(255);
}

void DelayUs(unsigned int time)
{
        unsigned int timeCounter = 0;
        for (timeCounter = 0;timeCounter < time;timeCounter ++)
                _nop_();
}

void press_k1()
{
        if(k1 == 0)
        {
                Delay1(100);
                if(k1 == 0)
                {
                        wind_set += 1;
                        if(wind_set>999)
                        {
                                wind_set = 0;
                        }
                }
        }
}
void press_k2()
{
        if(k2 == 0)
        {
                Delay1(100);
                if(k2 == 0)
                {
                        wind_set -= 1;
                        if(wind_set<0)
                        {
                                wind_set = 999;
                        }
                }
        }
}

void display_set()                //°′¼üéèÖÃÏÔê¾
{
        uchar num1, num2, num3;
        num1 = wind_set/100+'0';
        num2 = wind_set%100/10+'0';
        num3 = wind_set%10+'0';
        DisplaySingleChar(0x04,1,num1);        
        DisplaySingleChar(0x05,1,num2);        
        DisplaySingleChar(0x06,1,num3);
        DisplayString(0x7,1,"km/h");               
}


void main()
{
        StartUART();        
        P1ASF = 0x07;         
        ADC_CONTR = ADC_360T | ADC_ON;
        LCDInit();   
        DisplayString(0x0,0,"  Welcome...  ");
        DisplayString(0x0,1,"Wind Speed");
        Delay1(500);
        WriteCmd(LCD_CLS);
        DisplayString(0x0,0,"Speed:");
        DisplayString(0x0,1,"Set:");        
        while(1)
        {
                        press_k1();
                        press_k2();
                        wind_speed = adc10_start(0);                                
                        wind_Value_Conversion();               
                        display_set();
                        if(wind_ppm>=wind_set)
                        {
                                buzzer = 0;
                        }
                        else
                        {
                                buzzer = 1;
                        }
        }
}

void wind_Value_Conversion()        //·çËù2aá¿
{
          uchar num1, num2, num3;
                wind_speed=(wind_speed*5)/1024;           
          wind_ppm = 100*wind_speed ;   


                num1 = (int)(wind_ppm)/100;   
                num2 = (int)(wind_ppm)/10;
                num3 = (int)(wind_ppm)%10;
          DisplaySingleChar(0x06,0,num1+0x30);        
          DisplaySingleChar(0x07,0,num2+0x30);        
          DisplaySingleChar(0x08,0,num3+0x30);
          DisplayString(0x9,0,"km/h");
                Tx1Send(0x23);        
                Tx1Send(num1+0x30);
                Tx1Send(num2+0x30);        
                Tx1Send(num3+0x30);        
}

//Ä£Äa′®¿ú·¢Ëí
void        Tx1Send(uchar R_Byte)                //9600£¬N£¬8£¬1                ·¢Ëíò»¸ö×Ö½ú
{
         SBUF = R_Byte;  
     while( TI == 0 );                                //2éÑˉ·¨
           TI = 0;   
}


以下是网上找的又经过自己乱改的蓝牙程序
void        sendDate(uchar dat);

void UartConfiguration()  
{
    TMOD=0x20;      //设置计数器1的工作方式2
    TH1=0xfd;            //设置计数器1的初值,决定波特率
    TL1=0xfd;                //设置计数器1的初值,决定波特率
    PCON=0x00;      // 波特率倍增0x00不加倍         0x80加倍
    SCON=0x50;                //设置工作方式1 开启接受允许
    EA=1;                    //开启总中断
    ES=1;                        //开启串口接受中断
    TR1=1;                        //计数器1开始运行
}
/*发送数据*/
void sendDate(char date)
{
    SBUF=date;                  //接收到的数据放入发送缓存器发送
    while(!TI);       //等待发送数据完成
    TI=0;                          //清除发送完成标志位
}

/*主函数*/
void main()
{
    UartConfiguration();

    sendDate('1');  //发送字符1

    while(1);
}

/*中断函数*/
void Uart() interrupt 4
{
    uchar date;
    date=SBUF;        //取出接受到的数据
    RI=0;                          //清除接受中断标志位

    //收到的数据是date
        
}


说实话我真是很菜,求大家高抬贵手,不要喷我,谢谢大家~

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

使用道具 举报

沙发
ID:648281 发表于 2020-4-30 23:12 | 只看该作者
你好!
蓝牙功能,需要增加蓝牙硬件;
然后再就是编写蓝牙接收程序。
回复

使用道具 举报

板凳
ID:452950 发表于 2020-5-1 10:40 | 只看该作者
改成蓝牙串口透传不需要修改原来的串口程序,可通过usb转串口模块连接蓝牙模块和电脑,通过串口助手发送AT指令修改蓝牙模块的参数,如波特率、工作方式、模块名称等,波特率要与单片机一致。
然后将蓝牙模块接到单片机的串口上,电脑蓝牙与蓝牙模块配对后就可以在串口助手上搜索到蓝牙虚拟串口,连接后便可以进行串口通讯。
如果是两个单片机进行串口通讯,需要一个蓝牙模块设置为主机模式、一个蓝牙模块从机模式。
支持主从两种模式的蓝牙模块会稍微贵一点。如果是单片机连电脑可以买只支持从机模式的JDY-31,大概五块多。
还有蓝牙3.0(SPP)和4.0(BLE)的区别,如果单片机连安卓手机的话用蓝牙3.0就好,安卓4.3以后的版本也支持蓝牙4.0。苹果手机只有蓝牙4.0才能正常串口通信。有的蓝牙模块是双模的,支持两种方式。
回复

使用道具 举报

地板
ID:730545 发表于 2020-5-5 13:31 | 只看该作者
xxpp2011 发表于 2020-5-1 10:40
改成蓝牙串口透传不需要修改原来的串口程序,可通过usb转串口模块连接蓝牙模块和电脑,通过串口助手发送AT ...

你好,我是想用蓝牙当作串口,与手机app进行通讯,是不需要连接电脑的那一种
回复

使用道具 举报

5#
ID:730545 发表于 2020-5-5 13:32 | 只看该作者
51hei**1140 发表于 2020-4-30 23:12
你好!
蓝牙功能,需要增加蓝牙硬件;
然后再就是编写蓝牙接收程序。

你好,蓝牙我用的是HC—05,我是想用蓝牙当作串口,与手机app进行通讯,是不需要连接电脑的那一种。但是现在蓝牙的程序我不会编写,就放在上边,可以帮我看一下并更正一下吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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