欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于TCS3200顏色識別實驗報告

[復制鏈接]
跳轉到指定樓層
樓主
ID:263543 發表于 2017-12-19 10:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
實驗內容;
實驗程序;
測試結果

蘇州大學 應用技術學院
《電子技術綜合設計》實驗報告
實驗名稱
基于TCS3200的顏色識別
班級/小組
15電子轉第七組
報告人姓名/學號
付亞茹/13
陳佳玲/22
成澄/34
完成日期
2016.11.16.
《電子技術綜合設計》實驗報告

實驗名稱:溫度顯示儀的設計與制作
蘇州大學 應用技術學院
15電子轉/第七組
付亞茹/13,陳佳玲/22,成澄/34
2016年11月
目 錄
1. 團隊風采和作品展示
1.1. 團隊風采
1.2. 作品展示
2. 任務
2.1. 描述
2.1.1. 組成
2.1.2. 功能
2.1.3. 性能
2.2. 要求
2.2.1. 基本要求
2.2.2. 擴展要求
3. 方案
3.1. 可選方案
3.1.1. 方案1
3.1.2. 方案2
3.2. 方案確定
3.2.1. 基本結構
3.2.2. 主要思路
4. 設計
4.1. 硬件設計
4.1.1. 核心板
4.1.2. 用戶按鍵
4.1.3. 彩色液晶屏端口
4.2. 軟件設計
4.3. 流程圖
5. 測試
5.1. 測試內容
5.1.1. 測試結果
5.1.2. 測試評價
6. 總結
6.1. 任務完成情況
6.2. 總結報告

1.     團隊風采和作品展示1.1.     團隊風采
NO
學號
姓名
分工
1
1516936013
付茹
軟件調試,調試
2
1516936022
陳玲
報告撰寫,調試
3
1516936034
成澄
硬件測試,調試
4

范新
外援
5

丁杰
外援
團隊風采


1.2.     作品展示
作品名稱:基于TCS3200的顏色識別
功能描述:小組Logo,白平衡檢測,色塊顯示,液晶顯示屏顯示等。
(照片標題1:全貌)
(照片標題2:局部1)
(照片標題3:局部2)



2.     任務2.1.     描述2.1.1.     組成
硬件設計是以STM32 OPEN407Z-C測試版,顏色識別傳感器以及彩色液晶顯示屏組成。
2.1.2.     功能
啟動后,在液晶屏上顯示歡迎界面,按USER鍵進入主界面,主界面的屏幕被分為三個部分,其中三個部分:左邊為RGB數值,也分上中下三個部分,最上面3個值是白平衡時的值,也就是白色的RGB值;中間3個值是實時測得的RGB值;最后3個HVS是把RGB值轉換到HVS值;當傳感器放在一種顏色上,按B,C,D鍵,分別設置此顏色為標準顏色,然后對顏色依次掃描,當掃到標準顏色界面會顯示“識別一”,“識別二”,“識別三”;當掃到其它顏色界面會顯示“未識別”。
2.1.3.     性能
白平衡檢測后可識別三種顏色
2.2.     要求2.2.1.     基本要求
定了標準色后,可識別對應的顏色,其他顏色未識別。
2.2.2.     擴展要求
加上小組logo,在按下指定的幾個按鍵,可識別多種相應的顏色。
3.     方案
3.1.     可選方案
使用KEIL uvision5 軟件對STM32 OPEN407Z-C測試版編程。

3.1.1.     方案1
選擇使用STM32F103ZET6的開發板。

3.1.2.     方案2
選擇使用STM32 OPEN407Z-C的開發板。

3.2.     方案確定3.2.1.     基本結構
使用方案2.
3.2.2.     主要思路
將傳感器相應的線連接到開發板,修改編譯好的程序下載進入,再通過按鍵來進行顏色識別。
4.     設計4.1.     硬件設計4.1.1.     核心板
核心板   F407及芯片外圍電路

4.1.2.     用戶按鍵

