久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3642|回復: 13
收起左側(cè)

關于51單片機藍牙風扇的程序問題,求指教!

  [復制鏈接]
回帖獎勵 5 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次
ID:906254 發(fā)表于 2021-8-4 18:17 | 顯示全部樓層 |閱讀模式
本帖最后由 sunmebaby 于 2021-8-4 21:55 編輯

要實現(xiàn)的功能是通過按鍵和藍牙兩種方式實現(xiàn)對風扇的調(diào)速,按鍵部分的程序調(diào)試過沒有問題,但是藍牙部分的程序不管怎么調(diào)試都沒有反應,串口助手上也可以接收到數(shù)據(jù),但是數(shù)碼管和風扇都沒有反應,實在找不出來是什么問題,希望大神指點
51hei圖片20210804181512.png
單片機源程序如下:
#include<reg52.h>
#define uint  unsigned int
#define uchar unsigned char

uchar time; //計時
char Data;
char count = 0;           //占空比     
uchar code smgduan[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                                    0x7f,0x6f};// 0-9段碼
sbit PWM = P1^0;   //PWM通道
sbit key_speed_up = P3^1; //按鍵加檔
sbit key_speed_down =P3^0;//按鍵減檔
sbit smgwei1 = P2^2;
sbit smgwei2 = P2^3;
sbit smgwei3 = P2^4;
/*                                                   
void Motor_speed();//函數(shù)聲明
void timer0_init();
void UsarInit
void delay_ms();
void Motor_up();
void Motor_down();
void display();
*/

void delay_ms(uint z)//延時函數(shù)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=10;y>0;y--);
}

void display()             //顯示當前占空比
{
    P0=smgduan[count/100];smgwei1=1; smgwei2=1;smgwei3=1;delay_ms(1);P0=0X00;   
    P0=smgduan[count/10%10];smgwei1=0; smgwei2=1;smgwei3=1;delay_ms(1);P0=0X00;        
    P0=smgduan[count%10];smgwei1=1; smgwei2=0;smgwei3=1;delay_ms(1);P0=0X00;
}


void Motor_up()                //加檔函數(shù)
{
    if(key_speed_up==0)
    {
        delay_ms(2);
        if(key_speed_up==0)
        {
            count += 25;
            if(count > 100)
            {
                count = 0;
            }
        }
        while(!key_speed_up);
    }
}

void Motor_down()            //減檔函數(shù)
{
    if(key_speed_down==0)
    {
        delay_ms(2);
        if(key_speed_down==0)
        {
            count -= 25;
            if(count <0)
            {
                count = 0;
            }
        }
        while(!key_speed_down);
    }
}

void timer0_init()        //定時器0初始化
{
    TMOD = 0x01;
    TH0 = 0xff;
    TL0 = 0xf7;
    TR0 = 1;
    ET0 = 1;
    EA  = 1;
}

void UsarInit()                //串口初始化
{
    TMOD = 0x20;            //設置計數(shù)器工作方式2
    SM0  = 0;                    //設置串口工作方式1
    SM1  = 1;
    REN  = 1;                    //允許串口接收
    TH1  = 0xfd;            //設置波特率9600
    TL1  = 0xfd;
    TR1  = 1;                    //啟動定時器1
    ES     = 1;                    //開串口中斷
    EA   = 1;                    //開總中斷
}

void timer0_int() interrupt 1 //定時器0中斷處理函數(shù)
{
    TR0 = 0;
    TH0 = 0xff;
    TL0 = 0xf7;
    TR0 = 1;
    PWM = 0;
    time++;
    if(time<=count) PWM = 1;
    else                     PWM = 0;
    if(time>100)  time = 0;
}

void Usart() interrupt 4    //串口通信中斷處理函數(shù)
{
    Data = SBUF;   
    RI = 0;
    while(1)
    {
        switch(Data)
        {case 'a':count = 0; break;
         case 'b':count = 25;break;
         case 'c':count = 50;break;
         case 'd':count = 75;break;
         case 'e':count =100;break;}
     }
    //while(!TI);
    //TI = 0;
}


void main()                    //主函數(shù)
{
    timer0_init();
    UsarInit();
    while(1)
    {
        display();        
        Motor_up();
        Motor_down();
    }
}



回復

使用道具 舉報

ID:272269 發(fā)表于 2021-8-5 10:23 | 顯示全部樓層
老哥
你上面的圖片是藍牙 加ttl 之后和電腦相連的 數(shù)據(jù)嗎
如果是 那就檢查一下你的晶振頻率 看看是不是那種通信晶振
簡單的方法 單片機 和  電腦通信 在串口助手那里 直接下發(fā) 藍牙指令看看有否工作
或者直接  你發(fā)什么數(shù)據(jù) 就讓單片機返回什么數(shù)據(jù)上電腦 這樣調(diào)試一目了然
回復

使用道具 舉報

ID:906254 發(fā)表于 2021-8-5 12:31 | 顯示全部樓層
jizi 發(fā)表于 2021-8-5 10:23
老哥
你上面的圖片是藍牙 加ttl 之后和電腦相連的 數(shù)據(jù)嗎
如果是 那就檢查一下你的晶振頻率 看看是不是那 ...

晶振是11.0592MHz,之前用AT指令調(diào)試過了,是可以正常工作的
回復

使用道具 舉報

ID:554500 發(fā)表于 2021-8-5 12:56 | 顯示全部樓層
串口中斷函數(shù)里有個while(1)死循環(huán)
回復

使用道具 舉報

ID:906254 發(fā)表于 2021-8-5 12:58 | 顯示全部樓層
18701931930 發(fā)表于 2021-8-5 12:56
串口中斷函數(shù)里有個while(1)死循環(huán)

