|
最初接觸單片機(jī)就是自己想把自己的汽車改成自動(dòng)大燈(可能是自己懶,又可能是為了安全,但后面實(shí)際上耗費(fèi)了大量精力)。最開始是買了個(gè)開發(fā)板在家看教程學(xué)習(xí)了好幾天,然后就買了繼電器,8個(gè)一起的,但我因車的原因,只用了兩個(gè),所以大的開發(fā)板加上長(zhǎng)的繼電器放在車上換擋的地方,你們腦補(bǔ)一下有多亂多丑。經(jīng)過了一年多的升級(jí),做了最小系統(tǒng),把最初的光敏二極管換成了紅外線感應(yīng)器(自己焊接的感應(yīng)器),把8組繼電器換成了2個(gè),可以直接放在儀表臺(tái)下面。 ————————這里是正題————————-------功能:通過紅外線感應(yīng)器接收自然光,adc轉(zhuǎn)換器處理接收到的光的強(qiáng)度,再發(fā)送到51單片機(jī)處理,單片機(jī)通過設(shè)定好的判斷程序控制繼電器閉合,延時(shí)斷開。
-------材料:?jiǎn)纹瑱C(jī)最小系統(tǒng) 圖1(電路板+stc8952芯片)、紅外傳感 圖2、繼電器 圖3、pcf8591adc轉(zhuǎn)換器 圖4、車載usb充電器、usb充電線給單片機(jī) 供電用,所以要看好單片機(jī)的接口是哪種)、杜邦線若干。
------接線及燒寫:繼電器控制接口接單片機(jī)p1.4與p1.5,pcf8591的scl與sda分別接單片機(jī)的p2.1與p2.0,紅外感應(yīng)器out接口接pcf8591的AIN0或AIN1(兩個(gè)接口只有一個(gè)是正確的),其余的該接vcc的接vcc,該接gnd的接gnd(汽車部分接線不懂的請(qǐng)咨詢汽車維修工程師,請(qǐng)勿亂接,發(fā)生危險(xiǎn)我是不負(fù)責(zé)的),下載器我用的cp2102,怎么下載請(qǐng)去百度一下。最后附上程序,程序可以根據(jù)自己喜好去修改,若有高手發(fā)現(xiàn)程序中有可以優(yōu)化的地方請(qǐng)指出及把修改后的程序發(fā)出來。
圖1
單片機(jī)最小系統(tǒng)
圖2
紅外感應(yīng)器
圖3
2路繼電器
圖4
pcf8591
下載器
下載器
紅外線強(qiáng)度+out+按鍵V1.2的單片機(jī)源程序如下:
- /****************************************************
- 自動(dòng)控制
- 紅外線感應(yīng)電阻IR與ADC構(gòu)成亮度檢測(cè)電路,
- 光線弱時(shí)繼電器閉合燈光開啟,光線強(qiáng)時(shí)繼電器延時(shí)斷開燈光關(guān)閉,達(dá)到節(jié)約電量同時(shí)保證黑夜行駛安全。
- ****************************************************/
- #include<reg52.h>
- #include<intrins.h>
- #include"IIC.h"
- typedef unsigned int u16; //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
- typedef unsigned char u8;
- unsigned char Voltage;
- unsigned char Voltagetwo;
- sbit turn1=P1^4;//開關(guān)
- sbit turn2=P1^5;
- sbit turn3=P1^6;
- sbit turn0=P1^7;//懸空
- sbit turn4=P1^3;
- sbit k1=P3^6;//按鍵
- u16 t;
- u8 bz;
- void delay(int j) //誤差 0us
- {
- int i;
- for(j;j>0;j--)
- for(i=0;i<110;i++);
- }
-
- void IR() //第一感應(yīng)器
- {
- ADC_Init();
- Voltage=ADC_Read(); //讀取光敏電阻采樣電壓//最大255,用10進(jìn)制轉(zhuǎn)換為16進(jìn)制
-
- if((Voltage<0x0a)&&(bz==0)){bz=1;turn1=0;} //比較函數(shù)
- if(bz==1){t=t+1;if(t>20){bz=0;t=0;}} //時(shí)鐘延時(shí)函數(shù)
- if((Voltage<0x32)&&(bz==0)){bz=0;turn2=0;}
- if(bz==1){t=t+1;if(t>200){bz=0;t=0;}} //時(shí)鐘延時(shí)函數(shù)
-
- if((Voltage>0x12)&&(bz==0)){bz=2;turn0=1;}//故意添加一個(gè)空指令來延長(zhǎng)時(shí)間
- if(bz==2){t=t+1;if(t>1100){bz=0;t=0;}}
- if((Voltage>0x50)&&(bz==0)){bz=3;turn1=1;}
- if(bz==3){t=t+1;if(t>1100){bz=0;t=0;}}
- if((Voltage>0xc8)&&(bz==0)){bz=0;turn2=1;}
-
- if(k1==0){t=t+1;if(t>20){turn3=~turn3;t=0;}}//按鍵處理
- }
- void IRw() //第二個(gè)感應(yīng)器
- {
- ADC_Inittwo();
- Voltagetwo=ADC_Read(); //讀取光敏電阻采樣電壓//最大255,用10進(jìn)制轉(zhuǎn)換為16進(jìn)制
-
- //以下是遠(yuǎn)光控制
-
- if(Voltagetwo>0x64){turn4=0;}
- if(Voltagetwo<0x32){turn4=1;}
- }
- void main()
- {
- turn1=1; //開機(jī)優(yōu)先處理值
- turn2=1;
- turn4=1;
- delay(500);
- while(1)
- {
- IR();
- IRw();
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
紅外線強(qiáng)度 out 按鍵V1.2 - 副本.rar
(47.56 KB, 下載次數(shù): 63)
2018-7-24 15:35 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|