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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3293|回復: 13
打印 上一主題 下一主題
收起左側

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

  [復制鏈接]
回帖獎勵 5 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
本帖最后由 sunmebaby 于 2021-8-4 21:55 編輯

要實現的功能是通過按鍵和藍牙兩種方式實現對風扇的調速,按鍵部分的程序調試過沒有問題,但是藍牙部分的程序不管怎么調試都沒有反應,串口助手上也可以接收到數據,但是數碼管和風扇都沒有反應,實在找不出來是什么問題,希望大神指點

單片機源程序如下:
#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();//函數聲明
void timer0_init();
void UsarInit
void delay_ms();
void Motor_up();
void Motor_down();
void display();
*/

void delay_ms(uint z)//延時函數
{
    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()                //加檔函數
{
    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()            //減檔函數
{
    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;            //設置計數器工作方式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中斷處理函數
{
    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    //串口通信中斷處理函數
{
    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()                    //主函數
{
    timer0_init();
    UsarInit();
    while(1)
    {
        display();        
        Motor_up();
        Motor_down();
    }
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

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

使用道具 舉報

板凳
ID:906254 發表于 2021-8-5 12:31 | 只看該作者
jizi 發表于 2021-8-5 10:23
老哥
你上面的圖片是藍牙 加ttl 之后和電腦相連的 數據嗎
如果是 那就檢查一下你的晶振頻率 看看是不是那 ...

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

使用道具 舉報

地板
ID:554500 發表于 2021-8-5 12:56 | 只看該作者
串口中斷函數里有個while(1)死循環
回復

使用道具 舉報

5#
ID:906254 發表于 2021-8-5 12:58 | 只看該作者
18701931930 發表于 2021-8-5 12:56
串口中斷函數里有個while(1)死循環

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

使用道具 舉報

6#
ID:130231 發表于 2021-8-5 20:50 | 只看該作者
sunmebaby 發表于 2021-8-5 12:58
while(1)去掉也還是不行。。。

不是去了,而是結合到一塊,放到主函數里。
回復

使用道具 舉報

7#
ID:906254 發表于 2021-8-5 22:29 | 只看該作者
zqy181818 發表于 2021-8-5 20:50
不是去了,而是結合到一塊,放到主函數里。

void main()                                        //主函數
{
        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;
        }
}

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

使用道具 舉報

8#
ID:81365 發表于 2021-8-5 22:59 | 只看該作者
看看是否進入了中斷,還有按鍵和指令碼的作用結合寫,或者干脆暫時屏蔽按鍵
回復

使用道具 舉報

9#
ID:161164 發表于 2021-8-5 23:41 | 只看該作者
本帖最后由 lkc8210 于 2021-8-5 23:55 編輯
sunmebaby 發表于 2021-8-5 12:58
while(1)去掉也還是不行。。。

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

使用道具 舉報

10#
ID:81196 發表于 2021-8-6 10:27 | 只看該作者
起碼保證串口連接沒問題,再確定波特率等參數配置無誤,然后調試能否進入中斷,
回復

使用道具 舉報

11#
ID:906254 發表于 2021-8-6 12:30 | 只看該作者
本帖最后由 sunmebaby 于 2021-8-6 12:55 編輯
lkc8210 發表于 2021-8-5 23:41
12T 8051的指令執行速度比較慢(一句1us)
你代碼中的定時器中斷時間只有1us
而中斷的指令有那么多句

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

使用道具 舉報

12#
ID:161164 發表于 2021-8-6 13:58 | 只看該作者
sunmebaby 發表于 2021-8-6 12:30
謝謝大佬,發現自己接線時候有錯誤,把RXD和TXD接反了,然后按照大佬的寫法改了之后可以了...還有個問題. ...

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

使用道具 舉報

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

懂了,謝謝!
回復

使用道具 舉報

14#
ID:149162 發表于 2021-8-8 11:59 | 只看該作者
P30和IO口復用了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区在线观看 | 国产日韩精品一区二区 | 国产精品久久久爽爽爽麻豆色哟哟 | 日韩一区在线观看视频 | 国产一级在线 | 美女黄网站视频免费 | 久久精品国产一区二区电影 | 91人人视频在线观看 | 久久久无码精品亚洲日韩按摩 | www.久久精品| 91国产视频在线 | 亚洲精品国产成人 | 欧美成人免费在线 | 欧美黑人巨大videos精品 | 日韩成人在线视频 | 久久久www成人免费无遮挡大片 | 久久一二 | 国产精品一区久久久 | 很黄很污的网站 | 国产精品色 | h视频在线免费看 | 99在线免费观看 | 欧美一区二区免费 | 免费在线看黄 | 日韩在线xx| 日韩成人免费视频 | 国产99久久精品一区二区永久免费 | 久久久久国产精品午夜一区 | 日本一区二区不卡视频 | 亚洲激情网站 | av黄色在线 | 综合久久久 | 天天躁天天操 | 在线观看视频中文字幕 | 91毛片在线看 | 亚洲一区二区不卡在线观看 | 久久精品国产一区二区电影 | 国产午夜在线 | 欧美大片一区二区 | 性xxxxx| 一区二区三区av |