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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
TCS3200颜色传感器配套资料,含调试程序原理图,结构图8 W6 p  w/ x2 M( i  K+ ~2 }
4 B; P' P/ h' ]' J9 }+ M8 k

" Q% _+ O7 ?  s7 Y' w
- L5 k) T- K- K& L( L
$ c7 Z( f! ?5 M' b
这次课程设计主要用的TCS3200颜色传感器,附件里面有传感器的原理,结构图,调试例程3 s* F1 i& p0 o+ D) D' m

8 E7 ?8 T: N+ d) T0 }TCS3200颜色传感器简介:
$ _3 o2 ?0 i  S+ O, L5 x% ?; y3 ~! g% ], x. F( E) e
+ _; v0 k( H5 b6 ~
TCS3200颜色传感模块电路及实验电路图:
+ B/ U5 h9 S1 g4 k 2 W+ T/ g% D. O8 G$ J& g
1 }5 H" a5 l, _7 C5 g) S6 c) }

+ h7 ?/ b% S& D' @+ l5 ^0 \4 O2 W4 a4 e( _# B  \

1 J# R3 ~' g! G( {# l, Y5 k控制板是通用型的,可以控制语音模块 、超声波模块、AD模块等,如果只是颜色传感器用,AT24C01部分、按键部分可以不焊接;) E9 V9 L9 V' g$ u- S+ `! }
超声波控制板电路原理图:
# H9 \7 \3 }, b5 ^% \7 y2 @" d / }7 s* G9 y$ }) ^

5 V0 W) s# I6 E0 V( N$ e: C" V51单片机源程序:

