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