4.1.3.     彩色液晶屏端口
4.2.     軟件設計
1. 按鍵USER控制
  1. /*********************************************************************************
  2. * File                : KEY.C
  3. * Hardware Environment:
  4. * Build Environment   : REALVIEW MDK-ARM  Version: 4.20
  5. * Version             : V1.0
  6. * By                  : DING.J.Q_TEC.SUDA  2013-10-26
  7. *                       Department of Electronics and Information
  8. *                                  (c) Copyright 2013,Applied Technology College
  9. *                                       http://tec.suda.edu.cn
  10. *                                          All Rights Reserved
  11. **********************************************************************************/

  12. //== 包含的 h 文件
  13. #include "KEY.H"
  14. #include "stm32f4xx.h"

  15. //== 定義KEY端口
  16. //-- USER KEY  --> PF10
  17. #define USER_KEY_PORT                                                                      GPIOF
  18. #define USER_KEY_PIN                                                                      GPIO_Pin_10
  19. #define USER_KEY_RCC_AHBPERIPH                                          RCC_AHB1Periph_GPIOF
  20. //-- WAKEUP Key --> PA0
  21. #define WAKEUP_KEY_PORT                                                                      GPIOA
  22. #define WAKEUP_KEY_PIN                                                                      GPIO_Pin_0
  23. #define WAKEUP_KEY_RCC_AHBPERIPH                            RCC_AHB1Periph_GPIOA
  24. //-- JOY Key A-B-C-D-CTR--> PC13-PE6-PE4-PE2-PA5
  25. #define JOY_A_KEY_PORT                                                                      GPIOC
  26. #define JOY_A_KEY_PIN                                                                      GPIO_Pin_13
  27. #define JOY_A_KEY_RCC_AHBPERIPH                                          RCC_AHB1Periph_GPIOC
  28. //--
  29. #define JOY_B_KEY_PORT                                                                      GPIOE
  30. #define JOY_B_KEY_PIN                                                                      GPIO_Pin_6
  31. #define JOY_B_KEY_RCC_AHBPERIPH                                          RCC_AHB1Periph_GPIOE
  32. //--
  33. #define JOY_C_KEY_PORT                                                                      GPIOE
  34. #define JOY_C_KEY_PIN                                                                      GPIO_Pin_4
  35. #define JOY_C_KEY_RCC_AHBPERIPH                                          RCC_AHB1Periph_GPIOE
  36. //--
  37. #define JOY_D_KEY_PORT                                                                      GPIOE
  38. #define JOY_D_KEY_PIN                                                                      GPIO_Pin_2
  39. #define JOY_D_KEY_RCC_AHBPERIPH                                          RCC_AHB1Periph_GPIOE
  40. //--
  41. #define JOY_CTR_KEY_PORT                                                        GPIOA
  42. #define JOY_CTR_KEY_PIN                                                                      GPIO_Pin_5
  43. #define JOY_CTR_KEY_RCC_AHBPERIPH                            RCC_AHB1Periph_GPIOA

  44. //== 定義函數的實現

  45. //-- 初始化 JOY_KEY GPIO
  46. void               JOY_KEY_GPIO_INIT(void){
  47. //  定義 GPIO初始化結構變量
  48.               GPIO_INITTYPEDEF GPIO_INITSTRUCTURE;            
  49. //  使能外設時鐘  GPIO PERIPH clock enable
  50.               RCC_AHB1PeriphClockCmd(USER_KEY_RCC_AHBPERIPH | WAKEUP_KEY_RCC_AHBPERIPH | JOY_A_KEY_RCC_AHBPERIPH |
  51.                                                                                                   JOY_B_KEY_RCC_AHBPERIPH |  JOY_C_KEY_RCC_AHBPERIPH |  JOY_D_KEY_RCC_AHBPERIPH |
  52.                                                                                                     JOY_CTR_KEY_RCC_AHBPERIPH, ENABLE);
  53. //  配置輸入上拉模式              Configure Input PUSHPULL mode
  54.               GPIO_INITSTRUCTURE.GPIO_PIN = USER_KEY_PIN;
  55.               GPIO_INITSTRUCTURE.GPIO_MODE = GPIO_MODE_IN;
  56.               GPIO_INITSTRUCTURE.GPIO_OTYPE = GPIO_OTYPE_PP;
  57.               GPIO_INITSTRUCTURE.GPIO_SPEED = GPIO_Speed_100MHz;
  58.               GPIO_INITSTRUCTURE.GPIO_PUPD = GPIO_PUPD_UP;
  59.               GPIO_INIT(USER_KEY_PORT, &GPIO_INITSTRUCTURE);
  60. //--
  61.               GPIO_INITSTRUCTURE.GPIO_PIN = WAKEUP_KEY_PIN;
  62.               GPIO_INIT(WAKEUP_KEY_PORT, &GPIO_INITSTRUCTURE);
  63. //--
  64.               GPIO_INITSTRUCTURE.GPIO_PIN = JOY_A_KEY_PIN;
  65.               GPIO_INIT(JOY_A_KEY_PORT, &GPIO_INITSTRUCTURE);
  66.               GPIO_INITSTRUCTURE.GPIO_PIN = JOY_B_KEY_PIN;
  67.               GPIO_INIT(JOY_B_KEY_PORT, &GPIO_INITSTRUCTURE);
  68.               GPIO_INITSTRUCTURE.GPIO_PIN = JOY_C_KEY_PIN;
  69.               GPIO_INIT(JOY_C_KEY_PORT, &GPIO_INITSTRUCTURE);
  70.               GPIO_INITSTRUCTURE.GPIO_PIN = JOY_D_KEY_PIN;
  71.               GPIO_INIT(JOY_D_KEY_PORT, &GPIO_INITSTRUCTURE);
  72.               GPIO_INITSTRUCTURE.GPIO_PIN = JOY_CTR_KEY_PIN;
  73.               GPIO_INIT(JOY_CTR_KEY_PORT, &GPIO_INITSTRUCTURE);

  74. }

  75. //-- 讀取狀態 JOY_KEY
  76. unsigned char READ_JOY_KEY_STATE(void) {
  77.               if(!GPIO_READINPUTDATABIT(USER_KEY_PORT,USER_KEY_PIN))
  78.                             return USER_KEY;
  79.               else if(!GPIO_READINPUTDATABIT(WAKEUP_KEY_PORT,WAKEUP_KEY_PIN))
  80.                             return WAKEUP_KEY;
  81.               else if(!GPIO_READINPUTDATABIT(JOY_A_KEY_PORT,JOY_A_KEY_PIN))
  82.                             return JOY_A_KEY;
  83.               else if(!GPIO_READINPUTDATABIT(JOY_B_KEY_PORT,JOY_B_KEY_PIN))
  84.                             return JOY_B_KEY;
  85.               else if(!GPIO_READINPUTDATABIT(JOY_C_KEY_PORT,JOY_C_KEY_PIN))
  86.                             return JOY_C_KEY;
  87.               else if(!GPIO_READINPUTDATABIT(JOY_D_KEY_PORT,JOY_D_KEY_PIN))
  88.                             return JOY_D_KEY;
  89.               else if(!GPIO_READINPUTDATABIT(JOY_CTR_KEY_PORT,JOY_CTR_KEY_PIN))
  90.                             return JOY_CTR_KEY;
  91.               return NULL_KEY;
  92. }
  93. //===============
  94. // End of KEY.C
  95. //===============

  96. 2. TCS3200傳感器驅動函數
  97. #include "stm32f4xx.h"                  // Device header
  98. #include "tcs3200.h"
  99. //02#include "EXTI.H"
  100. //03#include "DELAY.H"

  101. uint8_t RGENA,GGENA,BGENA;
  102. uint16_t RAMOUNT,GAMOUNT,BAMOUNT;
  103. uint16_t amount;

  104. void tcs3200_init(uint8_t s0,uint8_t s1)
  105. {
  106.               GPIO_INITTYPEDEF GPIO_INITSTRUCTURE;
  107.    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);

  108.               //A0123
  109.   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
  110. GPIO_INITSTRUCTURE.GPIO_MODE=GPIO_MODE_OUT;
  111. GPIO_INITSTRUCTURE.GPIO_OTYPE=GPIO_OTYPE_PP;
  112.               GPIO_INITSTRUCTURE.GPIO_PUPD=GPIO_PUPD_UP;
  113.               GPIO_INITSTRUCTURE.GPIO_SPEED=GPIO_Speed_50MHz;

  114.               GPIO_INIT(GPIOA,&GPIO_INITSTRUCTURE);            
  115.   GPIO_SETBITS(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);

  116.               //A4
  117. GPIO_INITSTRUCTURE.GPIO_PIN=GPIO_PIN_4;
  118.   GPIO_INITSTRUCTURE.GPIO_MODE=GPIO_MODE_IN;
  119.   GPIO_INITSTRUCTURE.GPIO_OTYPE=GPIO_OTYPE_PP;
  120.               GPIO_INITSTRUCTURE.GPIO_PUPD=GPIO_PUPD_UP;
  121.               GPIO_INITSTRUCTURE.GPIO_SPEED=GPIO_SPEED_50MHZ;

  122. GPIO_INIT(GPIOA,&GPIO_INITSTRUCTURE);            
  123.   GPIO_SETBITS(GPIOA,GPIO_PIN_4);

  124.               if(s0==0)
  125.                             S0L;
  126.               else
  127.                             S0H                            ;
  128.               if(s1==0)
  129.                             S1L;
  130.               else
  131.                             S1H                            ;
  132. }

  133. void WHITEBALANCE(void)
  134. {
  135.               EXTIX_INIT();                            //外部中斷初始化
  136.               S2L;S3L;//紅色通道
  137.               amount=0;                                          //開始計數
  138.               DELAY_MS(10);
  139.               RGENA = amount;   //求出紅色因子     
  140.               amount=0;
  141. //----------------------------------
  142.               S2H;S3H;//綠色通道
  143.               amount=0;
  144.               DELAY_MS(10);
  145.               GGENA = amount;              //求出綠色因子
  146.               amount=0;
  147. //----------------------------------
  148.               S2L;S3H;//藍色通道
  149.               amount=0;
  150.               DELAY_MS(10);
  151.               BGENA = amount;                //求出藍色因子
  152.               amount=0;
  153.               S2H;S3L;//關閉通道                 
  154. }

  155. uint16_t tcs3200_RED(void)
  156. {
  157.               S2L;S3L;
  158.               amount=0;
  159.               DELAY_MS(10);
  160.               RAMOUNT=(uint32_t) amount*255/RGENA;              //取R值
  161.               if(RAMOUNT>255) RAMOUNT = 255;
  162.               return RAMOUNT;
  163. //              amount=0;
  164. }

  165. uint16_t tcs3200_GREEN(void)
  166. {
  167.               S2H;S3H;
  168.               amount=0;
  169.               DELAY_MS(10);
  170.               GAMOUNT=(uint32_t) amount*255/GGENA;              //取G值
  171.               if(GAMOUNT>255) GAMOUNT = 255;
  172.               return GAMOUNT;
  173. //              amount=0;
  174. }

  175. uint16_t tcs3200_BLUE(void)
  176. {
  177.               S2L;S3H;
  178.               amount=0;
  179.               DELAY_MS(10);
  180.               BAMOUNT=(uint32_t) amount*255/BGENA;//去B值
  181.               if(BAMOUNT>255) BAMOUNT = 255;
  182.               return BAMOUNT;
  183. //              amount=0;
  184. }


  185. void EXTI4_IRQHandler(void)
  186. {
  187.               amount++;                           
  188.               EXTI->PR=1<<4;
  189. }

  190. void EXTIX_INIT(void)
  191. {
  192.               NVIC_INITTYPEDEF   NVIC_INITSTRUCTURE;
  193.               EXTI_INITTYPEDEF   EXTI_INITSTRUCTURE;

  194.               RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);


  195.               SYSCFG_EXTILINECONFIG(EXTI_PORTSOURCEGPIOA, EXTI_PinSource4);


  196.               EXTI_INITSTRUCTURE.EXTI_LINE = EXTI_LINE4;
  197.   EXTI_INITSTRUCTURE.EXTI_MODE = EXTI_MODE_INTERRUPT;
  198.   EXTI_INITSTRUCTURE.EXTI_TRIGGER = EXTI_TRIGGER_FALLING;
  199.   EXTI_INITSTRUCTURE.EXTI_LINECMD = ENABLE;
  200.   EXTI_INIT(&EXTI_INITSTRUCTURE);


  201. NVIC_INITSTRUCTURE.NVIC_IRQCHANNEL = EXTI4_IRQN;
  202.   NVIC_INITSTRUCTURE.NVIC_IRQCHANNELPREEMPTIONPRIORITY = 0X02;
  203.   NVIC_INITSTRUCTURE.NVIC_IRQCHANNELSUBPRIORITY = 0X02;
  204.   NVIC_INITSTRUCTURE.NVIC_IRQCHANNELCMD = ENABLE;
  205.   NVIC_INIT(&NVIC_INITSTRUCTURE);
  206. }
