久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6430|回復(fù): 3
收起左側(cè)

TCS3200顏色傳感器51單片機(jī)例程 顏色識(shí)別程序帶RGB值

[復(fù)制鏈接]
ID:280979 發(fā)表于 2019-11-13 00:25 | 顯示全部樓層 |閱讀模式
TCS3200顏色傳感器51例程
//==============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數(shù)據(jù)接口
#define Busy         0x80   //用于檢測(cè)LCM狀態(tài)字中的Busy標(biāo)識(shí)
sbit    LCM_RW     = P2^3;  //讀寫控制輸入端,LCD1602的第五腳
sbit    LCM_RS     = P2^4;  //寄存器選擇輸入端,LCD1602的第四腳
sbit    LCM_E      = P2^2;  //使能信號(hào)輸入端,LCD1602的第6腳

//=================顏色傳感模塊連接=====================
/*-----------------------------------------------------
       |EO-----GND
       |S0-----VCC | S2-----P2.0 | OUT-------P3.5
       |S1-----VCC | S3-----P2.1 |
  ---------------------------------------------------*/
sbit    tcs230_s2=P2^0;//TCS230 S2接單片機(jī)P2.0
sbit    tcs230_s3=P2^1;//TCS230 S3接單片機(jī)P2.1
sbit    tcs230_en=P3^0; //TCS230 EN(E0)接GND
//**************函數(shù)聲明***************************************
void    WriteDataLCM                (uchar WDLCM);//LCD模塊寫數(shù)據(jù)
void    WriteCommandLCM        (uchar WCLCM,BuysC); //LCD模塊寫指令
uchar   ReadStatusLCM(void);//讀LCD模塊的忙標(biāo)
void    DisplayOneChar(uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置顯示一個(gè)字符
void    LCMInit(void);//LCD初始
void    DelayMs(uint Ms);//1MS基準(zhǔn)延時(shí)程序
void    baipingheng();//白平衡子程序
void    celiang();//實(shí)際顏色程序
uint    ryz,gyz,byz;//分別定義紅色因子 綠色因子 藍(lán)色因子
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;//設(shè)定T0以工作方式1定時(shí)10毫秒
   LCMInit();//LCD初始
   baipingheng();//上電時(shí)先白平衡一次
   while(1)
   {
       celiang();//顏色測(cè)試
       DisplayOneChar(0, 0,'R');//以十進(jìn)制顯示RGB中紅色的分值
       DisplayOneChar(0, 1, rb/100+0x30); //顯示百位數(shù)據(jù)
       DisplayOneChar(0, 2, rb/10%10+0x30);//顯示十位數(shù)據(jù)
       DisplayOneChar(0, 3, rb%10+0x30);//顯示個(gè)位數(shù)據(jù)
       DisplayOneChar(0, 5,'G');//以十進(jìn)制顯示RGB中綠色的分值
       DisplayOneChar(0, 6, gb/100+0x30); //顯示百位數(shù)據(jù)
       DisplayOneChar(0, 7, gb/10%10+0x30);
       DisplayOneChar(0, 8, gb%10+0x30);
       DisplayOneChar(0, 10,'B');//以十進(jìn)制顯示RGB中藍(lán)色的分值
       DisplayOneChar(0, 11, bb/100+0x30);
       DisplayOneChar(0, 12, bb/10%10+0x30);
       DisplayOneChar(0, 13, bb%10+0x30);
       //*****在LCD1602的第二行以16進(jìn)制顯示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秒測(cè)試一次顏色
   }
}
//******************************************************
//白平衡子程序
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毫秒開始計(jì)時(shí)
     TR1=1;//開始計(jì)數(shù)
     while(TF0==0);//等待定時(shí)器溢出
     TF0=0;//清楚定時(shí)器0溢出標(biāo)志
     TR0=0;//關(guān)閉定時(shí)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;//選擇藍(lán)色濾光器
     TR0=1;//10毫秒開始計(jì)時(shí)
     TR1=1;//開始計(jì)數(shù)
     while(TF0==0);//等待定時(shí)器溢出
     TF0=0;//清楚定時(shí)器0溢出標(biāo)志
     TR0=0;//關(guān)閉定時(shí)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毫秒開始計(jì)時(shí)
     TR1=1;//開始計(jì)數(shù)
     while(TF0==0);//等待定時(shí)器溢出
     TF0=0;//清楚定時(shí)器0溢出標(biāo)志
     TR0=0;//關(guān)閉定時(shí)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毫秒開始計(jì)時(shí)
     TR1=1;//開始計(jì)數(shù)
     while(TF0==0);//等待定時(shí)器溢出
     TF0=0;//清楚定時(shí)器0溢出標(biāo)志
     TR0=0;//關(guān)閉定時(shí)0
     TR1=0;
     ryz=TH1*256+TL1;//其實(shí)這里的比例因子應(yīng)該為255/(TH1*256+TL1)
     //**************求取藍(lán)色因子***********************
     TH0=(65536-10000)/256;
           TL0=(65536-10000)%256;
     TH1=0;
     TL1=0;
     tcs230_s2=0;
     tcs230_s3=1;//選擇藍(lán)色濾光器
     TR0=1;//10毫秒開始計(jì)時(shí)
     TR1=1;//開始計(jì)數(shù)
     while(TF0==0);//等待定時(shí)器溢出
     TF0=0;//清楚定時(shí)器0溢出標(biāo)志
     TR0=0;//關(guān)閉定時(shí)0
     TR1=0;
     byz=TH1*256+TL1;//其實(shí)這里的比例因子應(yīng)該為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毫秒開始計(jì)時(shí)
     TR1=1;//開始計(jì)數(shù)
     while(TF0==0);//等待定時(shí)器溢出
     TF0=0;//清楚定時(shí)器0溢出標(biāo)志
     TR0=0;//關(guān)閉定時(shí)0
     TR1=0;
     tcs230_en=1;
     gyz=TH1*256+TL1;//其實(shí)這里的比例因子應(yīng)該為255/(TH1*256+TL1)
}
/*======================================================================
LCM初始化
======================================================================*/
void LCMInit(void)
{
LCM_Data = 0;
WriteCommandLCM(0x38,0); //三次顯示模式設(shè)置,不檢測(cè)忙信號(hào)
DelayMs(5);
WriteCommandLCM(0x38,0);
DelayMs(5);
WriteCommandLCM(0x38,0);
DelayMs(5);
WriteCommandLCM(0x38,1); //顯示模式設(shè)置,開始要求每次檢測(cè)忙信號(hào)
WriteCommandLCM(0x08,1); //關(guān)閉顯示
WriteCommandLCM(0x01,1); //顯示清屏
WriteCommandLCM(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置
WriteCommandLCM(0x0C,1); // 顯示開及光標(biāo)設(shè)置
DelayMs(100);
}
//==============================LCD1602顯示子程序================================================
// 寫數(shù)據(jù)函數(shù): E =高脈沖 RS=1 RW=0
//======================================================================*/
void WriteDataLCM(uchar WDLCM)
{
ReadStatusLCM(); //檢測(cè)忙
LCM_Data = WDLCM;
LCM_RS = 1;
LCM_RW = 0;
LCM_E = 0; //若晶振速度太高可以在這后加小的延時(shí)
LCM_E = 0; //延時(shí)
LCM_E = 1;
}
/*====================================================================
  寫指令函數(shù): E=高脈沖 RS=0 RW=0
======================================================================*/
void WriteCommandLCM(uchar WCLCM,BuysC) //BuysC為0時(shí)忽略忙檢測(cè)
{
if (BuysC) ReadStatusLCM(); //根據(jù)需要檢測(cè)忙
LCM_Data = WCLCM;
LCM_RS = 0;
LCM_RW = 0;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
}
/*====================================================================
  正常讀寫操作之前必須檢測(cè)LCD控制器狀態(tài):E=1 RS=0 RW=1;
  DB7: 0 LCD控制器空閑,1 LCD控制器忙。
  讀狀態(tài)
======================================================================*/
uchar ReadStatusLCM(void)
{
LCM_Data = 0xFF;
LCM_RS = 0;
LCM_RW = 1;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
while (LCM_Data & Busy); //檢測(cè)忙信號(hào)  
return(LCM_Data);
}
/*======================================================================
功 能:     在1602 指定位置顯示一個(gè)字符:第一行位置0~15,第二行16~31
說 明:     第 X 行,第 y 列  注意:字符串不能長(zhǎng)于16個(gè)字符
======================================================================*/
void DisplayOneChar( uchar X, uchar Y, uchar ASCII)
{
  X &= 0x1;
  Y &= 0xF; //限制Y不能大于15,X不能大于1
  if (X) Y |= 0x40; //當(dāng)要顯示第二行時(shí)地址碼+0x40;
  Y |= 0x80; // 算出指令碼
  WriteCommandLCM(Y, 0); //這里不檢測(cè)忙信號(hào),發(fā)送地址碼
  WriteDataLCM(ASCII);
}
/*====================================================================
  設(shè)定延時(shí)時(shí)間:x*1ms
====================================================================*/
void DelayMs(uint Ms)
{
  uint i,TempCyc;
  for(i=0;i<Ms;i++)
  {
    TempCyc = 250;
    while(TempCyc--);
  }
}


RGB色階代碼查詢 代碼反向查詢顏色.rar

134 Bytes, 下載次數(shù): 59, 下載積分: 黑幣 -5

TCS3200顏色傳感器51例程.rar

28.22 KB, 下載次數(shù): 78, 下載積分: 黑幣 -5

TCS3200顏色傳感器配套資料.rar

417.11 KB, 下載次數(shù): 60, 下載積分: 黑幣 -5

Ycolor.rar

72.02 KB, 下載次數(shù): 45, 下載積分: 黑幣 -5

測(cè)頻參考程序.rar

120.04 KB, 下載次數(shù): 45, 下載積分: 黑幣 -5

測(cè)試程序.rar

22.09 KB, 下載次數(shù): 42, 下載積分: 黑幣 -5

顏色采集.rar

99.13 KB, 下載次數(shù): 47, 下載積分: 黑幣 -5

顏色識(shí)別程序帶RGB值.rar

27.65 KB, 下載次數(shù): 66, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

ID:644473 發(fā)表于 2019-11-20 18:16 | 顯示全部樓層
學(xué)習(xí)了。LCD1602接口連接方法如果是直接安插在單片機(jī)上的還需要單獨(dú)設(shè)置嗎?
回復(fù)

使用道具 舉報(bào)

ID:480232 發(fā)表于 2019-12-19 08:52 | 顯示全部樓層
有上位機(jī)程序嗎
回復(fù)

使用道具 舉報(bào)

ID:323454 發(fā)表于 2020-3-22 10:02 | 顯示全部樓層
大家不要下載 第一個(gè)文件就1K打開之后啥都沒有 是個(gè)空的文本
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本黄色大片免费 | 国产羞羞视频在线观看 | 久久性av| 奇米久久久 | 国产精品日韩高清伦字幕搜索 | 中文字幕亚洲视频 | 免费成人在线网站 | 国产一区久久久 | 成人在线精品视频 | 精品在线一区二区 | 日韩精品成人 | 国产精品爱久久久久久久 | 卡通动漫第一页 | 国产精品视频一区二区三区 | 免费看大片bbbb欧美 | 亚洲 欧美 激情 另类 校园 | 国产在线不卡 | 一区二区视频 | 人人叉 | 一道本在线| 欧美日韩午夜精品 | 99精品电影 | 国产一级一级国产 | 波多野结衣先锋影音 | 精品国产乱码久久久久久图片 | 色婷婷av久久久久久久 | 欧美乱码精品一区二区三区 | 国产精品视频免费观看 | 亚洲一区二区三区四区五区中文 | 欧美视频在线看 | 国产一区 在线视频 | 伊人伊成久久人综合网站 | 中文字幕视频在线 | 国产视频一区二区 | 99精品国产一区二区三区 | 欧美一区二区在线视频 | 欧美国产日韩在线观看 | 久久精品无码一区二区三区 | 亚洲视频免费在线观看 | 国内精品久久久久久久影视简单 | 久久久久久免费精品一区二区三区 |