|
這次課程設(shè)計(jì)主要用的TCS3200顏色傳感器,附件里面有傳感器的原理,結(jié)構(gòu)圖,調(diào)試?yán)?br />
TCS3200顏色傳感器簡(jiǎn)介:
TCS3200顏色傳感模塊電路及實(shí)驗(yàn)電路圖:
控制板是通用型的,可以控制語(yǔ)音模塊 、超聲波模塊、AD模塊等,如果只是顏色傳感器用,AT24C01部分、按鍵部分可以不焊接;
超聲波控制板電路原理圖:
51單片機(jī)源程序:
- /*模塊的使用方法:把板距離白紙2CM處開(kāi)機(jī),使輸出的數(shù)據(jù)位FFFFFFF(白平衡),接下來(lái)就可以正常使用
- 實(shí)現(xiàn)功能:對(duì)顏色傳感器輸出RGB
- 使用芯片:AT89S52 或者 STC89C52 或AT89S51 STC89C51
- 晶振:12MHZ
- 編譯環(huán)境: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數(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毫秒開(kāi)始計(jì)時(shí)
- TR1=1;//開(kāi)始計(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毫秒開(kāi)始計(jì)時(shí)
- TR1=1;//開(kāi)始計(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毫秒開(kāi)始計(jì)時(shí)
- TR1=1;//開(kāi)始計(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毫秒開(kāi)始計(jì)時(shí)
- TR1=1;//開(kāi)始計(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毫秒開(kāi)始計(jì)時(shí)
- TR1=1;//開(kāi)始計(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毫秒開(kāi)始計(jì)時(shí)
- TR1=1;//開(kāi)始計(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初始化
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
下載:
TCS3200顏色傳感器配套資料.rar
(603.14 KB, 下載次數(shù): 504)
2017-4-7 22:44 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|