復制代碼


3. 主函數
  1. #include "stm32f4xx.h"
  2. #include "LCD/LCD.H"
  3. #include <STDIO.H>
  4. #include "tcs3200.h"
  5. #include "PICTURE.H"
  6. #include "ASCIILIB.H"
  7. #include "KEY.H"
  8. /*******************************************************************************
  9. * Function Name  : Delay
  10. * Description    : Delay Time
  11. * Input          : - NCOUNT: Delay Time
  12. * Output         : None
  13. * Return         : None
  14. * Attention                            : None
  15. *******************************************************************************/



  16. /*****************************************************************************
  17.    H指hue(色相)、S指saturation(飽和度)、L指lightness(亮度)、V指value(色調)、B指brightness(明度)。


  18.   色相(H)是色彩的基本屬性,就是平常所說的顏色名稱,如紅色、黃色等。
  19.   飽和度(S)是指色彩的純度,越高色彩越純,低則逐漸變灰,取0-100%的數值。
  20.   明度(V),亮度(B),取0-100%。              

  21.    0度: 紅色,RGB:(255, 0, 0), 255:R, 0:B,G+  
  22.    60度: 黃色,RGB:(255,255, 0),255:G, 0:B, R-  
  23.    120度: 綠色,RGB:( 0,255, 0),255:G, 0:R,B+  
  24.    180度: 青色,RGB:( 0,255,255),255:B, 0:R,G-  
  25.    240度: 藍色,RGB:( 0, 0,255),255:B, 0:G,R+  
  26.    300度: 紫色,RGB:(255, 0,255),255:R, 0:G,B-  
  27.    360度: 紅色,RGB:(255, 0, 0),255:R, 0:B,G+            


  28.   RGB轉化到HSV的算法                                                                                          
  29.     max=max(R,G,B)
  30.     min=min(R,G,B)
  31.      if R = max, H = (G-B)/(max-min)
  32.     if G = max, H = 2 + (B-R)/(max-min)
  33.     if B = max, H = 4 + (R-G)/(max-min)
  34.     H = H * 60
  35.     if H < 0, H = H + 360
  36.     V=max(R,G,B)
  37.     S=(max-min)/max
  38. ******************************************************************************/
  39. //============================
  40. void chromatogram(void);  //函數聲明
  41. //============================

  42. /*******************************************************************************
  43. * Function Name  : main
  44. * Description    : Main program
  45. * Input          : None
  46. * Output         : None
  47. * Return         : None
  48. * Attention                            : None
  49. *******************************************************************************/
  50. int main(void)
  51. {
  52.               uint8_t ss[20];

  53.               //01添加
  54.               float Max=0,Min=0;
  55.               float Rhsv=0,Ghsv=0,Bhsv=0;
  56.               float H=0,S=0,V=0;
  57.               uint16_t i;
  58.               uint8_t R=0x00,G=0x00,B=0x00;
  59.               uint16_t RGB=0x0000;

  60.               //-- 定義 基準變量
  61.   uint8_t R0=0xff,G0=0xff,B0=0xff,R1=0xff,G1=0xff,B1=0xff,R2=0xff,G2=0xff,B2=0xff,R3=0xff,G3=0xff,B3=0xff,R4=0xff,G4=0xff,B4=0xff;
  62.   int dR0=0,dG0=0,dB0=0;
  63.   uint16_t RGB1=0xff,RGB2=0xff,RGB3=0xff,RGB4=0xff;
  64.               uint8_t wc=50;                            //-- 誤差


  65.               //
  66.               NVIC_PRIORITYGROUPCONFIG(NVIC_PriorityGroup_2);//
  67.               LCD_INITIALIZTION();
  68.               JOY_KEY_GPIO_INIT();
  69.               //02添加
  70.               LCD_CLEAR(Yellow);
  71.                             LCD_DRAWPICTURE(0,17,74,91,gImage_picture);
  72.                             GUI_CHINESE(125,40,"蘇州大學",BLACK,YELLOW);
  73.                             GUI_CHINESE(105,60,"應用技術學院",BLACK,YELLOW);
  74.                             GUI_TEXT(125,80,"15",Black,Yellow);
  75.                             GUI_CHINESE(140,80,"電子轉",BLACK,YELLOW);            
  76.               GUI_CHINESE(80,105,"基于",BLACK,YELLOW);
  77.                             GUI_TEXT(110,105,"TCS3200",Black,Yellow);
  78.                             GUI_CHINESE(170,105,"的顏色識別",BLACK,YELLOW);
  79.                             GUI_CHINESE(80,125,"外援",BLACK,YELLOW);
  80.                             GUI_CHINESE(80+15+15+15,125,"丁高杰",BLACK,YELLOW);
  81.                             GUI_CHINESE(80+15+15+15+15+15+15+15,125,"范佳新",BLACK,YELLOW);
  82.                             GUI_CHINESE(80,150,"陳佳玲",BLACK,YELLOW);            
  83.                             GUI_CHINESE(150,150,"付亞茹",BLACK,YELLOW);
  84.                             GUI_CHINESE(160+15+15+15+15,150,"成澄",BLACK,YELLOW);
  85.                             GUI_TEXT(10,220,"2016.11",BLACK,YELLOW);
  86.     GUI_CHINESE(160,220,"按",BLACK,YELLOW);
  87.                             GUI_TEXT(180,220,"USER",Black,Yellow);
  88.                             GUI_CHINESE(220,220,"鍵進入主界面",BLACK,YELLOW);
  89. //-- 等待User鍵
  90.                             while(USER_KEY!=READ_JOY_KEY_STATE())
  91.                                           ;
  92. //-- 進入第二界面  
  93.               //for(i=0;i<20;i++) Delay_Ms(5000);  
  94.   LCD_CLEAR(WHITE);
  95.                             GUI_CHINESE(125,60,"請在此進行",BLACK,RED);
  96.                             GUI_CHINESE(125,80,"白平衡調整",BLACK,RED);
  97.               DELAY_MS(5000);            

  98. //-- 顯示 基準色塊
  99.               //LCD_DRAWSQUARE(10,170,200,190,RGB0);


  100.               //03添加
  101.               GUI_TEXT(10,210,"TCS3200",RED,WHITE);
  102.   DELAY_MS(5000);
  103.               FOR(I=0;I<20;I++) DELAY_MS(5000);  

  104.               tcs3200_init(1,1);//初始化(速率調整)
  105.               WHITEBALANCE();              //白平衡

  106.               GUI_TEXT(0,0,"Rgena:",Red,White);
  107.               GUI_TEXT(0,18,"Ggena:",Red,White);
  108.               GUI_TEXT(0,36,"Bgena:",Red,White);
  109.               //PUTCHAR(50,0,5,Red,White);  //顯示一個數字
  110.               SPRINTF((char *)ss,"%3d",Rgena);
  111.                             GUI_TEXT(50,0,ss,Black,White);
  112.               //PUTCHAR(50,18,6,Red,White);  //顯示一個數字
  113.               SPRINTF((char *)ss,"%3d",Ggena);
  114.                             GUI_TEXT(50,18,ss,Black,White);
  115.               //PUTCHAR(50,36,7,Red,White);  //顯示一個數字
  116.               SPRINTF((CHAR *)SS,"%3D",BGENA);
  117.                             GUI_TEXT(50,36,ss,Black,White);
  118.               //03添加

  119.               //04添加
  120.               GUI_TEXT(30,50,"R:",Black,White);
  121.               GUI_TEXT(30,70,"G:",Black,White);
  122.               GUI_TEXT(30,90,"B:",Black,White);
  123.               GUI_TEXT(30,110,"H:",Black,White);
  124.               GUI_TEXT(30,130,"V:",Black,White);
  125.               GUI_TEXT(30,150,"S:",Black,White);
  126.               chromatogram();//色譜調出

  127.               /* Infinite loop */
  128.               while (1)
  129.               {


  130. //=================================================================================
  131.                             R = tcs3200_RED();
  132.                             G = tcs3200_GREEN();              //取RGB值
  133.                             B = tcs3200_BLUE();            

  134.                             RGB = 0x0000;
  135.                             RGB |=(unsigned long) R*1000/8225<<11;                                            
  136.                             RGB |=(unsigned long) G*1000/4047<<5;                //轉換成屏幕的4W色顯示
  137.                             RGB |=(unsigned long) B*1000/8225;                           

  138. //================================================================================
  139.                             RHSV = (float) R/25/10;
  140.                             GHSV = (float) G/25/10;              //RGB轉換成0,1.
  141.                             BHSV = (float) B/25/10;

  142. //=================================================================================
  143.                                                                                                                                                                                                                                               //RGB轉HSV算法
  144.                             Max = (RHSV>GHSV)?RHSV:GHSV;                                                                                                                  //RGB轉HSV算法
  145.                             Max = (MAX>BHSV)?MAX:BHSV;                            //取RGB最大值                            //RGB轉HSV算法
  146.                             Min = (RHSV<GHSV)?RHSV:GHSV;                                                                                                                    //RGB轉HSV算法
  147.                             Min = (Min<BHSV)?MIN:BHSV;                            //去RGB最小值                                                        //RGB轉HSV算法
  148.                                                                                                                                                                                                                                                 //RGB轉HSV算法                                                      
  149.                             if(RHSV==Max) H = (GHSV-BHSV)/(Max-Min);                                                        //RGB轉HSV算法
  150.                             if(GHSV==Max) H = 2+(BHSV-RHSV)/(Max-Min);                                                                                      //RGB轉HSV算法
  151.                             if(BHSV==Max) H = 4+(RHSV-GHSV)/(Max-Min);                                          //RGB轉HSV算法
  152.                             H =(INT) (H*60);                                                                                                                                              //RGB轉HSV算法
  153.                             if(H<0) H = H+360;                                                                                                                                                                        //RGB轉HSV算法
  154.                                                                                                                                                                                                                                               //RGB轉HSV算法
  155.                             V = (RHSV>GHSV)?RHSV:GHSV;                                                                                                                              //RGB轉HSV算法
  156.                             V = (V>BHSV)?V:BHSV;                            //取V的數值                                                                                                  //RGB轉HSV算法
  157.                                                                                                                                                                                                                                                                                            //RGB轉HSV算法
  158.                             S = (Max-Min)/Max;                                          //取S的數值                                                                                                                                            //RGB轉HSV算法
  159.                                                                                                                                                                                                                                                                                                       //RGB轉HSV算法
  160.                             V = (INT) (V*100);                                                                                                                  //RGB轉HSV算法
  161.                             S = (INT) (S*100);                                                                                                                                                                                                                     //RGB轉HSV算法

  162. //==============================
  163. //-- 記錄 基準色塊
  164. //              while(USER_KEY == READ_JOY_KEY_STATE())
  165. //                            {
  166. //                            R0=R;G0=G;B0=B;
  167. //                            RGB0=RGB;
  168. //                            LCD_DRAWSQUARE( 233, 60, 317, 120, RGB0 );
  169. //                                          DELAY_MS(100);
  170. //              };
  171.                             /*
  172.               while (JOY_A_KEY == READ_JOY_KEY_STATE())
  173.               {
  174.                                           R1=R;G1=G;B1=B;
  175.                             RGB1=RGB;
  176.                             LCD_DRAWSQUARE( 233, 60, 317, 120, RGB1 );
  177.                                           DELAY_MS(100);
  178.               };              */
  179.               while (JOY_B_KEY == READ_JOY_KEY_STATE())
  180.               {
  181.                                           R2=R;G2=G;B2=B;
  182.                             RGB2=RGB;
  183.                             LCD_DRAWSQUARE( 233, 60, 317, 120, RGB2 );
  184.                                           DELAY_MS(100);
  185.               };
  186.               while (JOY_C_KEY == READ_JOY_KEY_STATE())
  187.               {
  188.                                           R3=R;G3=G;B3=B;
  189.                             RGB3=RGB;
  190.                             LCD_DRAWSQUARE( 233, 60, 317, 120, RGB3 );
  191.                                           DELAY_MS(100);
  192.               };
  193.               while (JOY_D_KEY == READ_JOY_KEY_STATE())
  194.               {
  195.                                           R4=R;G4=G;B4=B;
  196.                             RGB4=RGB;
  197.                             LCD_DRAWSQUARE( 233, 60, 317, 120, RGB4 );
  198.                                           DELAY_MS(100);
  199.               };
  200.               //if
  201. //==============================

  202. //======================================================================================================
  203.               //              PUTCHAR(50,50,R,BLACK,WHITE);  //顯示一個數字
  204.                             SPRINTF((CHAR *)SS,"%3D",R);
  205.                             GUI_TEXT(50,50,SS,BLACK,WHITE);
  206.               //              PUTCHAR(50,70,G,BLACK,WHITE);  //顯示一個數字
  207.                                           SPRINTF((CHAR *)SS,"%3D",G);
  208.                             GUI_TEXT(50,70,SS,BLACK,WHITE);
  209.                             //PUTCHAR(50,90,B,BLACK,WHITE);  //顯示一個數字
  210.                                           SPRINTF((CHAR *)SS,"%3D",B);
  211.                             GUI_TEXT(50,90,SS,BLACK,WHITE);
  212.               //              PUTCHAR(50,110,H,BLACK,WHITE);  //顯示一個數字
  213.                                           SPRINTF((CHAR *)SS,"%3.0F",H);
  214.                             GUI_TEXT(50,110,SS,BLACK,WHITE);
  215.               //              PUTCHAR(50,130,V,BLACK,WHITE);  //顯示一個數字
  216.                                           SPRINTF((CHAR *)SS,"%3.0F",V);
  217.                             GUI_TEXT(50,130,SS,BLACK,WHITE);
  218.               //              PUTCHAR(50,150,S,BLACK,WHITE);  //顯示一個數字
  219.                                           SPRINTF((CHAR *)SS,"%3.0F",S);
  220.                             GUI_TEXT(50,150,SS,BLACK,WHITE);



  221. //==============================
  222. //-- 判斷 白色的

  223.               //if(R==255& G == 255& B == 255) {
  224.               //              GUI_CHINESE(50,220,"白色的",BLACK,RED);

  225.               //h}
  226. //-- 判斷 基準色

  227.               dR0=R-R0;dG0=G-G0;dB0=B-B0;
  228.               //              PUTCHAR(50,50,R,BLACK,WHITE);  //顯示一個數字
  229.                             SPRINTF((CHAR *)SS,"%3D",DR0);
  230.                             GUI_TEXT(240,145,SS,BLACK,WHITE);
  231.               //              PUTCHAR(50,70,G,BLACK,WHITE);  //顯示一個數字
  232.                                           SPRINTF((CHAR *)SS,"%3D",DG0);
  233.                             GUI_TEXT(240,165,SS,BLACK,WHITE);
  234.                             //PUTCHAR(50,90,B,BLACK,WHITE);  //顯示一個數字
  235.                                           SPRINTF((CHAR *)SS,"%3D",DB0);
  236.                             GUI_TEXT(240,185,ss,Black,White);




  237. //              if ((R>(R0-wc)&&R<(R0+wc)) && (G>(G0-wc) && G<(G0+wc)) && (B>(B0-wc) && B<(B0+wc)) )
  238. //              {
  239. //                              GUI_CHINESE(240,125,"識別一",BLACK,GREEN);
  240. //              }            

  241. // if((R>(R1-wc)&&R<(R1+wc)) && (G>(G1-wc) && G<(G1+wc)) && (B>(B1-wc) && B<(B1+wc)) )
  242. // {
  243. //                                          GUI_CHINESE(240,125,"識別一 ",BLACK,GREEN);
  244. // }
  245. if((R>(R2-wc)&&R<(R2+wc)) && (G>(G2-wc) && G<(G2+wc)) && (B>(B2-wc) && B<(B2+wc)))
  246. {
  247.                                           GUI_CHINESE(240,125,"識別一",BLACK,GREEN);
  248. }

  249. else if((R>(R3-wc)&&R<(R3+wc)) && (G>(G3-wc) && G<(G3+wc)) && (B>(B3-wc) && B<(B3+wc)) )
  250. {
  251.                                           GUI_CHINESE(240,125,"識別二",BLACK,GREEN);
  252. }
  253. else if((R>(R4-wc)&&R<(R4+wc)) && (G>(G4-wc) && G<(G4+wc)) && (B>(B4-wc) && B<(B4+wc)) )
  254. {
  255.                                           GUI_CHINESE(240,125,"識別三",BLACK,GREEN);
  256. }
  257.               else
  258.               {
  259.   GUI_CHINESE(240,125,"未識別",BLACK,RED);

  260.    }

  261.               // GUI_CHINESE(240,125,"未識別",BLACK,RED);
  262. LCD_DRAWSQUARE( 233, 0, 317, 50, RGB );

  263.               }
  264. }

  265. void chromatogram(void)
  266. {

  267.               uint16_t I=0;
  268.               uint16_t color;
  269.               uint16_t RI=0,Gi=0,Bi=0;

  270. //======================================================================                           
  271.               RI = 240;Gi = 0x00;Bi = 0x00;                           
  272.               for(I=0;i<60;i++)
  273.               {
  274.                             color  = (unsigned long) GI*1000/4047<<5;
  275.                             color |= (unsigned long) RI*1000/8225<<11;              //G加上去                                            
  276.                             color |= (unsigned long) Bi*1000/8225;                                         
  277.                             LCD_DRAWLINE(100,i,230,i,color);            

  278.                             GI = Gi+4;            
  279.               }
  280.               RI = 240;Gi = 240;Bi = 0x00;
  281.               for(I=60;i<120;i++)
  282.               {
  283.                             color  = (unsigned long) RI*1000/8225<<11;                                                         
  284.                             color |= (unsigned long) GI*1000/4047<<5;              //R降下來
  285.                             color |= (unsigned long) Bi*1000/8225;            
  286.                             LCD_DRAWLINE(100,i,230,i,color);

  287.                             RI = Ri-4;
  288.               }
  289.               RI = 0x00;Gi = 240;Bi = 0x00;
  290.               for(I=120;i<180;i++)
  291.               {
  292.                             color  = (unsigned long) Bi*1000/8225;            
  293.                             color |= (unsigned long) RI*1000/8225<<11;              //B加上去                                            
  294.                             color |= (unsigned long) GI*1000/4047<<5;
  295.                             LCD_DRAWLINE(100,i,230,i,color);

  296.                             Bi = Bi+4;
  297.               }
  298.               RI = 0x00;Gi = 240;Bi = 240;
  299.               for(I=180;i<240;i++)
  300.               {
  301.                             color  = (unsigned long) GI*1000/4047<<5;
  302.                             color |= (unsigned long) Bi*1000/8225;                            //G降下來
  303.                             color |= (unsigned long) RI*1000/8225<<11;                                                         
  304.                             LCD_DRAWLINE(100,i,230,i,color);

  305.                             GI = Gi-4;
  306.               }
  307.               RI = 0x00;Gi = 0x00;Bi = 240;
  308.               for(I=240;i<300;i++)
  309.               {
  310.                             color = (unsigned long) RI*1000/8225<<11;                                                         
  311.                             color |= (unsigned long) GI*1000/4047<<5;                //R加上去
  312.                             color |= (unsigned long) Bi*1000/8225;            
  313.                             LCD_DRAWLINE(100,i,230,i,color);

  314.                             RI = Ri+4;
  315.               }
  316.               RI = 240;Gi = 0x00;Bi = 240;
  317.               for(i=300;i<360;i++)
  318.               {
  319.                             color  = (unsigned long) Bi*1000/8225;            
  320.                             color |= (unsigned long) RI*1000/8225<<11;                                                         
  321.                             color |= (unsigned long) GI*1000/4047<<5;                            //B降下來
  322.                             LCD_DRAWLINE(100,i,230,i,color);

  323.                             Bi = Bi-4;
  324.               }
  325. //===========================================================================

  326. }
