欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機(jī)火焰檢測(cè)報(bào)警器-課程設(shè)計(jì)報(bào)告 含源程序 [打印本頁(yè)]

作者: aizxc    時(shí)間: 2018-10-28 20:30
標(biāo)題: 單片機(jī)火焰檢測(cè)報(bào)警器-課程設(shè)計(jì)報(bào)告 含源程序
目錄

摘  要
第一章  緒論
第二章 總體內(nèi)容及設(shè)計(jì)
2.1 總體內(nèi)容設(shè)計(jì)及目標(biāo)
2.2 組員及任務(wù)
第三章 電路設(shè)計(jì)及元器件選型
3.1 AT89C52單片機(jī)控制模塊電路原理圖設(shè)計(jì)
3.2晶振起振模塊電路與功能
3.3 1602液晶屏顯示模塊電路原理圖設(shè)計(jì)
3.4聲音報(bào)警模塊電路原理圖設(shè)計(jì)
3.5紅外火焰?zhèn)鞲衅鞴δ芗半娐?br /> 第四章 程序設(shè)計(jì)
4.1輸入部分程序
4.2輸出部分程序
4.3定時(shí)應(yīng)用與功能
第五章 電路設(shè)計(jì)及結(jié)果
第六章 總結(jié)
參考文獻(xiàn)
摘  要
本論文以紅外火焰檢測(cè)傳感器和單片機(jī)技術(shù)為核心并與其它電子技術(shù)相結(jié)合,設(shè)計(jì)出一種技術(shù)水平較好的紅外火焰檢測(cè)報(bào)警器, 用于火焰檢測(cè), 可檢測(cè) 760 納米~1100 納米范圍內(nèi)的熱源,火焰探測(cè)角度為 60°范圍。以STC89C52單片機(jī)和Realplay火焰檢測(cè)傳感器為核心設(shè)計(jì)的火焰檢測(cè)報(bào)警器可實(shí)現(xiàn)聲光報(bào)警、1602液晶屏顯示報(bào)警等功能。是一種結(jié)構(gòu)簡(jiǎn)單、性能穩(wěn)定、使用方便、價(jià)格低廉、智能化的火焰檢測(cè)報(bào)警器。其中選用紅外火焰檢測(cè)傳感器實(shí)現(xiàn)各種火焰的檢測(cè),具有靈敏度高、響應(yīng)快、抗干擾能力強(qiáng)等優(yōu)點(diǎn),而且價(jià)格低廉,使用壽命長(zhǎng)。選用的STC89C52單片機(jī),具有高速、低功耗、超強(qiáng)抗干擾等優(yōu)點(diǎn),是目前同類技術(shù)中性價(jià)比較高的產(chǎn)品。本報(bào)警裝置具有一定的實(shí)用價(jià)值。
第一章  緒論
隨著經(jīng)濟(jì)的發(fā)展,高層建筑、地下建筑以及大型綜合性建筑日益增多火災(zāi)隱患也隨之增加,火災(zāi)發(fā)生的數(shù)量及其造成的損失都呈逐年上升趨勢(shì),因此,火災(zāi)報(bào)警系統(tǒng)成為保障人生命財(cái)產(chǎn)安全的重要因素。
火災(zāi)報(bào)警系統(tǒng)在國(guó)內(nèi)的發(fā)展情況是我國(guó)火災(zāi)報(bào)警系統(tǒng)起步較發(fā)達(dá)國(guó)家晚幾十年,從上世紀(jì)70年代我國(guó)才開(kāi)始研制生產(chǎn)火災(zāi)報(bào)警系統(tǒng)產(chǎn)品。進(jìn)入80年代后,國(guó)內(nèi)廠家也多是模仿國(guó)外產(chǎn)品,或是引進(jìn)國(guó)外技術(shù)進(jìn)行生產(chǎn),沒(méi)有真正意義上的核心技術(shù),并且市場(chǎng)也剛剛開(kāi)始發(fā)育。火災(zāi)報(bào)警產(chǎn)品真正開(kāi)始發(fā)展是在90年代以后,隨著政府逐漸開(kāi)放國(guó)門(mén),國(guó)外企業(yè)開(kāi)始大量進(jìn)入中國(guó)消防市場(chǎng),帶來(lái)先進(jìn)技術(shù)的同時(shí)也促進(jìn)了市場(chǎng)的成熟。這時(shí)期,我國(guó)生產(chǎn)火災(zāi)報(bào)警產(chǎn)品的企業(yè)也得到了快速發(fā)展,部分企業(yè)進(jìn)行了合資生產(chǎn)、技術(shù)合作,取得了不菲的成績(jī),也造就現(xiàn)今市場(chǎng)上許多有實(shí)力的商家,部分技術(shù)已接近趕上了國(guó)際水平。
本設(shè)計(jì)采用紅外火焰檢測(cè)傳感器、AT89C52單片機(jī)以及1062LED液晶屏顯示模塊設(shè)計(jì)的一種智能火災(zāi)報(bào)警器,可以實(shí)現(xiàn)聲光報(bào)警、液晶屏顯示有無(wú)火源等功能。是一種結(jié)構(gòu)簡(jiǎn)單、性能穩(wěn)定、使用方便、價(jià)格低廉、智能化的火災(zāi)報(bào)警器,具有一定的實(shí)用價(jià)值。
第二章 總體內(nèi)容及設(shè)計(jì)2.1 總體內(nèi)容設(shè)計(jì)及目標(biāo)
報(bào)警系統(tǒng)主要由數(shù)據(jù)采集模塊、單片機(jī)控制模塊、晶振起振模塊、聲光報(bào)警模塊、液晶屏顯示模塊、電源模塊組成。圖2-1為火焰檢測(cè)報(bào)警器的系統(tǒng)結(jié)構(gòu)框圖。
圖2-1 系統(tǒng)結(jié)構(gòu)框圖
AT89C52單片機(jī)控制模塊用于實(shí)時(shí)監(jiān)測(cè)外部中斷的電平變化,當(dāng)紅外火焰?zhèn)鞲衅鳈z測(cè)到有火焰時(shí),火焰?zhèn)鞲衅鲿?huì)輸出低電平數(shù)字信號(hào),單片機(jī)將數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的數(shù)字顯示在液晶屏上或聲光報(bào)警;晶振起振模塊為系統(tǒng)提供基本的時(shí)鐘信號(hào); USB下載/電源模塊為單片機(jī)的電源接口,為單片機(jī)提供電源及程序燒錄。
2.2 組員及任務(wù)
組員:徐杰龍、利齊帥、林輝、梁慶堂
任務(wù)分配:
徐杰龍:負(fù)責(zé)總體電路的原理圖完善,程序流程圖設(shè)計(jì)和編寫(xiě)程序。
利齊帥:負(fù)責(zé)AT89C52單片機(jī)控制模塊、電源模塊原理圖繪制,AT89C52原理圖元件。
林輝:查找集成電路數(shù)據(jù)手冊(cè)、查找資料。
梁慶堂:負(fù)責(zé)晶振起振模塊、1602液晶屏顯示模塊原理圖繪制

