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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

GY-31 TCS230顏色傳感器如何將數(shù)據(jù)顯示在串口助手上

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:677868 發(fā)表于 2019-12-30 22:07 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

各位大佬,大家好,我做的這個(gè)是GY-31顏色傳感器顯示在液晶屏LCD1602上RGB三色代碼的一個(gè)功能,現(xiàn)在我能成功的實(shí)現(xiàn)RGB三色代碼在LCD屏上,但是我不知道該如何將程序中的三色代碼顯示在串口助手上,請問有大佬會(huì)嗎,這下面是我傳感器顯示在LCD1602液晶屏上的程序。
  1. /*******************************************
  2. * 文件名: TCS3200顏色測試
  3. * 型號:   GY-31
  4. * 功能:   讀取RGB值
  5. * 單片機(jī): STC89C52
  6. * 晶振:   11.0592m
  7. * LCD1602顯示R,G,B值
  8. /********************************************/
  9. //接線說明:
  10. //模塊S2-----單片機(jī)P1.1
  11. //模塊S3-----單片機(jī)P1.0
  12. //模塊OUT----單片機(jī)P3.5(計(jì)數(shù)器1輸入)
  13. //模塊VCC----單片機(jī)VCC
  14. //模塊GND----單片機(jī)GND
  15. //**********************************************
  16. #include<REG52.H>       
  17. #include<math.h>       //Keil library  
  18. #include<stdio.h>      //Keil library       
  19. #include<INTRINS.H>
  20. #define uchar unsigned char
  21. #define uint  unsigned int       
  22. #define DataPort P0           //LCD1602 數(shù)據(jù)端口       
  23. sbit    LCM_RS=P2^0;   //LCD1602 控制端口               
  24. sbit    LCM_RW=P2^1;   //LCD1602 控制端口       
  25. sbit    LCM_EN=P2^2;   //LCD1602 控制端口

  26. /**引腳定義**/  
  27. sbit s2=P1^1;        //TCS3200 S2
  28. sbit s3=P1^0;        //TCS3200 S3
  29.                      //TCS3200 S0 模塊內(nèi)部默認(rèn)上拉
  30.                      //TCS3200 S1 模塊內(nèi)部默認(rèn)上拉
  31.                      //TCS3200 OE 模塊內(nèi)部接地
  32. sbit test_pin=P1^2;  //用示波器看這個(gè)引腳,可知道定時(shí)器中斷頻率
  33. //變量、常量定義
  34. uchar ge,shi,bai ;
  35. uchar rp=2,gp=2,bp=2; //定義比例因子,具體環(huán)境可以修改
  36. uchar count;          //顏色標(biāo)志位(0:紅 1:綠 2:藍(lán))

  37. //顯示數(shù)組
  38. uchar disp_R[3]={0X30,0X30,0X30};  //紅
  39. uchar disp_G[3]={0X30,0X30,0X30};  //綠
  40. uchar disp_B[3]={0X30,0X30,0X30};  //藍(lán)

  41. //********定義函數(shù)*****************************
  42. void    delay(unsigned int k);
  43. void    InitLcd();
  44. void    WriteDataLCM(uchar dataW);
  45. void    WriteCommandLCM(uchar CMD,uchar Attribc);
  46. void    DisplayOneChar(uchar X,uchar Y,uchar DData);

  47. //*********LCD1602初始化**********************
  48. void InitLcd()                               
  49. {                       
  50.         WriteCommandLCM(0x38,1);                //顯示模式設(shè)置       
  51.         WriteCommandLCM(0x08,1);                //顯示關(guān)閉
  52.         WriteCommandLCM(0x01,1);                //顯示清屏
  53.         WriteCommandLCM(0x06,1);                //顯示光標(biāo)移動(dòng)設(shè)置
  54.         WriteCommandLCM(0x0c,1);                //顯示開及光標(biāo)設(shè)置
  55. }

  56. //**********檢測忙信號************************
  57. void WaitForEnable(void)       
  58. {                                       
  59.         DataPort=0xff;               
  60.         LCM_RS=0;
  61.         LCM_RW=1;
  62.         _nop_();
  63.         LCM_EN=1;
  64.         _nop_();
  65.         _nop_();
  66.         while(DataPort&0x80);       
  67.         LCM_EN=0;                               
  68. }
  69.                                        
  70. //**********寫命令至LCD***********************
  71. void WriteCommandLCM(uchar CMD,uchar Attribc)
  72. {                                       
  73.         if(Attribc)WaitForEnable();       
  74.         LCM_RS=0;
  75.         LCM_RW=0;
  76.         _nop_();
  77.         DataPort=CMD;
  78.         _nop_();       
  79.         LCM_EN=1;
  80.         _nop_();
  81.         _nop_();
  82.         LCM_EN=0;
  83. }       
  84.                                
  85. //**********寫數(shù)據(jù)至LCD************************
  86. void WriteDataLCM(uchar dataW)
  87. {                                       
  88.         WaitForEnable();               
  89.         LCM_RS=1;
  90.         LCM_RW=0;
  91.         _nop_();
  92.         DataPort=dataW;
  93.         _nop_();       
  94.         LCM_EN=1;
  95.         _nop_();
  96.         _nop_();
  97.         LCM_EN=0;
  98. }
  99.                                        
  100. //*********寫一個(gè)字符數(shù)據(jù)到指定的目標(biāo)***********
  101. void DisplayOneChar(uchar X,uchar Y,uchar DData)
  102. {                                               
  103.         Y&=1;                                               
  104.         X&=15;                                               
  105.         if(Y)X|=0x40;                                       
  106.         X|=0x80;       
  107.     EA=0;
  108.         WriteCommandLCM(X,0);               
  109.         WriteDataLCM(DData);               
  110.         EA=1;
  111. }

  112. //**********延時(shí)函數(shù)***************
  113. void delay(unsigned int k)       
  114. {                                               
  115.         unsigned int i,j;                               
  116.         for(i=0;i<k;i++)
  117.         {                       
  118.         for(j=0;j<121;j++)                       
  119.         {;}
  120.         }                                               
  121. }                                                           

  122. /*******************************************
  123. * 函數(shù)名稱: t0_init()
  124. * 函數(shù)功能: 定時(shí)器0初始化
  125. * 入口參數(shù): 無
  126. * 出口參數(shù): 無
  127. /********************************************/
  128. void t0_init()
  129. {
  130.      TMOD=0x51;                        //T1計(jì)數(shù) T0定時(shí) 工作方式1
  131.      
  132.      TH1=0x00;                        //計(jì)數(shù)初值
  133.      TL1=0x00;

  134.      TH0=0xEC;
  135.      TL0=0x78;                        //11.0592M 晶振10ms
  136.      EA=1;                            //開中斷

  137.      ET0=1;        
  138.      TR0=1;                           //啟動(dòng)
  139.      TR1=1;
  140. }

  141. //*********************************************
  142. //數(shù)值轉(zhuǎn)換出個(gè)十百千的ASCII碼
  143. //*********************************************
  144. void conversion(uint temp_data)  
  145. {  
  146.     bai=temp_data/100+0x30 ;
  147.     temp_data=temp_data%100;   //取余運(yùn)算
  148.     shi=temp_data/10+0x30 ;
  149.     ge=temp_data%10+0x30;      //取余運(yùn)算
  150. }

  151. /*******************************************
  152. * 函數(shù)名稱: c10ms_out()
  153. * 函數(shù)功能: 定時(shí)中斷0服務(wù)程序
  154.             修改顏色標(biāo)志disp_tc(0:紅 1:綠 2:藍(lán))
  155.             設(shè)置S0 S1 S2 選擇濾波器
  156.             計(jì)算脈沖,讀取色值
  157. * 入口參數(shù): 無
  158. * 出口參數(shù): 無
  159. /********************************************/
  160. void c10ms_out() interrupt 1
  161. {  
  162.                         uint temp;
  163.                         test_pin=!test_pin; //測試定時(shí)器中斷頻率引腳,可以用示波器觀察
  164.                         TR0=0;              //關(guān)閉定時(shí)
  165.                         TR1=0;              //關(guān)閉計(jì)數(shù)
  166.                                                                 //   count+1實(shí)現(xiàn)先檢測綠色,再檢測藍(lán)色,然后檢測紅色,循環(huán)檢測      
  167.                         if(count==0)
  168.                         {
  169.                         count++;   
  170.                         s2=1;s3=1;           //選擇濾波器為綠色     

  171.                         temp=(TH1<<8)+TL1;   //計(jì)算這段時(shí)間內(nèi) TCS230 的輸出脈沖數(shù)       
  172.                         temp/=rp*1.20;                       
  173.                         conversion(temp);
  174.                         disp_R[2]=ge;        //因?yàn)檫@次的中斷,是上次選擇濾波器的數(shù)值
  175.                         disp_R[1]=shi;
  176.                         disp_R[0]=bai;
  177.                         }

  178.                         else if(count==1)
  179.                         {            
  180.                         count++;
  181.                         s2=0;s3=1;            //選擇濾波器為藍(lán)色

  182.                         temp=(TH1<<8)+TL1;    //計(jì)算這段時(shí)間內(nèi) TCS230 的輸出脈沖數(shù)       
  183.                         temp/=gp*0.90;                       
  184.                         conversion(temp);
  185.                         disp_G[2]=ge;         //因?yàn)檫@次的中斷,是上次選擇濾波器的數(shù)值
  186.                         disp_G[1]=shi;
  187.                         disp_G[0]=bai;
  188.                         }

  189.                         else if(count==2)
  190.                         {            
  191.                         count=0;
  192.                         s2=0;s3=0;            //選擇濾波器為紅色
  193.                
  194.                         temp=(TH1<<8)+TL1;    //計(jì)算這段時(shí)間內(nèi) TCS230 的輸出脈沖數(shù)       
  195.                         temp/=bp;               
  196.                         conversion(temp);
  197.                         disp_B[2]=ge;         //因?yàn)檫@次的中斷,是上次選擇濾波器的數(shù)值
  198.                         disp_B[1]=shi;
  199.                         disp_B[0]=bai;

  200.                         }

  201.      //定時(shí)器計(jì)數(shù)器重賦初值
  202.      TH0=0xEC;
  203.      TL0=0x78; //11.0592M 晶振,為10ms

  204.      TL1=0x00;//計(jì)數(shù)器清零
  205.      TH1=0x00;//計(jì)數(shù)器清零
  206.      TR0=1;   //打開定時(shí)器
  207.      TR1=1;   //打開計(jì)數(shù)器
  208. }


  209. /*******************************************
  210. * 函數(shù)名稱: main()
  211. /********************************************/
  212. void main()
  213. {

  214.       delay(10);
  215.       InitLcd();              //lcd初始化
  216.                 s2=0;           //初始設(shè)定S2引腳
  217.                 s3=0;           //初始設(shè)定S3引腳
  218.       t0_init();              //定時(shí)計(jì)數(shù)初使化

  219.      while(1)
  220.      {
  221.      
  222.                                 DisplayOneChar(0,0,'G');
  223.                                 DisplayOneChar(1,0,':');
  224.                                 DisplayOneChar(2,0,disp_G[0]);
  225.                                 DisplayOneChar(3,0,disp_G[1]);
  226.                                 DisplayOneChar(4,0,disp_G[2]);                 //綠

  227.                                 DisplayOneChar(6,0,'B');
  228.                                 DisplayOneChar(7,0,':');
  229.                                 DisplayOneChar(8,0,disp_B[0]);
  230.                                 DisplayOneChar(9,0,disp_B[1]);
  231.                                 DisplayOneChar(10,0,disp_B[2]);     //藍(lán)


  232.                                 DisplayOneChar(0,1,'R');
  233.                                 DisplayOneChar(1,1,':');
  234.                                 DisplayOneChar(2,1,disp_R[0]);
  235.                                 DisplayOneChar(3,1,disp_R[1]);
  236.                                 DisplayOneChar(4,1,disp_R[2]);             //紅                               

  237.                                 delay(300) ;

  238.      }
  239. }
