找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5038|回复: 0
收起左侧

TCS3200颜色传感器51单片机例程及使用

[复制链接]
ID:585817 发表于 2019-8-27 13:31 | 显示全部楼层 |阅读模式
颜色传感器的使用方法及源程序
/*实现功能:对颜色传感器输出RGB
得出数据后可到www点59178点com/tools/sejie.asp 查询数据是否正确
使用芯片:AT89S52 或者 STC89C52 或AT89S51 STC89C51
晶振:12MHZ
编译环境:Keil
作者:zhengzhongxign39*/
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
//==============LCD1602接口连接方法=====================
/*-----------------------------------------------------
       |DB0-----P2.0 | DB4-----P2.4 | RW-------P0.6    |
       |DB1-----P2.1 | DB5-----P2.5 | RS-------P0.7    |
       |DB2-----P2.2 | DB6-----P2.6 | E--------P0.5    |
       |DB3-----P2.3 | DB7-----P2.7 |
    ---------------------------------------------------*/
//================================================*/              
#define LCM_Data     P0    //LCD1602数据接口
#define Busy         0x80   //用于检测LCM状态字中的Busy标识
sbit    LCM_RW     = P0^6;  //读写控制输入端,LCD1602的第五脚
sbit    LCM_RS     = P0^7;  //寄存器选择输入端,LCD1602的第四脚
sbit    LCM_E      = P0^5;  //使能信号输入端,LCD1602的第6脚

//=================颜色传感模块连接=====================
/*-----------------------------------------------------
       |EO-----GND
       |S0-----VCC | S2-----P1.0 | OUT-------P3.5
       |S1-----VCC | S3-----P1.1 |
  ---------------------------------------------------*/
sbit    tcs230_s2=P1^0;//TCS230 S2接单片机P1.0
sbit    tcs230_s3=P1^1;//TCS230 S3接单片机P1.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初始化
=====================================这是部分程序。

51hei图片20190827132734.png

TCS3200颜色传感器51例程.zip

402.57 KB, 下载次数: 93, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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