6 Q4 s2 r3 p8 g: [# [4 c/*模块的使用方法:把板距离白纸2CM处开机,使输出的数据位FFFFFFF(白平衡),接下来就可以正常使用
, Z) r& L' z& j3 ]$ g( g实现功能:对颜色传感器输出RGB
! a7 T. r8 ]" B# [使用芯片:AT89S52 或者 STC89C52 或AT89S51 STC89C51
8 _' n7 p' p6 r" B$ P晶振:12MHZ( H# U2 {8 ~0 d# U
编译环境:Keil1 D  N% h/ U2 ~7 ]
作者:zhengzhongxign39*/
: q2 A( Y! O1 p: X#include <reg52.h>; \# {+ Y4 }$ c
#define uchar unsigned char
4 v2 S# `/ W: a9 ^8 d) G#define uint  unsigned int* o7 w; ]6 _7 l1 |
//==============LCD1602接口连接方法=====================5 X; p% @& d0 \; }  g# }/ O
/*-----------------------------------------------------/ R1 n: P" @+ Z/ n% e4 W( }
       |DB0-----P0.0 | DB4-----P0.4 | RW-------P2.3    |# ]8 l! Y9 y% w
       |DB1-----P0.1 | DB5-----P0.5 | RS-------P2.4    |4 l3 w) G# n7 P* H5 \( i3 P3 S0 Z
       |DB2-----P0.2 | DB6-----P0.6 | E--------P2.2    |7 J5 l, s! o) T3 e$ e1 b( y9 j; [
       |DB3-----P0.3 | DB7-----P0.7 | 7 I/ U3 ^! E* F: R* T- D
    ---------------------------------------------------*/. o' U5 r" {1 u6 ^$ H
//================================================*/              ; g; e, q) M- u0 X- E
#define LCM_Data     P0    //LCD1602数据接口
0 z$ V% O& R3 p  K! }4 w: I#define Busy         0x80   //用于检测LCM状态字中的Busy标识
7 Z4 t; g6 \& Y1 j% S9 lsbit    LCM_RW     = P2^3;  //读写控制输入端,LCD1602的第五脚
1 D# v9 Z' k% L" bsbit    LCM_RS     = P2^4;  //寄存器选择输入端,LCD1602的第四脚9 [" m4 O& F' Y  r! i1 I1 r+ @- e3 C. \
sbit    LCM_E      = P2^2;  //使能信号输入端,LCD1602的第6脚; K3 m  B, |; b
( x! M- S2 J, \5 j% R6 f, P$ O+ q: K
6 m/ H4 n1 G2 a! Q1 Z2 L
//=================颜色传感模块连接=====================- r' z+ M# F5 J, X  x
/*-----------------------------------------------------) m1 [# B: M( G4 [2 q
       |EO-----GND; A/ t/ u" T) y! X7 _/ z3 S
       |S0-----VCC | S2-----P2.0 | OUT-------P3.5 0 N; F* u& L: j1 `; Y
       |S1-----VCC | S3-----P2.1 |
0 U7 r9 v* V! B7 g$ b  ---------------------------------------------------*/) }* b1 e# ]5 t& G8 b7 J: \
sbit    tcs230_s2=P2^0;//TCS230 S2接单片机P2.0) i  V9 ?7 z6 u5 q2 K' E
sbit    tcs230_s3=P2^1;//TCS230 S3接单片机P2.1
4 p9 B2 A4 P3 @) c9 x8 e5 ssbit    tcs230_en=P3^0; //TCS230 EN(E0)接GND( B6 B- i2 t! t/ }/ H+ l
//**************函数声明***************************************$ n8 H1 E- ~& Z( Z( [
void    WriteDataLCM                (uchar WDLCM);//LCD模块写数据
- T: R, r' d! p" M+ mvoid    WriteCommandLCM        (uchar WCLCM,BuysC); //LCD模块写指令
' @3 |+ C/ ?6 J/ P6 m0 [uchar   ReadStatusLCM(void);//读LCD模块的忙标
6 J! ^- y' o1 N2 e$ M1 k6 t1 tvoid    DisplayOneChar(uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置显示一个字符
* Z# X, ?* \4 o9 q! W: c2 P/ B% svoid    LCMInit(void);//LCD初始# ^6 }% ^- J3 o/ w* J
void    DelayMs(uint Ms);//1MS基准延时程序( k9 m+ {" V8 A+ P& B8 |, L
void    baipingheng();//白平衡子程序
/ t8 Z3 {0 ]5 ?# Jvoid    celiang();//实际颜色程序5 q4 U! I& I$ T) @: g/ x
uint    ryz,gyz,byz;//分别定义红色因子 绿色因子 蓝色因子9 r1 x3 u' |* G- W9 b, x# I# d
uint    rb,gb,bb;//RGB值
1 a  A) C9 X  B9 m7 Q5 _- c/ J. ruchar   tab1[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};) z% A, m" E1 \& @
//***********************主程序******************************$ s. `: x  k+ C) ]% T; G
main()   
; ?9 u3 J1 h4 [. j4 ^1 q2 Z/ \0 O{   
/ Y; q' Y- c8 x1 t+ m   TMOD=0x51;//设定T0以工作方式1定时10毫秒
: O4 ?" }) D$ D3 _# w5 C* f5 a   LCMInit();//LCD初始
/ W$ ?; @5 [; Z& ]+ Z/ U/ M   baipingheng();//上电时先白平衡一次
$ j1 ]5 o$ H4 U6 L3 S$ _   while(1)+ M0 m) t' ~* J/ Y2 E1 e' J1 e
   {1 E& C# U- C% ~
       celiang();//颜色测试
6 x- E* s+ O% {0 y, l/ l' n       DisplayOneChar(0, 0,'R');//以十进制显示RGB中红色的分值
# o( q: Y1 m" d9 u& m       DisplayOneChar(0, 1, rb/100+0x30); //显示百位数据6 J! H" Q9 }& u
       DisplayOneChar(0, 2, rb/10%10+0x30);//显示十位数据
  g7 ~7 }7 z8 ?2 p; U+ D       DisplayOneChar(0, 3, rb%10+0x30);//显示个位数据
4 r( T  {4 P( a% Z4 [+ A4 e       DisplayOneChar(0, 5,'G');//以十进制显示RGB中绿色的分值: y# @- d5 l- m8 t( D/ {; K
       DisplayOneChar(0, 6, gb/100+0x30); //显示百位数据6 @6 ]! e9 A9 ]1 J
       DisplayOneChar(0, 7, gb/10%10+0x30);, T+ A1 K5 m# s$ O8 C" \% g4 M9 T. r
       DisplayOneChar(0, 8, gb%10+0x30);
7 q- f1 F, n5 B* w8 a0 ]       DisplayOneChar(0, 10,'B');//以十进制显示RGB中蓝色的分值
( E5 F7 v2 Y9 N3 v. j* B! B       DisplayOneChar(0, 11, bb/100+0x30);& G7 l( j$ L: f/ a5 E& A
       DisplayOneChar(0, 12, bb/10%10+0x30);
1 v. Q, ?, A# F6 J7 y' t  U       DisplayOneChar(0, 13, bb%10+0x30);
8 J1 a% ]: N! h& R0 {       //*****在LCD1602的第二行以16进制显示RGB*******************
1 @  o9 W5 S0 K. M* P  j       DisplayOneChar(1, 1, tab1[rb/16]); 5 g+ F5 U7 ^5 g; h
       DisplayOneChar(1, 2, tab1[rb%16]);
- W! f  t& a/ }       DisplayOneChar(1, 3, 'H');
- P( e& N8 q! y5 }7 h8 }5 @" @9 w4 g       DisplayOneChar(1, 6, tab1[gb/16]); 2 f0 ^+ y" }' q) E# r% I: O
       DisplayOneChar(1, 7, tab1[rb%16]);3 j7 d! ?& H" A' D- @' T
       DisplayOneChar(1, 8, 'H');0 i3 J# h. ]8 m7 ?/ n+ \" K* `
       DisplayOneChar(1, 11,tab1[bb/16]);
. y: R8 z2 M7 A/ }& L       DisplayOneChar(1, 12,tab1[bb%16]);/ N! ^8 {/ ?6 ?! R- H" ^, H; o
       DisplayOneChar(1, 13,'H');, U& ]0 X# _$ [4 e, a7 c  C
       DelayMs(250);//每隔0.25秒测试一次颜色& c! E% m$ |+ e9 g: M& n
   }
8 f* f4 t& C1 P  @} 7 k* p' J" d+ D- B" m0 `7 _
//******************************************************
$ ?+ I6 C% J" N8 [//白平衡子程序
9 i4 n; Q$ V# t) cvoid   celiang()7 i! P6 S) d1 F) w: v
{4 T8 R$ C2 E+ p( h1 E3 I& K) p
     //*********求R值************************************
! U* x" e/ C+ c1 Q     TH0=(65536-10000)/256;+ o/ G+ T) J5 U1 `: F9 W$ S8 \; a  Q
           TL0=(65536-10000)%256;
; \2 o( K) f. g     TH1=0;
' c$ t! \8 k* x     TL1=0;
2 D- `# k! z* @5 L( |. u: \: l+ D/ _     tcs230_s2=0;& z$ |, k" [5 e" x( H
     tcs230_s3=0;//选择红色滤光器! D& Y. F/ c  e; G3 Y7 j
     tcs230_en=0;
* K8 [7 T- p7 p2 p# C' c     TR0=1;//10毫秒开始计时
' I9 L% j8 Z3 N% L5 Y' U     TR1=1;//开始计数3 E+ F) E3 S7 v! Z* _8 F
     while(TF0==0);//等待定时器溢出; M3 c' u, I* b
     TF0=0;//清楚定时器0溢出标志2 E0 S5 `8 u5 Y' s7 H; j& g$ g
     TR0=0;//关闭定时01 ]8 H5 R, Z- k
     TR1=0;
* n/ p& Z5 ~2 e9 n/ ]6 e3 R     rb=(unsigned long)(TH1*256+TL1)*255/ryz;
" R& b. \3 W8 Q. [2 I     if(rb>255)rb=255;//判断RGB值是否合法0 W2 ~8 W( P1 }& H% ^3 C
     //***********求B值**************************************  A% K5 G  n% O5 W1 `/ Y
     TH0=(65536-10000)/256;# d2 v6 L6 H. k
           TL0=(65536-10000)%256;2 U4 i* I6 T2 @% A/ s* i
     TH1=0;( ~* K/ j1 D/ i6 s% C/ y
     TL1=0;  G7 I4 s) O# r9 j, v
     tcs230_s2=0;5 B0 t8 q0 p$ L" T4 P, ?
     tcs230_s3=1;//选择蓝色滤光器  K+ ?4 T1 Q4 H( @
     TR0=1;//10毫秒开始计时