復(fù)制代碼
我嘗試通過異步串口通信的程序?qū)?shù)據(jù)顯示在串口助手上,但是串口助手用文本模式并沒有任何顯示,我是在BST-V51單片機(jī)上做的,以下是我異步串口通信uart的程序,請各位多多提提建議,問題出在哪里,歡迎指教,謝謝各位。
  1. #include<reg52.h>
  2. #include"bstv51.h"
  3. void UartConfiguration();

  4. void main()
  5. {
  6.     bstv51_init();
  7.         UartConfiguration();
  8.         while(1)
  9.         {
  10.         }

  11. }

  12. void UartConfiguration()
  13. {
  14.     TMOD=0x20;      //設(shè)置計(jì)數(shù)器1的工作方式2
  15.         TH1=0xfd;                        //設(shè)置計(jì)數(shù)器1的初值,決定波特率9600
  16.         TL1=0xfd;                        //設(shè)置計(jì)數(shù)器1的初值,決定波特率9600
  17.         PCON=0x00;      // 波特率倍增0x00不加倍         0x80加倍
  18.         SCON=0x50;                //設(shè)置工作方式1 開啟接受允許
  19.         EA=1;                    //開啟總中斷
  20.         ES=1;                        //開啟串口接受中斷
  21.         TR1=1;                        //計(jì)數(shù)器1開始運(yùn)行
  22. }

  23. void Uart() interrupt 4
  24. {
  25.     uchar date;

  26.         date=SBUF;        //取出接受到的數(shù)據(jù)
  27.         RI=0;                          //清除接受中斷標(biāo)志位
  28.         SBUF=date;                  //接收到的數(shù)據(jù)放入發(fā)送緩存器發(fā)送
  29.         while(!TI);        //等待發(fā)送數(shù)據(jù)完成
  30.         TI=0;                                //清除發(fā)送完成標(biāo)志位

  31. }
