突然發現上個月買的單片機盒子里有個光敏電阻,這個沒玩過,所以趕緊試試。光敏電阻器的阻值隨入射光線(可見光)的強弱變化而變化,在黑暗條件下,它的阻值(暗阻)可達1~10M歐,在強光條件(100LX)下,它阻值(亮阻)僅有幾百至數千歐姆。
下面看一下電路圖:(我們把光敏電阻接入AIN0通道的J2插針處)
如何操作AD還是按照前篇文章的三步走戰略,但是光敏電阻組值變動范圍太大,很難嚴格的說出量程范圍,我們只需要大體估計個就行,反正有比例關系。
我們知道當沒有光照射的時候,光敏電阻阻值最大,AD將獲得最大值(全1),我們索性規定當沒有光照射的時候,輸入的電壓就是5V,這樣對應的系數就有了,255 / 5 = 51 。(有些朋友可能會亂,哪里來這么多的規定!?要明白我要要檢測AD轉換的數字值,8位AD最大只能顯示255,所以你模擬量再怎么變,AD最大到255就不動了,也許AD達到255的時候,我們估計的電阻值距離實際電阻值相差甚遠,不過沒關系,大體的比例關系有了),確定了系數就好了(51),沒有光照情況下,將輸出5.0V,其他的值就類推就OK了。
那怎么用呢,在程序中,我們可以檢測測量到的值,當>4.5可粗略認為沒有光照,當>3.0V且<4.5V代表有弱光照射,當<3.0V可代表有強光照射,進而我們可以進行其他的控制。我這里做實驗只是簡單的用LCD顯示一下:
(上圖為光敏電阻有弱光照)
(上圖為光敏電阻有稍強光照)
代碼非常簡單:
#include "1602.h" #include "iic.h" #includeuchar temp,AIN0,TempData[2]; int main() { INIT_1602(); IIC_INIT(); while(1) { temp = read_byte(0x91,0x40); AIN0 = read_byte(0x91,0x40); TempData[0] = AIN0 / 51; TempData[1]=(((uchar)(((float)AIN0 / 51) * 10)) % 10); write_byte_lcd(0,7,0x30 + TempData[0]); write_byte_lcd(0,8,'.'); write_byte_lcd(0,9,0x30 + TempData[1]); } }
工程文件:
-
電路圖
+關注
關注
10325文章
10718瀏覽量
528380 -
光敏電阻
+關注
關注
4文章
293瀏覽量
48919
發布評論請先 登錄
相關推薦
評論