第三章 電路設(shè)計(jì)及元器件選型3.1 AT89C52單片機(jī)控制模塊電路原理圖設(shè)計(jì)
單片機(jī)控制模塊采用AT89C51芯片作為主控芯片,所謂的單片機(jī)是將計(jì)算機(jī)的基本部件微型化并集成到一塊芯片上,具備獨(dú)特功能的微型計(jì)算機(jī),通常片內(nèi)都含有CPU、ROM、RAM、并行I/O、串行I/O、定時(shí)器/計(jì)數(shù)器、中斷控制、系統(tǒng)時(shí)鐘及系統(tǒng)總線等。單片機(jī)全稱為單片微型計(jì)算機(jī),又稱微控制器或嵌入式控制器,是一種可通過(guò)編程控制的處理器。
如圖3-1所示,單片機(jī)的VCC引腳需要接入+5V電源電壓正極,GND引腳需要接入電源電壓的負(fù)極。
圖3-1 AT89C52單片機(jī)芯片
EA引腳(外部程序存儲(chǔ)器訪問(wèn)控制端)是單片機(jī)的外部程序存儲(chǔ)器訪問(wèn)控制端,如果它接高電平VCC,則單片機(jī)執(zhí)行片內(nèi)部程序存儲(chǔ)器中的程序,從000H開(kāi)始終止于0FFFH,并在讀取完單片機(jī)內(nèi)部程序存儲(chǔ)器的0FFFH后自動(dòng)轉(zhuǎn)向讀取外部的程序存儲(chǔ)器,一般只用單片機(jī)的內(nèi)部程序存儲(chǔ)器,故接高電平;如果接低電平,則單片機(jī)訪問(wèn)的全部是外部程序存儲(chǔ)器,從0000H開(kāi)始終止于0000FH。
AT89C51單片機(jī)共有P0、P1、P2、P3這4組I/O口,每組有8個(gè)I/O口,單片機(jī)復(fù)位時(shí),這4組I/O口都默認(rèn)作為輸出端口使用。51單片機(jī)上電后,如果沒(méi)有人為地控制其I/O口的狀態(tài),它所有未控制的I/O口都默認(rèn)為高電平。
① P0口是一個(gè)開(kāi)漏型雙向I/O口,其內(nèi)部沒(méi)有上拉電阻,為高阻狀態(tài),所以不能正常地輸出高/低電平,使用該I/O口要接100Ω的上拉電阻。P0口具有除一般I/O口外的第二重功能—作為低8位地址線。
② P1口是一組準(zhǔn)雙向8位I/O口,每個(gè)口可獨(dú)立控制,內(nèi)帶上拉電阻,這種接口輸出沒(méi)有高阻狀態(tài),輸入也不能鎖存,故不是真正的雙向I/O口,之所以稱它為“準(zhǔn)雙向”是因?yàn)樵摽谠谧鳛檩斎胧褂们埃认蛟摽谶M(jìn)行寫(xiě)1操作,然后單片機(jī)內(nèi)部才能正確讀出外部信號(hào)。也就是要使其有個(gè)“準(zhǔn)備過(guò)程”,故稱其為準(zhǔn)雙向口。
③ P2口是一組準(zhǔn)雙向8位I/O口,每個(gè)口可獨(dú)立控制,內(nèi)帶上拉電阻,與P1口相似。P2口具有除一般I/O口外的第二重功能—作為高8位地址線。
3.2晶振起振模塊電路與功能
晶振的作用是為系統(tǒng)提供基本的時(shí)鐘信號(hào)。通常一個(gè)系統(tǒng)共用一個(gè)晶振,便于各部分保持同步。如圖3-2所示,XTAL1、XTAL2為時(shí)鐘信號(hào)端,XTAL1為片內(nèi)振蕩電路的輸入端,XTAL2為片內(nèi)振蕩電路的輸出端。8051有兩種工作方式,一是片內(nèi)時(shí)鐘振蕩方式,另一種是外部時(shí)鐘方式。片內(nèi)時(shí)鐘振蕩電路需在XTAL1、XTAL2這兩個(gè)引腳外接石英晶體和振蕩電容,典型的晶振取11.0592MHz(因?yàn)榭梢詼?zhǔn)確地得到9600波特率和19200波特率,用于有串口通訊的場(chǎng)合)/12MHz(產(chǎn)生精確的us級(jí)時(shí)間,方便定時(shí)操作),振蕩電容的值一般取10pF~30pF的瓷片電容。
圖3-2 晶振起振模塊電路原理圖
3.3 1602液晶屏顯示模塊電路原理圖設(shè)計(jì)
液晶顯示的原理是利用液晶的物理特性,通過(guò)電壓對(duì)其顯示區(qū)域進(jìn)行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示的分類方法有很多種,通常可按其顯示方式分為段式、字符式、點(diǎn)陣式等。本設(shè)計(jì)字符式顯示。用LCD顯示一個(gè)字符時(shí)比較復(fù)雜,因?yàn)橐粋(gè)字符由6×8或8×8點(diǎn)陣組成,既要找到和顯示屏幕上某幾個(gè)位置對(duì)應(yīng)的顯示RAM區(qū)的8字節(jié),還要使每字節(jié)的不同位為“1”,其它的為“0”,為“1”的點(diǎn)亮,為“0”的不亮。這樣一來(lái)就組成某個(gè)字符。但由于內(nèi)帶字符發(fā)生器的控制器來(lái)說(shuō),顯示字符就比較簡(jiǎn)單了,可以讓控制器工作在文本方式,根據(jù)在LCD上開(kāi)始顯示的行列號(hào)及每行的列數(shù)找出顯示RAM對(duì)應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對(duì)應(yīng)的代碼即可。其電路原理圖如圖3-3。
圖3-3 1602液晶屏顯示模塊電路原理圖
1602采用標(biāo)準(zhǔn)的16腳接口,其中:
第1腳:VSS為地電源
第2腳:VDD接5V正電源
第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度
第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。
第5腳:RW為讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。當(dāng)RS和RW共同為低電平時(shí)可以寫(xiě)入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平RW為低電平時(shí)可以寫(xiě)入數(shù)據(jù)。
第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。
第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。
第15~16腳:空腳

