实验内容;
实验程序;
测试结果
苏州大学 应用技术学院 《电子技术综合设计》实验报告 《电子技术综合设计》实验报告
实验名称:温度显示仪的设计与制作 苏州大学 应用技术学院 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)
|