1. 我用的是AT89S52的單片機,運行以下函數一直不正常,最後一個chackcolor的函數沒有輸出值。
使用printf函數之前,你可以加一句。
TI=0;
再試試效果。
2. 單片機PWM控制RGB-led程序
RGB-LED變化出64中不同的顏色,......
----
每種顏色的LED,要有四種亮度。
三種顏色搭配,就有 64 種顏色了。
每種顏色的LED,要有四種亮度:不亮、1/3亮、2/3亮、全亮。
其實,並不難控制。
都用不上 PWM 控制器。
用一個定時器,每隔一毫秒中斷一次,對三路輸出,控制一下即可。
3. 用 stc12c5a60s2單片機控制顏色感測器tcs3200的程序,我做得不知為什麼識別不了,
1、參考網上程序或者模塊提供的程序
2、仔細參讀datasheet,尤其研究時序以及邏輯功能的實現
3、多動腦筋思考,學會調試程序,多網路Google。
/*模塊的使用方法:把板距離白紙2CM處開機,使輸出的數據位FFFFFFF(白平衡),接下來就可以正常使用
實現功能:對顏色感測器輸出RGB
使用晶元:AT89S52或者STC89C52或AT89S51STC89C51
晶振:12MHZ
編譯環境:Keil
作者:zhengzhongxign39*/
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
//==============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|
---------------------------------------------------*/
//================================================*/
#defineLCM_DataP0//LCD1602數據介面
#defineBusy0x80//用於檢測LCM狀態字中的Busy標識
sbitLCM_RW=P2^3;//讀寫控制輸入端,LCD1602的第五腳
sbitLCM_RS=P2^4;//寄存器選擇輸入端,LCD1602的第四腳
sbitLCM_E=P2^2;//使能信號輸入端,LCD1602的第6腳
//=================顏色感測模塊連接=====================
/*-----------------------------------------------------
|EO-----GND
|S0-----VCC|S2-----P2.0|OUT-------P3.5
|S1-----VCC|S3-----P2.1|
---------------------------------------------------*/
sbittcs230_s2=P2^0;//TCS230S2接單片機P2.0
sbittcs230_s3=P2^1;//TCS230S3接單片機P2.1
sbittcs230_en=P3^0;//TCS230EN(E0)接GND
//**************函數聲明***************************************
voidWriteDataLCM(ucharWDLCM);//LCD模塊寫數據
voidWriteCommandLCM(ucharWCLCM,BuysC);//LCD模塊寫指令
ucharReadStatusLCM(void);//讀LCD模塊的忙標
voidDisplayOneChar(ucharX,ucharY,ucharASCII);//在第X+1行的第Y+1位置顯示一個字元
voidLCMInit(void);//LCD初始
voidDelayMs(uintMs);//1MS基準延時程序
voidpingheng();//白平衡子程序
voidceliang();//實際顏色程序
uintryz,gyz,byz;//分別定義紅色因子綠色因子藍色因子
uintrb,gb,bb;//RGB值
uchartab1[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//***********************主程序******************************
main()
{
TMOD=0x51;//設定T0以工作方式1定時10毫秒
LCMInit();//LCD初始
pingheng();//上電時先白平衡一次
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秒測試一次顏色
}
}
//******************************************************
//白平衡子程序
voidceliang()
{
//*********求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=(unsignedlong)(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=(unsignedlong)(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=(unsignedlong)(TH1*256+TL1)*255/gyz;
if(gb>255)gb=255;//判斷RGB值是否合法
}
//******************************************************
//白平衡子程序
voidpingheng()
{
//**************求取紅色因子***********************
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初始化
其他程序網上自己找找參照
4. 51單片機紅外感應開關代碼怎麼寫
RE200B紅外熱釋電處理晶元BISS0001,BISS0001是一款具有較高性能的感測信號處理集成電路,它配以熱釋電紅外感測器和少量外接元器件構成被動式的熱釋電紅外開關。它能自動快速開啟各類白熾燈、熒光燈、蜂鳴器、自動門、電風扇、烘乾機和自動洗手池等裝置,特別適用於企業、賓館、商場、庫房及家庭的過道走廊等敏感區域,或用於安全區域的自動燈光、照明和報警系統[6]。該處理晶元具有CMOS工藝,數模混合,具有獨立的高輸入阻抗運算放大器;內部的雙向鑒幅器可有效抑制干擾,內設延遲時間定時器和封鎖時間定時器,採用16腳DIP封裝等特點。紅外感測器接收到人體紅外信號經BISS0001處理後輸出輸給單片機P1.0口,TEL0表示接STC89C52是的P1.0口,通過對P1.0電平的判斷,實現對單片機外圍電路的控制.具體去看我的網路文庫「基於單片機的紅外淋浴器的設計」。
5. 單片機中的代碼sensor_low[1]=255是什麼意思
從P1口以二進制形式輸出255至0的數
程序的解釋:
delay是一個延時函數
進入主函數後,有一個名為m的變數初值為255,主循環中先從P1埠輸出當前m的值(255),然後延時,然後m減1,之後再次循環到P1=m處,此時m=254,從P1輸出後延時,然後自減1,之後再次循環到p1=m處,此時m=253……
6. 如何用單片機讀取顏色感測器的數值
單片機只能用來處理數據,檢測氣體是需要用感測器,有時還需要用放大器把感測器的微弱信號放大到足夠單片機讀取的幅度(通常是1v-5v),然後根據電壓的高低來判定(a/d模擬量轉換成數字量)氣體的濃度
7. 如何用單片機讀取顏色感測器的數值
首先您需要確定顏色感測器的通信方式,然後確定您目前的單片機是否支持該通信方式。比如感測器通信用的spi,那麼您直接把單片機的spi介面和感測器的連接起來,然後根據顏色感測器的數據手冊寫個SPI的讀程序,來讀取數值。希望對您能夠有用。
8. 求單片機控制rgb燈顏色漸變的代碼。控制一個燈就行。顏色要都包括。
首先理解成你有三個顏色的LED各一個,紅綠藍,然後用三個IO口控制。
第一:占空比,白話就是不停的開關開關(頻率至少要達到60赫茲肉眼才不會覺得閃動),當開的時間長,關閉的是間短,則很亮,當開的時間短,關的時間長,則暗,關閉的時間就是占空比中的:占空。
第二:顏色的混合,可以參考顏色表,網路都很多,就是紅+綠=,紅+藍,綠+藍,紅+綠+藍,然後在這個基礎上,調整三個LED的亮度,理論上能達到所有的色值。
第三:這東西其實就是幾乎所有LED顯像中一個LED的顯像方式。
9. 基於51單片機顏色感測器TCS3200的設計問題
你好!
有這些器材就夠了,上位機採用什麼語言編程?可以嘗試幫你完成
10. 51單片機顏色感測器 請問顏色感測器怎麼編程,為什麼要使用計時器。那個計時器怎麼用
計時 一個時間段內 不同顏色反回的脈沖數 顏色值不同脈沖個數不同 以得出RGB值