TCS230应用程序供参考Word格式.docx
《TCS230应用程序供参考Word格式.docx》由会员分享,可在线阅读,更多相关《TCS230应用程序供参考Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
U2138=0;
if(channel&
0x01)
A0=1;
A0=0;
0x02)
A1=1;
else
A1=0;
0x04)
A2=1;
A2=0;
write574(U1,T230);
}
//////////////颜色设定////////////////
voidcolor_set(ucharcolor)
if(color==RED_COLOR)
S2=0;
S3=0;
elseif(color==WHITE_COLOR)
S2=1;
elseif(color==BLUE_COLOR)
S3=1;
elseif(color==GREEN_COLOR)
//////在30毫秒内记录N通道M颜色的脉冲数///////////////////
uintreadtcs230data(ucharchannel,ucharcolor)
uintreaddata=0;
ucharreadh,readl;
write574(U1,T230=0);
//复位所有的颜色传感器
TMOD=0x15;
//定时器1模式1(16位定时方式)计算器0模式1(16位计数方式)
EA=0;
//总中断关
ET0=0;
//计算器0中断关
ET1=0;
//定时器1中断关
TH1=0x8a;
//定时器1设定定时时间是30毫秒(12兆赫兹的时钟频率)
TL1=0xd0;
//定时器1设定定时时间是30毫秒(12兆赫兹的时钟频率)
TH0=0;
//计算器0设定初值高八位为0
TL0=0;
//计算器0设定初值低八位为0
EA=1;
//总中断开
ET0=1;
//计算器0中断开
//定时器1中断关(采用查询方式检测)
color_set(color);
//颜色设定(=0红色)(=1白色)(=2蓝色)(=3绿色)
delay
(1);
tcs230_set(channel);
//通道选择通道低八位(=0通道0=1通道1...=10通道10)
//所有的准备工作已做完等待测试
TR1=1;
//定时器1启动
TR0=1;
//计算器0启动
while((TF1==0));
//等待30毫秒时间到
TF1=0;
//清定时器1的中断标志
TR0=0;
//计算器0关闭计数
TR1=0;
//定时器1停止定时
//计算器0中断关
readh=TH0;
//读颜色传感器的高八位
readl=TL0;
//读颜色传感器的第八位
readdata=readh;
readdata<
<
=8;
readdata+=(readl);
returnreaddata;
///////////////////////////////////////////////////////////////////////
bitreadtcs230coloranddata(ucharchannel,ucharcolor,uintstd,bitmode)
xdatafloatr,g,b;
xdatauintdred,dblue,dgreen,drezult;
dred=readtcs230data(channel,RED_COLOR);
//测出红色成分的值
dblue=readtcs230data(channel,BLUE_COLOR);
dgreen=readtcs230data(channel,GREEN_COLOR);
drezult=dred+dblue+dgreen;
r=dred/(1.0*drezult);
g=dgreen/(1.0*drezult);
b=dblue/(1.0*drezult);
if(mode==1)
lcdpos(0,0);
printf("
亮度=%-5u%c%4u"
drezult,(drezult<
std)?
'
'
:
(drezult==std)?
='
:
>
std);
/////秖代穞4
if(color==BLACK_COLOR)
lcdpos(2,0);
{cyc4or3run();
printf("
暗光---------%s!
"
(drezult<
"
OK"
NG"
);
//blackcolor
else
{
if(drezult<
std)
{
cyc4or3run();
OK"
return0;
}
else
{cyc4or3run();
printf("
暗光---------NG!
//blackcolor
return1;
}
///////瘤礛兵ンぃ琌穞,琌龟悔琌穞///////
/*elseif((dred<
16)&
&
(dgreen<
(dblue<
16))//厚屡常10痷穞
cyc4or3run();
return1;
}*/
///////////狦秖代才︹0///////////////
/*elseif(r>
0.53)
if((color==RED_COLOR)&
(drezult>
=std))//代刚兵ン耞OK
{
if(mode==0)
{
红色---------OK!
//red
return0;
printf("
%-3u:
%-3uOK!
dred,dgreen,dblue);
//printf("
R:
G:
B=%c:
%c:
%cOK!
r,g,b);
else//代刚兵ン耞NG
红色---------NG!
%-3uNG!
//printf("
%cNG!
}
///////狦秖代才屡︹2///////////////
elseif(b>
if((color==BLUE_COLOR)&
蓝色---------OK!
//blue
蓝色---------NG!
///////狦秖代才厚︹3////////////////////////////////////
elseif(g>
0.53)
if((color==GREEN_COLOR)&
绿色---------OK!
//GREEN
绿色---------NG!
////printf("
}*/
/////////////狦秖代才フ︹1///////////////////////
if((color==WHITE_COLOR)&
=std)&
((r<
0.5)&
(r>
0.2))&
((g<
(g>
((b<
(b>
0.2)))//代刚兵ン耞OK
测试---------OK!
//WHITE_COLOR
测试---------NG!
////WHITE_COLOR
{//lcdpos(2,0);
}
}
/*
ucharr,g,b;
xdatauintdred,dblue,dgreen,drezult;
xdatafloatfr,fg,fb;
fr=1.0*dred/drezult;
fg=1.0*dgreen/drezult;
fb=1.0*dblue/drezult;
if((mode)&
((color&
0x0f)!
=B_AND_W_COLOR))
lcdpos(1,0);
{
elseif((dred<
1)&
1))//厚屡常10痷穞
///////////////ancolortest////////////////
elseif((color&
0x0f)==B_AND_W_COLOR)
if(((drezult>
25)&
(fr>
=fg)&
=fb)&
0.36))||((fr>
=fg)&
(drezult<
=25)&
(fr>
=fb)&
0.50)))
if((color>
4)==RED_COLOR)
writestring(1,0,"
RedTestOK!
elseif(fr>
0.5)
if(((color&
0x0f)==RED_COLOR)&
elseif(fb>
0x0f)==BLUE_COLOR)&
elseif(fg>
0.5)
0x0f)==GREEN_COLOR)&
0x0f)==WHITE_COLOR)&
白色---------OK!
白色---------NG!
}*/