6 k1 J# }4 _- K8 p* H, \) V4 h     TR1=1;//开始计数
+ s( m# t- Z, s4 j% b     while(TF0==0);//等待定时器溢出. N3 {5 m0 `! h7 ?& H
     TF0=0;//清楚定时器0溢出标志
* I& c# H/ d$ `6 _* U, L7 V     TR0=0;//关闭定时0$ n0 X6 ^. Y/ i
     TR1=0;6 R8 V4 Y, l0 C
     bb=(unsigned long)(TH1*256+TL1)*255/byz;
8 V: {+ ]' e  n1 ^' S; D5 a* \) A( }     if(bb>255)bb=255;//判断RGB值是否合法     
1 v" c1 `9 S# }9 V3 S, o     //***********求G值**************************************   
; c+ D: j- i8 r: X$ @9 c     TH0=(65536-10000)/256;2 D  i4 F1 l# f5 e4 i, l  J
           TL0=(65536-10000)%256;: z. H( L% o/ b
     TH1=0;
% c! A% H" |+ J( {3 r. c" F1 ~* T     TL1=0;
* p9 L& o$ `- F( ?7 a- o: f, D. f+ }3 t     tcs230_s2=1;
# c' X+ a) F- p! f, S4 E     tcs230_s3=1;//选择绿色滤光器( K- H8 u$ a. q6 A
     TR0=1;//10毫秒开始计时* W3 Z( z( P" k8 Q
     TR1=1;//开始计数/ c$ ^6 A' K. g/ |* d" v( H& b
     while(TF0==0);//等待定时器溢出
) M. m- N& p4 D; }7 l& W" M. v     TF0=0;//清楚定时器0溢出标志) D' ~/ u( ?8 ]; n- F- z' s
     TR0=0;//关闭定时0
8 v3 z  C& ~, V* u  ?- g9 y     TR1=0;
+ ?7 P- v1 |+ }" W) I- `& x     tcs230_en=1;
, h( |5 y3 ^2 ~+ t2 r     gb=(unsigned long)(TH1*256+TL1)*255/gyz;
5 W% a/ G, ?% Z7 s! @1 C/ X     if(gb>255)gb=255;//判断RGB值是否合法  + y  n! E* k9 b: _% P
}
$ x0 R9 ?0 @: Z! l//******************************************************- T9 D: x1 [5 E% y5 o) J
//白平衡子程序* B( c' }6 x- K1 Y6 i) ]& k+ Q2 K
void    baipingheng(), m3 @1 {- l6 B  @, R: w
{
) M" {, K1 _2 i# `" q3 S     //**************求取红色因子***********************6 E# X2 y. u: L. o! Q
     TH0=(65536-10000)/256;
5 }! {, I, [" K) I* Y' W/ |6 e           TL0=(65536-10000)%256;
2 t3 i5 c5 R) q5 c1 @2 |, v. V     TH1=0;6 D, P; v  D9 X! q/ u. o2 q# ]: k
     TL1=0;
6 b* }- _) Q; p5 u     tcs230_s2=0;
# _' d' B6 C' R( {3 O! u     tcs230_s3=0;//选择红色滤光器
2 L& k% ]& G8 G, s2 O. N     tcs230_en=0;2 x4 E, [5 v( M3 R) V. i
     TR0=1;//10毫秒开始计时
: _9 ], q+ L/ |. `" C0 p! b* q     TR1=1;//开始计数
' ?  `5 Z, z" V$ [! {5 }     while(TF0==0);//等待定时器溢出* e8 N0 S* J' A. v4 [, A7 f
     TF0=0;//清楚定时器0溢出标志; B4 ?8 E0 ~# b& H+ i
     TR0=0;//关闭定时0
