找回密码
 注册
关于网站域名变更的通知
查看: 1357|回复: 3
打印 上一主题 下一主题

TCS3200颜色传感器配套资料,含调试程序原理图,结构图

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-9 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
TCS3200颜色传感器配套资料,含调试程序原理图,结构图& g' q' s* @$ }0 Q; @1 _: F
! k5 G3 Z9 c! W* ?# Y- C

% y: f4 J1 b5 x
2 d, u4 Y5 P' t$ ^& [
  x8 y/ R% u6 G4 Z7 z
这次课程设计主要用的TCS3200颜色传感器,附件里面有传感器的原理,结构图,调试例程1 Z& ?; R# ]' H

" ]& g; e8 {4 aTCS3200颜色传感器简介:0 V  _2 R% ^" B/ \, I
: g3 ^1 @' A% y: |" k# d

# J: U# m7 M* o' g8 eTCS3200颜色传感模块电路及实验电路图:. P' j0 B) k- e5 F; U

. f, V1 N# R# F( R: u( F- t0 L8 z
. B+ O  z  P( m" z+ L8 p9 Y 7 C5 W  d( `0 o3 q, x! @

- N, P1 h. o: y  P6 s! H
. _( |/ |, w% N9 e* H控制板是通用型的,可以控制语音模块 、超声波模块、AD模块等,如果只是颜色传感器用,AT24C01部分、按键部分可以不焊接;
6 P* F( b  U( g/ C% `5 Y超声波控制板电路原理图:
5 R! d- \) c4 A# e $ u) e+ V! ~" B( F9 |
' \' ~/ H2 n; t: @6 B! S
51单片机源程序:

  q1 X8 h2 l' X/*模块的使用方法:把板距离白纸2CM处开机,使输出的数据位FFFFFFF(白平衡),接下来就可以正常使用
4 f4 g, L* E. y; J实现功能:对颜色传感器输出RGB
3 r- U0 O' `1 U2 o使用芯片:AT89S52 或者 STC89C52 或AT89S51 STC89C517 L! H3 t5 }9 z3 n
晶振:12MHZ
! o4 ~  _9 V1 V2 S: j编译环境:Keil
/ K! L& T' L7 f9 J2 J9 ^. W) u作者:zhengzhongxign39*/
" h# B3 d5 ~/ D7 M3 I#include <reg52.h>
1 b7 O' r$ h5 C+ m1 o& l#define uchar unsigned char
1 |& P+ t4 {, v. @; I#define uint  unsigned int
( {' T& h  |; e//==============LCD1602接口连接方法=====================
/ c/ i$ P7 e) m( U9 A0 C9 a+ f/*-----------------------------------------------------
+ x0 W: w1 \  F       |DB0-----P0.0 | DB4-----P0.4 | RW-------P2.3    |
# s& p7 G; ]7 h" s  O% {; z9 V. q       |DB1-----P0.1 | DB5-----P0.5 | RS-------P2.4    |+ Z3 l3 L& i8 [" I0 V& |
       |DB2-----P0.2 | DB6-----P0.6 | E--------P2.2    |
: O. e: b+ v6 Y  @% c( e       |DB3-----P0.3 | DB7-----P0.7 |
9 r& v. p2 v" w" T2 Q/ E5 l6 C    ---------------------------------------------------*/: D! |: Z; R& L+ c
//================================================*/              
$ Q/ h$ i' I1 a5 J& [( e: h#define LCM_Data     P0    //LCD1602数据接口
: e' b5 [! ]) @" L- U! V#define Busy         0x80   //用于检测LCM状态字中的Busy标识& f: z0 h7 j/ {) O+ A1 v- h
sbit    LCM_RW     = P2^3;  //读写控制输入端,LCD1602的第五脚
2 j  O0 J/ b7 R' B/ [sbit    LCM_RS     = P2^4;  //寄存器选择输入端,LCD1602的第四脚
5 G! R5 e! C" c. T! usbit    LCM_E      = P2^2;  //使能信号输入端,LCD1602的第6脚
. g; G" c- T, H1 U' W5 E$ [1 Q
$ y9 n8 c+ y8 a8 H3 T4 n# w
* O4 I% F5 l( H2 Z
//=================颜色传感模块连接=====================3 m" g) v0 E, c3 c# N* Y! b( b
/*-----------------------------------------------------
0 A6 U" s: |' @. \6 J1 I       |EO-----GND/ u# P8 U: Q+ F+ C2 m6 M. o
       |S0-----VCC | S2-----P2.0 | OUT-------P3.5 " d! m9 @8 u4 J; i2 v/ H% K
       |S1-----VCC | S3-----P2.1 | + F) ~; j8 g9 ?. l; Q2 [' K
  ---------------------------------------------------*/) v6 O; {+ _* A
sbit    tcs230_s2=P2^0;//TCS230 S2接单片机P2.0
4 n% H$ A) B$ l# Ysbit    tcs230_s3=P2^1;//TCS230 S3接单片机P2.1
# d' I8 U9 ?, O% Vsbit    tcs230_en=P3^0; //TCS230 EN(E0)接GND2 q6 X! D4 J4 m) e
//**************函数声明***************************************
; j& C# ^  |) N: l5 Fvoid    WriteDataLCM                (uchar WDLCM);//LCD模块写数据/ }# Q4 n5 T9 R3 D& e2 u
void    WriteCommandLCM        (uchar WCLCM,BuysC); //LCD模块写指令- u" Q: g5 f, o. d* e" }  u6 u
uchar   ReadStatusLCM(void);//读LCD模块的忙标
9 w0 o- |7 z, {void    DisplayOneChar(uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置显示一个字符
: U1 ]; K8 N7 W( q1 uvoid    LCMInit(void);//LCD初始5 }7 Y. K5 ^# }6 V+ ^0 I9 Q
void    DelayMs(uint Ms);//1MS基准延时程序2 m! q' U$ Z6 ]+ L+ T8 R
void    baipingheng();//白平衡子程序$ S1 D# Z1 h! d- }
void    celiang();//实际颜色程序* v5 `$ i/ h1 Z( R9 ?# H
uint    ryz,gyz,byz;//分别定义红色因子 绿色因子 蓝色因子
4 K1 M0 y3 n1 B0 M" Q" Nuint    rb,gb,bb;//RGB值
+ ?6 _2 g/ F! f+ o, R$ L7 Kuchar   tab1[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
9 H% O5 g! B! g//***********************主程序******************************
5 v/ x' P. h3 zmain()   $ J; e0 t5 o4 K. ~
{   6 R: p! [' F7 _
   TMOD=0x51;//设定T0以工作方式1定时10毫秒
- _. I! Z  {! v4 _& g+ t   LCMInit();//LCD初始- D# N% f9 K7 a3 j" Y, m( J
   baipingheng();//上电时先白平衡一次  d% Z. _1 `4 X0 [: j- X  v- W/ t
   while(1)$ K( ^1 F6 Q, e9 j) f/ p( Q0 J# `
   {- u" r4 ?5 p; k' j1 X# J  W' ]
       celiang();//颜色测试" `4 H0 T1 E0 x, w
       DisplayOneChar(0, 0,'R');//以十进制显示RGB中红色的分值: I/ R% w: j* p8 q) ?  ^' s
       DisplayOneChar(0, 1, rb/100+0x30); //显示百位数据4 H% n! `; o, m
       DisplayOneChar(0, 2, rb/10%10+0x30);//显示十位数据2 i" ]1 P& \9 B& a
       DisplayOneChar(0, 3, rb%10+0x30);//显示个位数据. |. ~- i9 F% F- Q& |
       DisplayOneChar(0, 5,'G');//以十进制显示RGB中绿色的分值7 A0 K, p/ j, e6 u8 J& q5 u# x
       DisplayOneChar(0, 6, gb/100+0x30); //显示百位数据
( w( w7 G9 K7 Z+ k# z/ l0 k' A       DisplayOneChar(0, 7, gb/10%10+0x30);9 [, D: A/ l% p) t6 P: J) ~6 ^
       DisplayOneChar(0, 8, gb%10+0x30);
3 S. h" D2 K1 ^8 H$ l& w& @4 D+ x       DisplayOneChar(0, 10,'B');//以十进制显示RGB中蓝色的分值
( [2 e4 x: p, V# c% _. Q       DisplayOneChar(0, 11, bb/100+0x30);
8 o  Z# G* ]( [: d! ]7 I$ t1 n       DisplayOneChar(0, 12, bb/10%10+0x30);( N! F9 _' Z% T7 |  W: X
       DisplayOneChar(0, 13, bb%10+0x30);
' m# F* A0 {2 V9 J! m       //*****在LCD1602的第二行以16进制显示RGB*******************1 N- Y4 j2 E$ g9 U/ L2 \
       DisplayOneChar(1, 1, tab1[rb/16]); " X* y$ W2 P# z! r
       DisplayOneChar(1, 2, tab1[rb%16]);
+ `, z) \( j* Q. X8 _: e/ ^6 ]       DisplayOneChar(1, 3, 'H');
6 u4 o, y* X) j$ y1 L3 t7 m1 h. X       DisplayOneChar(1, 6, tab1[gb/16]);
& M1 [9 Q, c1 o: z       DisplayOneChar(1, 7, tab1[rb%16]);9 t# }4 Y- a7 ?" g
       DisplayOneChar(1, 8, 'H');
; M8 p2 N( E6 N' Q7 E& o* b6 p) }       DisplayOneChar(1, 11,tab1[bb/16]);
- U  b! I% I! m6 k       DisplayOneChar(1, 12,tab1[bb%16]);
0 I8 I+ P7 b8 p/ B       DisplayOneChar(1, 13,'H');
9 l! X8 E& p  y$ l6 U7 S       DelayMs(250);//每隔0.25秒测试一次颜色( x% i& w  A5 w, [$ k
   }
; J% c- R3 x4 I' N! D}
: w/ X# ~' K* _5 @! |+ Z/ U& B//******************************************************! t' T9 X5 `# f6 n: i% ^
//白平衡子程序, i% k7 }' f; x: ~" P4 }9 X
void   celiang(); m; l, H' t/ Q7 I* _6 w# p1 i
{) I) X6 u9 H$ n7 M9 \  ~
     //*********求R值************************************
; y) b7 m3 d, `+ I1 G% B5 R5 O     TH0=(65536-10000)/256;3 B- e" l& {: W# n8 F, z
           TL0=(65536-10000)%256;
- L3 ~( F& e( |9 W: C3 R" X     TH1=0;. }0 f' T+ }9 b, o
     TL1=0;
6 J$ g& I. T2 I; W     tcs230_s2=0;
, A& r2 _% {( b9 m     tcs230_s3=0;//选择红色滤光器) F2 N- x3 t' F) O; |
     tcs230_en=0;5 c! w8 T3 {6 e7 Z% x# n
     TR0=1;//10毫秒开始计时- ^- O; i  I* n
     TR1=1;//开始计数+ ?6 s! k9 @; D4 l8 l1 a
     while(TF0==0);//等待定时器溢出7 @( }$ t0 ?. x' R2 \* ~: i
     TF0=0;//清楚定时器0溢出标志- [5 z% C' H) H+ U7 N+ {* S
     TR0=0;//关闭定时00 l& u; b6 Y7 @9 F8 H! r- c
     TR1=0;
( f) W  P; s$ Z+ f7 T4 ]; M  @     rb=(unsigned long)(TH1*256+TL1)*255/ryz;% h# s3 q$ |0 W3 H) z9 R& J! _
     if(rb>255)rb=255;//判断RGB值是否合法
  J! P9 u7 X, X3 u* Y     //***********求B值**************************************+ s  r& t' C, X* H: S
     TH0=(65536-10000)/256;
+ x& E$ x4 D- Y7 Z           TL0=(65536-10000)%256;$ a) w- c3 [2 P$ a# O
     TH1=0;! R) K  b8 z; F0 f6 }5 z9 T3 b
     TL1=0;
2 i' ^; k' c! a! i) h     tcs230_s2=0;
  [. [; R* Z1 ~5 b1 o. Q4 ~     tcs230_s3=1;//选择蓝色滤光器' Y+ K/ `$ D) r( ?/ o5 M
     TR0=1;//10毫秒开始计时+ c! @9 v9 f0 X3 R/ w
     TR1=1;//开始计数! C3 o- O4 Q' K5 }( B/ l
     while(TF0==0);//等待定时器溢出
- p/ \2 }& F5 u, I# o) j     TF0=0;//清楚定时器0溢出标志1 F; k8 g# ~7 V  p
     TR0=0;//关闭定时0& h3 L, ]6 b9 F: _: N
     TR1=0;
" i3 V3 R' Y% j     bb=(unsigned long)(TH1*256+TL1)*255/byz;
# J* i2 }3 b5 i: V     if(bb>255)bb=255;//判断RGB值是否合法     4 e! p+ G7 J% e8 V
     //***********求G值**************************************     n" }% v: U7 @% a! D
     TH0=(65536-10000)/256;
1 e& L+ C6 x* w* Q' p+ A           TL0=(65536-10000)%256;
, @0 o  s* M. l+ U     TH1=0;
( A& U0 X1 q5 i9 n$ V     TL1=0;9 d2 }5 a* ]; ?+ Z$ a# E% I
     tcs230_s2=1;
2 w9 i4 j" i' z( p  T     tcs230_s3=1;//选择绿色滤光器" P$ P$ Z' K) s7 b8 }: R6 J8 h
     TR0=1;//10毫秒开始计时  g9 @* e" _# G( O
     TR1=1;//开始计数7 S  E5 W# F1 D5 A
     while(TF0==0);//等待定时器溢出& v4 f: R& B. |/ s0 F1 K1 J0 A
     TF0=0;//清楚定时器0溢出标志
/ X( Z; D/ |5 f4 p     TR0=0;//关闭定时0
) r) S$ `, M  h     TR1=0;6 R, h) P* ?) a
     tcs230_en=1;8 k, N1 ~0 E2 e+ e
     gb=(unsigned long)(TH1*256+TL1)*255/gyz;
7 k6 b$ H% A! V     if(gb>255)gb=255;//判断RGB值是否合法  
, n) J5 E( q3 H3 [2 F# V) I}% \/ Z" f6 {% Z# {& i7 v
//******************************************************
* v, [& n. W- B//白平衡子程序$ M' `2 C$ i2 `; Q; x
void    baipingheng()
& ~; k6 g2 O! X5 y5 o4 W6 P: \{$ n( Y$ s  u/ ]8 Z4 w
     //**************求取红色因子***********************0 r4 N1 j* l: ~5 Q; \) ~$ y  |
     TH0=(65536-10000)/256;
5 b! o1 G3 a8 C, \. [* n/ r           TL0=(65536-10000)%256;
% K5 E" `* o( G% a     TH1=0;' C5 W  a8 z  i/ e4 |
     TL1=0;
# u' h# s$ A+ f     tcs230_s2=0;$ s( r2 W( k5 c
     tcs230_s3=0;//选择红色滤光器& D& l" L! [, n7 U3 [5 U8 h1 J! j
     tcs230_en=0;
2 a$ g2 D& r/ R2 O& ]$ \  G     TR0=1;//10毫秒开始计时7 R) C2 q3 J8 j- C0 k: @3 a
     TR1=1;//开始计数" C, }1 f* Z, D/ [5 D; e
     while(TF0==0);//等待定时器溢出
; W# [0 V' U) U9 M: `- t' @6 p     TF0=0;//清楚定时器0溢出标志8 l/ H  d6 H; ~* ]9 ]$ y7 Q
     TR0=0;//关闭定时0& Q" w; H4 L- O) n6 ~% }
     TR1=0;
1 [" a6 g3 x4 \' a' Z; q: y8 J( Y     ryz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1)% D8 z" O9 E. I- k' d5 [1 x& r
     //**************求取蓝色因子***********************& \6 K5 m4 Q! F" s$ \) Z) Z5 |$ b8 U
     TH0=(65536-10000)/256;
7 L! A2 \& p0 E+ P, O6 M           TL0=(65536-10000)%256;
/ z0 P8 i* D# p. x) t) `     TH1=0;# o3 ]4 p  t& O8 I4 z$ ^
     TL1=0;
: f& H' X8 w- F4 z     tcs230_s2=0;
+ ~; [6 U& I4 ]4 \; a7 V4 K2 w     tcs230_s3=1;//选择蓝色滤光器8 ~) q+ B" ?& D2 |/ g& Q. p9 x2 B$ ~
     TR0=1;//10毫秒开始计时( f  d! K3 P/ U3 t7 ^7 i! t0 ~
     TR1=1;//开始计数
/ E% c/ n; @7 t* p( B     while(TF0==0);//等待定时器溢出4 n2 }, V$ D) r, l9 `+ f
     TF0=0;//清楚定时器0溢出标志) ?$ m0 a: s9 w& V1 N  a" A2 L* j
     TR0=0;//关闭定时0
9 q' t1 s0 K( m, z! z     TR1=0;
1 y8 ?# D0 R5 a* u% p/ ?     byz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1)
+ v% Y3 k& W, J- M; |     //**************求绿红色因子***********************
2 W# y4 ?$ a! x4 j4 H     TH0=(65536-10000)/256;% b0 E2 A  o* L4 ^5 \& f
           TL0=(65536-10000)%256;
- O8 t5 \# X. E6 A6 s8 F6 a  q/ c     TH1=0;
  z1 c0 e2 ]  K, d+ B4 L( O) T     TL1=0;
0 c& ]6 H; _9 J2 n+ x     tcs230_s2=1;
; F, C$ D9 H) N3 h! E8 Z/ N) l3 G     tcs230_s3=1;//选择绿色滤光器
4 ^# [0 S# E8 m3 o# |. g     TR0=1;//10毫秒开始计时( L( M* o, D0 H4 _  A/ j
     TR1=1;//开始计数
+ ^* N9 Z0 @; v     while(TF0==0);//等待定时器溢出
9 n& j7 y9 K3 s4 H, y     TF0=0;//清楚定时器0溢出标志
' x: N, F- `) K  O9 \& @" \     TR0=0;//关闭定时0
) {$ z* x8 {% l9 k/ c. Q) X     TR1=0;3 E/ C- }. q+ g) t1 K- n8 s7 r
     tcs230_en=1;& {4 p2 P7 {0 m- P) l
     gyz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1)2 u. G1 I) K. @0 |& m& m
}
: K  c. B# S8 r) l# r# M/*======================================================================$ a3 N# \. Y( i* h& V$ \
LCM初始化3 K/ d4 N$ i) V8 F% b$ r+ e+ \  t8 Z

% R+ d0 t# d# g6 I

' m1 F7 y1 y6 Z4 c3 m( g5 Q…………限于本文篇幅 余下代码请从论坛下载附件…………: s+ p# a7 n" U4 c- v

" R2 N; E- t3 c$ ^  a下载:! H) t6 @" {6 ^0 _, a: G3 G
游客,如果您要查看本帖隐藏内容请回复

6 Z3 Z+ R3 Q0 z+ F

& T2 s# l' l6 d1 u  E

该用户从未签到

2#
发表于 2019-1-9 11:18 | 只看该作者
正好能用到,谢谢楼主分享

该用户从未签到

4#
发表于 2021-8-21 16:55 | 只看该作者
1111111111111
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 20:36 , Processed in 0.156250 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表