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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32+TCS3200在使用過程中,用RGB值顯示出來發現大于255

[復制鏈接]
跳轉到指定樓層
樓主
ID:942417 發表于 2021-12-19 16:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
大佬救命!!!,這里使用的是STM32f103
代碼是拿來主義:https://blog.csdn.net/weixin_45930808/article/details/119789276
最高的時候看到803的數字
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:942417 發表于 2021-12-19 17:34 | 只看該作者
以下為我的代碼:
這里是定時器的
  1. #include "sys.h"
  2. #include "timer.h"
  3. #include "touch.h"
  4. #include "delay.h"
  5. #include "timer.h"
  6. #include "led.h"
  7. #include "usart.h"
  8. #include "tcs3200.h"
  9. #include "lcd.h"

  10. extern float RGB_Scale[3];                    
  11. int cnt[3];            
  12. extern int flag;
  13. extern int count;
  14. float color1;

  15. void TIM3_Int_Init(u16 arr,u16 psc)
  16. {
  17.   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  18.         NVIC_InitTypeDef NVIC_InitStructure;

  19.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  20.         TIM_TimeBaseStructure.TIM_Period = arr;
  21.         TIM_TimeBaseStructure.TIM_Prescaler =psc;  
  22.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  23.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  24.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

  25.         TIM_ITConfig(  
  26.                 TIM3, //TIM2
  27.                 TIM_IT_Update  | TIM_IT_Trigger,
  28.                 ENABLE  
  29.                 );
  30.         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  31.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
  32.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  
  33.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  34.         NVIC_Init(&NVIC_InitStructure);  

  35.         TIM_Cmd(TIM3, ENABLE);  //ê1?üTIMxíaéè
  36.                                                          
  37. }


  38. void TIM2_Cap_Init(void)                                       
  39. {   
  40.     GPIO_InitTypeDef GPIO_InitStructure;
  41.     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  42.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);   
  43.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  
  44.    
  45.     GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;            
  46.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;         
  47.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  48.     GPIO_ResetBits(GPIOA,GPIO_Pin_0);                 
  49.    
  50.        
  51.     TIM_TimeBaseStructure.TIM_Period = 0xFFFF;   //設置自動預裝載;N-1      
  52.     TIM_TimeBaseStructure.TIM_Prescaler =0; //這里有問題,為5000時不顯示色彩         
  53.     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  54.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  55.     TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);        
  56.     TIM_ITRxExternalClockConfig(TIM2,TIM_TS_ETRF);         
  57.     TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
  58.     TIM_SetCounter(TIM2, 0);        
  59.    
  60.     TIM_Cmd(TIM2,ENABLE );                           
  61. }

  62. void TIM3_IRQHandler(void)   
  63. {
  64.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
  65.                 {
  66.               TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  
  67.               count=TIM_GetCounter(TIM2);         
  68.          switch(flag){
  69.          case 0:
  70.             TSC_WB(0, 0);   
  71.             break;
  72.          case 1:
  73.             cnt[0] = count;   
  74.             TSC_WB(1, 1);
  75.             break;
  76.          case 2:
  77.             cnt[1] = count;   
  78.             TSC_WB(0, 1);  
  79.             break;
  80.          case 3:
  81.             cnt[2] = count;     
  82.             TSC_WB(1, 0);   
  83.             break;
  84.          default:
  85.             count = 0;     
  86.             break;
  87.       }
  88.       TIM_SetCounter(TIM2,0);
  89.                 }
  90. }

  91. void Change_init()
  92. {
  93.         float Max=0,Min=0;
  94.         float Rhsv=0,Ghsv=0,Bhsv=0;
  95.         float H=0,S=0,V=0;
  96.         u8 R=0x00,G=0x00,B=0x00;
  97.         u16 RGB=0x0000;
  98.        
  99.           RGB_Scale[0] = 255.0/ cnt[0];   
  100.     RGB_Scale[1] = 255.0/ cnt[1] ;   
  101.     RGB_Scale[2] = 255.0/ cnt[2] ;  
  102.                 R=RGB_Scale[0];
  103.                 G=RGB_Scale[1];
  104.                 B=RGB_Scale[2];
  105.         //================================================================================
  106.                 Rhsv = (float) R/25/10;
  107.                 Ghsv = (float) G/25/10;         //RGB轉換成0,1.
  108.                 Bhsv = (float) B/25/10;

  109. //=================================================================================
  110.                                                                                                                                          //RGB轉HSV算法
  111.                 Max = (Rhsv>Ghsv)?Rhsv:Ghsv;                                                                  //RGB轉HSV算法
  112.                 Max = (Max>Bhsv)?Max:Bhsv;                //取RGB最大值                                   //RGB轉HSV算法
  113.                 Min = (Rhsv<Ghsv)?Rhsv:Ghsv;                                                                    //RGB轉HSV算法
  114.                 Min = (Min<Bhsv)?Min:Bhsv;                //去RGB最小值                                         //RGB轉HSV算法
  115.                                                                                                                                                   //RGB轉HSV算法                               
  116.                 if(Rhsv==Max) H = (Ghsv-Bhsv)/(Max-Min);                                                   //RGB轉HSV算法
  117.                 if(Ghsv==Max) H = 2+(Bhsv-Rhsv)/(Max-Min);                                                          //RGB轉HSV算法
  118.                 if(Bhsv==Max) H = 4+(Rhsv-Ghsv)/(Max-Min);                                                         //RGB轉HSV算法
  119.                 H =(int) (H*60);                                                                                          //RGB轉HSV算法
  120.                 if(H<0) H = H+360;                                                                                                           //RGB轉HSV算法
  121.                                                                                                                                                                //RGB轉HSV算法
  122.                 V = (Rhsv>Ghsv)?Rhsv:Ghsv;                                                                                                 //RGB轉HSV算法
  123.                 V = (V>Bhsv)?V:Bhsv;                //取V的數值                                                                          //RGB轉HSV算法
  124.                                                                                                                                                                    //RGB轉HSV算法
  125.                 S = (Max-Min)/Max;                        //取S的數值                                                                                //RGB轉HSV算法
  126.                                                                                                                                                                           //RGB轉HSV算法
  127.                 V = (int) (V*100);                                                                                                                          //RGB轉HSV算法
  128.                 S = (int) (S*100);                                                                                                                           //RGB轉HSV算法
  129. //======================================================================================================
  130.                 LCD_ShowNum(220,50,cnt[0]*R,5,12);  //顯示一個數字
  131.                 LCD_ShowNum(220,70,cnt[1]*G,5,12);  //顯示一個數字
  132.                 LCD_ShowNum(220,90,cnt[2]*B,5,12);  //顯示一個數字
  133.                 LCD_ShowNum(220,110,H,5,12);  //顯示一個數字
  134.                 LCD_ShowNum(220,130,V,5,12);  //顯示一個數字
  135.                 LCD_ShowNum(220,150,S,5,12);  //顯示一個數字
  136. //                R = 0xff;
  137. //                G = 0xff;
  138. //                B = 0xff;
  139. //=====================================================  
  140. //=====================================================
  141.                 RGB = 0x0000;
  142.                 RGB |=(unsigned long) R*1000/8225<<11;                          
  143.                 RGB |=(unsigned long) G*1000/4047<<5;          //轉換成屏幕的4W色顯示
  144.                 RGB |=(unsigned long) B*1000/8225;               
  145. //=====================================================
  146.                 LCD_Fill(10,170,80,260,RGB);   //原來的顯示色彩
  147.                 //LCD_Fill(10,170,120,50,RGB);   //顯示色彩
  148.         color1=RGB;
  149.         gui_fill_circle(200,400,50,RGB);
  150.                 delay_ms(50);                                   //刷新次數
  151. }
