用 stc12c5a60s2单片机控制颜色传感器tcs3200的程序,我做得不知为什么识别不了,

用 stc12c5a60s2单片机控制颜色传感器tcs3200的程序,我做得不知为什么识别不了,,第1张

1、参考网上程序或者模块提供的程序

2、仔细参读datasheet,尤其研究时序以及逻辑功能的实现

3、多动脑筋思考,学会调试程序,多百度Google。

/*模块的使用方法:把板距离白纸2CM处开机,使输出的数据位FFFFFFF(白平衡),接下来就可以正常使用

实现功能:对颜色传感器输出RGB

使用芯片:AT89S52 或者 STC89C52 或AT89S51 STC89C51

晶振:12MHZ

编译环境:Keil

作者:zhengzhongxign39*/

#include <reg52.h>

#define uchar unsigned char

#define uint  unsigned int

//==============LCD1602接口连接方法=====================

/*-----------------------------------------------------

       |DB0-----P0.0 | DB4-----P0.4 | RW-------P2.3    |

       |DB1-----P0.1 | DB5-----P0.5 | RS-------P2.4    |

       |DB2-----P0.2 | DB6-----P0.6 | E--------P2.2    |

       |DB3-----P0.3 | DB7-----P0.7 | 

    ---------------------------------------------------*/

//================================================*/              

#define LCM_Data     P0    //LCD1602数据接口

#define Busy         0x80   //用于检测LCM状态腔好字中的Busy标识

sbit    LCM_RW     = P2^3  //读写控制输入端,LCD1602的第五脚

sbit    LCM_RS     = P2^4  //寄存器选择输入端,LCD1602的第四脚

sbit    LCM_E      = P2^2  //使能信号输入端,LCD1602的第6脚

//=================颜色传感模块连接=====================

/*-----------------------------------------------------

       |EO-----GND

       |S0-----VCC | S2-----P2.0 | OUT-------P3.5 

       |S1-----VCC | S3-----P2.1 | 

  ---------------------------------------------------*/

sbit    tcs230_s2=P2^0//TCS230 S2接单片机P2.0

sbit    tcs230_s3=P2^1//TCS230 S3接单片机P2.1

sbit    tcs230_en=P3^0 //TCS230 EN(E0)接GND

//**************函数声明***************************************

void    WriteDataLCM                (uchar WDLCM)//LCD模块写数据

void    WriteCommandLCM        (uchar WCLCM,BuysC) //LCD模块写指令

uchar   ReadStatusLCM(void)//读LCD模块的忙标

void    DisplayOneChar(uchar X,uchar Y,uchar ASCII)//在第X+1行的第Y+1位置显示一个字符

void    LCMInit(void)//LCD初始

void    DelayMs(uint Ms)//1MS基准延时程序

void    baipingheng()//白山圆旅平衡子程序

void   逗凳 celiang()//实际颜色程序

uint    ryz,gyz,byz//分别定义红色因子 绿色因子 蓝色因子

uint    rb,gb,bb//RGB值

uchar   tab1[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}

//***********************主程序******************************

main()   