1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表3-1所示:
表3-1 控制命令表
1602液晶模塊的讀寫(xiě)操作、屏幕和光標(biāo)的操作都是通過(guò)指令編程來(lái)實(shí)現(xiàn)的。(說(shuō)明:1為高電平、0為低電平)
指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置。
指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H。
指令3:光標(biāo)和顯示模式設(shè)置 I/D:光標(biāo)移動(dòng)方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無(wú)效。
指令4:顯示開(kāi)關(guān)控制。 D:控制整體顯示的開(kāi)與關(guān),高電平表示開(kāi)顯示,低電平表示關(guān)顯示 C:控制光標(biāo)的開(kāi)與關(guān),高電平表示有光標(biāo),低電平表示無(wú)光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。
指令5:光標(biāo)或顯示移位 S/C:高電平時(shí)移動(dòng)顯示的文字,低電平時(shí)移動(dòng)光標(biāo)。
指令6:功能設(shè)置命令 DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線 N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示 F: 低電平時(shí)顯示5x7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符。
指令7:字符發(fā)生器RAM地址設(shè)置。
指令8:DDRAM地址設(shè)置。
指令9:讀忙信號(hào)和光標(biāo)地址 BF:為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。
指令10:寫(xiě)數(shù)據(jù)。
指令11:讀數(shù)據(jù)。

