找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2579|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

求助:hc05控制rgb的顏色變化

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:169944 發(fā)表于 2017-4-20 14:49 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我做了一個(gè)app控制的rgb小燈顏色,是用藍(lán)牙hc05,能夠控制幾種顏色了,問(wèn)題是只能夠通過(guò)延時(shí)來(lái)實(shí)現(xiàn)燈的亮,延時(shí)一到就滅了,請(qǐng)問(wèn)怎么改才能變成只要發(fā)送了命令就一直亮,只有接收到下一個(gè)
命令才改變顏色,很急,求思路
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. unsigned char tmp;
  4. unsigned int c=0;

  5. sbit RR = P1^0;
  6. sbit GG = P1^1;
  7. sbit BB = P1^2;
  8. sbit led = P1^3;

  9. unsigned char PWM_0 = 0;
  10. unsigned char PWM_1 = 0;
  11. unsigned char PWM_2 = 0;

  12. unsigned char counter = 0;//jishu

  13. void init();   //串口初始化
  14. void send(unsigned char a);        //單字節(jié)發(fā)送函數(shù)
  15. void ctrl(); //接收處理函數(shù)
  16. void delay (unsigned char t) //延時(shí)
  17. {
  18.     unsigned char i;
  19.     while(t--)
  20.     {
  21.         for(i=0; i<114; i++);
  22.     }
  23. }
  24. void main()
  25. {
  26.     EA = 1;
  27.     TMOD = 0x01;
  28.         TL0 = 0xC9;                //設(shè)置定時(shí)初值
  29.         TH0 = 0xFF;
  30.         ET0 = 1;
  31.         TR0 = 1;
  32.         init();
  33.     while(1)
  34.     {
  35.         if(RI==1)                     // 是否有數(shù)據(jù)到來(lái)
  36.         {
  37.             RI = 0;
  38.             tmp = SBUF;                   // 暫存接收到的數(shù)據(jù)
  39.             ctrl();
  40.         }
  41.     }
  42. }

  43. void init()        //串口初始化
  44. {
  45.     ES=0;                                                                  //關(guān)中斷
  46.     SCON = 0x50;                        // REN=1允許串行接受狀態(tài),串口工作模式1,
  47.     //10位UART(1位起始位,8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn)),波特率可變

  48.     TMOD = 0x20;                        // 定時(shí)器1工作于方式2,8位自動(dòng)重載模式, 用于產(chǎn)生波特率
  49.     TH1=TL1=0xFD;                       // 波特率9600 (本次測(cè)試采用晶振為11.0592)

  50.     PCON &= 0x7f;                       // 波特率不倍增
  51.     TR1 = 1;                                                          //定時(shí)器1開(kāi)始工作,產(chǎn)生波特率
  52.     //發(fā)送標(biāo)志位置0
  53.     TI=0;                                                                  //接收標(biāo)志位置0
  54.     RI=0;

  55.     //EA=0;
  56.     ES=1;
  57.         RR = 1;
  58.     GG = 1;
  59.     BB = 1;
  60. }

  61. void send(unsigned char a)        //單字節(jié)數(shù)據(jù)發(fā)送
  62. {
  63.     //注意:若單片機(jī)TXD(P3.1)無(wú)上拉能力,必須在P3.1端接上拉電阻。本次測(cè)試需要接上拉電阻
  64.     TI=0;
  65.     SBUF=a;
  66.     while(TI==0);
  67.     TI=0;
  68.     if(c%2)                                        //發(fā)送指示燈標(biāo)志,每接收一次,此燈亮滅交替
  69.         led=1;
  70.     else
  71.         led=0;
  72.     c++;
  73. }

  74. void ctrl()                            //接收處理函數(shù)
  75. {
  76.     switch(tmp)
  77.     {
  78.     case '1':           //hong
  79.         PWM_0 = 220;
  80.                 PWM_1 = 20;
  81.                 PWM_2 = 60;  
  82.                 delay(3000);                                 
  83.         send(tmp);
  84.         break;
  85.     case '2':                                       
  86.         PWM_0 = 128;        //zi
  87.                 PWM_1 = 0;
  88.                 PWM_2 = 128;
  89.                 delay(3000);
  90.         send(tmp);
  91.         break;
  92.     case '3':                                   
  93.         PWM_0 = 0;        //lan
  94.                 PWM_1 = 0;
  95.                 PWM_2 = 255;
  96.                 delay(3000);
  97.         send(tmp);
  98.         break;
  99.     case '4':                                       
  100.         PWM_0 = 30;        // qian lan
  101.                 PWM_1 = 144;
  102.                 PWM_2 = 255;
  103.                 delay(3000);
  104.         send(tmp);
  105.         break;
  106.     case '5':                                       
  107.         PWM_0 = 49;        //hui
  108.                 PWM_1 = 79;
  109.                 PWM_2 = 79;
  110.                 delay(3000);
  111.         send(tmp);
  112.         break;
  113.     default:                   //其他,燈全滅
  114.         PWM_0 = 0;        //hei
  115.                 PWM_1 = 0;
  116.                 PWM_2 = 0;
  117.         send(tmp);
  118.     }
  119. }
  120. void InterruptTimer0() interrupt 1
  121. {
  122.         TL0 = 0xC9;                //設(shè)置定時(shí)初值
  123.         TH0 = 0xFF;       

  124.         counter++;

  125.     if(counter >= 255) counter = 0;
  126.     if(counter >= PWM_0) RR = 0; else RR = 1;
  127.     if(counter >= PWM_1) GG = 0; else GG = 1;
  128.     if(counter >= PWM_2) BB = 0; else BB = 1;

  129. }
復(fù)制代碼


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

使用道具 舉報(bào)

沙發(fā)
ID:169944 發(fā)表于 2017-4-20 15:02 | 只看該作者
求教啊,大神在哪里
回復(fù)

使用道具 舉報(bào)

板凳
ID:184237 發(fā)表于 2017-7-21 23:13 | 只看該作者
hc 05 模塊里面state 端口與en 端口可以不接是吧,那這兩個(gè)端口有什么用呢
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表