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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3166|回復: 0
打印 上一主題 下一主題
收起左側(cè)

光電計數(shù)和藍牙控制RGB的程序問題,急急急!!!

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:169944 發(fā)表于 2017-5-9 12:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我要寫一個藍牙控制RGB變色和兩個光電傳感器計數(shù)的程序
單個的模塊可以實現(xiàn),但是我在往一起合的時候,就不能了
而且發(fā)現(xiàn)功能會互相影響,求大神幫我改一下代碼,說一下
思路,怎么才能兩個同時運行,,很急..
  1.         #include <reg52.h>
  2.         #include <string.h>
  3.         #include <intrins.h>
  4.         
  5.         #define LCD1602_DB  P0
  6.         
  7.         unsigned char tmp;
  8.         unsigned int c=0;
  9.         unsigned char flag1s = 0;
  10.         unsigned char flag2s = 0;
  11.         unsigned char counter = 0;//jishu
  12.         unsigned char str[] = "COUNT: ";
  13.         sbit LCD1602_RS = P1^0;
  14.         sbit LCD1602_RW = P1^1;
  15.         sbit LCD1602_E = P1^5;
  16.         
  17.         sbit red   = P2^0;
  18.         sbit LED = P2^2;                                                                                                        
  19.         sbit red1 = P2^1;
  20.         
  21.         sbit RR = P3^5;
  22.         sbit GG = P3^6;
  23.         sbit BB = P3^7;
  24.         
  25.          int PWM_0 = 0;
  26.          int PWM_1 = 0;
  27.          int PWM_2 = 0;
  28.         
  29.         void InitLcd1602();
  30.         void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
  31.         void itoa (unsigned int n,unsigned char s[5]);
  32.         void keepred();
  33.         
  34.         void init();   //串口初始化
  35.         void send(unsigned char a);        //單字節(jié)發(fā)送函數(shù)
  36.         void ctrl(); //接收處理函數(shù)
  37.         void color();
  38.         void keepPWM();
  39.         
  40.         void delay (unsigned char t) //延時
  41.         {
  42.             unsigned char i;
  43.             while(t--)
  44.             {
  45.                 for(i=0; i<114; i++);
  46.             }
  47.         }
  48.         
  49.         void main()
  50.         {
  51.                 unsigned int sec = 0, i=0, j = 0;        
  52.         
  53.                 unsigned char s[5] ;
  54.                 unsigned char x[6] = "none";
  55.                 init();        
  56.             red = 1;
  57.                 red1 = 1;
  58.                 TMOD = 0x21;
  59.                 TL0 = 0xC9;                //設(shè)置定時初值
  60.                 TH0 = 0xFF;               
  61.                 TR0 = 1;               
  62.                 ET0 = 1;
  63.                 ET1 = 1;
  64.                 EA = 1;
  65.                 InitLcd1602();
  66.                
  67.                 sec = 0;
  68.                 itoa(sec, s);
  69.                 LcdShowStr(8, 0, x);
  70.                 while(1)
  71.                 {        
  72.                         keepPWM();
  73.                         if(RI==1)                     // 是否有數(shù)據(jù)到來
  74.                       {   
  75.                  RI = 0;
  76.                  tmp = SBUF;
  77.                          ctrl();
  78.                           delay(5);                   // 暫存接收到的數(shù)據(jù)  
  79.                      }
  80.                                     
  81.                         else if(flag1s == 1 )                  
  82.                         {               
  83.                                 flag1s = 0;                        
  84.                                 sec++;        
  85.                         }
  86.                         else if(flag2s == 1 )                  
  87.                         {               
  88.                             flag2s = 0;        
  89.                                 if(sec > 0)
  90.                                  sec--;
  91.                         }
  92.                         else if(sec<=0)
  93.                         {
  94.                         sec = 0;
  95.                         
  96.                         LcdShowStr(8, 0, x);
  97.                         }
  98.                          else
  99.                         {
  100.                         
  101.                         itoa(sec, s);
  102.                         memset(s, '\0', 5);
  103.                         delay(50);
  104.                         
  105.                         }
  106.                         if(RI == 0)
  107.                         {
  108.                                 PWM_0 = PWM_0;
  109.                                 PWM_1 = PWM_1;
  110.                                 PWM_2 = PWM_2;
  111.                                 delay(5);
  112.                         }
  113.                         delay(5);                                
  114.                 }               
  115.         }

  116.         void LcdWaitReady()
  117.         {
  118.                 unsigned char sta;
  119.         
  120.                 LCD1602_DB = 0xFF;
  121.                 LCD1602_RS = 0;
  122.                 LCD1602_RW = 1;
  123.                 do        {
  124.                         LCD1602_E = 1;
  125.                         sta = LCD1602_DB;
  126.                         LCD1602_E = 0;
  127.                 }while(sta & 0x80);
  128.         }
  129.         void LcdWriteCmd(unsigned char cmd)
  130.         {
  131.                 LcdWaitReady();
  132.                 LCD1602_RS = 0;
  133.                 LCD1602_RW = 0;
  134.                 LCD1602_DB = cmd;
  135.                 LCD1602_E = 1;
  136.                 LCD1602_E = 0;
  137.         }
  138.         void LcdWriteDat(unsigned char dat)
  139.         {
  140.                 LcdWaitReady();
  141.                 LCD1602_RS = 1;
  142.                 LCD1602_RW = 0;
  143.                 LCD1602_DB = dat;
  144.                 LCD1602_E = 1;
  145.                 LCD1602_E = 0;
  146.         }
  147.         void LcdSetCursor(unsigned char x, unsigned char y)
  148.         {
  149.                 unsigned char addr;
  150.                 if(y == 0)
  151.                         addr = 0x00 + x;
  152.                 else
  153.                         addr = 0x40 + x;
  154.                 LcdWriteCmd(addr | 0x80);
  155.         }
  156.         void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)
  157.         {
  158.                 LcdSetCursor(x, y);
  159.                 while(*str != '\0')
  160.                 {
  161.                         LcdWriteDat(*str++);   
  162.                 }
  163.         }
  164.         void InitLcd1602()
  165.         {
  166.                 LcdWriteCmd(0x38);
  167.                 LcdWriteCmd(0x0C);
  168.                 LcdWriteCmd(0x06);
  169.                 LcdWriteCmd(0x01);
  170.         }
  171.         void itoa (unsigned int n,unsigned char s[])
  172.         {
  173.             unsigned char temp;
  174.             unsigned int i = 0;
  175.             unsigned int len = 0;            
  176.             while(n != 0)
  177.             {
  178.                 s[i] = (n  % 10) + '0' ;//算出字符
  179.                 n = n / 10;
  180.                        i++;
  181.             }
  182.             s[i] = '\0';
  183.             len = strlen(s);
  184.             for(i = 0; i < len / 2; i++) //前后換順序
  185.             {
  186.                 temp = s[i];
  187.                 s[i] = s[len - 1 - i];
  188.                 s[len - 1 - i] = temp;
  189.             }
  190.                 LcdShowStr(1, 0, str);
  191.                 LcdWriteCmd(0x01);
  192.                 LcdShowStr(1, 0, str);
  193.                 LcdShowStr(8, 0, s);
  194.                 s[0] = '\0';
  195.         }
  196.         void keepPWM()//保持輸出
  197.         {
  198.                         if(PWM_0 <=0)
  199.                         PWM_0 =0;
  200.                         if(PWM_1 <=0)
  201.                         PWM_1 =0;
  202.                         if(PWM_2 <=0)
  203.                         PWM_2 =0;
  204.                         if(PWM_0 >=255)
  205.                         PWM_0 =255;
  206.                         if(PWM_1 >=255)
  207.                         PWM_1 =255;
  208.                         if(PWM_2 >=255)
  209.                         PWM_2 =255;
  210.         }
  211.         void init()        //串口初始化
  212.         {
  213.             ES=0;                                                                  //關(guān)中斷
  214.             SCON = 0x50;                        // REN=1允許串行接受狀態(tài),串口工作模式1,
  215.             //10位UART(1位起始位,8位數(shù)據(jù)位,1位停止位,無奇偶校驗),波特率可變
  216.         
  217.             TMOD = 0x20;                        // 定時器1工作于方式2,8位自動重載模式, 用于產(chǎn)生波特率
  218.             TH1=TL1=0xFD;                       // 波特率9600 (本次測試采用晶振為11.0592)
  219.         
  220.             PCON &= 0x7f;                       // 波特率不倍增
  221.             TR1 = 1;                                                          //定時器1開始工作,產(chǎn)生波特率
  222.             //發(fā)送標志位置0
  223.             TI=0;                                                                  //接收標志位置0
  224.             RI=0;
  225.             //EA=0;
  226.            ES=1;
  227.         }
  228.         
  229.         /*void send(unsigned char a)        //單字節(jié)數(shù)據(jù)發(fā)送
  230.         {
  231.             //注意:若單片機TXD(P3.1)無上拉能力,必須在P3.1端接上拉電阻。本次測試需要接上拉電阻
  232.             TI=0;
  233.             SBUF=a;
  234.             while(TI==0);
  235.             TI=0;
  236.             if(c%2)                                        //發(fā)送指示燈標志,每接收一次,此燈亮滅交替
  237.                 led=1;
  238.             else
  239.                 led=0;
  240.             c++;
  241.         }*/
  242.         
  243.         void ctrl()                            //接收處理函數(shù)
  244.         {
  245.                    switch(tmp)
  246.                     {
  247.                     case '1':           //白
  248.                 PWM_0 = 0;
  249.                         PWM_1 = 0;
  250.                         PWM_2 = 0;  
  251.                         LED = ~LED;
  252.                 break;
  253.                     case '2':                                       
  254.                 PWM_0 = 255-128;        //紫
  255.                         PWM_1 = 255;
  256.                         PWM_2 = 255-128;
  257.                         LED = ~LED;
  258.                 break;
  259.                            case '3':                                   
  260.                 PWM_0 = 255;        //藍色
  261.                         PWM_1 = 255;
  262.                         PWM_2 = 0;
  263.                         LED = ~LED;
  264.                 break;
  265.                     case '4':                                       
  266.                 PWM_0 = 30;        // 淺藍
  267.                         PWM_1 = 100;
  268.                         PWM_2 = 255;
  269.                         LED = ~LED;
  270.                 break;
  271.                     case '5':                                       
  272.                 PWM_0 = 255-33;        //        灰
  273.                         PWM_1 = 255-33;
  274.                         PWM_2 = 255-33;
  275.                         LED = ~LED;
  276.                 break;
  277.                         case '6':                                       
  278.                 PWM_0 = 254;        //        mie
  279.                         PWM_1 = 254;
  280.                         PWM_2 = 254;
  281.                         LED = ~LED;
  282.                 break;
  283.                         case 'a':
  284.                         PWM_0=PWM_0+5;        //        jiaqiang
  285.                         PWM_1=PWM_1+5;
  286.                         PWM_2=PWM_2+5;
  287.                         break;
  288.                         case 'b':
  289.                         PWM_0=PWM_0-5;        //  jianruo
  290.                         PWM_1=PWM_1-5;
  291.                         PWM_2=PWM_2-5;
  292.                         keepPWM();
  293.                         break;
  294.                         case 'c':           //shanshuo
  295.                         
  296.                         color();
  297.                         LED = ~LED;
  298.                         break;
  299.                     default:                   //其他,燈全滅
  300.                 PWM_0 = 0;        //hei
  301.                         PWM_1 = 0;
  302.                         PWM_2 = 0;
  303.                // send(tmp);
  304.                    break;
  305.                    }delay(5);        
  306.         }
  307.         void color()
  308.         {                                                           //隨機顏色
  309.              while(RI==0)
  310.                 {
  311.                 PWM_0 = rand()%255;
  312.                 delay(2);
  313.                 PWM_1 = rand()%255;
  314.                 delay(2);
  315.                 PWM_2 = rand()%255;
  316.                 delay(2);
  317.                 }
  318.         }
  319.         
  320.         void InterruptTimer0() interrupt 1
  321.         {
  322.             TH0 = 0xFC;
  323.                 TL0 = 0x67;
  324.                
  325.            if (red == 0&&red1==1)                             //兩個光電判斷人進出
  326.             {
  327.                 delay(99);
  328.                         if(red1==0)
  329.                 flag1s = 1;
  330.             }
  331.             if (red1 == 0&&red == 1)  
  332.             {
  333.                 delay(99);
  334.                         if(red == 0)
  335.                flag2s = 1;
  336.             }
  337.                
  338.                 counter++;
  339.                         if(counter >= 255) counter = 0;                                   //三路pWM輸出
  340.                     if(counter >= PWM_0) RR = 0; else RR = 1;
  341.                     if(counter >= PWM_1) GG = 0; else GG = 1;
  342.                     if(counter >= PWM_2) BB = 0; else BB = 1;        
  343.         }