3.4聲音報(bào)警模塊電路原理圖設(shè)計(jì)
該設(shè)計(jì)使用的是無(wú)源蜂鳴器,如圖3-4所示。由于蜂鳴器的工作電流一般比較大,以致于單片機(jī)的I/O 口是無(wú)法直接驅(qū)動(dòng)的,所以要利用放大電路來(lái)驅(qū)動(dòng),一般使用三極管來(lái)放大電流就可以了。聲報(bào)警電路由單片機(jī)的P3.4引腳進(jìn)行控制,當(dāng)P3.4輸出的電平為高電平時(shí),三極管導(dǎo)通,蜂鳴器的電流形成回路,發(fā)出聲音報(bào)警;否則,三極管截止,蜂鳴器不發(fā)出聲音。
圖3-4 聲音報(bào)警電路
3.5紅外火焰傳感器功能及電路
火焰?zhèn)鞲衅魇菣C(jī)器人專門(mén)用來(lái)搜尋火源的傳感器,當(dāng)然火焰?zhèn)鞲衅饕部梢杂脕?lái)檢測(cè)光線的亮度,只是本傳感器對(duì)火焰特別靈敏。火焰?zhèn)鞲衅骼眉t外線對(duì)對(duì)火焰非常敏感的特點(diǎn),使用特制的紅外線接受管來(lái)檢測(cè)火焰,然后把火焰的亮度轉(zhuǎn)化為高低變化的電平信號(hào),輸入到中央處理器中,中央處理器根據(jù)信號(hào)的變化做出相應(yīng)的程序處理。如圖3-5所示。
圖3-5 火焰?zhèn)鞲衅麟娐吩韴D
用途:  各種火焰,火源探測(cè)
模塊特色:
1、 可以檢測(cè)火焰或者波長(zhǎng)在760納米~1100納米范圍內(nèi)的光源,打火機(jī)測(cè)試火焰距離為80cm,對(duì)火焰越大,測(cè)試距離越遠(yuǎn)
2、 探測(cè)角度60度左右,對(duì)火焰光譜特別靈敏
3 、靈敏度可調(diào)(圖中藍(lán)色數(shù)字電位器調(diào)節(jié))
4、比較器輸出,信號(hào)干凈,波形好,驅(qū)動(dòng)能力強(qiáng),超過(guò)15mA
5、配可調(diào)精密電位器調(diào)節(jié)靈敏度
6、工作電壓3.3V-5V
7、輸出形式 :DO數(shù)字開(kāi)關(guān)量輸出(0和1)和AO模擬電壓輸出
8、設(shè)有固定螺栓孔,方便安裝
9、小板PCB尺寸:3.2cm x 1.4cm 10、使用寬電壓LM393比較器
模塊使用說(shuō)明:
1 、火焰?zhèn)鞲衅鲗?duì)火焰最敏感,對(duì)普通光也是有反應(yīng)的,一般用做火焰報(bào)警等用途。
2、 小板輸出接口可以與單片機(jī)IO口直接相連
3、傳感器與火焰要保持一定距離,以免高溫?fù)p壞傳感器,對(duì)打火機(jī)測(cè)試火焰距離為80cm,對(duì)火焰越大,測(cè)試距離越遠(yuǎn)
4、小板模擬量輸出方式和AD轉(zhuǎn)換處理,可以獲得更高的精度