復(fù)制代碼


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

使用道具 舉報(bào)

沙發(fā)
ID:648281 發(fā)表于 2019-12-31 09:55 | 只看該作者
你好!
增加一個(gè)串口發(fā)送函數(shù);
把 RGB值發(fā)送給上位機(jī)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:677868 發(fā)表于 2019-12-31 10:33 | 只看該作者
51hei**1140 發(fā)表于 2019-12-31 09:55
你好!
增加一個(gè)串口發(fā)送函數(shù);
把 RGB值發(fā)送給上位機(jī)。

您好,請問是在我原程序上添加串口發(fā)送函數(shù)嗎,能否具體指教一下呢,留下聯(lián)系方式可以嗎?萬分感謝。
回復(fù)

使用道具 舉報(bào)

地板
ID:215430 發(fā)表于 2019-12-31 10:54 | 只看該作者
很好感謝樓主分享verygood  nicefor you
回復(fù)

使用道具 舉報(bào)

5#
ID:517333 發(fā)表于 2019-12-31 11:10 | 只看該作者
直接采用上面的程序?qū)崿F(xiàn)就可以了,之前我也是在想別的方法,最后就做好了
回復(fù)

使用道具 舉報(bào)

6#
ID:213173 發(fā)表于 2019-12-31 15:16 | 只看該作者
由于你的程序使用兩個(gè)定時(shí)器完成顏色采樣,所以采樣完成后要關(guān)閉定時(shí)器,輸出一個(gè)標(biāo)志,在主程序中查詢這個(gè)標(biāo)志將結(jié)果用串口發(fā)送到上位機(jī)。給你一個(gè)串口參考程序,原來的LCD顯示程序也要作相應(yīng)修改。

  1. //重新定義顯示緩存數(shù)組
  2. uchar disp[]="R:000G:000B:000";
  3. //改寫此程序,將讀取的數(shù)據(jù)按位分解保存,同樣可用于LCD顯示
  4. void conversion(uint temp_data)  
  5. {
  6.         disp[2]=temp_R/100%10+'0';
  7.         disp[3]=temp_R/10%10+'0';
  8.         disp[4]=temp_R%10++'0';
  9.         disp[7]=temp_G/100%10+'0';
  10.         disp[8]=temp_G/10%10+'0';
  11.         disp[9]=temp_G%10++'0';
  12.         disp[12]=temp_B/100%10+'0';
  13.         disp[13]=temp_B/10%10+'0';
  14.         disp[14]=temp_B%10++'0';
  15. }
  16. //定時(shí)器1分時(shí)工作于顏色采樣和串口切換
  17. //下面兩個(gè)程序放在主函數(shù)中
  18. //注意:只發(fā)不收不要開串口中斷
  19. /**********串口發(fā)送函數(shù)*************/
  20. void SendOneByte(uchar c)
  21. {
  22.     SBUF = c;                //發(fā)送數(shù)據(jù)
  23.     while(!TI);        //等待發(fā)送完成
  24.     TI = 0;                        //發(fā)送中斷請求標(biāo)志位清0
  25. }

  26. void analysis()
  27. {
  28.         uchar i;
  29.         if(flag==1)//使能標(biāo)志,在定時(shí)器中斷中當(dāng)完成一次完整顏色采樣flag置1
  30.         {
  31.                 flag=0;//使能標(biāo)志清0
  32.                 //定時(shí)器1工作于串口設(shè)置
  33.                 SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  34.                 TMOD &= 0x0F;                //清除定時(shí)器1模式位,保持定時(shí)器0模式不變
  35.                 TMOD |= 0x20;                //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
  36.                 TL1 = 0xFD;                //設(shè)定定時(shí)初值(波特率9600)
  37.                 TH1 = 0xFD;                //設(shè)定定時(shí)器重裝值
  38.                 ET1 = 0;                //禁止定時(shí)器1中斷
  39.                 EA=0;                        //關(guān)閉總中斷,保證串口發(fā)送過程不被干擾
  40.                 TR1 = 1;                //啟動(dòng)定時(shí)器1
  41.                 for(i=0;i<100;i++);//小延時(shí)等待串口穩(wěn)定
  42.                 for(i=0;i<14;i++)//串口發(fā)送數(shù)據(jù)串
  43.                         SendOneByte(disp[i]);
  44.                 //恢復(fù)定時(shí)器1工作于顏色采樣設(shè)置
  45.                 TMOD &= 0x0F;                //清除定時(shí)器1模式位,保持定時(shí)器0模式不變
  46.                 TMOD |= 0x50;                //設(shè)定定時(shí)器1為外部計(jì)數(shù)模式
  47.                 TH1=0x00;         //計(jì)數(shù)初值
  48.                 TL1=0x00;
  49.                 EA=1;            //開總中斷
  50.                 TR0=1;
  51.                 TR1=1;
  52.         }
  53. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

7#
ID:677868 發(fā)表于 2019-12-31 16:14 | 只看該作者
2032139772 發(fā)表于 2019-12-31 11:10
直接采用上面的程序?qū)崿F(xiàn)就可以了,之前我也是在想別的方法,最后就做好了