while(1)去掉也還是不行。。。
回復

使用道具 舉報

ID:130231 發(fā)表于 2021-8-5 20:50 | 顯示全部樓層
sunmebaby 發(fā)表于 2021-8-5 12:58
while(1)去掉也還是不行。。。

不是去了,而是結(jié)合到一塊,放到主函數(shù)里。
回復

使用道具 舉報

ID:906254 發(fā)表于 2021-8-5 22:29 | 顯示全部樓層
zqy181818 發(fā)表于 2021-8-5 20:50
不是去了,而是結(jié)合到一塊,放到主函數(shù)里。

void main()                                        //主函數(shù)
{
        timer0_init();
        UsarInit();
        while(1)
        {
                display();               
                Motor_up();
                Motor_down();
                switch(Data)
                {case 'a':count = 0; break;
                 case 'b':count = 25;break;
                 case 'c':count = 50;break;
                 case 'd':count = 75;break;
        }
}

是改成這樣嗎。。。之前這樣試過,也還是沒有反應。。。
回復

使用道具 舉報

ID:81365 發(fā)表于 2021-8-5 22:59 | 顯示全部樓層
看看是否進入了中斷,還有按鍵和指令碼的作用結(jié)合寫,或者干脆暫時屏蔽按鍵
回復

使用道具 舉報

ID:161164 發(fā)表于 2021-8-5 23:41 | 顯示全部樓層
本帖最后由 lkc8210 于 2021-8-5 23:55 編輯
sunmebaby 發(fā)表于 2021-8-5 12:58
while(1)去掉也還是不行。。。

12T 8051的指令執(zhí)行速度比較慢(一句1us)
你代碼中的定時器中斷時間只有1us
而中斷的指令有那么多句
于是單片機進入中斷時被中斷中斷了去進入中斷。。。
嘗試把TL0=0xF7;改為TL0=0xC7;
而且你的串口初始化和定時器0初始化的寫法會互相覆蓋TMOD的設定
void UsarInit()                //串口初始化
{
    TMOD = 0x20;            //設置計數(shù)器工作方式2
改為TMOD |= 0x20;
void timer0_init()        //定時器0初始化
{
    TMOD = 0x01;
改為TMOD |= 0x01;
回復

使用道具 舉報

ID:81196 發(fā)表于 2021-8-6 10:27 | 顯示全部樓層
起碼保證串口連接沒問題,再確定波特率等參數(shù)配置無誤,然后調(diào)試能否進入中斷,
回復

使用道具 舉報

ID:906254 發(fā)表于 2021-8-6 12:30 | 顯示全部樓層
本帖最后由 sunmebaby 于 2021-8-6 12:55 編輯
lkc8210 發(fā)表于 2021-8-5 23:41
12T 8051的指令執(zhí)行速度比較慢(一句1us)
你代碼中的定時器中斷時間只有1us
而中斷的指令有那么多句

謝謝大佬,發(fā)現(xiàn)自己接線時候有錯誤,把RXD和TXD接反了,然后按照大佬的寫法改了之后可以了...還有個問題...我在串口中斷函數(shù)里加了句LED =~LED想觀察現(xiàn)象,發(fā)現(xiàn)按減檔鍵LED會亮滅,但是我用這是按鍵觸發(fā)中斷了嗎...?
回復

使用道具 舉報

ID:161164 發(fā)表于 2021-8-6 13:58 | 顯示全部樓層
sunmebaby 發(fā)表于 2021-8-6 12:30
謝謝大佬,發(fā)現(xiàn)自己接線時候有錯誤,把RXD和TXD接反了,然后按照大佬的寫法改了之后可以了...還有個問題. ...

你的減檔鍵接了RXD腳
單片機以為有串口信號就入了中斷
如果不是沒腳用,盡量不要用RXD(P30)/TXD(P31)腳
以免影響串口通訊
回復

使用道具 舉報

ID:906254 發(fā)表于 2021-8-7 20:37 | 顯示全部樓層
lkc8210 發(fā)表于 2021-8-6 13:58
你的減檔鍵接了RXD腳
單片機以為有串口信號就入了中斷
如果不是沒腳用,盡量不要用RXD(P30)/TXD(P31)腳 ...

懂了,謝謝!
回復

使用道具 舉報

ID:149162 發(fā)表于 2021-8-8 11:59 | 顯示全部樓層
P30和IO口復用了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91视频在线 | 天天艹逼网 | 欧美日韩一区二区在线播放 | 成人高清在线视频 | 国产亚洲精品久久久久久牛牛 | 国内自拍视频在线观看 | 亚洲精品1 | 成人综合一区 | 日韩精品成人 | 一区二区三区高清 | 韩日一区 | 黄色a级一级片 | 日日干日日操 | 国产激情亚洲 | 成人免费视频网站在线看 | 日韩欧美国产综合 | 91精品在线播放 | 久久亚洲一区二区三区四区 | 超碰欧美| 国产一级片精品 | 久久97精品| 欧美精品一区二区在线观看 | 国产亚洲精品精品国产亚洲综合 | 欧美一区二区三区在线视频 | 亚洲精品一区二区三区蜜桃久 | 国产欧美在线播放 | 麻豆91精品91久久久 | 欧美激情在线播放 | 亚洲欧美国产一区二区三区 | 涩涩视频网站在线观看 | 国产69久久精品成人看动漫 | 亚洲高清电影 | 一区二区三区国产精品 | www.日本国产 | 日韩精品一区二区三区中文在线 | 粉色午夜视频 | 国产日韩欧美二区 | 91资源在线 | 欧美在线视频网 | 黄色在线免费观看 | 国产一区二区三区免费 |