第四章 程序設(shè)計(jì)4.1輸入部分程序
程序流程圖如圖4-1所示,通電時(shí)寄存器初始化、單片機(jī)I/O口初始化,液晶屏初始化完成后停留在一個(gè)設(shè)定狀態(tài),等待信號(hào)驅(qū)動(dòng)。

                                                       N

                                    Y

圖4-1 輸入程序流程圖
以下為系統(tǒng)初始化過(guò)程后顯示子程序。
void lcd_pos(BYTE pos)
{                               //設(shè)定顯示位置
lcd_wcmd(pos | 0x80);
}
void lcd_wdat(BYTE dat)
{                               //寫(xiě)入字符顯示數(shù)據(jù)到 LCD
while(lcd_bz());
LCD_RS = 1;
LCD_RW = 0;
LCD_EP = 0;
P0 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EP = 1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EP = 0;
}
void lcd_init()
{                      //LCD 初始化設(shè)定
lcd_wcmd(0x38);        //16*2 顯示,5*7 點(diǎn)陣,8 位數(shù)據(jù)
delay(1);
lcd_wcmd(0x0c);        //顯示開(kāi),關(guān)光標(biāo)
delay(1);
lcd_wcmd(0x06);        //移動(dòng)光標(biāo)
delay(1);
lcd_wcmd(0x01);        //清除 LCD 的顯示內(nèi)容
delay(1);
}

4.2輸出部分程序
程序流程圖如圖4-2所示,程序開(kāi)始運(yùn)行時(shí),定義液晶屏顯示的數(shù)組,程序進(jìn)入主函數(shù),執(zhí)行顯示指令,當(dāng)有火焰時(shí),火焰?zhèn)鞲衅鬏敵龅碗娖叫盘?hào)0,單片機(jī)根據(jù)數(shù)據(jù)信號(hào)傳送到液晶屏的相應(yīng)I/O口,顯示相應(yīng)的數(shù)組。




                  Y                                         N

圖4-2 輸出程序流程圖
以下為液晶屏顯示函數(shù)內(nèi)容。
if(warning == 0) //有光照時(shí)傳感器輸出低電平
            {
              //delay(300);
              if(warning == 0)
              {
                 i=0;
                 while(Fire[ i ] != '\0')
                 {
                   lcd_pos(0x43+i);
                   lcd_wdat(Fire);
                   i++;
                   delay(30);
                 }
                 for(i=0;i<3;i++)
                 {
                   beep = 0;
                   delay(200);
                   beep = 1;
                   delay(200);
                 }
               }
             }