{   

   TMOD=0x51//设定T0以工作方式1定时10毫秒

   LCMInit()//LCD初始

   baipingheng()//上电时先白平衡一次

   while(1)

   {

       celiang()//颜色测试

       DisplayOneChar(0, 0,'R')//以十进制显示RGB中红色的分值

       DisplayOneChar(0, 1, rb/100+0x30) //显示百位数据

       DisplayOneChar(0, 2, rb/10%10+0x30)//显示十位数据

       DisplayOneChar(0, 3, rb%10+0x30)//显示个位数据

       DisplayOneChar(0, 5,'G')//以十进制显示RGB中绿色的分值

       DisplayOneChar(0, 6, gb/100+0x30) //显示百位数据

       DisplayOneChar(0, 7, gb/10%10+0x30)

       DisplayOneChar(0, 8, gb%10+0x30)

       DisplayOneChar(0, 10,'B')//以十进制显示RGB中蓝色的分值

       DisplayOneChar(0, 11, bb/100+0x30)

       DisplayOneChar(0, 12, bb/10%10+0x30)

       DisplayOneChar(0, 13, bb%10+0x30)

       //*****在LCD1602的第二行以16进制显示RGB*******************

       DisplayOneChar(1, 1, tab1[rb/16]) 

       DisplayOneChar(1, 2, tab1[rb%16])

       DisplayOneChar(1, 3, 'H')

       DisplayOneChar(1, 6, tab1[gb/16]) 

       DisplayOneChar(1, 7, tab1[rb%16])

       DisplayOneChar(1, 8, 'H')

       DisplayOneChar(1, 11,tab1[bb/16])

       DisplayOneChar(1, 12,tab1[bb%16])

       DisplayOneChar(1, 13,'H')

       DelayMs(250)//每隔0.25秒测试一次颜色

   }

//******************************************************

//白平衡子程序

void   celiang()

{

     //*********求R值************************************

     TH0=(65536-10000)/256

           TL0=(65536-10000)%256

     TH1=0

     TL1=0

     tcs230_s2=0

     tcs230_s3=0//选择红色滤光器

     tcs230_en=0

     TR0=1//10毫秒开始计时

     TR1=1//开始计数

     while(TF0==0)//等待定时器溢出

     TF0=0//清楚定时器0溢出标志

     TR0=0//关闭定时0

     TR1=0

     rb=(unsigned long)(TH1*256+TL1)*255/ryz

     if(rb>255)rb=255//判断RGB值是否合法

     //***********求B值**************************************

     TH0=(65536-10000)/256

           TL0=(65536-10000)%256

     TH1=0

     TL1=0

     tcs230_s2=0

     tcs230_s3=1//选择蓝色滤光器

     TR0=1//10毫秒开始计时

     TR1=1//开始计数

     while(TF0==0)//等待定时器溢出

     TF0=0//清楚定时器0溢出标志

     TR0=0//关闭定时0

     TR1=0

     bb=(unsigned long)(TH1*256+TL1)*255/byz

     if(bb>255)bb=255//判断RGB值是否合法     

     //***********求G值**************************************   

     TH0=(65536-10000)/256

           TL0=(65536-10000)%256

     TH1=0

     TL1=0

     tcs230_s2=1

     tcs230_s3=1//选择绿色滤光器

     TR0=1//10毫秒开始计时

     TR1=1//开始计数

     while(TF0==0)//等待定时器溢出

     TF0=0//清楚定时器0溢出标志

     TR0=0//关闭定时0

     TR1=0

     tcs230_en=1

     gb=(unsigned long)(TH1*256+TL1)*255/gyz

     if(gb>255)gb=255//判断RGB值是否合法  

}

//******************************************************

//白平衡子程序

void    baipingheng()

{

     //**************求取红色因子***********************

     TH0=(65536-10000)/256

           TL0=(65536-10000)%256

     TH1=0

     TL1=0

     tcs230_s2=0

     tcs230_s3=0//选择红色滤光器

     tcs230_en=0

     TR0=1//10毫秒开始计时

     TR1=1//开始计数

     while(TF0==0)//等待定时器溢出

     TF0=0//清楚定时器0溢出标志

     TR0=0//关闭定时0

     TR1=0

     ryz=TH1*256+TL1//其实这里的比例因子应该为255/(TH1*256+TL1)

     //**************求取蓝色因子***********************

     TH0=(65536-10000)/256

           TL0=(65536-10000)%256

     TH1=0

     TL1=0

     tcs230_s2=0

     tcs230_s3=1//选择蓝色滤光器

     TR0=1//10毫秒开始计时

     TR1=1//开始计数

     while(TF0==0)//等待定时器溢出

     TF0=0//清楚定时器0溢出标志

     TR0=0//关闭定时0

     TR1=0

     byz=TH1*256+TL1//其实这里的比例因子应该为255/(TH1*256+TL1)

     //**************求绿红色因子***********************

     TH0=(65536-10000)/256

           TL0=(65536-10000)%256

     TH1=0

     TL1=0

     tcs230_s2=1

     tcs230_s3=1//选择绿色滤光器

     TR0=1//10毫秒开始计时

     TR1=1//开始计数

     while(TF0==0)//等待定时器溢出

     TF0=0//清楚定时器0溢出标志

     TR0=0//关闭定时0

     TR1=0

     tcs230_en=1

     gyz=TH1*256+TL1//其实这里的比例因子应该为255/(TH1*256+TL1)

}

/*======================================================================

 LCM初始化

其他程序网上自己找找参照

彩的颜察孙色检测器,包括了一块TAOSTCS3200RGB感应芯片和4个白光LED灯,TCS3200能在一定的范围内检测和测量几乎所有的可见光。它适合于色度计测量应用领域。比如彩色打印、医疗诊断、计算机彩色监视器校准以及油漆、纺织品、化妆品和印刷材料的过程控制。 通常所看到的物体颜色,实际上是物体表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反应。白色是由各种频率的可见光混合在一起构成的,也就是说白光中包含着各种颜色的色光(如红R、黄Y、绿G、青V、蓝B、紫P)。根据德国物理学家赫姆霍兹(Helinholtz)的三原色理论可知,各种颜色是由不同比例的三原色(红、绿、蓝)混合而成的。 由上面的三原色感应原理可知,如果知道构成各种颜色的三原色的值,就能够知道所测试物体的颜色。对于TCS3200D来说,当选定一个颜色滤波器时,它只允许某种特定的原色通过,阻止其它原色的通过。例如:当选择红色滤波器时,入射光中只有红色可以通过,蓝色和绿色都被阻止,这样就可以得到红色光的光强;同理,选择其它的滤波器,就可以得到蓝色光和绿首脊色光的光强。通过这三个光强值,就可以分析出反射到TCS3200D传感器上的光的颜色。 TCS3200D传感器有红绿蓝和清除4种滤光器,可以通过其引脚S2和S3的高低电平来选败芹链择滤波器模式。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12534656.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存