復制代碼


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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久网站黄| 黄色香蕉视频在线观看 | 成人在线中文字幕 | 欧美一区二区三区视频在线播放 | 成人在线看片 | 亚洲精品黄色 | 自拍偷拍亚洲欧美 | 国产精品色 | 日本不卡免费新一二三区 | 国产丝袜一区二区三区免费视频 | 伊人在线 | 盗摄精品av一区二区三区 | 亚洲精品女人久久久 | 亚洲精品久久久久久久久久久 | 亚洲综合在线网 | 国产亚洲精品久久久久动 | 亚洲视频一区二区三区 | 亚洲第一网站 | 色综合天天综合网国产成人网 | 亚洲一区二区三区在线免费 | 欧美日韩在线观看一区 | 97精品一区二区 | 精品一二三区 | 成年人黄色一级毛片 | 午夜影院在线观看 | 国产一区欧美一区 | 欧美一区二区三区一在线观看 | www.日韩免费 | 欧美视频二区 | 国产欧美精品一区二区三区 | 国产精品久久久久久久久久了 | 国产精品视频www | 免费在线观看一区二区三区 | 精品国产一区二区国模嫣然 | 干干干操操操 | 亚洲成人久久久 | 国产精品毛片一区二区在线看 | 亚洲网站在线观看 | 黄网站在线观看 | 欧美一区二区三区的 | 羞羞色网站 |