//////////////////////////////////////////
                if(warning == 1)
                {
                  // delay(300);
                  if(warning == 1)
                  {
                     i=0;
                     while(Safe[ i ] != '\0')
                     {
                       lcd_pos(0x43+i);
                       lcd_wdat(Safe);
                                                                         i++;
                                                                         delay(30);
                                                                      }
                     beep = 1;
                     // delay(300);
                   }
                 }
         }
         break;
4.3時(shí)應(yīng)用與功能
此次設(shè)計(jì)主要使用了_nop_延時(shí)來(lái)實(shí)現(xiàn)定時(shí)功能,它的作用為:對(duì)于延時(shí)很短的,要求在us級(jí)的,采用“_nop_”函數(shù),這個(gè)函數(shù)相當(dāng)匯編NOP指令,延時(shí)幾微秒。NOP指令為單周期指令,可由晶振頻率算出延時(shí)時(shí)間,對(duì)于12M晶振,延時(shí)1uS。對(duì)于延時(shí)比較長(zhǎng)的,要求在大于10us,采用C51中的循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)。


第五章 電路設(shè)計(jì)及結(jié)果
如圖5-1為本設(shè)計(jì)的總體電路原理圖,該圖是采用Altium Designer電子線路繪圖軟件完成的,圖中的各種元器件都是根據(jù)設(shè)計(jì)電路嚴(yán)格選定的,并且其參數(shù)大小跟設(shè)計(jì)電路完全一致。圖5-2為無(wú)火焰時(shí)的實(shí)物顯示,圖5-3為有火焰時(shí)的實(shí)物顯示。
圖5-1 總體電路原理圖
圖5-2 無(wú)火焰時(shí)的實(shí)物顯示
圖5-3 有火焰時(shí)的實(shí)物顯示
現(xiàn)象:當(dāng)給板子供板子的時(shí)候,蜂鳴器不響,液晶顯示“TEST……..Safe”,LED燈不亮。當(dāng)出現(xiàn)火焰時(shí)蜂鳴器響進(jìn)行報(bào)警,液晶顯示“TEST……..Fire”,LED紅燈亮。

第六章 總結(jié)
本次課程設(shè)計(jì)對(duì)于我們有很大的幫助,大學(xué)已經(jīng)度過(guò)了三年,但是我們還只是停留在理論的學(xué)習(xí)上。但通過(guò)本次課程設(shè)計(jì),使我對(duì)《模擬電子技術(shù)》這門(mén)課程有了更深入的理解。《模擬電子技術(shù)》是一門(mén)實(shí)踐性較強(qiáng)的課程,為了學(xué)好這門(mén)課程,必須在掌握理論知識(shí)的同時(shí),加強(qiáng)軟件實(shí)踐。一個(gè)人的力量是有限的,要想把課程設(shè)計(jì)做的更好,就要學(xué)會(huì)參考一定的資料,小組共同努力,讓思想有機(jī)的結(jié)合起來(lái),得出實(shí)驗(yàn)結(jié)果。
在這個(gè)過(guò)程中,我們也曾經(jīng)因?yàn)榉抡媸《m結(jié)。但結(jié)果還是很給力的,雖然這只是一次的極簡(jiǎn)單的課程制作,可是平心而論,也耗費(fèi)了我不少的心血,這就讓我不得不佩服開(kāi)發(fā)技術(shù)的前輩,才意識(shí)到老一輩對(duì)我們社會(huì)的付出,為了人們的生活更美好,他們?yōu)槲覀兩鐣?huì)所付出多少心血啊!
知識(shí)上的收獲重要,精神上的豐收更加可喜。讓我知道了學(xué)無(wú)止境的道理。我們每一個(gè)人永遠(yuǎn)不能滿足于現(xiàn)有的成就,人生就像在爬山,一座山峰的后面還有更高的山峰在等著你。挫折是一份財(cái)富,經(jīng)歷是一份擁有。這次課程設(shè)計(jì)必將成為我人生旅途上一個(gè)非常美好的回憶!
通過(guò)這次的課程設(shè)計(jì)我們對(duì)于專業(yè)課的學(xué)習(xí)有了更加深刻的認(rèn)識(shí),以為現(xiàn)在學(xué)的知識(shí)用不上就加以怠慢,等到想用的時(shí)候卻發(fā)現(xiàn)自己的學(xué)習(xí)原來(lái)是那么的不扎實(shí)。以后努力學(xué)好每門(mén)專業(yè)課,讓自己擁有更多的知識(shí),才能解決更多的問(wèn)題!

