實驗內容;
實驗程序;
測試結果
蘇州大學 應用技術學院 《電子技術綜合設計》實驗報告 《電子技術綜合設計》實驗報告
實驗名稱:溫度顯示儀的設計與制作 蘇州大學 應用技術學院 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. 團隊風采
1.2. 作品展示 | 功能描述:小組Logo,白平衡檢測,色塊顯示,液晶顯示屏顯示等。 | | | | | | |
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控制 - /*********************************************************************************
- * 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
- //== 定義函數的實現
- //-- 初始化 JOY_KEY GPIO
- void JOY_KEY_GPIO_INIT(void){
- // 定義 GPIO初始化結構變量
- GPIO_INITTYPEDEF GPIO_INITSTRUCTURE;
- // 使能外設時鐘 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);
- }
- //-- 讀取狀態 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傳感器驅動函數
- #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; //開始計數
- DELAY_MS(10);
- RGENA = amount; //求出紅色因子
- amount=0;
- //----------------------------------
- S2H;S3H;//綠色通道
- amount=0;
- DELAY_MS(10);
- GGENA = amount; //求出綠色因子
- amount=0;
- //----------------------------------
- S2L;S3H;//藍色通道
- amount=0;
- DELAY_MS(10);
- BGENA = amount; //求出藍色因子
- amount=0;
- S2H;S3L;//關閉通道
- }
- 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);
- }
復制代碼
3. 主函數 - #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(色調)、B指brightness(明度)。
- 色相(H)是色彩的基本屬性,就是平常所說的顏色名稱,如紅色、黃色等。
- 飽和度(S)是指色彩的純度,越高色彩越純,低則逐漸變灰,取0-100%的數值。
- 明度(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度: 藍色,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轉化到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); //函數聲明
- //============================
- /*******************************************************************************
- * 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;
- //-- 定義 基準變量
- 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,"蘇州大學",BLACK,YELLOW);
- GUI_CHINESE(105,60,"應用技術學院",BLACK,YELLOW);
- GUI_TEXT(125,80,"15",Black,Yellow);
- GUI_CHINESE(140,80,"電子轉",BLACK,YELLOW);
- GUI_CHINESE(80,105,"基于",BLACK,YELLOW);
- GUI_TEXT(110,105,"TCS3200",Black,Yellow);
- GUI_CHINESE(170,105,"的顏色識別",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,"鍵進入主界面",BLACK,YELLOW);
- //-- 等待User鍵
- while(USER_KEY!=READ_JOY_KEY_STATE())
- ;
- //-- 進入第二界面
- //for(i=0;i<20;i++) Delay_Ms(5000);
- LCD_CLEAR(WHITE);
- GUI_CHINESE(125,60,"請在此進行",BLACK,RED);
- GUI_CHINESE(125,80,"白平衡調整",BLACK,RED);
- DELAY_MS(5000);
- //-- 顯示 基準色塊
- //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);//初始化(速率調整)
- 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); //顯示一個數字
- SPRINTF((char *)ss,"%3d",Rgena);
- GUI_TEXT(50,0,ss,Black,White);
- //PUTCHAR(50,18,6,Red,White); //顯示一個數字
- SPRINTF((char *)ss,"%3d",Ggena);
- GUI_TEXT(50,18,ss,Black,White);
- //PUTCHAR(50,36,7,Red,White); //顯示一個數字
- 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();//色譜調出
- /* 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; //轉換成屏幕的4W色顯示
- RGB |=(unsigned long) B*1000/8225;
- //================================================================================
- RHSV = (float) R/25/10;
- GHSV = (float) G/25/10; //RGB轉換成0,1.
- BHSV = (float) B/25/10;
- //=================================================================================
- //RGB轉HSV算法
- Max = (RHSV>GHSV)?RHSV:GHSV; //RGB轉HSV算法
- Max = (MAX>BHSV)?MAX:BHSV; //取RGB最大值 //RGB轉HSV算法
- Min = (RHSV<GHSV)?RHSV:GHSV; //RGB轉HSV算法
- Min = (Min<BHSV)?MIN:BHSV; //去RGB最小值 //RGB轉HSV算法
- //RGB轉HSV算法
- if(RHSV==Max) H = (GHSV-BHSV)/(Max-Min); //RGB轉HSV算法
- if(GHSV==Max) H = 2+(BHSV-RHSV)/(Max-Min); //RGB轉HSV算法
- if(BHSV==Max) H = 4+(RHSV-GHSV)/(Max-Min); //RGB轉HSV算法
- H =(INT) (H*60); //RGB轉HSV算法
- if(H<0) H = H+360; //RGB轉HSV算法
- //RGB轉HSV算法
- V = (RHSV>GHSV)?RHSV:GHSV; //RGB轉HSV算法
- V = (V>BHSV)?V:BHSV; //取V的數值 //RGB轉HSV算法
- //RGB轉HSV算法
- S = (Max-Min)/Max; //取S的數值 //RGB轉HSV算法
- //RGB轉HSV算法
- V = (INT) (V*100); //RGB轉HSV算法
- S = (INT) (S*100); //RGB轉HSV算法
- //==============================
- //-- 記錄 基準色塊
- // 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); //顯示一個數字
- SPRINTF((CHAR *)SS,"%3D",R);
- GUI_TEXT(50,50,SS,BLACK,WHITE);
- // PUTCHAR(50,70,G,BLACK,WHITE); //顯示一個數字
- SPRINTF((CHAR *)SS,"%3D",G);
- GUI_TEXT(50,70,SS,BLACK,WHITE);
- //PUTCHAR(50,90,B,BLACK,WHITE); //顯示一個數字
- SPRINTF((CHAR *)SS,"%3D",B);
- GUI_TEXT(50,90,SS,BLACK,WHITE);
- // PUTCHAR(50,110,H,BLACK,WHITE); //顯示一個數字
- SPRINTF((CHAR *)SS,"%3.0F",H);
- GUI_TEXT(50,110,SS,BLACK,WHITE);
- // PUTCHAR(50,130,V,BLACK,WHITE); //顯示一個數字
- SPRINTF((CHAR *)SS,"%3.0F",V);
- GUI_TEXT(50,130,SS,BLACK,WHITE);
- // PUTCHAR(50,150,S,BLACK,WHITE); //顯示一個數字
- 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}
- //-- 判斷 基準色
- dR0=R-R0;dG0=G-G0;dB0=B-B0;
- // PUTCHAR(50,50,R,BLACK,WHITE); //顯示一個數字
- SPRINTF((CHAR *)SS,"%3D",DR0);
- GUI_TEXT(240,145,SS,BLACK,WHITE);
- // PUTCHAR(50,70,G,BLACK,WHITE); //顯示一個數字
- SPRINTF((CHAR *)SS,"%3D",DG0);
- GUI_TEXT(240,165,SS,BLACK,WHITE);
- //PUTCHAR(50,90,B,BLACK,WHITE); //顯示一個數字
- 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,"識別一",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,"識別一 ",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,"識別一",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,"識別二",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,"識別三",BLACK,GREEN);
- }
- else
- {
- GUI_CHINESE(240,125,"未識別",BLACK,RED);
- }
- // GUI_CHINESE(240,125,"未識別",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降下來
- 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降下來
- 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降下來
- LCD_DRAWLINE(100,i,230,i,color);
- Bi = Bi-4;
- }
- //===========================================================================
- }
復制代碼
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)
2017-12-19 10:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|