仿真圖proteus 7.8
程序編譯器:keil 4/keil 5
編程語言:C語言
設(shè)計編號:C0049
硬件構(gòu)成:
51單片機
LCD1602液晶
光敏電阻
超聲波
ADC0832
LED燈
功能介紹
1.按鍵說明:從左邊第一個起,減鍵、加鍵、設(shè)置鍵。單獨一個控制為復(fù)位按鍵。
2.LCD1602液晶第一行顯示超聲波的距離,第二行顯示光線的強弱。
3.可以設(shè)定超聲波和光敏的下限值,并具有掉電保存功能,數(shù)據(jù)保存在STC單片機的內(nèi)部。
4.用光敏傳感器測光線亮度,低于設(shè)置值時自動開啟燈光。
5.用超聲波測距離,低于設(shè)置值時自動將遠光燈變成近光燈,大于設(shè)置值時又會自動變換成遠光。
硬件設(shè)計
根據(jù)本次設(shè)計的要求,設(shè)計出一款基于51單片機的自動切換遠近光燈的設(shè)計。所以本次設(shè)計硬件部分,中央處理器采用了STC89C52RC單片機,另外使用兩個燈珠代表遠近光燈,感光部分采用了光敏電阻,因為光敏電阻輸出的是電壓模擬信號,單片機不能直接處理模擬信號,所以經(jīng)過ADC0832進行轉(zhuǎn)化成數(shù)字信號,還有顯示部分采用了LCD1602液晶,還增加按鍵部分電路,可以選擇手自動切換遠近光燈,最后還是用了超聲模塊進行檢測距離。
仿真圖
原理圖
源程序:
顯示函數(shù)
void display() //顯示函數(shù)
{
if(state==0) //如果是非設(shè)置狀態(tài)
{
LCD1602_write(0,0x80); //第一行
LCD1602_writebyte("distance:"); //顯示距離
if(S>99) LCD1602_write(1,0x30+S/100%10);
else LCD1602_writebyte(" ");
if(S>9) LCD1602_write(1,0x30+S/10%10);
else LCD1602_writebyte(" ");
LCD1602_write(1,0x30+S%10);
LCD1602_writebyte("cm ");
LCD1602_write(0,0xC0); //第二行
LCD1602_writebyte("light:"); //顯示光照強度
if(light>99) LCD1602_write(1,0x30+light/100%10);
else LCD1602_writebyte(" ");
if(light>9) LCD1602_write(1,0x30+light/10%10);
else LCD1602_writebyte(" ");
LCD1602_write(1,0x30+light%10);
LCD1602_writebyte("% ");
}
else //設(shè)置狀態(tài)
{
LCD1602_write(0,0x80); //第一行
LCD1602_writebyte("dis_set:"); //設(shè)置距離
if(state==1&&s0) LCD1602_writebyte(" "); //閃爍效果
else
{
if(S_set>99) LCD1602_write(1,0x30+S_set/100%10);
else LCD1602_writebyte(" ");
if(S_set>9) LCD1602_write(1,0x30+S_set/10%10);
else LCD1602_writebyte(" ");
LCD1602_write(1,0x30+S_set%10);
}
LCD1602_writebyte("cm ");
LCD1602_write(0,0xC0);
LCD1602_writebyte("lig_set:"); //設(shè)置光照
if(state==2&&s0) LCD1602_writebyte(" ");
else
{
if(light_set>99) LCD1602_write(1,0x30+light_set/100%10);
else LCD1602_writebyte(" ");
if(light_set>9) LCD1602_write(1,0x30+light_set/10%10);
else LCD1602_writebyte(" ");
LCD1602_write(1,0x30+light_set%10);
}
LCD1602_writebyte("% ");
}
}
光照處理
void AD_dispose() //光照處理
{
if(ad_count<10) //讀十次光照數(shù)據(jù),取平均值,起到濾波的作用
{
ad_dat+=A_D(1);
ad_count++;
}
else
{
light=ad_dat/10;
light=(light*100)/255; //最大是255,所以這里擴大100倍除以255,可以得到百分比數(shù)據(jù)
ad_count=0;
ad_dat=0;
}
}
main函數(shù)
void main()
{
interrupt_int(); //調(diào)用定時器初始化函數(shù)
LCD1602_cls(); //調(diào)用1602初始化函數(shù)
read_memory(); //調(diào)用讀存儲
init_measuring(); //調(diào)用超聲波相應(yīng)端口初始化
while(1)
{
display(); //顯示函數(shù)
if(ir_ok)
{
ir_ok=0;
trigger(); //觸發(fā)超聲波啟動
while(echo==0) //等待回聲&&TH0<200
{
;
}
measuring(); //進行距離測量
init_measuring(); //超聲波相應(yīng)端口初始化
}
if(memory_flag) //如果存儲標(biāo)志位是1
{
memory_flag=0; //清0,
memory(); //執(zhí)行一次存儲函數(shù)
}
if(A_M) //如果是自動狀態(tài)
{
led1=0; //自動模式指示燈點亮
led2=1;
police(); //執(zhí)行自動處理函數(shù)
}
else //否則
{
led2=0; //手動指示燈點亮
led1=1;
}
AD_dispose(); //調(diào)用AD處理函數(shù)
switch(beam) //根據(jù)beam的值,切換遠近光燈狀態(tài)
{
case 0:LED_1=1;LED_2=1;break; //關(guān)閉
case 1:LED_1=1;LED_2=0;break; //近光
case 2:LED_1=0;LED_2=1;break; //遠光
}
}
}
器件清單:
設(shè)計說明書:
設(shè)計背景
隨著日益成熟的交通網(wǎng)絡(luò)的發(fā)展,汽車成為了人類出行不可缺少的交通工具。交通事故的頻繁發(fā)生成為了人們?nèi)諠u擔(dān)憂的問題,人們更加關(guān)心汽車的安全性能。根據(jù)報道的數(shù)據(jù)顯示,我國夜間發(fā)生的交通事故中,70%左右是由于違章使用氙氣燈造成燈光炫目,使駕駛員無法看清前方路況而發(fā)生的。照明系統(tǒng)是汽車主動安全的重要組成部分之一,如今汽車前照燈燈光光型單一的傳統(tǒng)照明系統(tǒng)已經(jīng)無法跟上當(dāng)前汽車安全性能發(fā)展的趨勢;所以,為了減少交通事故的發(fā)生,考慮到汽車的人性化設(shè)計。本文采用 STC89C52 單片機設(shè)計了一款自動切換遠近光的汽車前照燈系統(tǒng)。這種前照燈系統(tǒng)更加智能化,能消除存在的安全隱患。
目標(biāo)、研究內(nèi)容和技術(shù)要求
結(jié)合所學(xué)課程的基礎(chǔ)專業(yè)知識和基本技能,熟悉單片機機其他硬件的相關(guān)知識,完成以下工作:
第一步,查閱資料,選擇合適的硬件,確定硬件系統(tǒng)框圖
第二步,使用AD畫圖;
第三步,畫圖程序流程圖,并使用KEIL完成程序的編寫。
第四步,調(diào)試。
實現(xiàn)功能
1、檢測環(huán)境光強。
2、實現(xiàn)自動切換遠近光燈。
3、增加手動切換遠近光。
4、使用液晶顯示實時數(shù)據(jù)
設(shè)計資料清單
全部資料