單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>

  3. typedef unsigned char BYTE;
  4. typedef bit BOOL;

  5. int i,j,display=0,t02s;
  6. sbit LCD_RS = P2^5;
  7. sbit LCD_RW = P2^6;
  8. sbit LCD_EP = P2^7;
  9. sbit warning = P3^2;
  10. sbit beep = P3^4;
  11. //////////////顯示數(shù)組
  12. BYTE code dis1[] = {" WELCOME TO "};
  13. BYTE code dis2[] = {"3W.auto-ctrl.COM"};
  14. BYTE code dis3[] = {" TEST...... "};
  15. BYTE code dis5[] = {"WWW.auto-ctrl.COM"};
  16. BYTE code Fire[] = {"Fire "};
  17. BYTE code Safe[] = {"Safe "};

  18. void flash();
  19. void delay(int ms)
  20. {                            // 延時(shí)子程序
  21.               while(ms--)
  22.               {
  23.                 for(i = 0; i< 250; i++)
  24.       {
  25.                  _nop_();
  26.                 }
  27.               }
  28. }

  29. BOOL lcd_bz()
  30. {                             // 測(cè)試 LCD 忙碌狀態(tài)
  31. BOOL result;
  32. LCD_RS = 0;
  33. LCD_RW = 1;
  34. LCD_EP = 1;
  35. _nop_();
  36. result = (BOOL)(P0 & 0x80);
  37. LCD_EP = 0;
  38. return result;
  39. }

  40. void lcd_wcmd(BYTE cmd)
  41. {                            // 寫(xiě)入指令數(shù)據(jù)到 LCD
  42. while(lcd_bz());
  43. LCD_RS = 0;
  44. LCD_RW = 0;
  45. LCD_EP = 0;
  46. _nop_();
  47. P0 = cmd;
  48. _nop_();
  49. LCD_EP = 1;
  50. _nop_();
  51. LCD_EP = 0;
  52. }

  53. void lcd_pos(BYTE pos)
  54. {                               //設(shè)定顯示位置
  55. lcd_wcmd(pos | 0x80);
  56. }

  57. void lcd_wdat(BYTE dat)
  58. {                               //寫(xiě)入字符顯示數(shù)據(jù)到 LCD
  59. while(lcd_bz());
  60. LCD_RS = 1;
  61. LCD_RW = 0;
  62. LCD_EP = 0;
  63. P0 = dat;
  64. _nop_();
  65. _nop_();
  66. LCD_EP = 1;
  67. _nop_();
  68. _nop_();
  69. LCD_EP = 0;
  70. }

  71. void lcd_init()
  72. {                      //LCD 初始化設(shè)定
  73. lcd_wcmd(0x38);        //16*2 顯示,5*7 點(diǎn)陣,8 位數(shù)據(jù)
  74. delay(1);
  75. lcd_wcmd(0x0c);        //顯示開(kāi),關(guān)光標(biāo)
  76. delay(1);
  77. lcd_wcmd(0x06);        //移動(dòng)光標(biāo)
  78. delay(1);
  79. lcd_wcmd(0x01);        //清除 LCD 的顯示內(nèi)容
  80. delay(1);
  81. }


  82. main()
  83. {
  84.               BYTE i;
  85.               int j=0;
  86.               lcd_init();            // 初始化 LCD
  87.               delay(10);
  88.               lcd_wcmd(0x06);        //向右移動(dòng)光標(biāo)
  89.               while(1)
  90.               {
  91.                 switch(display)
  92.       {
  93.                             case 0:
  94.                             {
  95.                                           i=0;
  96.                                           while(dis2[ i ] != '\0')
  97.                                           {
  98.                                                         lcd_pos(0x80+i);
  99.                                                         lcd_wdat(dis2[ i]);
  100.                                                         i++;
  101.                                                         delay(300);
  102.                                           }
  103.                                           flash();
  104.                                           lcd_wcmd(0x01); //清除 LCD 的顯示內(nèi)容
  105.                                           delay(20); //控制兩屏轉(zhuǎn)換時(shí)間
  106.                                           display = 1;
  107.                                           lcd_wcmd(0x06); //向右移動(dòng)光標(biāo)
  108.                             }
  109.                             break;
  110.                             case 1:
  111.                             {
  112.                               delay(300);
  113.           i = 0;
  114.           while(dis1[ i] != '\0')
  115.           {            //顯示字符" "
  116.             lcd_pos(0x8A+i); //設(shè)置顯示位置為第一行第 17 列
  117.             lcd_wdat(dis1[i]);
  118.             i++;
  119.           }
  120.           delay(300);
  121.           i = 0;
  122.                               while(dis5[i] != '\0')
  123.                               {
  124.             lcd_pos(0x4f+i); //設(shè)置顯示位置為第一行第 17 列
  125.          //顯示字符" "
  126.             lcd_wdat(dis5[i]);
  127.             i++;
  128.           }
  129.           delay(300);
  130.           for(j=0;j<16;j++) //向左移動(dòng) 16 格
  131.           {
  132.             lcd_wcmd(0x18); //字符同時(shí)左移一格
  133.             delay(800); //控制移動(dòng)時(shí)間
  134.           }
  135.                display=2;
  136.         }
  137.         break;
  138.          case 2:
  139.          {
  140.            flash();
  141.            delay(1000);
  142.            lcd_wcmd(0x01); //清除 LCD 的顯示內(nèi)容
  143.            delay(20); //控制兩屏轉(zhuǎn)換時(shí)間
  144.            display = 3;
  145.            lcd_wcmd(0x06); //向右移動(dòng)光標(biāo)
  146.           }
  147.         break;
  148.          case 3:
  149.          {
  150.                                           i=0;
  151.                                           while(dis3[ i ] != '\0')
  152.                                           {
  153.                                             lcd_pos(0x80+i);
  154.                                             lcd_wdat(dis3[ i]);
  155.                                             i++;
  156.                                             delay(30);
  157.             }
  158.                                                         display=4;
  159.                             }
  160.         break;
  161.          case 4:
  162.          {
  163.             if(warning == 0) //有光照時(shí)傳感器輸出低電平
  164.             {
  165.               //delay(300);
  166.               if(warning == 0)
  167.               {
  168.                  i=0;
  169.                  while(Fire[ i ] != '\0')
  170.                  {
  171.                    lcd_pos(0x43+i);
  172.                    lcd_wdat(Fire[ i]);
  173.                    i++;
  174.                    delay(30);
  175.                  }
  176.                  for(i=0;i<3;i++)
  177.                  {
  178.                    beep = 0;
  179.                    delay(200);
  180.                    beep = 1;
  181.                    delay(200);
  182.                  }
  183.                }
  184.              }
  185. //////////////////////////////////////////
  186.                 if(warning == 1)
  187.                 {
  188.                   // delay(300);
  189.                   if(warning == 1)
  190.                   {
  191.                      i=0;
  192.                      while(Safe[ i ] != '\0')
  193.                      {
  194.                        lcd_pos(0x43+i);
  195.                        lcd_wdat(Safe[ i]);
  196.                                                                          i++;
  197.                                                                          delay(30);
  198.                                                                       }
  199.                      beep = 1;
  200.                      // delay(300);
  201.                    }
  202.                  }
  203.          }
  204.          break;
  205.          default:
  206.          break;
  207.         }
  208.      }
  209. ……………………
  210. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
火焰檢測(cè)報(bào)警器-課程設(shè)計(jì).doc (7.15 MB, 下載次數(shù): 112)


作者: WMD5555    時(shí)間: 2020-1-6 16:10
贊 想下載
作者: 1234567989    時(shí)間: 2020-6-3 11:26
想要仿真文件
作者: A_Wood    時(shí)間: 2020-6-12 21:08
支持一下.




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1