復制代碼
回復

使用道具 舉報

板凳
ID:942417 發表于 2021-12-19 17:35 | 只看該作者
這里是TCS的代碼:
  1. #include "sys.h"       
  2. #include "tcs3200.h"
  3. #include "exti.h"
  4. #include "delay.h"

  5. #include "tcs3200.h"
  6. #include "delay.h"
  7. #include "usart.h"
  8. #include "lcd.h"

  9. float RGB_Scale[3];         
  10. int count=0;                          
  11. int flag=0;

  12. //S0-----PA4,S1-----PA5,S2-----PA6,S3-----PA7,LED-----PC5,OUT-----PA0

  13. void TCS_GPIO_Init(void)
  14. {

  15. GPIO_InitTypeDef  GPIO_InitStructure;

  16. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);         
  17.        
  18. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;                                 
  19. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                
  20. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 
  21. GPIO_Init(GPIOA, &GPIO_InitStructure);                                       
  22. GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_4|GPIO_Pin_7);                                                 //PA.4567 ê?3???
  23.                                
  24.        
  25. // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                   
  26. // GPIO_Init(GPIOC, &GPIO_InitStructure);                                         
  27. // GPIO_SetBits(GPIOC,GPIO_Pin_5);                                        
  28. }

  29. void filter(int s2,int s3)
  30. {
  31.     if(s2==0&&s3==0){
  32.                         S2=0;S3=0;
  33.                 }
  34.     if(s2==0&&s3==1){
  35.                   S2=0;S3=1;
  36.                 }
  37.     if(s2==1&&s3==0){
  38.                         S2=1;S3=0;
  39.                 }
  40.     if(s2==1&&s3==1){
  41.                   S2=1;S3=1;
  42.                 }                       
  43. }

  44. void TSC_WB(int s2, int s3)
  45. {
  46.   count = 0;   
  47.   flag ++;   
  48.   filter(s2, s3);
  49. }
復制代碼
回復

使用道具 舉報

