TCS230应用程序供参考.doc_第1页
TCS230应用程序供参考.doc_第2页
TCS230应用程序供参考.doc_第3页
TCS230应用程序供参考.doc_第4页
TCS230应用程序供参考.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*-TCS230.H -*/#ifndef _TCS230_H_#define _TCS230_H_#pragma SAVE#pragma REGPARMSvoid tcs230_set(uchar channel);void color_set(uchar color);uint readtcs230data(uchar channel,uchar color);bit readtcs230coloranddata(uchar channel,uchar color,uint std,bit mode); #pragma RESTORE#endif/通道设定/void tcs230_set(uchar channel) channel&=0x0f;if(channel7) U2138=1;U1138=0;else U1138=1;U2138=0;if(channel&0x01)A0=1;else A0=0;if(channel&0x02)A1=1;elseA1=0;if(channel&0x04)A2=1;elseA2=0;write574(U1,T230);/颜色设定/void color_set(uchar color) if(color=RED_COLOR) S2=0;S3=0;else if(color=WHITE_COLOR) S2=1;S3=0;else if(color=BLUE_COLOR) S2=0;S3=1;else if(color=GREEN_COLOR) S2=1;S3=1;write574(U1,T230);/在30毫秒内记录 N 通道 M 颜色的脉冲数/uint readtcs230data(uchar channel,uchar color) uint readdata=0;uchar readh,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 设定初值高八位为0TL0=0; /计算器0 设定初值低八位为0EA=1; /总中断开ET0=1; /计算器0中断开ET1=0; /定时器1中断关 (采用查询方式检测)color_set(color); /颜色设定 (=0 红色)(=1 白色)(=2 蓝色)(=3 绿色)delay(1); tcs230_set(channel); /通道选择 通道低八位(=0 通道0 =1 通道1 . =10 通道10 )delay(1); /所有的准备工作已做完等待测试 TR1=1; /定时器1启动TR0=1; /计算器0启动while(TF1=0); /等待30毫秒时间到TF1=0; /清定时器1的中断标志TR0=0; /计算器0关闭计数TR1=0; /定时器1停止定时EA=0; /总中断关ET0=0; /计算器0中断关write574(U1,T230=0); /复位所有的颜色传感器readh=TH0; /读颜色传感器的高八位readl=TL0; /读颜色传感器的第八位 readdata=readh;readdata=8;readdata+=(readl);return readdata; / bit readtcs230coloranddata(uchar channel,uchar color,uint std,bit mode) xdata float r,g,b;xdata uint dred, 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,(drezultstd)? ,std); /秖代穞 4if(color=BLACK_COLOR) lcdpos(2,0);if(mode=1) cyc4or3run(); printf(暗光-%s!,(drezultstd)? OK : NG);/black color elseif(drezultstd)cyc4or3run(); printf( OK );return 0;elsecyc4or3run(); printf(暗光-NG!); /black colorreturn 1;/瘤礛兵琌穞,琌龟悔琌穞/*else if(dred16)&(dgreen16)&(dblue0.53) lcdpos(2,0);if(color=RED_COLOR)&(drezult=std)/代刚兵耞OK if(mode=0) printf(红色-OK!);/red return 0;elseprintf(%-3u:%-3u:%-3u OK!,dred,dgreen,dblue); /printf(R:G:B=%c:%c:%c OK!,r,g,b); return 0;else /代刚兵耞NG if(mode=0) printf(红色-NG!);/redreturn 1;elseprintf(%-3u:%-3u:%-3u NG!,dred,dgreen,dblue);/printf(R:G:B=%c:%c:%c NG!,r,g,b);return 1;/狦秖代才屡 2/else if( b0.53) lcdpos(2,0);if(color=BLUE_COLOR)&(drezult=std)/代刚兵耞OK if(mode=0) printf(蓝色-OK!); /bluereturn 0;elseprintf(%-3u:%-3u:%-3u OK!,dred,dgreen,dblue);/printf(R:G:B=%c:%c:%c OK!,r,g,b);return 0;else /代刚兵耞NG if(mode=0) printf(蓝色-NG!); /bluereturn 1;elseprintf(%-3u:%-3u:%-3u NG!,dred,dgreen,dblue);/printf(R:G:B=%c:%c:%c NG!,r,g,b);return 1; /狦秖代才厚 3/ else if( g0.53 ) lcdpos(2,0);if(color=GREEN_COLOR)&(drezult=std)/代刚兵耞OK if(mode=0) printf(绿色-OK!); /GREENreturn 0;elseprintf(%-3u:%-3u:%-3u OK!,dred,dgreen,dblue);/printf(R:G:B=%c:%c:%c OK!,r,g,b);return 0;else /代刚兵耞NG if(mode=0) printf(绿色-NG!); /GREENreturn 1;elseprintf(%-3u:%-3u:%-3u NG!,dred,dgreen,dblue);/printf(R:G:B=%c:%c:%c NG!,r,g,b);return 1; */狦秖代才 1/else lcdpos(2,0);if(color=WHITE_COLOR)&(drezult=std)&(r0.2)&(g0.2)&(b0.2)/代刚兵耞OK if(mode=0)cyc4or3run(); printf(测试-OK!);/ WHITE_COLORreturn 0;elsecyc4or3run();printf(%-3u:%-3u:%-3u OK!,dred,dgreen,dblue); /printf(R:G:B=%c:%c:%c OK!,r,g,b);return 0;else /代刚兵耞NG if(mode=0) cyc4or3run(); printf(测试-NG!); / WHITE_COLORreturn 1;else/lcdpos(2,0);cyc4or3run();printf(%-3u:%-3u:%-3u NG!,dred,dgreen,dblue);/printf(R:G:B=%c:%c:%c NG!,r,g,b);return 1; /*bit readtcs230coloranddata(uchar channel,uchar color,uint std,bit mode) uchar r,g,b;xdata uint dred,dblue,dgreen,drezult;xdata float fr,fg,fb;dred =readtcs230data(channel,RED_COLOR) ; dblue =readtcs230data(channel,BLUE_COLOR) ; dgreen =readtcs230data(channel,GREEN_COLOR); drezult=dred+dblue+dgreen; 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);printf(亮度=%-5u%c%4u,drezult,(drezultstd)? ,std); /秖代穞 4if(color=BLACK_COLOR) lcdpos(2,0);if(mode=1) printf(暗光-%s!,(drezultstd)? OK : NG);/black color elseif(drezultstd)return 0;else printf(暗光-NG!); /black colorreturn 1;/瘤礛兵琌穞,琌龟悔琌穞/else if(dred1)&(dgreen1)&(dblue25) & (fr=fg) & (fr=fb) & (fr0.36) | (fr=fg)&(drezult=fb)&(fr0.50) if(color4)=RED_COLOR)writestring(1,0, Red Test OK! ); /狦秖代才 0 /else if( fr0.5) lcdpos(2,0);if(color&0x0f)=RED_COLOR)&(drezult=std)/代刚兵耞OK if(mode=0) printf(红色-OK!);/red return 0;elseprintf(%-3u:%-3u:%-3u OK!,dred,dgreen,dblue); /printf(R:G:B=%c:%c:%c OK!,r,g,b); return 0;else /代刚兵耞NG if(mode=0) printf(红色-NG!);/redreturn 1;elseprintf(%-3u:%-3u:%-3u NG!,dred,dgreen,dblue);/printf(R:G:B=%c:%c:%c NG!,r,g,b);return 1;/狦秖代才屡 2/else if( fb0.5) lcdpos(2,0);if(color&0x0f)=BLUE_COLOR)&(drezult=std)/代刚兵耞OK if(mode=0) printf(蓝色-OK!); /bluereturn 0;elseprintf(%-3u:%-3u:%-3u OK!,dred,dgreen,dblue);/printf(R:G:B=%c:%c:%c OK!,r,g,b);return 0;else /代刚兵耞NG if(mode=0) printf(蓝色-NG!); /bluereturn 1;elseprintf(%-3u:%-3u:%-3u NG!,dred,dgreen,dblue);/printf(R:G:B=%c:%c:%c NG!,r,g,b);return 1; /狦秖代才厚 3/ else if( fg0.5 ) lcdpos(2,0);if(color&0x0f)=GREEN_COLOR)&(drezult=std)/代刚兵耞OK if(mode=0) printf(绿色-OK!); /GREENreturn 0;elseprintf(%

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论