實(shí)驗(yàn)內(nèi)容;
實(shí)驗(yàn)程序;
測(cè)試結(jié)果
蘇州大學(xué) 應(yīng)用技術(shù)學(xué)院 《電子技術(shù)綜合設(shè)計(jì)》實(shí)驗(yàn)報(bào)告 《電子技術(shù)綜合設(shè)計(jì)》實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)名稱:溫度顯示儀的設(shè)計(jì)與制作 蘇州大學(xué) 應(yīng)用技術(shù)學(xué)院 15電子轉(zhuǎn)/第七組
付亞茹/13,陳佳玲/22,成澄/34 2016年11月 目 錄 1. 團(tuán)隊(duì)風(fēng)采和作品展示 1.1. 團(tuán)隊(duì)風(fēng)采 1.2. 作品展示 2. 任務(wù) 2.1. 描述 2.1.1. 組成 2.1.2. 功能 2.1.3. 性能 2.2. 要求 2.2.1. 基本要求 2.2.2. 擴(kuò)展要求 3. 方案 3.1. 可選方案 3.1.1. 方案1 3.1.2. 方案2 3.2. 方案確定 3.2.1. 基本結(jié)構(gòu) 3.2.2. 主要思路 4. 設(shè)計(jì) 4.1. 硬件設(shè)計(jì) 4.1.1. 核心板 4.1.2. 用戶按鍵 4.1.3. 彩色液晶屏端口 4.2. 軟件設(shè)計(jì) 4.3. 流程圖 5. 測(cè)試 5.1. 測(cè)試內(nèi)容 5.1.1. 測(cè)試結(jié)果 5.1.2. 測(cè)試評(píng)價(jià) 6. 總結(jié) 6.1. 任務(wù)完成情況 6.2. 總結(jié)報(bào)告
1. 團(tuán)隊(duì)風(fēng)采和作品展示1.1. 團(tuán)隊(duì)風(fēng)采
1.2. 作品展示 | 功能描述:小組Logo,白平衡檢測(cè),色塊顯示,液晶顯示屏顯示等。 | | | | | | |
2. 任務(wù)2.1. 描述2.1.1. 組成硬件設(shè)計(jì)是以STM32 OPEN407Z-C測(cè)試版,顏色識(shí)別傳感器以及彩色液晶顯示屏組成。 2.1.2. 功能啟動(dòng)后,在液晶屏上顯示歡迎界面,按USER鍵進(jìn)入主界面,主界面的屏幕被分為三個(gè)部分,其中三個(gè)部分:左邊為RGB數(shù)值,也分上中下三個(gè)部分,最上面3個(gè)值是白平衡時(shí)的值,也就是白色的RGB值;中間3個(gè)值是實(shí)時(shí)測(cè)得的RGB值;最后3個(gè)HVS是把RGB值轉(zhuǎn)換到HVS值;當(dāng)傳感器放在一種顏色上,按B,C,D鍵,分別設(shè)置此顏色為標(biāo)準(zhǔn)顏色,然后對(duì)顏色依次掃描,當(dāng)掃到標(biāo)準(zhǔn)顏色界面會(huì)顯示“識(shí)別一”,“識(shí)別二”,“識(shí)別三”;當(dāng)掃到其它顏色界面會(huì)顯示“未識(shí)別”。 2.1.3. 性能白平衡檢測(cè)后可識(shí)別三種顏色 2.2. 要求2.2.1. 基本要求定了標(biāo)準(zhǔn)色后,可識(shí)別對(duì)應(yīng)的顏色,其他顏色未識(shí)別。 2.2.2. 擴(kuò)展要求加上小組logo,在按下指定的幾個(gè)按鍵,可識(shí)別多種相應(yīng)的顏色。 3. 方案
3.1. 可選方案使用KEIL uvision5 軟件對(duì)STM32 OPEN407Z-C測(cè)試版編程。
3.1.1. 方案1選擇使用STM32F103ZET6的開(kāi)發(fā)板。
3.1.2. 方案2選擇使用STM32 OPEN407Z-C的開(kāi)發(fā)板。
3.2. 方案確定3.2.1. 基本結(jié)構(gòu)使用方案2. 3.2.2. 主要思路將傳感器相應(yīng)的線連接到開(kāi)發(fā)板,修改編譯好的程序下載進(jìn)入,再通過(guò)按鍵來(lái)進(jìn)行顏色識(shí)別。 4. 設(shè)計(jì)4.1. 硬件設(shè)計(jì)4.1.1. 核心板
核心板 F407及芯片外圍電路
4.1.2. 用戶按鍵
4.1.3. 彩色液晶屏端口4.2. 軟件設(shè)計(jì)1. 按鍵USER控制 - /*********************************************************************************
- * File : KEY.C
- * Hardware Environment:
- * Build Environment : REALVIEW MDK-ARM Version: 4.20
- * Version : V1.0
- * By : DING.J.Q_TEC.SUDA 2013-10-26
- * Department of Electronics and Information
- * (c) Copyright 2013,Applied Technology College
- * http://tec.suda.edu.cn
- * All Rights Reserved
- **********************************************************************************/
- //== 包含的 h 文件
- #include "KEY.H"
- #include "stm32f4xx.h"
- //== 定義KEY端口
- //-- USER KEY --> PF10
- #define USER_KEY_PORT GPIOF
- #define USER_KEY_PIN GPIO_Pin_10
- #define USER_KEY_RCC_AHBPERIPH RCC_AHB1Periph_GPIOF
- //-- WAKEUP Key --> PA0
- #define WAKEUP_KEY_PORT GPIOA
- #define WAKEUP_KEY_PIN GPIO_Pin_0
- #define WAKEUP_KEY_RCC_AHBPERIPH RCC_AHB1Periph_GPIOA
- //-- JOY Key A-B-C-D-CTR--> PC13-PE6-PE4-PE2-PA5
- #define JOY_A_KEY_PORT GPIOC
- #define JOY_A_KEY_PIN GPIO_Pin_13
- #define JOY_A_KEY_RCC_AHBPERIPH RCC_AHB1Periph_GPIOC
- //--
- #define JOY_B_KEY_PORT GPIOE
- #define JOY_B_KEY_PIN GPIO_Pin_6
- #define JOY_B_KEY_RCC_AHBPERIPH RCC_AHB1Periph_GPIOE
- //--
- #define JOY_C_KEY_PORT GPIOE
- #define JOY_C_KEY_PIN GPIO_Pin_4
- #define JOY_C_KEY_RCC_AHBPERIPH RCC_AHB1Periph_GPIOE
- //--
- #define JOY_D_KEY_PORT GPIOE
- #define JOY_D_KEY_PIN GPIO_Pin_2
- #define JOY_D_KEY_RCC_AHBPERIPH RCC_AHB1Periph_GPIOE
- //--
- #define JOY_CTR_KEY_PORT GPIOA
- #define JOY_CTR_KEY_PIN GPIO_Pin_5
- #define JOY_CTR_KEY_RCC_AHBPERIPH RCC_AHB1Periph_GPIOA
- //== 定義函數(shù)的實(shí)現(xiàn)
- //-- 初始化 JOY_KEY GPIO
- void JOY_KEY_GPIO_INIT(void){
- // 定義 GPIO初始化結(jié)構(gòu)變量
- GPIO_INITTYPEDEF GPIO_INITSTRUCTURE;
- // 使能外設(shè)時(shí)鐘 GPIO PERIPH clock enable
- RCC_AHB1PeriphClockCmd(USER_KEY_RCC_AHBPERIPH | WAKEUP_KEY_RCC_AHBPERIPH | JOY_A_KEY_RCC_AHBPERIPH |
- JOY_B_KEY_RCC_AHBPERIPH | JOY_C_KEY_RCC_AHBPERIPH | JOY_D_KEY_RCC_AHBPERIPH |
- JOY_CTR_KEY_RCC_AHBPERIPH, ENABLE);
- // 配置輸入上拉模式 Configure Input PUSHPULL mode
- GPIO_INITSTRUCTURE.GPIO_PIN = USER_KEY_PIN;
- GPIO_INITSTRUCTURE.GPIO_MODE = GPIO_MODE_IN;
- GPIO_INITSTRUCTURE.GPIO_OTYPE = GPIO_OTYPE_PP;
- GPIO_INITSTRUCTURE.GPIO_SPEED = GPIO_Speed_100MHz;
- GPIO_INITSTRUCTURE.GPIO_PUPD = GPIO_PUPD_UP;
- GPIO_INIT(USER_KEY_PORT, &GPIO_INITSTRUCTURE);
- //--
- GPIO_INITSTRUCTURE.GPIO_PIN = WAKEUP_KEY_PIN;
- GPIO_INIT(WAKEUP_KEY_PORT, &GPIO_INITSTRUCTURE);
- //--
- GPIO_INITSTRUCTURE.GPIO_PIN = JOY_A_KEY_PIN;
- GPIO_INIT(JOY_A_KEY_PORT, &GPIO_INITSTRUCTURE);
- GPIO_INITSTRUCTURE.GPIO_PIN = JOY_B_KEY_PIN;
- GPIO_INIT(JOY_B_KEY_PORT, &GPIO_INITSTRUCTURE);
- GPIO_INITSTRUCTURE.GPIO_PIN = JOY_C_KEY_PIN;
- GPIO_INIT(JOY_C_KEY_PORT, &GPIO_INITSTRUCTURE);
- GPIO_INITSTRUCTURE.GPIO_PIN = JOY_D_KEY_PIN;
- GPIO_INIT(JOY_D_KEY_PORT, &GPIO_INITSTRUCTURE);
- GPIO_INITSTRUCTURE.GPIO_PIN = JOY_CTR_KEY_PIN;
- GPIO_INIT(JOY_CTR_KEY_PORT, &GPIO_INITSTRUCTURE);
- }
- //-- 讀取狀態(tài) JOY_KEY
- unsigned char READ_JOY_KEY_STATE(void) {
- if(!GPIO_READINPUTDATABIT(USER_KEY_PORT,USER_KEY_PIN))
- return USER_KEY;
- else if(!GPIO_READINPUTDATABIT(WAKEUP_KEY_PORT,WAKEUP_KEY_PIN))
- return WAKEUP_KEY;
- else if(!GPIO_READINPUTDATABIT(JOY_A_KEY_PORT,JOY_A_KEY_PIN))
- return JOY_A_KEY;
- else if(!GPIO_READINPUTDATABIT(JOY_B_KEY_PORT,JOY_B_KEY_PIN))
- return JOY_B_KEY;
- else if(!GPIO_READINPUTDATABIT(JOY_C_KEY_PORT,JOY_C_KEY_PIN))
- return JOY_C_KEY;
- else if(!GPIO_READINPUTDATABIT(JOY_D_KEY_PORT,JOY_D_KEY_PIN))
- return JOY_D_KEY;
- else if(!GPIO_READINPUTDATABIT(JOY_CTR_KEY_PORT,JOY_CTR_KEY_PIN))
- return JOY_CTR_KEY;
- return NULL_KEY;
- }
- //===============
- // End of KEY.C
- //===============
- 2. TCS3200傳感器驅(qū)動(dòng)函數(shù)
- #include "stm32f4xx.h" // Device header
- #include "tcs3200.h"
- //02#include "EXTI.H"
- //03#include "DELAY.H"
- uint8_t RGENA,GGENA,BGENA;
- uint16_t RAMOUNT,GAMOUNT,BAMOUNT;
- uint16_t amount;
- void tcs3200_init(uint8_t s0,uint8_t s1)
- {
- GPIO_INITTYPEDEF GPIO_INITSTRUCTURE;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
- //A0123
- GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
- GPIO_INITSTRUCTURE.GPIO_MODE=GPIO_MODE_OUT;
- GPIO_INITSTRUCTURE.GPIO_OTYPE=GPIO_OTYPE_PP;
- GPIO_INITSTRUCTURE.GPIO_PUPD=GPIO_PUPD_UP;
- GPIO_INITSTRUCTURE.GPIO_SPEED=GPIO_Speed_50MHz;
- GPIO_INIT(GPIOA,&GPIO_INITSTRUCTURE);
- GPIO_SETBITS(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
- //A4
- GPIO_INITSTRUCTURE.GPIO_PIN=GPIO_PIN_4;
- GPIO_INITSTRUCTURE.GPIO_MODE=GPIO_MODE_IN;
- GPIO_INITSTRUCTURE.GPIO_OTYPE=GPIO_OTYPE_PP;
- GPIO_INITSTRUCTURE.GPIO_PUPD=GPIO_PUPD_UP;
- GPIO_INITSTRUCTURE.GPIO_SPEED=GPIO_SPEED_50MHZ;
- GPIO_INIT(GPIOA,&GPIO_INITSTRUCTURE);
- GPIO_SETBITS(GPIOA,GPIO_PIN_4);
- if(s0==0)
- S0L;
- else
- S0H ;
- if(s1==0)
- S1L;
- else
- S1H ;
- }
- void WHITEBALANCE(void)
- {
- EXTIX_INIT(); //外部中斷初始化
- S2L;S3L;//紅色通道
- amount=0; //開(kāi)始計(jì)數(shù)
- DELAY_MS(10);
- RGENA = amount; //求出紅色因子
- amount=0;
- //----------------------------------
- S2H;S3H;//綠色通道
- amount=0;
- DELAY_MS(10);
- GGENA = amount; //求出綠色因子
- amount=0;
- //----------------------------------
- S2L;S3H;//藍(lán)色通道
- amount=0;
- DELAY_MS(10);
- BGENA = amount; //求出藍(lán)色因子
- amount=0;
- S2H;S3L;//關(guān)閉通道
- }
- uint16_t tcs3200_RED(void)
- {
- S2L;S3L;
- amount=0;
- DELAY_MS(10);
- RAMOUNT=(uint32_t) amount*255/RGENA; //取R值
- if(RAMOUNT>255) RAMOUNT = 255;
- return RAMOUNT;
- // amount=0;
- }
- uint16_t tcs3200_GREEN(void)
- {
- S2H;S3H;
- amount=0;
- DELAY_MS(10);
- GAMOUNT=(uint32_t) amount*255/GGENA; //取G值
- if(GAMOUNT>255) GAMOUNT = 255;
- return GAMOUNT;
- // amount=0;
- }
- uint16_t tcs3200_BLUE(void)
- {
- S2L;S3H;
- amount=0;
- DELAY_MS(10);
- BAMOUNT=(uint32_t) amount*255/BGENA;//去B值
- if(BAMOUNT>255) BAMOUNT = 255;
- return BAMOUNT;
- // amount=0;
- }
- void EXTI4_IRQHandler(void)
- {
- amount++;
- EXTI->PR=1<<4;
- }
- void EXTIX_INIT(void)
- {
- NVIC_INITTYPEDEF NVIC_INITSTRUCTURE;
- EXTI_INITTYPEDEF EXTI_INITSTRUCTURE;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
- SYSCFG_EXTILINECONFIG(EXTI_PORTSOURCEGPIOA, EXTI_PinSource4);
- EXTI_INITSTRUCTURE.EXTI_LINE = EXTI_LINE4;
- EXTI_INITSTRUCTURE.EXTI_MODE = EXTI_MODE_INTERRUPT;
- EXTI_INITSTRUCTURE.EXTI_TRIGGER = EXTI_TRIGGER_FALLING;
- EXTI_INITSTRUCTURE.EXTI_LINECMD = ENABLE;
- EXTI_INIT(&EXTI_INITSTRUCTURE);
- NVIC_INITSTRUCTURE.NVIC_IRQCHANNEL = EXTI4_IRQN;
- NVIC_INITSTRUCTURE.NVIC_IRQCHANNELPREEMPTIONPRIORITY = 0X02;
- NVIC_INITSTRUCTURE.NVIC_IRQCHANNELSUBPRIORITY = 0X02;
- NVIC_INITSTRUCTURE.NVIC_IRQCHANNELCMD = ENABLE;
- NVIC_INIT(&NVIC_INITSTRUCTURE);
- }
復(fù)制代碼
3. 主函數(shù) - #include "stm32f4xx.h"
- #include "LCD/LCD.H"
- #include <STDIO.H>
- #include "tcs3200.h"
- #include "PICTURE.H"
- #include "ASCIILIB.H"
- #include "KEY.H"
- /*******************************************************************************
- * Function Name : Delay
- * Description : Delay Time
- * Input : - NCOUNT: Delay Time
- * Output : None
- * Return : None
- * Attention : None
- *******************************************************************************/
- /*****************************************************************************
- H指hue(色相)、S指saturation(飽和度)、L指lightness(亮度)、V指value(色調(diào))、B指brightness(明度)。
- 色相(H)是色彩的基本屬性,就是平常所說(shuō)的顏色名稱,如紅色、黃色等。
- 飽和度(S)是指色彩的純度,越高色彩越純,低則逐漸變灰,取0-100%的數(shù)值。
- 明度(V),亮度(B),取0-100%。
- 0度: 紅色,RGB:(255, 0, 0), 255:R, 0:B,G+
- 60度: 黃色,RGB:(255,255, 0),255:G, 0:B, R-
- 120度: 綠色,RGB:( 0,255, 0),255:G, 0:R,B+
- 180度: 青色,RGB:( 0,255,255),255:B, 0:R,G-
- 240度: 藍(lán)色,RGB:( 0, 0,255),255:B, 0:G,R+
- 300度: 紫色,RGB:(255, 0,255),255:R, 0:G,B-
- 360度: 紅色,RGB:(255, 0, 0),255:R, 0:B,G+
- RGB轉(zhuǎn)化到HSV的算法
- max=max(R,G,B)
- min=min(R,G,B)
- if R = max, H = (G-B)/(max-min)
- if G = max, H = 2 + (B-R)/(max-min)
- if B = max, H = 4 + (R-G)/(max-min)
- H = H * 60
- if H < 0, H = H + 360
- V=max(R,G,B)
- S=(max-min)/max
- ******************************************************************************/
- //============================
- void chromatogram(void); //函數(shù)聲明
- //============================
- /*******************************************************************************
- * Function Name : main
- * Description : Main program
- * Input : None
- * Output : None
- * Return : None
- * Attention : None
- *******************************************************************************/
- int main(void)
- {
- uint8_t ss[20];
- //01添加
- float Max=0,Min=0;
- float Rhsv=0,Ghsv=0,Bhsv=0;
- float H=0,S=0,V=0;
- uint16_t i;
- uint8_t R=0x00,G=0x00,B=0x00;
- uint16_t RGB=0x0000;
- //-- 定義 基準(zhǔn)變量
- 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;
- int dR0=0,dG0=0,dB0=0;
- uint16_t RGB1=0xff,RGB2=0xff,RGB3=0xff,RGB4=0xff;
- uint8_t wc=50; //-- 誤差
- //
- NVIC_PRIORITYGROUPCONFIG(NVIC_PriorityGroup_2);//
- LCD_INITIALIZTION();
- JOY_KEY_GPIO_INIT();
- //02添加
- LCD_CLEAR(Yellow);
- LCD_DRAWPICTURE(0,17,74,91,gImage_picture);
- GUI_CHINESE(125,40,"蘇州大學(xué)",BLACK,YELLOW);
- GUI_CHINESE(105,60,"應(yīng)用技術(shù)學(xué)院",BLACK,YELLOW);
- GUI_TEXT(125,80,"15",Black,Yellow);
- GUI_CHINESE(140,80,"電子轉(zhuǎn)",BLACK,YELLOW);
- GUI_CHINESE(80,105,"基于",BLACK,YELLOW);
- GUI_TEXT(110,105,"TCS3200",Black,Yellow);
- GUI_CHINESE(170,105,"的顏色識(shí)別",BLACK,YELLOW);
- GUI_CHINESE(80,125,"外援",BLACK,YELLOW);
- GUI_CHINESE(80+15+15+15,125,"丁高杰",BLACK,YELLOW);
- GUI_CHINESE(80+15+15+15+15+15+15+15,125,"范佳新",BLACK,YELLOW);
- GUI_CHINESE(80,150,"陳佳玲",BLACK,YELLOW);
- GUI_CHINESE(150,150,"付亞茹",BLACK,YELLOW);
- GUI_CHINESE(160+15+15+15+15,150,"成澄",BLACK,YELLOW);
- GUI_TEXT(10,220,"2016.11",BLACK,YELLOW);
- GUI_CHINESE(160,220,"按",BLACK,YELLOW);
- GUI_TEXT(180,220,"USER",Black,Yellow);
- GUI_CHINESE(220,220,"鍵進(jìn)入主界面",BLACK,YELLOW);
- //-- 等待User鍵
- while(USER_KEY!=READ_JOY_KEY_STATE())
- ;
- //-- 進(jìn)入第二界面
- //for(i=0;i<20;i++) Delay_Ms(5000);
- LCD_CLEAR(WHITE);
- GUI_CHINESE(125,60,"請(qǐng)?jiān)诖诉M(jìn)行",BLACK,RED);
- GUI_CHINESE(125,80,"白平衡調(diào)整",BLACK,RED);
- DELAY_MS(5000);
- //-- 顯示 基準(zhǔn)色塊
- //LCD_DRAWSQUARE(10,170,200,190,RGB0);
- //03添加
- GUI_TEXT(10,210,"TCS3200",RED,WHITE);
- DELAY_MS(5000);
- FOR(I=0;I<20;I++) DELAY_MS(5000);
- tcs3200_init(1,1);//初始化(速率調(diào)整)
- WHITEBALANCE(); //白平衡
- GUI_TEXT(0,0,"Rgena:",Red,White);
- GUI_TEXT(0,18,"Ggena:",Red,White);
- GUI_TEXT(0,36,"Bgena:",Red,White);
- //PUTCHAR(50,0,5,Red,White); //顯示一個(gè)數(shù)字
- SPRINTF((char *)ss,"%3d",Rgena);
- GUI_TEXT(50,0,ss,Black,White);
- //PUTCHAR(50,18,6,Red,White); //顯示一個(gè)數(shù)字
- SPRINTF((char *)ss,"%3d",Ggena);
- GUI_TEXT(50,18,ss,Black,White);
- //PUTCHAR(50,36,7,Red,White); //顯示一個(gè)數(shù)字
- SPRINTF((CHAR *)SS,"%3D",BGENA);
- GUI_TEXT(50,36,ss,Black,White);
- //03添加
- //04添加
- GUI_TEXT(30,50,"R:",Black,White);
- GUI_TEXT(30,70,"G:",Black,White);
- GUI_TEXT(30,90,"B:",Black,White);
- GUI_TEXT(30,110,"H:",Black,White);
- GUI_TEXT(30,130,"V:",Black,White);
- GUI_TEXT(30,150,"S:",Black,White);
- chromatogram();//色譜調(diào)出
- /* Infinite loop */
- while (1)
- {
- //=================================================================================
- R = tcs3200_RED();
- G = tcs3200_GREEN(); //取RGB值
- B = tcs3200_BLUE();
- RGB = 0x0000;
- RGB |=(unsigned long) R*1000/8225<<11;
- RGB |=(unsigned long) G*1000/4047<<5; //轉(zhuǎn)換成屏幕的4W色顯示
- RGB |=(unsigned long) B*1000/8225;
- //================================================================================
- RHSV = (float) R/25/10;
- GHSV = (float) G/25/10; //RGB轉(zhuǎn)換成0,1.
- BHSV = (float) B/25/10;
- //=================================================================================
- //RGB轉(zhuǎn)HSV算法
- Max = (RHSV>GHSV)?RHSV:GHSV; //RGB轉(zhuǎn)HSV算法
- Max = (MAX>BHSV)?MAX:BHSV; //取RGB最大值 //RGB轉(zhuǎn)HSV算法
- Min = (RHSV<GHSV)?RHSV:GHSV; //RGB轉(zhuǎn)HSV算法
- Min = (Min<BHSV)?MIN:BHSV; //去RGB最小值 //RGB轉(zhuǎn)HSV算法
- //RGB轉(zhuǎn)HSV算法
- if(RHSV==Max) H = (GHSV-BHSV)/(Max-Min); //RGB轉(zhuǎn)HSV算法
- if(GHSV==Max) H = 2+(BHSV-RHSV)/(Max-Min); //RGB轉(zhuǎn)HSV算法
- if(BHSV==Max) H = 4+(RHSV-GHSV)/(Max-Min); //RGB轉(zhuǎn)HSV算法
- H =(INT) (H*60); //RGB轉(zhuǎn)HSV算法
- if(H<0) H = H+360; //RGB轉(zhuǎn)HSV算法
- //RGB轉(zhuǎn)HSV算法
- V = (RHSV>GHSV)?RHSV:GHSV; //RGB轉(zhuǎn)HSV算法
- V = (V>BHSV)?V:BHSV; //取V的數(shù)值 //RGB轉(zhuǎn)HSV算法
- //RGB轉(zhuǎn)HSV算法
- S = (Max-Min)/Max; //取S的數(shù)值 //RGB轉(zhuǎn)HSV算法
- //RGB轉(zhuǎn)HSV算法
- V = (INT) (V*100); //RGB轉(zhuǎn)HSV算法
- S = (INT) (S*100); //RGB轉(zhuǎn)HSV算法
- //==============================
- //-- 記錄 基準(zhǔn)色塊
- // while(USER_KEY == READ_JOY_KEY_STATE())
- // {
- // R0=R;G0=G;B0=B;
- // RGB0=RGB;
- // LCD_DRAWSQUARE( 233, 60, 317, 120, RGB0 );
- // DELAY_MS(100);
- // };
- /*
- while (JOY_A_KEY == READ_JOY_KEY_STATE())
- {
- R1=R;G1=G;B1=B;
- RGB1=RGB;
- LCD_DRAWSQUARE( 233, 60, 317, 120, RGB1 );
- DELAY_MS(100);
- }; */
- while (JOY_B_KEY == READ_JOY_KEY_STATE())
- {
- R2=R;G2=G;B2=B;
- RGB2=RGB;
- LCD_DRAWSQUARE( 233, 60, 317, 120, RGB2 );
- DELAY_MS(100);
- };
- while (JOY_C_KEY == READ_JOY_KEY_STATE())
- {
- R3=R;G3=G;B3=B;
- RGB3=RGB;
- LCD_DRAWSQUARE( 233, 60, 317, 120, RGB3 );
- DELAY_MS(100);
- };
- while (JOY_D_KEY == READ_JOY_KEY_STATE())
- {
- R4=R;G4=G;B4=B;
- RGB4=RGB;
- LCD_DRAWSQUARE( 233, 60, 317, 120, RGB4 );
- DELAY_MS(100);
- };
- //if
- //==============================
- //======================================================================================================
- // PUTCHAR(50,50,R,BLACK,WHITE); //顯示一個(gè)數(shù)字
- SPRINTF((CHAR *)SS,"%3D",R);
- GUI_TEXT(50,50,SS,BLACK,WHITE);
- // PUTCHAR(50,70,G,BLACK,WHITE); //顯示一個(gè)數(shù)字
- SPRINTF((CHAR *)SS,"%3D",G);
- GUI_TEXT(50,70,SS,BLACK,WHITE);
- //PUTCHAR(50,90,B,BLACK,WHITE); //顯示一個(gè)數(shù)字
- SPRINTF((CHAR *)SS,"%3D",B);
- GUI_TEXT(50,90,SS,BLACK,WHITE);
- // PUTCHAR(50,110,H,BLACK,WHITE); //顯示一個(gè)數(shù)字
- SPRINTF((CHAR *)SS,"%3.0F",H);
- GUI_TEXT(50,110,SS,BLACK,WHITE);
- // PUTCHAR(50,130,V,BLACK,WHITE); //顯示一個(gè)數(shù)字
- SPRINTF((CHAR *)SS,"%3.0F",V);
- GUI_TEXT(50,130,SS,BLACK,WHITE);
- // PUTCHAR(50,150,S,BLACK,WHITE); //顯示一個(gè)數(shù)字
- SPRINTF((CHAR *)SS,"%3.0F",S);
- GUI_TEXT(50,150,SS,BLACK,WHITE);
- //==============================
- //-- 判斷 白色的
- //if(R==255& G == 255& B == 255) {
- // GUI_CHINESE(50,220,"白色的",BLACK,RED);
- //h}
- //-- 判斷 基準(zhǔn)色
- dR0=R-R0;dG0=G-G0;dB0=B-B0;
- // PUTCHAR(50,50,R,BLACK,WHITE); //顯示一個(gè)數(shù)字
- SPRINTF((CHAR *)SS,"%3D",DR0);
- GUI_TEXT(240,145,SS,BLACK,WHITE);
- // PUTCHAR(50,70,G,BLACK,WHITE); //顯示一個(gè)數(shù)字
- SPRINTF((CHAR *)SS,"%3D",DG0);
- GUI_TEXT(240,165,SS,BLACK,WHITE);
- //PUTCHAR(50,90,B,BLACK,WHITE); //顯示一個(gè)數(shù)字
- SPRINTF((CHAR *)SS,"%3D",DB0);
- GUI_TEXT(240,185,ss,Black,White);
- // if ((R>(R0-wc)&&R<(R0+wc)) && (G>(G0-wc) && G<(G0+wc)) && (B>(B0-wc) && B<(B0+wc)) )
- // {
- // GUI_CHINESE(240,125,"識(shí)別一",BLACK,GREEN);
- // }
- // if((R>(R1-wc)&&R<(R1+wc)) && (G>(G1-wc) && G<(G1+wc)) && (B>(B1-wc) && B<(B1+wc)) )
- // {
- // GUI_CHINESE(240,125,"識(shí)別一 ",BLACK,GREEN);
- // }
- if((R>(R2-wc)&&R<(R2+wc)) && (G>(G2-wc) && G<(G2+wc)) && (B>(B2-wc) && B<(B2+wc)))
- {
- GUI_CHINESE(240,125,"識(shí)別一",BLACK,GREEN);
- }
- else if((R>(R3-wc)&&R<(R3+wc)) && (G>(G3-wc) && G<(G3+wc)) && (B>(B3-wc) && B<(B3+wc)) )
- {
- GUI_CHINESE(240,125,"識(shí)別二",BLACK,GREEN);
- }
- else if((R>(R4-wc)&&R<(R4+wc)) && (G>(G4-wc) && G<(G4+wc)) && (B>(B4-wc) && B<(B4+wc)) )
- {
- GUI_CHINESE(240,125,"識(shí)別三",BLACK,GREEN);
- }
- else
- {
- GUI_CHINESE(240,125,"未識(shí)別",BLACK,RED);
- }
- // GUI_CHINESE(240,125,"未識(shí)別",BLACK,RED);
- LCD_DRAWSQUARE( 233, 0, 317, 50, RGB );
- }
- }
- void chromatogram(void)
- {
- uint16_t I=0;
- uint16_t color;
- uint16_t RI=0,Gi=0,Bi=0;
- //======================================================================
- RI = 240;Gi = 0x00;Bi = 0x00;
- for(I=0;i<60;i++)
- {
- color = (unsigned long) GI*1000/4047<<5;
- color |= (unsigned long) RI*1000/8225<<11; //G加上去
- color |= (unsigned long) Bi*1000/8225;
- LCD_DRAWLINE(100,i,230,i,color);
- GI = Gi+4;
- }
- RI = 240;Gi = 240;Bi = 0x00;
- for(I=60;i<120;i++)
- {
- color = (unsigned long) RI*1000/8225<<11;
- color |= (unsigned long) GI*1000/4047<<5; //R降下來(lái)
- color |= (unsigned long) Bi*1000/8225;
- LCD_DRAWLINE(100,i,230,i,color);
- RI = Ri-4;
- }
- RI = 0x00;Gi = 240;Bi = 0x00;
- for(I=120;i<180;i++)
- {
- color = (unsigned long) Bi*1000/8225;
- color |= (unsigned long) RI*1000/8225<<11; //B加上去
- color |= (unsigned long) GI*1000/4047<<5;
- LCD_DRAWLINE(100,i,230,i,color);
- Bi = Bi+4;
- }
- RI = 0x00;Gi = 240;Bi = 240;
- for(I=180;i<240;i++)
- {
- color = (unsigned long) GI*1000/4047<<5;
- color |= (unsigned long) Bi*1000/8225; //G降下來(lái)
- color |= (unsigned long) RI*1000/8225<<11;
- LCD_DRAWLINE(100,i,230,i,color);
- GI = Gi-4;
- }
- RI = 0x00;Gi = 0x00;Bi = 240;
- for(I=240;i<300;i++)
- {
- color = (unsigned long) RI*1000/8225<<11;
- color |= (unsigned long) GI*1000/4047<<5; //R加上去
- color |= (unsigned long) Bi*1000/8225;
- LCD_DRAWLINE(100,i,230,i,color);
- RI = Ri+4;
- }
- RI = 240;Gi = 0x00;Bi = 240;
- for(i=300;i<360;i++)
- {
- color = (unsigned long) Bi*1000/8225;
- color |= (unsigned long) RI*1000/8225<<11;
- color |= (unsigned long) GI*1000/4047<<5; //B降下來(lái)
- LCD_DRAWLINE(100,i,230,i,color);
- Bi = Bi-4;
- }
- //===========================================================================
- }
復(fù)制代碼
4.3. 流程圖(見(jiàn)附件)5.1. 測(cè)試內(nèi)容5.1.1. 測(cè)試結(jié)果啟動(dòng)后,用液晶屏上顯示歡迎界面,按USER鍵進(jìn)入主界面,主界面的屏幕被分為三個(gè)部分,其中三個(gè)部分:左邊為RGB數(shù)值,也分上中下三個(gè)部分,最上面3個(gè)值是白平衡時(shí)的值,也就是白色的RGB值;中間3個(gè)值是實(shí)時(shí)測(cè)得的RGB值;最后3個(gè)是把RGB值轉(zhuǎn)換到HVS值;可以識(shí)別三種顏色,當(dāng)傳感器放在一種顏色上,按用戶鍵,設(shè)置此顏色為標(biāo)準(zhǔn)顏色,然后對(duì)顏色依次掃描,當(dāng)掃到標(biāo)準(zhǔn)顏色界面會(huì)顯示“識(shí)別一”,“識(shí)別二”,“識(shí)別三”;當(dāng)掃到其它顏色界面會(huì)顯示“未識(shí)別”。 主界面 識(shí)別一:紅色 識(shí)別二:綠色 識(shí)別三:藍(lán)色 未識(shí)別:黑色
5.1.2. 測(cè)試評(píng)價(jià)可以調(diào)節(jié)按鍵來(lái)分別識(shí)別三種顏色,還可以進(jìn)行深度擴(kuò)展。 6. 總結(jié)6.1. 任務(wù)完成情況基本完成老師所布置的要求,能夠很好掃描顯示顏色并顯示顏色的RGB值,并且在彩色顯示屏上顯示出來(lái)。 6.2. 總結(jié)報(bào)告進(jìn)行了為期一周的實(shí)訓(xùn),我們對(duì)RAM開(kāi)發(fā)板有了初步的了解,對(duì)TCS3200顏色傳感器進(jìn)行了深入研究。進(jìn)行調(diào)試時(shí),一定要白平衡。在我們的共同努力下,不斷地進(jìn)行調(diào)試,終于解決問(wèn)題。在解決困難的過(guò)程中,讓我們深刻的體會(huì)到,在工作的時(shí)候,我們一定要細(xì)心、耐心才能最終解決問(wèn)題以達(dá)到實(shí)訓(xùn)的最終目的。 這次實(shí)訓(xùn)讓我們得到了很多的鍛煉,也讓我們發(fā)現(xiàn)了自身的不足與缺陷。最后也很感謝丁老師對(duì)于我們實(shí)訓(xùn)中幫助和指導(dǎo)。
完整的Word格式文檔51黑下載地址:
15電子轉(zhuǎn)-07組-報(bào)告.docx
(6.92 MB, 下載次數(shù): 63)
2017-12-19 10:48 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|