0 |1 s5 c9 @/ ]! X; f6 Y1 ]$ s     TR1=0;+ y) }. E$ m& g2 e; \' E; S
     ryz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1); {. b2 n* F% R2 e( d5 P* p
     //**************求取蓝色因子***********************9 |, Q- f# \6 u0 S
     TH0=(65536-10000)/256;' r0 t6 z8 z6 c( y- P
           TL0=(65536-10000)%256;
3 n! A( h' f9 _     TH1=0;
, I" ^6 r# Q5 o1 a: p     TL1=0;$ i4 A* q- Z% j7 @( B$ x
     tcs230_s2=0;
! v# A4 B4 j. e, A     tcs230_s3=1;//选择蓝色滤光器$ g$ D9 E$ D$ I2 [4 ?
     TR0=1;//10毫秒开始计时6 [4 d7 e" O" ]% R# P* ]
     TR1=1;//开始计数
% |7 C& X3 W/ [7 s& q) ?+ C     while(TF0==0);//等待定时器溢出
. N" K/ n4 Q4 h) x1 n! W- v  p     TF0=0;//清楚定时器0溢出标志
0 {3 Q6 O: p4 v4 Y( y     TR0=0;//关闭定时00 R2 p8 c3 _* \  o2 v% y
     TR1=0;+ ?0 x9 N: ?% f6 Z, |
     byz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1): i" Z# j  |* m0 V% L  i# |$ I  K
     //**************求绿红色因子***********************
" R. z$ V  a( f0 G. Y     TH0=(65536-10000)/256;3 l  Z. ~* W4 ?6 j; Q, y& }
           TL0=(65536-10000)%256;
$ l# C* X" u" w# Z! z, ~     TH1=0;; c/ a' i4 ^( X" p4 F- x0 x; H  W
     TL1=0;7 j6 t& i+ f( K5 E0 p
     tcs230_s2=1;
' P6 g; |0 J5 s2 @# S, Q, d     tcs230_s3=1;//选择绿色滤光器
2 p! {$ X5 [. E! J" v     TR0=1;//10毫秒开始计时
" G* n5 K+ M- [9 n: p; H$ G     TR1=1;//开始计数- @$ R7 n( l! b7 t! T* i
     while(TF0==0);//等待定时器溢出# E. ]( o# ?: Z; c  u: Q2 }/ _
     TF0=0;//清楚定时器0溢出标志
& g: R/ D: [. e. q' ?6 j0 h     TR0=0;//关闭定时0
6 P4 v( y) f( \' s5 J* u     TR1=0;% O8 V% Y6 G3 s' u- \
     tcs230_en=1;1 {: X/ I  v% ~( L7 m* G
     gyz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1)
" I" B$ t3 f3 E2 `2 d* c. O, C}' B; f. T7 a# N* A
/*======================================================================
; b$ a; j+ ?# x5 D6 o* b! ] LCM初始化% ?1 t, H$ m! N0 C. h7 N# k4 M
' q2 d" f( d' r( Q' E, O( L

8 u; A% C; B% @0 P" e6 z( e8 Y( b7 i0 I' b…………限于本文篇幅 余下代码请从论坛下载附件…………
, d0 D9 h" F9 M. a! C, Q- p$ F# D  V: o9 \/ B1 V/ A# M
下载:' M. G- `4 C$ m- t( a
游客,如果您要查看本帖隐藏内容请回复
0 ]6 l. z+ P3 R
! Q9 U- ~6 M' G# D

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-5 03:28 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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