【文件属性】:
文件名称:颜色传感器
文件大小:797B
文件格式:C
更新时间:2018-08-16 12:38:53
颜色传感器
#include //包含头文件,这个嘛,就不用多说了~~
#include "L1602.h"
//#define hong 10000
//out接p3.5
sbit tcs230_en=P1^0;
sbit tcs230_s2=P1^1;
sbit tcs230_s3=P1^2;
uint ryz,gyz,byz;
uint rb,gb,bb;
//白平衡子程序
void celiang()
{
//*********求R值************************************
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=0;
TL1=0;
tcs230_s2=0;
tcs230_s3=0;//选择红色滤光器
tcs230_en=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;
tcs230_s2=0;
tcs230_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;
tcs230_s2=1;
tcs230_s3=1;//选择绿色滤光器
TR0=1;//10毫秒开始计时
TR1=1;//开始计数
while(TF0==0);//等待定时器溢出
TF0=0;//清楚定时器0溢出标志
TR0=0;//关闭定时0
TR1=0;
tcs230_en=1;
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;
tcs230_s2=0;
tcs230_s3=0;//选择红色滤光器
tcs230_en=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;
tcs230_s2=0;
tcs230_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;
tcs230_s2=1;
tcs230_s3=1;//选择绿色滤光器
TR0=1;//10毫秒开始计时
TR1=1;//开始计数
while(TF0==0);//等待定时器溢出
TF0=0;//清楚定时器0溢出标志
TR0=0;//关闭定时0
TR1=0;
tcs230_en=1;
gyz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1)
}
main()
{
TMOD = 0X51;
lcd_init();
baipingheng();//上电时先白平衡一次
while(1)
{
// uint i=500;
celiang();
lcd_wcom(0x80);
lcd_wdat('R');
lcd_wcom(0x80+2);
lcd_wdat(rb/100+0x30);
lcd_wdat(rb/10+0x30);
lcd_wdat(rb+0x30);
lcd_wcom(0x80+0x08);
lcd_wdat('G');
lcd_wcom(0x80+0x0A);
lcd_wdat(gb/100+0x30);
lcd_wdat(gb/10+0x30);
lcd_wdat(gb+0x30);
lcd_wcom(0x80+0x40); //重新设定显示地址为0xc4,即下排第5位
lcd_wdat('B');
lcd_wcom(0x80+0x42);
lcd_wdat(bb/100+0x30);
lcd_wdat(bb/10+0x30);
lcd_wdat(bb+0x30);
// while(i--);
delay(250);
}
}