|
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
2019-11-13 00:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
134 Bytes, 下載次數(shù): 59, 下載積分: 黑幣 -5
-
-
TCS3200顏色傳感器51例程.rar
2019-11-13 00:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
28.22 KB, 下載次數(shù): 78, 下載積分: 黑幣 -5
-
-
TCS3200顏色傳感器配套資料.rar
2019-11-13 00:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
417.11 KB, 下載次數(shù): 60, 下載積分: 黑幣 -5
-
-
Ycolor.rar
2019-11-13 00:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
72.02 KB, 下載次數(shù): 45, 下載積分: 黑幣 -5
-
-
測(cè)頻參考程序.rar
2019-11-13 00:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
120.04 KB, 下載次數(shù): 45, 下載積分: 黑幣 -5
-
-
測(cè)試程序.rar
2019-11-13 00:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
22.09 KB, 下載次數(shù): 42, 下載積分: 黑幣 -5
-
-
顏色采集.rar
2019-11-13 00:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
99.13 KB, 下載次數(shù): 47, 下載積分: 黑幣 -5
-
-
顏色識(shí)別程序帶RGB值.rar
2019-11-13 00:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
27.65 KB, 下載次數(shù): 66, 下載積分: 黑幣 -5
|