復制代碼


4.3.     流程圖(見附件)5.1.     測試內容5.1.1.     測試結果
啟動后,用液晶屏上顯示歡迎界面,按USER鍵進入主界面,主界面的屏幕被分為三個部分,其中三個部分:左邊為RGB數值,也分上中下三個部分,最上面3個值是白平衡時的值,也就是白色的RGB值;中間3個值是實時測得的RGB值;最后3個是把RGB值轉換到HVS值;可以識別三種顏色,當傳感器放在一種顏色上,按用戶鍵,設置此顏色為標準顏色,然后對顏色依次掃描,當掃到標準顏色界面會顯示“識別一”,“識別二”,“識別三”;當掃到其它顏色界面會顯示“未識別”。
主界面
識別一:紅色
識別二:綠色
識別三:藍色
未識別:黑色

5.1.2.     測試評價
可以調節按鍵來分別識別三種顏色,還可以進行深度擴展。
6.     總結6.1.     任務完成情況
基本完成老師所布置的要求,能夠很好掃描顯示顏色并顯示顏色的RGB值,并且在彩色顯示屏上顯示出來。
6.2.     總結報告
進行了為期一周的實訓,我們對RAM開發板有了初步的了解,對TCS3200顏色傳感器進行了深入研究。進行調試時,一定要白平衡。在我們的共同努力下,不斷地進行調試,終于解決問題。在解決困難的過程中,讓我們深刻的體會到,在工作的時候,我們一定要細心、耐心才能最終解決問題以達到實訓的最終目的。
這次實訓讓我們得到了很多的鍛煉,也讓我們發現了自身的不足與缺陷。最后也很感謝丁老師對于我們實訓中幫助和指導。

完整的Word格式文檔51黑下載地址:
15電子轉-07組-報告.docx (6.92 MB, 下載次數: 63)


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

使用道具 舉報

沙發
ID:371593 發表于 2018-7-14 17:13 | 只看該作者
很nice
回復

使用道具 舉報

板凳
ID:421720 發表于 2018-11-6 14:46 | 只看該作者
支持很贊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表