能QQ聯(lián)系問下你嗎 十分感謝  我不是很太懂 因?yàn)橛袃蓚(gè)程序
回復(fù)

使用道具 舉報(bào)

8#
ID:677868 發(fā)表于 2019-12-31 17:32 | 只看該作者
2032139772 發(fā)表于 2019-12-31 11:10
直接采用上面的程序?qū)崿F(xiàn)就可以了,之前我也是在想別的方法,最后就做好了

請問方便聯(lián)系嗎,我想私下問問你最后是怎么做好的,十分感謝
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕乱码一区二区三区 | 影音先锋亚洲资源 | 一区二区三区欧美 | 国产不卡在线播放 | 91精品国产综合久久久亚洲 | 国产中文字幕网 | 亚洲成av人片在线观看 | 亚洲一区 中文字幕 | 91精品国产乱码久久久久久久久 | 国产羞羞视频在线观看 | 日韩中文字幕在线 | 欧美一级免费看 | 九九热精品在线 | 亚洲三级av | 欧美综合视频 | 国产精品视频一 | 色播久久 | 欧美freesex黑人又粗又大 | 黄色片视频网站 | 中文字幕国产精品视频 | 在线播放中文字幕 | 亚洲一区二区三区高清 | av免费网站在线观看 | 男人阁久久 | 日韩在线不卡 | 蜜臀网 | 国产精品成人一区二区三区 | 一区二区精品 | 色播久久久 | 麻豆天堂 | 一级特黄色毛片 | 毛片综合 | 国产目拍亚洲精品99久久精品 | 九九热在线视频 | 综合久久综合久久 | 欧美久久一区二区三区 | 91福利网址 | 操操日 | www网站在线观看 | 看毛片的网站 | 999re5这里只有精品 |