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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
TCS3200颜色传感器配套资料,含调试程序原理图,结构图$ D9 d4 G: Y" B7 r, f+ k: l' B0 ?
/ I" ?5 R8 |2 ^$ ^2 s: U- D

3 h/ D; t" X. O/ m5 Z# \$ ^3 m
) N8 X7 C3 m4 b, d

: X8 K. M1 T7 x6 k这次课程设计主要用的TCS3200颜色传感器,附件里面有传感器的原理,结构图,调试例程/ b! d: \9 V1 E5 m" i8 h

. e; H4 _! |2 \+ T0 {; _' QTCS3200颜色传感器简介:
7 }5 w+ S/ _6 J3 P1 L7 A4 O; R. M& [, u) ]
7 A& Y' J. v9 q1 t
TCS3200颜色传感模块电路及实验电路图:
5 |7 c. B$ T3 J
" F$ d' F9 T$ i% m6 J9 g) V" e2 r. W, b5 i7 r( N( v* m" F! k

4 g  |& F; l( S4 |' T2 ^# A! [
1 x8 r* c1 P3 ^- C+ W4 K' X9 m
控制板是通用型的,可以控制语音模块 、超声波模块、AD模块等,如果只是颜色传感器用,AT24C01部分、按键部分可以不焊接;2 @% |: d5 w# B1 Q
超声波控制板电路原理图:
" J; J2 f  h5 ~! v 3 [5 K  N. x  l7 [$ N" ?# N

5 o4 X/ m0 n$ i6 X51单片机源程序:

% Z1 N; L; q  b/*模块的使用方法:把板距离白纸2CM处开机,使输出的数据位FFFFFFF(白平衡),接下来就可以正常使用/ o8 o  x/ Z. |2 L& B
实现功能:对颜色传感器输出RGB# g5 Y4 T; `6 H) _3 t4 }
使用芯片:AT89S52 或者 STC89C52 或AT89S51 STC89C51/ y8 e: k- V7 J) z
晶振:12MHZ6 y; ]: d+ z* a) F1 G3 J. K( D
编译环境:Keil
5 k) ?/ G  }' E' j作者:zhengzhongxign39*/4 e, l1 i1 A1 F1 D$ ]* Q
#include <reg52.h>
9 G! z. E  `8 b- U#define uchar unsigned char  i& f  h) C8 H2 y+ P% h1 E
#define uint  unsigned int" F+ [/ h8 o. T  V+ ]; ^
//==============LCD1602接口连接方法=====================  J) q6 S- o, B
/*-----------------------------------------------------
# k8 b5 r% t4 I* x& j       |DB0-----P0.0 | DB4-----P0.4 | RW-------P2.3    |
) A6 x6 N" ?% G# A- S+ n& A       |DB1-----P0.1 | DB5-----P0.5 | RS-------P2.4    |
, i" ?. v% Q2 P# R       |DB2-----P0.2 | DB6-----P0.6 | E--------P2.2    |; J% e. s+ j8 \
       |DB3-----P0.3 | DB7-----P0.7 | ' i6 D0 S6 J! L
    ---------------------------------------------------*/
+ D+ R" W" I0 p, \3 I$ D//================================================*/              
' _$ P0 \2 f2 `; U0 t$ R( o0 q4 D#define LCM_Data     P0    //LCD1602数据接口
3 h9 n  v3 @1 U4 N$ a! D+ C& e#define Busy         0x80   //用于检测LCM状态字中的Busy标识3 p2 ]2 v& p" k! t- y8 W: {
sbit    LCM_RW     = P2^3;  //读写控制输入端,LCD1602的第五脚
; E1 @9 ?+ a! w& A+ A9 @sbit    LCM_RS     = P2^4;  //寄存器选择输入端,LCD1602的第四脚7 s+ }5 b! }! \
sbit    LCM_E      = P2^2;  //使能信号输入端,LCD1602的第6脚  I, g* R" F( B- v/ z7 V
9 @3 g7 @' D# Z. f) u9 O

1 a: [" A: R3 _/ {4 i# a4 b//=================颜色传感模块连接=====================/ F% o0 y9 x4 S3 N- E
/*-----------------------------------------------------3 l3 T( A2 I5 \  |4 g
       |EO-----GND
& u' W! H* P2 l       |S0-----VCC | S2-----P2.0 | OUT-------P3.5
) j9 A$ Q  A- R9 E' I' Z" @       |S1-----VCC | S3-----P2.1 |
1 l' e% U1 R* ^. K% k& G* e, p  ---------------------------------------------------*/
" L# j' I7 Y' Esbit    tcs230_s2=P2^0;//TCS230 S2接单片机P2.0
: ^* M/ e) b" T' f' @sbit    tcs230_s3=P2^1;//TCS230 S3接单片机P2.1" w9 @" C8 c6 l
sbit    tcs230_en=P3^0; //TCS230 EN(E0)接GND* Z. Q4 I3 j% I# q+ o6 R
//**************函数声明***************************************2 Q' s4 @; i: p; X4 B' A: }5 m
void    WriteDataLCM                (uchar WDLCM);//LCD模块写数据8 Q' G6 F  k6 _: l) R% \* h4 `
void    WriteCommandLCM        (uchar WCLCM,BuysC); //LCD模块写指令$ ]; X: Q" ^2 x0 y1 M" V
uchar   ReadStatusLCM(void);//读LCD模块的忙标' I$ m+ r8 O  {, i
void    DisplayOneChar(uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置显示一个字符; ~# x# c% p) z, {
void    LCMInit(void);//LCD初始
" ~' L2 T! X; b% p/ F( Nvoid    DelayMs(uint Ms);//1MS基准延时程序
6 }! X) n2 ~1 l. B  e$ lvoid    baipingheng();//白平衡子程序6 G# C. k2 g8 K' D
void    celiang();//实际颜色程序
6 a4 B! s( A( v( {0 l+ t0 {uint    ryz,gyz,byz;//分别定义红色因子 绿色因子 蓝色因子8 i8 b$ ]; I0 L/ l; H, a
uint    rb,gb,bb;//RGB值
; i& J2 W- ]5 D, nuchar   tab1[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  d: i8 M+ c5 i! ?" ]! ^//***********************主程序******************************
8 W' i3 V; p) d! j# e8 D2 y& dmain()   
0 U. M, ^; [0 e# T{   ( c3 B0 L  u4 q* f4 Q6 {8 o% |2 s6 F
   TMOD=0x51;//设定T0以工作方式1定时10毫秒
1 W0 t* {8 n  C  e  k   LCMInit();//LCD初始
. l- |5 ]0 O, P: ~6 n* A6 G. P   baipingheng();//上电时先白平衡一次- M3 C- v3 x1 S, Y6 B' Z. d
   while(1)0 u+ k0 ?0 L$ s; Y
   {, i; p( k; ?8 P7 W% w$ B8 `( W
       celiang();//颜色测试" ~2 ~" t* I# n0 X' F: _1 E
       DisplayOneChar(0, 0,'R');//以十进制显示RGB中红色的分值1 h1 f8 m( F! w. K* c
       DisplayOneChar(0, 1, rb/100+0x30); //显示百位数据- P+ i; ]8 _8 z# s6 H
       DisplayOneChar(0, 2, rb/10%10+0x30);//显示十位数据
; |+ d  u% h" t4 A       DisplayOneChar(0, 3, rb%10+0x30);//显示个位数据
) ^# o( @$ W+ m7 r; L8 w. q       DisplayOneChar(0, 5,'G');//以十进制显示RGB中绿色的分值
; J& N7 i( J. _, W* |" w2 Z       DisplayOneChar(0, 6, gb/100+0x30); //显示百位数据) o6 Y' r) }" i
       DisplayOneChar(0, 7, gb/10%10+0x30);
* t0 K1 J+ V: e9 \) S* F, V6 p4 E       DisplayOneChar(0, 8, gb%10+0x30);+ u. U' ?' G) s% y% j
       DisplayOneChar(0, 10,'B');//以十进制显示RGB中蓝色的分值
; j4 C: ]/ l9 A+ J0 S3 J$ e  n       DisplayOneChar(0, 11, bb/100+0x30);
- G& E8 I6 I5 n       DisplayOneChar(0, 12, bb/10%10+0x30);& x+ F/ e/ B# X" n+ r9 y
       DisplayOneChar(0, 13, bb%10+0x30);
7 u' V! n  [  x5 e0 u) W       //*****在LCD1602的第二行以16进制显示RGB*******************
, R& X" L$ x8 b" ]9 s$ _       DisplayOneChar(1, 1, tab1[rb/16]);
+ q3 z9 ~$ M. l( n       DisplayOneChar(1, 2, tab1[rb%16]);
7 K* K) g6 v6 C6 z8 P/ n       DisplayOneChar(1, 3, 'H');! Z+ v4 N+ A# T* Q3 v& j
       DisplayOneChar(1, 6, tab1[gb/16]);
) g& X- s- n" }6 s9 K       DisplayOneChar(1, 7, tab1[rb%16]);0 e' e/ T8 n1 J9 F6 `
       DisplayOneChar(1, 8, 'H');9 C# _2 U  x4 g% G( v
       DisplayOneChar(1, 11,tab1[bb/16]);6 \. J* R$ Q  i
       DisplayOneChar(1, 12,tab1[bb%16]);
3 D. A6 x3 \1 O% z( B/ _* i       DisplayOneChar(1, 13,'H');
# S3 n; q2 H  E9 ?       DelayMs(250);//每隔0.25秒测试一次颜色
' _2 e8 ]5 Z  H2 k9 E1 @$ j   }0 E+ U+ @% |5 b5 Y0 b
}
0 F- B; l  T& M1 K% c//******************************************************
' Q; ?; }, M8 M' J% A//白平衡子程序
: o+ f  M9 {) U4 ?7 Nvoid   celiang()" s( J+ @) Z. L' |5 f# ^$ f
{3 b- A# F' [2 m1 i6 W% {
     //*********求R值************************************
# J  w" k/ q2 o6 N     TH0=(65536-10000)/256;
& z0 }# V9 h" i# \, A# P           TL0=(65536-10000)%256;4 S. G+ E3 Y0 z" T: h1 S9 F. b
     TH1=0;1 G5 h0 |; z1 g4 M# N3 H
     TL1=0;
6 I6 U/ q2 T2 Q     tcs230_s2=0;
( Y. A! q$ i2 t/ K3 D( Y5 X     tcs230_s3=0;//选择红色滤光器7 {, k( m& Z6 q; u" O
     tcs230_en=0;% l2 F% U/ i. O
     TR0=1;//10毫秒开始计时
$ ^3 G% H/ q1 Z( a0 s     TR1=1;//开始计数
) q; ?, R4 _3 B     while(TF0==0);//等待定时器溢出
- t. j) U3 q  C) ?  G     TF0=0;//清楚定时器0溢出标志
2 r* K9 k" R: y- s4 @     TR0=0;//关闭定时0
1 H" h. u& Y0 P( G4 A     TR1=0;' A' m3 L6 }. a
     rb=(unsigned long)(TH1*256+TL1)*255/ryz;
; {7 x' r1 ~$ u% x. {7 G. c  O4 k2 b     if(rb>255)rb=255;//判断RGB值是否合法
! a2 o3 @8 a1 I, e- e     //***********求B值**************************************( N! ?% ^$ K3 y0 D! S# [
     TH0=(65536-10000)/256;- \* x" A1 y3 S. ]  F2 |
           TL0=(65536-10000)%256;
! i0 K8 ^  O; x$ |1 s" ~; f     TH1=0;
* B" H! }' C! F2 m- S  y     TL1=0;
  ?6 d' r+ w) l0 [/ R     tcs230_s2=0;
" R/ r& p9 e2 b7 r     tcs230_s3=1;//选择蓝色滤光器6 e( r; G) J' S$ S- p
     TR0=1;//10毫秒开始计时3 o5 p/ l) M* B* c4 {) C
     TR1=1;//开始计数
% \5 C' N9 p  F# O! s* d+ }1 w& S     while(TF0==0);//等待定时器溢出
$ o* o& ^8 d( D& E" B# P9 g. R3 P* U     TF0=0;//清楚定时器0溢出标志
: d; v' E$ v+ C: g0 F( Z5 C     TR0=0;//关闭定时0
; @* D3 B! M9 r0 q, q- ~; U; ?     TR1=0;
. O3 E: T  j* l4 P+ y     bb=(unsigned long)(TH1*256+TL1)*255/byz;
2 @& D, ]5 i. o% A; ?1 J     if(bb>255)bb=255;//判断RGB值是否合法     / u( e0 A+ `* S% F
     //***********求G值**************************************   
; {7 J' X" x" |5 S3 \! Z     TH0=(65536-10000)/256;
* E" h; E8 @1 r: n           TL0=(65536-10000)%256;
/ r: ^" n7 x# W. g  d     TH1=0;
3 m2 r. V) T, ^1 K& X( u- X% U6 R     TL1=0;
1 z$ ^3 u% b5 e! V     tcs230_s2=1;
3 t/ ]9 Y2 J. @4 r* A     tcs230_s3=1;//选择绿色滤光器
+ N, J6 [! E/ w& h8 I9 P7 j     TR0=1;//10毫秒开始计时+ I, \2 U  f$ C" k4 E
     TR1=1;//开始计数, c: e" ~* O% f( h
     while(TF0==0);//等待定时器溢出4 D0 }/ y+ n/ m& S: C& K
     TF0=0;//清楚定时器0溢出标志& h' X* x, D* ~$ F
     TR0=0;//关闭定时02 r% J' X4 A/ `- G2 }1 Q
     TR1=0;; s1 c* F7 n  N+ |. _4 ^% B
     tcs230_en=1;
: ~2 ~0 w; n) ?+ h- \( d+ Q     gb=(unsigned long)(TH1*256+TL1)*255/gyz;
' G7 a$ H5 ~  q& Q! ~! z     if(gb>255)gb=255;//判断RGB值是否合法  % A0 \$ `1 Z0 |) H0 Q6 T
}
( J, ?# f1 N# E/ S9 Z3 z4 s//******************************************************
% N' _% S8 P' H: e! ?, _# `' e//白平衡子程序
. w' e+ w. r2 v. t; o& xvoid    baipingheng()2 O# r- {# v* X' y+ t5 \6 R
{4 l8 X/ x+ k8 t  d
     //**************求取红色因子***********************) _# p  Z) {! {7 l6 E
     TH0=(65536-10000)/256;
# P. j- h) n# G) l* F           TL0=(65536-10000)%256;
. O( E: @' R9 \! Q6 ]% F     TH1=0;" p$ _1 |7 T- L# F! R7 ?& T/ J9 ], X
     TL1=0;
8 f% Y( U( C; u# J     tcs230_s2=0;8 e6 ]5 n0 k  c  @9 y9 W" S
     tcs230_s3=0;//选择红色滤光器& _  q, V5 _! A' r4 m4 e- H
     tcs230_en=0;
+ }+ ^7 c2 A; J4 c: H     TR0=1;//10毫秒开始计时
( ]; s4 s$ F. t, [3 }7 O$ K     TR1=1;//开始计数" b1 Z2 m/ ?: k
     while(TF0==0);//等待定时器溢出
" y* Y% c& B7 ~- }     TF0=0;//清楚定时器0溢出标志! k: s& A: |5 A4 ~
     TR0=0;//关闭定时0$ B, c# |3 f0 c* Q% d  D
     TR1=0;* m3 ]: @9 t) d( _/ {
     ryz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1)
8 `" G6 D9 K; i: t1 Z* a     //**************求取蓝色因子***********************9 E# ~. t  t1 f. r' B+ Z1 W
     TH0=(65536-10000)/256;0 @$ G- ]0 H4 S
           TL0=(65536-10000)%256;& n5 p$ V0 t+ y2 q
     TH1=0;- P5 I( G. y9 F4 ^% `/ X
     TL1=0;* g  Y8 C7 p4 \
     tcs230_s2=0;
8 o# Q- W; k0 {7 T: x     tcs230_s3=1;//选择蓝色滤光器' q+ t) o& M) c* N
     TR0=1;//10毫秒开始计时
- s! r; g- a! H- d- V* L3 s; i     TR1=1;//开始计数
4 q# |3 n- }* W     while(TF0==0);//等待定时器溢出* s; R% h" |- l* D
     TF0=0;//清楚定时器0溢出标志% r: O" H3 C# H" ^! M$ y' n6 E
     TR0=0;//关闭定时0$ C% F, E' c9 ^
     TR1=0;
& G4 k5 Z9 Y2 N1 Y" a     byz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1)3 M- w6 b0 `' u3 q
     //**************求绿红色因子***********************# s( ]9 |; f" O: w* q8 o& _2 r: p
     TH0=(65536-10000)/256;
7 a' @) n' d; M# U( y           TL0=(65536-10000)%256;
/ I6 d( R& Z2 j. H  ~4 K     TH1=0;  H0 Q: U! G/ }+ f. J6 I; V
     TL1=0;3 |9 h3 q0 P1 H$ Q' l8 ~/ j) i
     tcs230_s2=1;5 T- O3 z( L+ s7 \7 I5 E/ d
     tcs230_s3=1;//选择绿色滤光器% K6 v# i4 o$ C# h
     TR0=1;//10毫秒开始计时) h2 `) L- e& o2 g  ^
     TR1=1;//开始计数1 u  ], v- h( [( B; x5 B+ Y- E7 H
     while(TF0==0);//等待定时器溢出& i7 o3 h$ h# b7 U: r- u
     TF0=0;//清楚定时器0溢出标志
- g! N# i: b& R4 x1 h" F  v     TR0=0;//关闭定时0; j, j: e! j" K' n( D
     TR1=0;$ L7 ^# R- h0 [( m
     tcs230_en=1;" C; o# a3 w4 n
     gyz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1)
! y- m) J' v$ f}
0 [/ W$ _( Q- ~/*======================================================================
7 _  |2 D1 y# Z( J: y LCM初始化1 \6 `/ \& \' j$ @8 `

$ V% B" K+ ^! q) w% i6 J, @: x: D
/ [" u  r2 X/ `% m0 I
…………限于本文篇幅 余下代码请从论坛下载附件…………
+ H+ g, o6 l) b+ U4 W( Z4 Z- C$ Y7 i% `. p. J7 e) X8 V
下载:
# _  K2 ~# w+ L% z0 o
游客,如果您要查看本帖隐藏内容请回复

+ g# F9 M' n0 I: X5 Z# w
  R# @$ s% S/ B5 A

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-22 22:49 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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