基于單片機(jī)的教室照明智能控制器設(shè)計(jì)含5張CAD圖
基于單片機(jī)的教室照明智能控制器設(shè)計(jì)含5張CAD圖,基于,單片機(jī),教室,照明,智能,控制器,設(shè)計(jì),cad
基于單片機(jī)的教室照明智能控制器設(shè)計(jì)
摘 要
針對(duì)教室照明控制的現(xiàn)狀和大浪費(fèi)的現(xiàn)象,分析了教室照明智能控制的原理和實(shí)現(xiàn)方法,提出了基于教室照明的智能控制的設(shè)計(jì)思路。單片微機(jī)。該系統(tǒng)采用AT89C52作為控制裝置的智能部件,利用熱釋光紅外傳感器檢測(cè)人體的存在,并采用由光敏三極管組成的電路來檢測(cè)環(huán)境光的強(qiáng)度。根據(jù)教室內(nèi)合理的光照情況,通過對(duì)人體現(xiàn)有信號(hào)和環(huán)境光信號(hào)進(jìn)行識(shí)別和判斷,完成系統(tǒng)。教室照明回路的智能控制避免了教室里的電浪費(fèi)。該系統(tǒng)具有體積小、控制方便、可靠性高、專用性強(qiáng)、性價(jià)比高等優(yōu)點(diǎn)。它可以滿足各高校教室照明控制的要求,并在很大程度上節(jié)約了能源。
關(guān)鍵詞:教室燈光控制;熱釋紅外傳感器;光敏電阻;單片機(jī)
Design of Intelligent Controller for classroom Lighting based on single Chip Microcomputer
Abstract
This study of intelligent control classroom lamplight, analyzes the current situation of the development of the classroom light of intelligent control principle and method, is proposed based on single-chip microcomputer intelligent control of the classroom lamplight design. This system to AT89C52 single chip computer as control device of intelligent parts, adopts heat release infrared sensor detects the release of human existence and adopts photoconductive resistance constitutes circuit testing environment light intensity.According to the classroom light conditions and the measured the signal of human body system and ambient light, the system can make reasonable and intelligent judgment and then controls the work of classroom lighting circuit .It is a effective way to avoid the classroom of waste electricity. Small volume, convenient control, high reliability, high specificity and price reasonable make this system satisfy the advantages of large, secondary technical schools classroom light control requirements and greatly reach energy-saving purpose.
Key words:heat release infrared sensor ;photoconductive;dynatron;singlechip
II
目 錄
摘要 Ⅰ
Abstract Ⅱ
1. 緒論 2
1.1 研究背景與發(fā)展現(xiàn)狀 2
1.2 研究主要內(nèi)容 3
2. 設(shè)計(jì)方案的選擇及論證 5
2.1 總體方案論述 5
2.2 方案一的論述 5
2.2.1 方案一的設(shè)計(jì)框圖 5
2.2.2 方案一的設(shè)計(jì)方法 5
2.2.3 方案一的優(yōu)缺點(diǎn) 6
2.3 方案二的論述 6
2.3.1 方案二的設(shè)計(jì)框圖 6
2.3.2 方案二的設(shè)計(jì)方法 6
2.3.3 方案二的優(yōu)缺點(diǎn) 6
2.4 方案的選擇 7
3. 系統(tǒng)軟件設(shè)計(jì) 8
3.1 系統(tǒng)流程分析 8
3.2 LCD1602 顯示設(shè)計(jì) 11
3.3 照明系統(tǒng)開函數(shù)設(shè)計(jì) 11
3.4 按鍵函數(shù)設(shè)計(jì) 14
3.5 時(shí)鐘函數(shù)設(shè)計(jì) 14
4. 硬件設(shè)計(jì) 16
4.1 單片機(jī)最小模塊 16
4.2 光照及當(dāng)前人數(shù)檢測(cè)模塊 16
4.2 光照及當(dāng)前人數(shù)檢測(cè)模塊 17
4.3 按鍵模塊 17
4.4 時(shí)鐘電路模塊 17
4.5 LCD 顯示模塊 18
4.6 照明模塊 18
4.7 實(shí)現(xiàn)結(jié)果 19
5. 總結(jié) 26
5.1 問題與處理 26
5.2 展望 27
參考文獻(xiàn) 28
附錄 29
致 謝 61
1. 緒論
1.1 研究背景與發(fā)展現(xiàn)狀
隨著國(guó)民經(jīng)濟(jì)建設(shè)和社會(huì)物質(zhì)文化水平突飛猛進(jìn)的發(fā)展,人們學(xué)習(xí),工作,活動(dòng),娛樂空間和場(chǎng)所越來越大,所需要的照明設(shè)備種類,數(shù)量和規(guī)模也越來越大了。人民生活水平質(zhì)量近幾年來也取得了快速的提高,人們對(duì)照明的需求也越來越高。然而傳統(tǒng)的照明燈具具備耗能高,光照安逸度差, 照明燈具的壽命也較短,也不便于控制等很多缺點(diǎn),已經(jīng)不能滿足人們的需求,從一開始只供應(yīng)亮度的基本功能到如今有了很多方面的需要,除供給安逸的環(huán)境亮度以外,還要營(yíng)建典雅安逸的氣氛; 人們也要求照明控制形式便利靈活,能夠達(dá)到按需求配置,并且還能滿足節(jié)能環(huán)保,降低運(yùn)行費(fèi)用, 而且要求安裝輕易,維護(hù)容易,要求整個(gè)體系可以供給人們對(duì)照明系統(tǒng)多樣性的需求。需求的變化使得人們對(duì)照明系統(tǒng)產(chǎn)生了新的變化。
資源短缺是如今國(guó)際面臨的新問題,節(jié)約能源,提高效益也就成為了我們將要研究的問題。自從上世紀(jì)年代能源危機(jī)爆發(fā)至今以來,世界對(duì)于能源安全的關(guān)注度也越來越高。自從改革開放以來, 國(guó)家社會(huì)經(jīng)濟(jì)與日俱增的發(fā)展,對(duì)于資源的依賴性也愈來愈高,資源短缺與環(huán)境污染局勢(shì)也逐漸嚴(yán)峻。因此,節(jié)約能源,保護(hù)環(huán)境已成為我們當(dāng)前的緊要任務(wù)。
隨著近年來智能技術(shù)的迅速發(fā)展,智能控制技術(shù)正以突飛猛進(jìn)的速度向國(guó)民經(jīng)濟(jì)的各個(gè)領(lǐng)域發(fā)展,并逐漸在國(guó)民經(jīng)濟(jì)中發(fā)揮著重要的作用。智能照明技術(shù)在此環(huán)境下應(yīng)運(yùn)而生,利用該技術(shù)我們能夠很好地利用天然資源,提高光環(huán)境舒適度,減少人工照明耗能,并且隨著時(shí)間的推移,智能照明技術(shù)將會(huì)迅速發(fā)展壯大。
目前,中國(guó)的技術(shù)實(shí)現(xiàn)企業(yè)用于智能處理的水平已經(jīng)至少達(dá)到了三到四成左右。國(guó)際從上個(gè)世紀(jì)就下手智能照明系統(tǒng)的建設(shè)研究和應(yīng)用了,如奇勝的C-BUS 總線,ABB 公司的 I-bus 總線,邦奇 Dynet 總線協(xié)議,日本松下的 HBS 協(xié)議,以及 X-10 的電力線載波協(xié)議。選用無線網(wǎng)絡(luò)技術(shù)的智能燈光控制系統(tǒng)的一系列產(chǎn)品最近也將接踵涌現(xiàn)在消費(fèi)者的眼前。與電力線載波計(jì)劃相似,因?yàn)闆]有專用的網(wǎng)絡(luò)線,但安設(shè)或擴(kuò)展非常簡(jiǎn)單,這個(gè)方案可以使用電池供電,可以不用去連接電源線,其使用非常方便靈活,同時(shí)也降低了用戶的總體消費(fèi)成本。同時(shí),藍(lán)牙技術(shù)的發(fā)展也不斷地在智能化家居和智能照明控制中得到了大量的應(yīng)用[1]。
目前智能化照明仍然處于發(fā)育階段,國(guó)內(nèi)外很多知名企業(yè)都很看好這個(gè)新性行業(yè),已經(jīng)投入大量人力和財(cái)力去著手研發(fā)很具有智能化的照明控制系統(tǒng),將會(huì)在住宅照明、道路照明、景觀照明、體育場(chǎng)館、公園照明等等公共場(chǎng)合得到不同程度上的應(yīng)用。
1.2 研究主要內(nèi)容
利用單片機(jī) AT89C52 作為核心控制器件,設(shè)計(jì)一種基于單片機(jī)的教室照明智能控制器,實(shí)現(xiàn)教室光照控制,防止無人時(shí)亮燈、天亮?xí)r亮燈,節(jié)約能源。當(dāng)要求自動(dòng)控制照明系統(tǒng)時(shí),要求通過對(duì)教室內(nèi)人數(shù)進(jìn)行計(jì)數(shù)及當(dāng)前室內(nèi)光照強(qiáng)度的采集,當(dāng)在開燈時(shí)間內(nèi)且室內(nèi)光照強(qiáng)度較暗、教室有人的時(shí)候,單片機(jī)將發(fā)出指令進(jìn)行開燈,且隨著教室人數(shù)的變化,光照強(qiáng)度也進(jìn)行改變。當(dāng)教室內(nèi)光照強(qiáng)度較強(qiáng)時(shí),燈不可打開。當(dāng)要求手動(dòng)控制照明系統(tǒng)時(shí),不計(jì)算教室人數(shù)及光照,手動(dòng)進(jìn)行開燈、關(guān)燈。在此基礎(chǔ)上,設(shè)計(jì)系統(tǒng)還具有時(shí)鐘功能及當(dāng)前人數(shù)顯示功能,使工作人員方便調(diào)節(jié)開燈時(shí)間,了解當(dāng)前教室人數(shù)。
82
2. 設(shè)計(jì)方案的選擇及論證
2.1 總體方案論述
教室照明系統(tǒng)利用單片機(jī) AT89C52 作為信息處理器和核心控制器件。系統(tǒng)利用紅外檢測(cè)模塊將進(jìn)入教室的人數(shù)、光照檢測(cè)模塊將室外光照強(qiáng)度、設(shè)定的開燈時(shí)間及人工開關(guān)的狀態(tài)經(jīng)過處理傳遞給單片機(jī),單片機(jī)將得到的信息進(jìn)行處理,判斷是否需要開燈,達(dá)到開燈條件時(shí)單片機(jī)將發(fā)出指令將燈打開,否則燈滅。
總體的系統(tǒng)框圖如圖 2.1 所示。
圖 2.1 系統(tǒng)框圖
2.2 方案一的論述
2.2.1 方案一的設(shè)計(jì)框圖
系統(tǒng)由控制模塊、光照強(qiáng)度檢測(cè)模塊、人體存在檢測(cè)模塊、硬件時(shí)鐘模塊和手動(dòng)開關(guān)模塊組成。方案一的硬件設(shè)計(jì)框圖如圖 2.2 所示。
圖 2.2 方案一設(shè)計(jì)框圖
2.2.2 方案一的設(shè)計(jì)方法
設(shè)計(jì)系統(tǒng)核心部件為 AT89C52,光照強(qiáng)度信號(hào)由光照強(qiáng)度檢測(cè)模塊進(jìn)行采集,教室人數(shù)由人體存在檢測(cè)模塊進(jìn)行采集之后將采集到的信號(hào)通過電壓比較電路進(jìn)行轉(zhuǎn)換并送入單片機(jī)中進(jìn)行處理, 并在處理后,根據(jù)結(jié)果發(fā)送不同的指令進(jìn)行輸出驅(qū)動(dòng)。
開機(jī)后,所有器件初始化。用光照強(qiáng)度檢測(cè)模塊對(duì)室外光照強(qiáng)度及教室人數(shù)進(jìn)行監(jiān)測(cè),將所得到的電壓信號(hào)通過電壓比較器進(jìn)行處理并傳入單片機(jī),再由 AT89C52 對(duì)傳入信號(hào)進(jìn)行處理。其中教室人數(shù)不同,亮燈數(shù)量不同。將所得信號(hào)與設(shè)定的初始光照值相比較,當(dāng)光照強(qiáng)度低于設(shè)定的初始光照強(qiáng)度時(shí)且教室有人時(shí),單片機(jī)發(fā)出指令打開照明系統(tǒng);當(dāng)光照強(qiáng)度低于設(shè)定值時(shí)但教室沒人時(shí), 單片機(jī)發(fā)出指令關(guān)照明系統(tǒng)。當(dāng)光照強(qiáng)度高于設(shè)定限額上限,不論教室是否有人,由單片機(jī)發(fā)出指令關(guān)閉照明系統(tǒng)。且對(duì)教室人數(shù)進(jìn)行分段處理,每一階段教室燈光強(qiáng)度不同。
2.2.3 方案一的優(yōu)缺點(diǎn)
基于單片機(jī) AT89C52 控制的教室照明智能控制器制造成本低、安裝方便、效率高、實(shí)現(xiàn)簡(jiǎn)單, 且照明系統(tǒng)的狀態(tài)由光照強(qiáng)度、教室人數(shù)、開燈時(shí)間及開關(guān)狀態(tài)共同控制,更加科學(xué)、節(jié)能。缺點(diǎn)在于多個(gè)模塊全接在主芯片上,不易維修,不適合多個(gè)教室共同管理。
2.3 方案二的論述
2.3.1 方案二的設(shè)計(jì)框圖
系統(tǒng)的結(jié)構(gòu)主要由三部分組成:上位機(jī)系統(tǒng)、下位機(jī)系統(tǒng)和通信系統(tǒng)。這三部分共同組成了主控制器,通過有線方式和分控制器進(jìn)行信息交換,以達(dá)到控制照明燈具的目的。方案二的硬件設(shè)計(jì)框圖如圖 2.3 所示。
是,將開燈信號(hào)傳入單片機(jī)
圖 2.3 方案二設(shè)計(jì)框圖
2.3.2 方案二的設(shè)計(jì)方法
系統(tǒng)采用 RS-485 半雙工主從式通信方式,主控制器可以通過發(fā)送數(shù)據(jù)或指令給從控制器,從控制器通過中斷方式來接收主控制發(fā)來的指令或數(shù)據(jù)對(duì)分布的照明燈具進(jìn)行控制。這次照明智能控制系統(tǒng)的設(shè)計(jì)以AT89C52 單片機(jī)作為主控制器和從控制器,來實(shí)現(xiàn)有線通信、信息采集和控制與顯示等功能。
2.3.3 方案二的優(yōu)缺點(diǎn)
方案二同時(shí)控制多個(gè)教室。缺點(diǎn)在于電路復(fù)雜、耗能高。
2.4 方案的選擇
通過對(duì)方案一和方案二優(yōu)缺點(diǎn)的比較,基于對(duì)系統(tǒng)穩(wěn)定性、系統(tǒng)成本及系統(tǒng)節(jié)能方面的考慮, 方案一比方案二更加適合。
首先,方案一采用了多檢測(cè)模塊進(jìn)行當(dāng)前狀態(tài)檢測(cè),涵蓋的可能性更多,并且對(duì)人數(shù)進(jìn)行分段, 每段采用不用的燈光強(qiáng)度,更加節(jié)能;其次,方案一采用了同步檢測(cè)所有狀態(tài)信號(hào)的方式,檢測(cè)更加快捷、節(jié)能;再次,方案一設(shè)有手動(dòng)開關(guān),可以避免一些意外情況,更加人性化。而方案二電路復(fù)雜、耗能高、不易實(shí)現(xiàn)。
考慮到以上原因,設(shè)計(jì)采用方案一。
3. 系統(tǒng)軟件設(shè)計(jì)
編程軟件采用 keil uvision4 軟件,設(shè)計(jì)程序采用 C 語(yǔ)言進(jìn)行編寫。軟件部分可成功編譯,并在 proteus 中仿真實(shí)現(xiàn)預(yù)期功能。具體函數(shù)模塊由一個(gè)主函數(shù)(main.c)文件以及 2 個(gè) h 文件構(gòu)成。這 2 個(gè) h 文件分別為:reg51.h(8051 的相關(guān)參數(shù)初始化),intrins.h(偽本征函數(shù))。
3.1 系統(tǒng)流程分析
主程序的作用是調(diào)用幾個(gè)子程序完成總體功能。首先,單片機(jī)默認(rèn)為自動(dòng)模式;其次,單片機(jī)進(jìn)行初始化,LCD1602、DS1302 分別進(jìn)行初始化;再次,DS1302 開始工作發(fā)出實(shí)時(shí)日期/時(shí)間,LCD 進(jìn)行日期/時(shí)間以及當(dāng)前人數(shù)的顯示,通過光線和人數(shù)進(jìn)行判斷是否開燈;最后,進(jìn)行鍵盤掃描,根據(jù)不同按鍵,改變當(dāng)前設(shè)置。主程序流程如圖 3.1 所示。
圖 3.1 主程序流程圖
主程序解析:
#include #include #define uchar unsigned char #define uint unsigned int
uchar time_data[7];
uchar code write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; //數(shù)據(jù)的地址
uchar code read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
uchar code table1[]="Count|2016/00/00";
uchar code table2[]=" 00|00:00:00";
uchar code table3[]=" ";//清屏內(nèi)容
uchar code table4[]=" Set Real Time ";
uchar code table5[]=" SetOpenTime";
uchar code table6[]="Start Time: ";
uchar code table7[]="00:00:00";
uchar code table8[]="End Time:"; ucharcodetable9[]="Date:2016/00/00";
uchar codetable0[]="Time:00:00:00";
bit Adjust;//調(diào)節(jié)標(biāo)志位,=1 表示進(jìn)入調(diào)節(jié)模式,=0 是正常模式
bit Auto_flg;//自動(dòng)模式標(biāo)志位,=1 表示手動(dòng)模式,=0 是自動(dòng)模式
sbit rs=P1^0; //LCD1602
sbit rw=P1^1; //LCD1602
sbit e=P1^2; //LCD1602
sbit sck=P2^5; //時(shí)鐘端口
sbit io=P2^6; //時(shí)鐘端口
sbit rst=P2^7; //時(shí)鐘端口
sbit SELT =P1^6; //選擇鍵
sbit ENTER=P1^7; //確認(rèn)鍵
sbit UP =P3^0; //加鍵
sbit DOWN =P3^1; //減鍵
sbit MODE =P3^2;//切換按鍵接口
sbit SWITCH=P3^3; //手動(dòng)開關(guān)
sbit AUTO_LED=P1^3;//自動(dòng)模式燈接口
sbit HAND_LED=P1^5;//手動(dòng)燈接口
sbit LAMP1=P3^4; //燈接口
sbit LAMP2=P3^5; //燈接口
sbit LAMP3=P3^6; //燈接口
sbit LAMP4=P3^7; //燈接口
sbit LIGHT1=P2^0; //光線檢測(cè)端口sbit IN1=P2^2;
sbit OUT1=P2^1;
uchar Select_num; //選擇按鍵按下次數(shù)
uchar Enter_num; //確認(rèn)按鍵按下次數(shù)
float Year,Month,Day,Hour,Minute,Second; //時(shí)間設(shè)置值
float Hour_H,Minute_H,Second_H; //設(shè)置開始時(shí)間
float Hour_L,Minute_L,Second_L; //設(shè)置結(jié)束時(shí)間
int Value1; //人數(shù)
uchar IN1_flag=0;
ucharOUT1_flag=0;
void read_rtc();
void delay1(uint z) //延時(shí)函數(shù)
{
uint x,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
void main()
{
AUTO_LED=0; //默認(rèn)自動(dòng)模式
init(); //液晶初始化
while(1)
{
if(Adjust==0) //非調(diào)節(jié)模式下顯示時(shí)間和開鎖
{
Time_Display(); //顯示時(shí)間
Open(); //動(dòng)作判斷,根據(jù)光線和聲響開關(guān)
Count_Value();
}
Keyscan(); //掃描鍵盤
}
}
3.2 LCD1602 顯示設(shè)計(jì)
LCD1602 顯示函數(shù)先將 LCD1602 進(jìn)行初始化,之后設(shè)置字符的顯示位置,最后進(jìn)行字符的顯示。
LCD1602 顯示函數(shù)流程如圖 3.2 所示。
圖 3.2 LCD1602 顯示函數(shù)流程圖
3.3 照明系統(tǒng)開函數(shù)設(shè)計(jì)
照明系統(tǒng)開函數(shù)主要是通過當(dāng)前教室光照強(qiáng)度及當(dāng)前人數(shù)來判斷是否開照明系統(tǒng)。首先,根據(jù)學(xué)校的作息時(shí)間設(shè)置開燈時(shí)間和關(guān)燈時(shí)間;之后,若當(dāng)前時(shí)間在開燈時(shí)間和關(guān)燈時(shí)間范圍內(nèi),則進(jìn)行光照強(qiáng)度檢測(cè),如果光照強(qiáng)度不足且教室沒人,照明系統(tǒng)關(guān)閉,若光照強(qiáng)度不足但教室有人,則照明系統(tǒng)打開。照明系統(tǒng)開函數(shù)流程圖如圖 3.3 所示。
否
否
圖 3.3 照明系統(tǒng)開函數(shù)流程圖
照明系統(tǒng)開函數(shù)解析:
設(shè)定的上下限時(shí)間為 08:00——22:00,當(dāng)人數(shù)為 1——9 人時(shí)開一個(gè)燈,當(dāng)人數(shù)為 10——19時(shí)開兩個(gè)燈,當(dāng)人數(shù)為 20——29 時(shí)開三個(gè)燈,當(dāng)人數(shù)為 30 以上時(shí)開四個(gè)燈。
void Open(void)
{
float Now;
float Set_L,Set_H;
Now=Hour+Minute/60+Second/3600; //把實(shí)時(shí)時(shí)間化成小時(shí)為單位Set_L=Hour_L+Minute_L/60+Second_L/3600; //把設(shè)置下限時(shí)間化成小時(shí)為單位
Set_H=Hour_H+Minute_H/60+Second_H/3600; //把設(shè)置上限時(shí)間化成小時(shí)為單位
if(Auto_flg==0) //自動(dòng)模式
{
if((Now>=Set_L)&(Now<=Set_H)) //實(shí)時(shí)時(shí)間在上下限時(shí)間范圍內(nèi)
{
if(LIGHT1==0) //光線不足
{
if(Value1==0)
{
LAMP1=1; //全滅
LAMP2=1;
LAMP3=1;
LAMP4=1;
}
if((Value1>0)&(Value1<10))
{
LAMP1=0; //0——9 亮一個(gè)燈
LAMP2=1;
LAMP3=1;
LAMP4=1;
}
if((Value1>=10)&(Value1<20))
{
LAMP1=0; //10——19 亮二個(gè)燈
LAMP2=0;
LAMP3=1;
LAMP4=1;
}
if((Value1>=20)&(Value1<30))
{
LAMP1=0; //20——29 亮三個(gè)
LAMP2=0;
LAMP3=0;
LAMP4=1;
}
if(Value1>=30)
{
LAMP1=0; //30 以上亮四個(gè)燈
LAMP2=0;
LAMP3=0;
LAMP4=0;
}
}
if(LIGHT1==1) //光線強(qiáng)烈
{
LAMP1=1; //全滅
LAMP2=1;
LAMP3=1;
LAMP4=1;
}
}
if((NowSet_H)) //實(shí)時(shí)時(shí)間不在范圍內(nèi)
{
LAMP1=1; //全滅
LAMP2=1;
LAMP3=1;
LAMP4=1;
}
}
}
3.4 按鍵函數(shù)設(shè)計(jì)
通過按鍵設(shè)置當(dāng)前狀態(tài),如:上下限時(shí)間,手動(dòng)模式和自動(dòng)模式切換。
3.5 時(shí)鐘函數(shù)設(shè)計(jì)
通過 DS1302 產(chǎn)生實(shí)時(shí)的系統(tǒng)日期和時(shí)間。時(shí)鐘函數(shù)流程圖如圖 3.4 所示。
4. 硬件設(shè)計(jì)
整個(gè)控制系統(tǒng)由控制模塊、光照及當(dāng)前人數(shù)檢測(cè)模塊、按鍵模塊、時(shí)鐘電路模塊、LCD 顯示模塊和照明模塊組成。其中電源由實(shí)驗(yàn)室 5V 電源提供。
4.1 單片機(jī)最小模塊
單片機(jī)最小模塊是系統(tǒng)能夠運(yùn)行功能的基礎(chǔ)組成,硬件電路如圖 4.1 所示,包括單片機(jī)芯片, 晶振電路和復(fù)位電路。
圖 4.1 控制模塊
單片機(jī)芯片選擇 ATMEL 公司生產(chǎn)的 AT89C52 單片機(jī)。該芯片具有結(jié)構(gòu)簡(jiǎn)單、價(jià)格低廉、效率高、靈活性高的優(yōu)點(diǎn)。
晶振電路為系統(tǒng)提供基本的時(shí)鐘信號(hào)。晶振選擇 12MHz,C1,C2 電容大小為 30pF。
復(fù)位電路的作用是對(duì)于單片機(jī)進(jìn)行復(fù)位工作。通電后,C3 電容兩端的電壓由 0V 將慢慢上升, 單片機(jī)的 RST 復(fù)位引腳的電壓由低電位漸漸升高到高電位,引起 C52 內(nèi)部電路復(fù)位工作,RST 引腳電壓漸漸下降,直到降為低電平,AT89C52 開始正常運(yùn)行工作。當(dāng)按下復(fù)位開關(guān)后,電容兩端進(jìn)行放電,RST 端變?yōu)楦唠娖?,系統(tǒng)回到剛通電時(shí)的狀態(tài)。
4.2 光照及當(dāng)前人數(shù)檢測(cè)模塊
光照及當(dāng)前人數(shù)檢測(cè)模塊模塊如圖 4.2 所示。
4.2 光照及當(dāng)前人數(shù)檢測(cè)模塊
在 proteus 中,由于紅外探頭及光敏電阻無法仿真,所以用按鍵表示。當(dāng)表示光照的按鍵按下圖時(shí),表示當(dāng)前處于光照強(qiáng)度弱的狀態(tài),否則表示處于光照強(qiáng)度強(qiáng)的狀態(tài)。當(dāng)表示外面的按鍵先按下, 表示內(nèi)部的按鍵再按下時(shí),表示當(dāng)前教室人數(shù)加一;當(dāng)表示內(nèi)部的按鍵先按下,表示外部的按鍵再按下時(shí),表示當(dāng)前教室人數(shù)減一。
在實(shí)物制作中,采用紅外探頭組進(jìn)行人體檢測(cè),一共用兩組,一組放在門外,一組放在門里, 進(jìn)行當(dāng)前人數(shù)檢測(cè);采用光敏電阻進(jìn)行當(dāng)前光照強(qiáng)度檢測(cè)。將兩組紅外探頭及光敏電阻分別接在電壓比較器上,輸出接單片機(jī)上,進(jìn)行當(dāng)前狀態(tài)的檢測(cè)。
4.3 按鍵模塊
按鍵模塊如圖 4.3 所示。
圖 4.3 按鍵模塊
此模塊的主要作用是通過按鍵調(diào)節(jié)當(dāng)前系統(tǒng)的狀態(tài)。如:上下限時(shí)間,當(dāng)前時(shí)間,自動(dòng)手動(dòng)模式切換及手動(dòng)模式照明系統(tǒng)開關(guān)。
4.4 時(shí)鐘電路模塊
時(shí)鐘電路模塊如圖 4.4 所示。
圖 4.4 時(shí)鐘電路模塊
該模塊的作用是產(chǎn)生實(shí)時(shí)的系統(tǒng)日期和時(shí)間,通過 LCD1602 進(jìn)行顯示,以便對(duì)當(dāng)前人數(shù)進(jìn)行實(shí)時(shí)記錄。主要芯片為時(shí)鐘芯片 DS1302,它含有一個(gè)靜態(tài) RAM 和一個(gè)實(shí)時(shí)的日歷/時(shí)鐘,通過串口通信與單片機(jī)進(jìn)行連接。設(shè)計(jì)系統(tǒng)中復(fù)位引腳 RST 接 P2.7,數(shù)據(jù)輸入/輸出引腳 I/O 接 P2.6,時(shí)鐘引腳 CLK 接 P2.5,X1 與 X2 引腳之間接一個(gè) 32.768kHz 的晶振。
4.5 LCD 顯示模塊
LCD 顯示模塊如圖 4.5 所示。
LCD 顯示模塊是采用 LCD1602 顯示日期、時(shí)間、當(dāng)前人數(shù)。LCD1602 的顯示屏為 16*2,即每行可顯示 16 個(gè)字符,共有 2 行顯示。
LCD1602 的 D0~D7 引腳接 P0 口,且此時(shí)應(yīng)注意需要接上拉電阻。寄存器選擇引腳,即 RS 引腳接 P1.0;讀寫信號(hào)線引腳,即 RW 引腳接 P1.1;使能端引腳,即 E 引腳接 P1.2,達(dá)到控制作用。
圖 4.5 LCD 顯示模塊
4.6 照明模塊
照明模塊電路如圖 4.6 所示。
圖 4.6 照明模塊
照明模塊由四個(gè) LED 燈組成,分別接P3.4-P3.7。
當(dāng)處于上下限范圍內(nèi)且為自動(dòng)模式時(shí),若當(dāng)前光照強(qiáng)度弱,照明系統(tǒng)開;當(dāng)前人數(shù)為 1——9 時(shí),亮一個(gè)燈;當(dāng)前人數(shù)為 10——19 時(shí),亮前兩個(gè)燈;當(dāng)前人數(shù)為 20——29 時(shí),亮前三個(gè)燈;當(dāng)前人數(shù)為 30 以上時(shí),四個(gè)燈全亮;若在手動(dòng)模式下,無論是否在上下限范圍內(nèi),光照強(qiáng)度如何,是否有人,只要按下手動(dòng)開關(guān),四個(gè)燈全亮。
4.7 實(shí)現(xiàn)結(jié)果
4.7.1 整體仿真圖
設(shè)置開啟時(shí)間為 08:00,關(guān)閉時(shí)間為 22:00。
(1) 為自動(dòng)模式,當(dāng)前光照強(qiáng)度強(qiáng),教室有人,則此時(shí)燈滅。如圖 4.7(a)所示。
圖 4.7(a) 光照強(qiáng)度強(qiáng),教室有人
(2) 為自動(dòng)模式,當(dāng)前光照強(qiáng)度弱,教室有 1——9 人,則此時(shí)第一個(gè)燈亮。
圖 4.7(b) 光照強(qiáng)度弱,教室有 1—9 人
(3) 為自動(dòng)模式,當(dāng)前光照強(qiáng)度弱,教室有 10——19 人,則此時(shí)前兩個(gè)燈亮。
圖 4.7(c) 光照強(qiáng)度弱,教室有 10—19 人
(4) 為自動(dòng)模式,當(dāng)前光照強(qiáng)度弱,教室有 20——29 人,則此時(shí)前三個(gè)燈亮。
圖 4.7(d) 光照強(qiáng)度弱,教室有 20—29 人
(5) 為自動(dòng)模式,當(dāng)前光照強(qiáng)度弱,教室有 30 人以上,則此時(shí)四個(gè)個(gè)燈亮。
圖 4.7(e) 光照強(qiáng)度弱,教室有 30 人以上
(6) 為手動(dòng)模式,手動(dòng)開關(guān)開,教室無人,光照強(qiáng)度強(qiáng)。如圖 4.7(f)所示。
圖 4.7(f) 手動(dòng)模式,手動(dòng)開關(guān)開,光照強(qiáng)度強(qiáng),教室無人
5. 總結(jié)
5.1 問題與處理
利用單片機(jī) AT89C52 作為核心控制器件的教室照明智能控制器,實(shí)現(xiàn)教室照明系統(tǒng)的智能化, 更加節(jié)約能源。系統(tǒng)主要包括控制模塊,信息采集模塊,顯示模塊和照明模塊。紅外探頭對(duì)教室人數(shù)進(jìn)行檢測(cè),光敏電阻對(duì)當(dāng)前教室光照強(qiáng)度進(jìn)行檢測(cè),單片機(jī)對(duì)數(shù)據(jù)進(jìn)行處理判斷,控制教室照明系統(tǒng)的開關(guān),實(shí)現(xiàn)照明系統(tǒng)的自動(dòng)化、人性化。當(dāng)光照強(qiáng)度較低時(shí),單片機(jī)將發(fā)出指令允許開燈, 再進(jìn)行教室當(dāng)前人數(shù)檢測(cè),若在設(shè)定時(shí)間范圍內(nèi),且光照強(qiáng)度弱,教室有人,則照明系統(tǒng)打開;當(dāng)光照強(qiáng)度強(qiáng),或教室沒人,或不在設(shè)定范圍內(nèi),由單片機(jī)發(fā)出指令,照明系統(tǒng)關(guān)閉。
系統(tǒng)基本上達(dá)到了任務(wù)書的要求,可在程序中根據(jù)需要進(jìn)行人數(shù)范圍及開啟時(shí)間的設(shè)定,之后系統(tǒng)根據(jù)設(shè)定自動(dòng)進(jìn)行檢測(cè)。運(yùn)行后,也可使用按鍵進(jìn)行手動(dòng)自動(dòng)調(diào)節(jié)、當(dāng)前時(shí)間調(diào)節(jié)和開啟時(shí)間、關(guān)閉時(shí)間調(diào)節(jié)。系統(tǒng)具有功能豐富、抗干擾能力高、易于操作的優(yōu)點(diǎn),不同的人數(shù)對(duì)應(yīng)不同的亮度具有一定的科學(xué)性,使教室的光照強(qiáng)度更加適合當(dāng)前環(huán)境,有利于節(jié)約能源。在任務(wù)書要求外,設(shè)計(jì)系統(tǒng)還具有日歷時(shí)鐘功能和當(dāng)前人數(shù)顯示功能,使工作人員更方便了解當(dāng)前教室內(nèi)人數(shù),在需要時(shí)進(jìn)行手動(dòng)調(diào)節(jié),更加人性化。
設(shè)計(jì)系統(tǒng)仍有一定的不足之處,相對(duì)于任務(wù)書具有一定的差距:
該控制器不能具體的了解到進(jìn)教室的同學(xué)具體坐在教室的什么位置,以至于不能更好的控制哪一部分燈亮,哪一部分燈滅,因此不能很好的節(jié)約資源。
這點(diǎn)的改進(jìn)需要在以后的研究中需要繼續(xù)探究,對(duì)設(shè)計(jì)系統(tǒng)進(jìn)行進(jìn)一步的改進(jìn)。我認(rèn)為系統(tǒng)的缺點(diǎn)可以通過將教室的每個(gè)燈都用此控制器控制,當(dāng)人進(jìn)入教室后,可根據(jù)自己所坐的位置進(jìn)行開燈。
在本次設(shè)計(jì)制作中出現(xiàn)了不少問題,后來在不斷的檢查和調(diào)整下解決了問題。主要遇到的困難如下:
在硬件的制作過程中,出現(xiàn)將排阻接反的問題,此時(shí) LCD1602 不能正常工作,后經(jīng)檢查發(fā)現(xiàn)進(jìn)行改正。
在焊接的工程中,由于自身水平不足,在開始焊的過程中,將紅外接收管燒壞,后經(jīng)過排查,發(fā)現(xiàn)此處問題,經(jīng)過練習(xí)以后,最終焊接成功。
在整個(gè)制作過程中對(duì)于編程軟件和仿真軟件的運(yùn)用能力以及動(dòng)手能力都得到了進(jìn)一步的加強(qiáng)。對(duì)于 keil 軟件,能夠使用軟件對(duì)多個(gè)程序進(jìn)行編譯,并生成一個(gè) hex 文件。同時(shí)意識(shí)到,編譯時(shí)只能檢查出程序的語(yǔ)法錯(cuò)誤,不能檢查出程序的邏輯錯(cuò)誤,即使編譯成功也有可能因?yàn)槌绦蜻壿嬪e(cuò)誤而不能實(shí)現(xiàn)功能。對(duì)于 proteus 軟件,能夠熟練的從庫(kù)中調(diào)用元器件連接硬件電路,并設(shè)定仿真環(huán)境, 實(shí)現(xiàn)系統(tǒng)仿真。在硬件的制作過程中,提高了排版和焊接能力,能夠熟練的利用烙鐵和焊錫對(duì)元器件通過走錫法進(jìn)行連接。在剛開始的焊接過程中,會(huì)出現(xiàn)虛焊,漏焊以及由于送錫過量而將相鄰的點(diǎn)焊接在一起等現(xiàn)象,后經(jīng)過不斷練習(xí),已經(jīng)可以得到光滑圓潤(rùn)的焊點(diǎn),并可以準(zhǔn)確的控制送錫量進(jìn)行走線連接。
5.2 展望
在未來的系統(tǒng)設(shè)計(jì)中,可在系統(tǒng)的基礎(chǔ)上進(jìn)行功能拓展,實(shí)現(xiàn)系統(tǒng)功能的多樣化和科學(xué)化。
(1) 實(shí)現(xiàn)智能場(chǎng)景控制,對(duì)于不同的場(chǎng)景,產(chǎn)生不同的照明效果,提高其非定量指標(biāo)(如舒適性和藝術(shù)性等),努力讓其更加智能化、人性化。
(2) 可將照明系統(tǒng)與監(jiān)控系統(tǒng)結(jié)合起來,用攝像來采集教室內(nèi)的光照強(qiáng)度,人數(shù),人員分布等各種實(shí)時(shí)狀況,讓其操作更方便,功能更完善。
科學(xué)技術(shù)的不斷發(fā)展,照明系統(tǒng)的智能化已經(jīng)成為一個(gè)不可更改的趨勢(shì)。基于單片機(jī)的教室智能照明控制器也會(huì)在巨大的市場(chǎng)需求的推動(dòng)下,不斷出現(xiàn)新的產(chǎn)品,更加優(yōu)化,更加科學(xué),更加人性化
參考文獻(xiàn)
[1] 胡興軍.發(fā)展中的智能照明系統(tǒng)[J].光源與照明,2004,(3):44-46.
[2] 石永生,陳廣盛,趙金龍.基于單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì).[J].信息通信. 2013(10):63-64
[3] 孔謀夫,潘銀松. 選用單片機(jī)的教室節(jié)能控制器的設(shè)計(jì)與實(shí)現(xiàn).[J].電子技術(shù) 2007, 34(1):27-29
[4] 童詩(shī)白,華成英.模擬電子技術(shù)基礎(chǔ)(第四版)[M].北京:高等教育出版社,2006.
[5] 郭天祥.新概念 51 單片機(jī)C 語(yǔ)言教程 入門、提高、開發(fā)、拓展全攻略 [M].北京:電子工業(yè)出版社,2009.
[6] 譚浩強(qiáng).C 程序設(shè)計(jì)(第二版)[M].北京:清華大學(xué)出版社,1999.
[7] 竇振中. 單片機(jī)外圍器件實(shí)用手冊(cè)[M]. 北京:北京航空航天大學(xué)出版社,2003
[8] 李廣弟. 單片機(jī)技術(shù)[M]. 北京:航空航天大學(xué)出版,2001
[9] 閻石. 數(shù)字電子技術(shù)基礎(chǔ)(第三版). 北京:高等教育出版社,2009
[10] Atmel. Atmel 89C51 Microcontrollers Hardware Manual,2010. 35~98.
[11] Pan Tian Fu,Chiu Huang Jen,Cheng Shi Jen,Cheng Shi Yen.An Improved Single-Sage Flyback PFC Converter for High-Luminance Lighting LED Lamps[J].The Eighth International Conference on Electronic Measurement and Instruments,2007:212-215.
[12] 雷道仲,李書成,羅政球.基于單片機(jī)定時(shí)開關(guān)的設(shè)計(jì)[J].貴州教育學(xué)院報(bào).2005(4):224-225.
[13] 張?zhí)旆玻耆謨?cè)51單片機(jī)C語(yǔ)言開發(fā)詳解[M].北京:電子工業(yè)出版社.2008.
[14] 王振宇.基于單片機(jī)設(shè)計(jì)的多功能定時(shí)器[J].貴州教育學(xué)院報(bào).2005(4):79-81
[15] 劉煥平,李娟.基于5 1單片機(jī)的智能定時(shí)控制系統(tǒng)設(shè)計(jì)[J].石家莊職業(yè)技術(shù)學(xué)院學(xué)報(bào).2010(6):26-28.
[16] 張自聰,金永興.基于AT89S52的奧運(yùn)倒計(jì)時(shí)牌的設(shè)計(jì)[J]:中國(guó)計(jì)量學(xué)院報(bào).2007(4):305-307.
附錄
附錄 A 原理圖
附錄 B 元器件清單
序號(hào)
名稱
型號(hào)
數(shù)量
1
排阻
8*10k
1 個(gè)
2
瓷片電容
104
2 個(gè)
3
插件電容
2.2uF/16V
1 個(gè)
4
瓷片電容
103
2 個(gè)
5
插件電容
100Uf/25V
1 個(gè)
6
LED 燈
LED
10 個(gè)
7
開關(guān)
SW
1 個(gè)
8
XH2pin 座
POWER
1 個(gè)
9
液晶屏
LCD1602
1 個(gè)
10
紅外接收管
2 個(gè)
11
紅外發(fā)射管
2 個(gè)
12
光敏電阻
100K
1 個(gè)
13
藍(lán)白可調(diào)電阻
10k
1 個(gè)
14
插件電阻
4.7k
3 個(gè)
序號(hào)
名稱
型號(hào)
數(shù)量
15
插件電阻
150
10 個(gè)
16
插件電阻
10k
5 個(gè)
17
插件電阻
100k
1 個(gè)
18
插件電阻
100
2 個(gè)
19
按鍵
7 個(gè)
20
時(shí)鐘芯片
DS1302
1 個(gè)
21
單片機(jī)
STC89C52
1 個(gè)
22
運(yùn)放
LM339
1 個(gè)
23
晶振
32768Hz
1 個(gè)
24
晶振
12M
1 個(gè)
附錄 C 源程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar time_data[7];
uchar code write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; //數(shù)據(jù)的地址
uchar code read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
uchar code table1[]="C: 00|2016/00/00";
uchar code table2[]="T: 00|00:00:00 0";
uchar code table3[]=" "; //清屏內(nèi)容
uchar code table4[]=" Set Real Time ";
uchar code table5[]=" Set Open Time ";
uchar code table6[]=" Start Time: ";
uchar code table7[]=" 00:00:00 ";
uchar code table8[]=" End Time: ";
uchar code table9[]="Date: 2016/00/00";
uchar code table0[]="Time: 00:00:00 0";
bit Adjust; //調(diào)節(jié)標(biāo)志位,=1表示進(jìn)入調(diào)節(jié)模式,=0是正常模式
bit Auto_flg; //自動(dòng)模式標(biāo)志位,=1表示手動(dòng)模式,=0是自動(dòng)模式
sbit rs=P1^0; //LCD1602
sbit rw=P1^1; //LCD1602
sbit e=P1^2; //LCD1602
sbit sck=P2^5; //時(shí)鐘端口
sbit io=P2^6; //時(shí)鐘端口
sbit rst=P2^7; //時(shí)鐘端口
sbit SELT =P1^6; //選擇鍵
sbit ENTER=P1^7; //確認(rèn)鍵
sbit UP =P3^0; //加鍵
sbit DOWN =P3^1; //減鍵
sbit MODE =P3^2; //切換按鍵接口
sbit SWITCH=P3^3; //手動(dòng)開關(guān)
sbit AUTO_LED=P1^3; //自動(dòng)模式燈接口
sbit HAND_LED=P1^5; //手動(dòng)燈接口
sbit LAMP1=P3^4; //燈接口
sbit LAMP2=P3^5; //燈接口
sbit LAMP3=P3^6; //燈接口
sbit LAMP4=P3^7; //燈接口
sbit LIGHT1=P2^0; //光線檢測(cè)端口
sbit IN1=P2^2;
sbit OUT1=P2^1;
uchar Select_num; //選擇按鍵按下次數(shù)
uchar Enter_num; //確認(rèn)按鍵按下次數(shù)
uchar Switch_num; //手動(dòng)開關(guān)按鍵按下次數(shù)
float Year,Month,Day,Hour,Minute,Second; //時(shí)間設(shè)置值
uchar Week;
float Hour_H,Minute_H,Second_H; //設(shè)置開始時(shí)間
float Hour_L,Minute_L,Second_L; //設(shè)置結(jié)束時(shí)間
int Value1; //人數(shù)
uchar IN1_flag=0;
uchar OUT1_flag=0;
void read_rtc();
/**************************************************LCD1602顯示*******************************************************************/
void delay1(uint z) //延時(shí)函數(shù)
{
uint x,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
void write_com(uchar com) //寫指令函數(shù)
{
rw=0;
delay1(5);
rs=0;
delay1(5);
e=1;
delay1(5);
P0=com;
delay1(5);
e=0;
delay1(5);
}
void write_date(uchar date) //寫數(shù)據(jù)函數(shù)
{
rw=0;
delay1(5);
rs=1;
delay1(5);
e=1;
delay1(5);
P0=date;
delay1(5);
e=0;
delay1(5);
}
void init() //初始化函數(shù)
{
uchar num;
Year=17;
Month=1;
Day=1;
Hour=15;
Minute=30;
Second=50;
Week=1;
Hour_H=22;
Minute_H=0;
Second_H=0;
Hour_L=18;
Minute_L=0;
Second_L=0;
e=0; // 時(shí)序表e初始為0
write_com(0x38); //設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
write_com(0x0c); //設(shè)置光標(biāo)
write_com(0x06); //光標(biāo)自動(dòng)加1,光標(biāo)輸入方式
write_com(0x01); //清屏
write_com(0x80); //設(shè)置初始顯示位置
for(num=0;num<16;num++)
{
write_date(table1[num]);
delay1(5);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_date(table2[num]);
delay1(5);
}
}
void SetTime_dispaly(uchar add,uchar dat) //第一個(gè):參數(shù)的地址,第二個(gè):參數(shù)的內(nèi)容
{
uchar shi,ge;
shi=dat/10; //把十位提取出來
ge=dat%10; //把個(gè)位提取出來
write_com(add); //要寫的地址
write_date(0x30+shi); //十位的內(nèi)容 1602字符庫(kù)
write_date(0x30+ge); //個(gè)位的內(nèi)容 1602字符庫(kù)
}
void Week_dispaly(uchar add,uchar dat) //第一個(gè):參數(shù)的地址,第二個(gè):參數(shù)的內(nèi)容
{
write_com(add); //要寫的地址
write_date(0x30+dat); //十位的內(nèi)容 1602字符庫(kù)
}
void Date_dispaly(uchar add,uchar dat) //第一個(gè):參數(shù)的地址,第二個(gè):參數(shù)的內(nèi)容
{
uchar shi,ge;
shi=dat/16; //把十位提取出來
ge=dat%16; //把個(gè)位提取出來
write_com(add+3); //要寫的地址
write_date(0x30+shi); //十位的內(nèi)容 1602字符庫(kù)
write_date(0x30+ge); //個(gè)位的內(nèi)容 1602字符庫(kù)
}
void LCD_Clean(uchar i) //液晶屏清除顯示
{
uchar num;
if(i==1)
{
write_com(0x80); //設(shè)置初始顯示位置
for(num=0;num<16;num++) //顯示第一行內(nèi)容
{
write_date(table3[num]);
delay1(1);
}
}
if(i==2)
{
write_com(0x80+0x40);
for(num=0;num<16;num++) //顯示第二行內(nèi)容
{
write_date(table3[num]);
delay1(1);
}
}
}
void LCD_Display_String(unsigned char line,unsigned char *string)
{ //液晶屏顯示內(nèi)容,把要顯示的內(nèi)容寫到對(duì)應(yīng)的位置
unsigned char i;
unsigned char address=0;
if(line==1)
{
address=0x80; //0X80是第1行的第1個(gè)位置 ,0x81第2位
}
else if(line==2)
{
address=0x80+0x40; //0X80+0x40是第2行的第1個(gè)位置 ,0X80+0x40+1是第2行第2位
}
for(i=0;i<16;i++)
{
write_com(address);
write_date(string[i]);
address++;
}
}
/*********************************DS1302時(shí)鐘***************************************/
void Time_Display(void)
{
read_rtc();
Date_dispaly(0x80+0x40+9,time_data[6]); //顯示秒
Date_dispaly(0x80+0x40+6,time_data[5]); //顯示分
Date_dispaly(0x80+0x40+3,time_data[4]); //顯示時(shí)
Date_dispaly(0x80+11,time_data[3]); //顯示日
Date_dispaly(0x80+8,time_data[2]); //顯示月
Week_dispaly(0x80+0x40+15,time_data[1]); //顯示周
Date_dispaly(0x80+5,time_data[0]); //顯示年
// Year/10*16+Year%10
Hour=time_data[4]/16*10+time_data[4]%16;;
Minute=time_data[5]/16*10+time_data[5]%16;;
Second=time_data[6]/16*10+time_data[6]%16;;
}
void write_ds1302_byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
sck=0;
io=dat&0x01; //準(zhǔn)備數(shù)據(jù),從最低位開始
dat=dat>>1;
sck=1;
}
}
void write_ds1302(uchar add,uchar dat)
{
rst=0;
_nop_(); //CPU原地踏步
sck=0;
_nop_();
rst=1;
_nop_();
write_ds1302_byte(add); //傳地址
write_ds1302_byte(dat); //傳數(shù)據(jù)
rst=0; //不受其他影響
_nop_();
io=1; //釋放
sck=1;
}
uchar read_ds1302(uchar add)
{
uchar i,value;
rst=0;
_nop_(); //CPU原地踏步
sck=0;
_nop_();
rst=1;
_nop_();
write_ds1302_byte(add);
for(i=0;i<8;i++)
{
value=value>>1;
sck=0;
if(io)
value=value|0x80;
sck=1;
}
rst=0;
_nop_();
sck=0;
_nop_();
sck=1;
io=1;
return value;
}
void set_rtc() //設(shè)置時(shí)間
{
uchar i,j;
for(i=0;i<7;i++) //轉(zhuǎn)換BCD碼
{
j=time_data[i]/10;
time_data[i]=time_data[i]%10;
time_data[i]=time_data[i]+j*16;
收藏