地板
ID:942417 發表于 2021-12-19 17:38 | 只看該作者
這里是主函數的代碼:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "touch.h"
  7. #include "lcd.h"
  8. #include "tcs3200.h"
  9. #include "timer.h"

  10. extern float RGB_Scale[3];       //外部聲明            
  11. extern int cnt[3];            
  12. extern int flag;
  13. extern int count;
  14. extern float color1;
  15. extern u8 color;
  16. int main(void)
  17. {               

  18.          
  19.         delay_init();                      
  20.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  21.         uart_init(115200);                
  22.         LED_init();                                 
  23.         LCD_Init();                         
  24.         TCS_GPIO_Init();       
  25.         TIM3_Int_Init(9999,719);//100ms
  26.         TIM2_Cap_Init();
  27.         chromatogram();
  28.         Change_init();
  29.         POINT_COLOR=RED;       
  30.          
  31.          
  32.          
  33.          
  34.         S0=0;//這里直接2%設置,LED永遠亮著即可
  35.   S1=1;   
  36.   led0=1;
  37.         delay_ms(1000);
  38.                 delay_ms(1000);
  39.                         delay_ms(1000);
  40.                                 delay_ms(1000);
  41.          
  42.     RGB_Scale[0] = 255.0/ cnt[0];   
  43.     RGB_Scale[1] = 255.0/ cnt[1] ;   
  44.     RGB_Scale[2] = 255.0/ cnt[2] ;  

  45.         LCD_ShowString(10,10,210,16,16,"Init");
  46.         LCD_ShowString(20,70,210,16,16,"R:");
  47.         LCD_ShowString(20,90,210,16,16,"G:");
  48.         LCD_ShowString(20,110,210,16,16,"B:");
  49.         LCD_ShowNum(50, 10,(int)(cnt[0]*RGB_Scale[0]),3,16);
  50.         LCD_ShowNum(50, 30,(int)(cnt[1]*RGB_Scale[1]),3,16);
  51.         LCD_ShowNum(50, 50,(int)(cnt[2]*RGB_Scale[2]),3,16);

  52.          //白平衡結束
  53.         POINT_COLOR=BLUE;        //畫筆顏色

  54.         while(1)
  55.         {
  56.                 flag=0;  
  57.                 count=0;
  58.     u16 color2=0xaabb;
  59.                 u8 R1=0x00,G1=0x00,B1=0x00;
  60. //void creat_random_color()//隨機顏色畫圓
  61. //{
  62. //        u16 red,green,blue;
  63. //        red=rand()%32;
  64. //        green=rand()%64;
  65. //        blue=rand()%32;
  66.           R1=cnt[0]*RGB_Scale[0];G1=cnt[1]*RGB_Scale[1];B1=cnt[2]*RGB_Scale[2];
  67.                 color2=R1<<11|G1<<5|B1;
  68. //}
  69.                
  70.                 LCD_ShowNum(50, 70,(int)(cnt[0]*RGB_Scale[0]),3,16);
  71.                 LCD_ShowNum(50, 90,(int)(cnt[1]*RGB_Scale[1]),3,16);
  72.                 LCD_ShowNum(50, 110,(int)(cnt[2]*RGB_Scale[2]),3,16);
  73.     Change_init();
  74.                 gui_fill_circle(200,600,50,color2);
  75.                 gui_fill_circle(200,250,50,color);
  76.                 delay_ms(1000);
  77.           delay_ms(1000);
  78.                
  79. }
  80. }
復制代碼
回復

使用道具 舉報

5#
ID:942417 發表于 2021-12-19 18:13 | 只看該作者
if(BAMOUNT>255) BAMOUNT = 255;
回復

使用道具 舉報

6#
ID:130230 發表于 2022-6-9 15:48 | 只看該作者
我也碰到同樣的問題了,你解決了沒。。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品1区2区3区 精品国产欧美一区二区 | 国产视频一区在线观看 | 国产精品国产a级 | 激情婷婷 | 黄色精品视频网站 | 视频一区在线 | 欧美日韩一区在线 | 欧美亚洲日本 | 亚洲欧洲国产视频 | 日日夜夜精品免费视频 | 亚洲天堂精品一区 | 中文字幕免费 | 在线观看av中文字幕 | 精品一区二区三区在线观看国产 | 91激情视频 | av国产精品 | 蜜桃官网 | 综合久久久 | 岛国av一区二区 | 日韩中文一区二区三区 | 成人免费在线小视频 | 国产 欧美 日韩 一区 | 一区二区在线不卡 | 嫩草国产 | 亚州综合一区 | 天天操夜夜操 | 中文字幕一区二区三区精彩视频 | 亚洲国产中文在线 | 国产偷录视频叫床高潮对白 | 久久91精品 | 精品视频在线免费观看 | 欧美日韩一区在线 | 国产精产国品一二三产区视频 | 精品国产一区二区三区性色av | 成人在线免费观看视频 | 精品自拍视频在线观看 | 欧美日韩一区在线 | 美女视频一区二区三区 | 久久国产一区二区三区 | 午夜寂寞影院列表 | 成人国产精品免费观看视频 |