微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 颜色传感器输出的RBG都特别大都大于255是为啥

颜色传感器输出的RBG都特别大都大于255是为啥

时间:10-02 整理:3721RD 点击:
#include"uart2.h"
#define LED P1_3
#define uchar unsigned char
#define uint  unsigned int   
sbit  s0   =   P2^1;     
sbit  s1   =   P2^2;     
sbit  s2   =   P2^3;   
sbit  s3   =   P2^4;   
   
void    baipingheng();//白平衡子程序
void    celiang();//实际颜色程序
uint    ryz,gyz,byz;//分别定义红色因子 绿色因子 蓝色因子
uint    rb,gb,bb;//RGB值  
void delay_nms(unsigned int n);
/***************************led测试 闪烁3次****************************/
void test_led()
{
uchar i;
for(i=0;i<3;i++)
{
  LED=0;
  delay_nms(200);
  LED=1;
  delay_nms(200);
}
LED=0;
}
/***************************计数器初始化****************************/
void t0_init()
{  
     TMOD=0x51;//设置定时器0为工作方式一 定时器1为工作方式一,计数模式
     TH0=(65536-10000)%256;
     TL0=(65536-10000)/256;//如果晶振是11.0592MHZ的话,误差是0.00017%   
}
void delay_nus(unsigned int i)  //延时:i>=12 ,i的最小延时单12 us
{
  i=i/10;
  while(--i);
}   
void delay_nms(unsigned int n)  //延时n ms
{
  n=n+1;
  while(--n)  
  delay_nus(900);         //延时 1ms,同时进行补偿
}   
   //白平衡子程序
void   celiang()
{
     //*********求R值************************************
     TH0=(65536-10000)/256;
    TL0=(65536-10000)%256;
     TH1=0;
     TL1=0;
     s2=0;
     s3=0;//选择红色滤光器     
     TR0=1;//10毫秒开始计时
     TR1=1;//开始计数
     while(TF0==0);//等待定时器溢出
     TF0=0;//清楚定时器0溢出标志
     TR0=0;//关闭定时0
     TR1=0;
     rb=(unsigned long)(TH1*256+TL1)*255/ryz;
     if(rb>255)
  rb=255;//判断RGB值是否合法
     //***********求B值**************************************
     TH0=(65536-10000)/256;
    TL0=(65536-10000)%256;
     TH1=0;
     TL1=0;
     s2=0;
     s3=1;//选择蓝色滤光器   
  TR0=1;//10毫秒开始计时
     TR1=1;//开始计数
     while(TF0==0);//等待定时器溢出
     TF0=0;//清楚定时器0溢出标志
     TR0=0;//关闭定时0
     TR1=0;
     bb=(unsigned long)(TH1*256+TL1)*255/byz;
     if(bb>255)
  bb=255;//判断RGB值是否合法        ]
     //***********求G值**************************************   
     TH0=(65536-10000)/256;
    TL0=(65536-10000)%256;
     TH1=0;
     TL1=0;
     s2=1;
     s3=1;//选择绿色滤光器   
  TR0=1;//10毫秒开始计时
     TR1=1;//开始计数
     while(TF0==0);//等待定时器溢出
     TF0=0;//清楚定时器0溢出标志
     TR0=0;//关闭定时0
     TR1=0;
     gb=(unsigned long)(TH1*256+TL1)*255/gyz;
     if(gb>255)
  gb=255;//判断RGB值是否合法  
}
//******************************************************
//白平衡子程序
void    baipingheng()
{
     //**************求取红色因子***********************
     TH0=(65536-10000)/256;
    TL0=(65536-10000)%256;
     TH1=0;
     TL1=0;
     s2=0;
     s3=0;//选择红色滤光器  
     TR0=1;//10毫秒开始计时
     TR1=1;//开始计数
     while(TF0==0);//等待定时器溢出
     TF0=0;//清楚定时器0溢出标志
     TR0=0;//关闭定时0
     TR1=0;
     ryz=(TH1*256+TL1);//其实这里的比例因子应该为255/(TH1*256+TL1)
     //**************求取蓝色因子***********************
     TH0=(65536-10000)/256;
    TL0=(65536-10000)%256;
     TH1=0;
     TL1=0;
     s2=0;
     s3=1;//选择蓝色滤光器
  TR0=1;//10毫秒开始计时
     TR1=1;//开始计数
     while(TF0==0);//等待定时器溢出
     TF0=0;//清楚定时器0溢出标志
     TR0=0;//关闭定时0
     TR1=0;
     byz=(TH1*256+TL1);//其实这里的比例因子应该为255/(TH1*256+TL1)
     //**************求绿色因子***********************
     TH0=(65536-10000)/256;
    TL0=(65536-10000)%256;
     TH1=0;
     TL1=0;
     s2=1;
     s3=1;//选择绿色滤光器
     TR0=1;//10毫秒开始计时
     TR1=1;//开始计数
     while(TF0==0);//等待定时器溢出
     TF0=0;//清楚定时器0溢出标志
     TR0=0;//关闭定时0
     TR1=0;
     gyz=(TH1*256+TL1);//其实这里的比例因子应该为255/(TH1*256+TL1)
               
    delay_nms(250);
}
/*****************************主控制程序****************************/
void main()
{
  test_led();   //测试led
  delay_nms(80);  //延时 等待串口调试工具
  LED=1;    //打开led
  s0=0; s1=1;    //关断电源
  t0_init();
  Time2_init();
  while(1)
  {
  
   baipingheng();
celiang();
   
  printf("ryz=%ld\n",ryz);
  delay_nms(250);
  printf("byz=%ld\n",byz);
  delay_nms(250);
  printf("gyz=%ld\n",gyz);
  delay_nms(250);
  printf("rb=%ld\n",rb);
  delay_nms(250);
  printf("bb=%ld\n",bb);
  delay_nms(250);
  printf("gb=%ld\n",gb);
  delay_nms(250);
  }
}
/*----------------------------------------------------------------
      函数名:Time2_init( )
      功  能:使用T2做串口时钟
-----------------------------------------------------------------*/



得到的脉冲数也特别大

这得有传感器资料和相关部分的电路,才能判断问题原因

有人说是颜色传感器比例因子初始化计算错误

不管是什么原因,在没找到根本时,只能一个一个的排除,即使是比例因子计算错误,应该也会跟传感器相关吧,计算总要有个依据吧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top