新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于Proteus的自動撥號報警器仿真設(shè)計

基于Proteus的自動撥號報警器仿真設(shè)計

作者: 時間:2011-06-16 來源:網(wǎng)絡(luò) 收藏

2.2 中斷子程序
中斷子程序基本流程如圖3所示。首先建立一個整形數(shù)組numi[],將號碼位數(shù)k保存在numi[0]中,而電話號碼則保存在numi[1]~numi[k]中;然后將數(shù)組numi[]的前k+1位一次性發(fā)送至I2C芯片。讀取的時候,從讀取數(shù)據(jù)首地址一次性讀取出16位數(shù)據(jù)(電話號碼最多14位),將其保存在整形數(shù)組phn[]中,的時候從phn[1]開始,一共讀phn[0]次,這樣不但可以準(zhǔn)確的傳輸電話號碼并進(jìn)行,同時對I2C芯片的
讀/寫僅需1次,降低了讀寫過程中未知錯誤發(fā)生的概率。
共有8路外部模擬報警信號輸入,其警報信號定義如表1所示。將長音視為1,短音視為0,則警報內(nèi)容可譯為報警信號源代碼的BCD碼低三位,以此作為報警類型標(biāo)識。

本文引用地址:http://butianyuan.cn/article/150595.htm

c.JPG


2.3 LCD顯示子程序
LCD顯示子程序包含有多個子函數(shù),包括:讀LCD狀態(tài)指令函數(shù)recom()、測試忙函數(shù)busytest()、寫LCD指令函數(shù)wrcomn()、LCD清屏函數(shù)clrscr()、初始化LCD函數(shù)initled()、光標(biāo)定位函數(shù)setpos();寫單字節(jié)數(shù)據(jù)函數(shù)writedata();對于某一行的寫入字符串函數(shù)wrll()與wr21()。其中,讀/寫指令、測試忙、清屏、光標(biāo)定位、寫單字?jǐn)?shù)據(jù)均是按照LCD原理命令字進(jìn)行操作。LCD的初始化包括復(fù)位設(shè)置、清除顯示、地址歸位、顯示開關(guān)、游標(biāo)設(shè)置、讀/寫地址設(shè)置等,LCD中所有數(shù)字和字符都可以通過它的ASCII碼來訪問顯示。
2.4 音頻模塊程序
在撥號程序設(shè)計中關(guān)鍵要控制好定時器以實現(xiàn)準(zhǔn)確的占空比脈沖,程序編寫中,設(shè)置TMOD=0x11,定時器設(shè)置為操作模式1,當(dāng)生成61.5 ms低電平脈沖時,TC=216-61.5 ms/1μs=4 036=0x0FC4,因此TH0=0x0F,TL0=0xC4;當(dāng)生成38.5ms高電平脈沖時,TC=216-38.5ms/1μs= 27 036=0x699C,所以TH0=0x69,TL0=0x9C;當(dāng)延時500 ms時,由于單片機(jī)定時器最大定時時間為61.5 ms(方式1),因此采取在一個循環(huán)次數(shù)為10的for循環(huán)中執(zhí)行定時時間為50 ms的程序,TC=216-50 ms/1μs=15 536=0x3CB0,因此TH0=0x3C,TL0=0xB0。
音頻模塊程序設(shè)計是通過設(shè)定特定頻率的正負(fù)脈沖序列,驅(qū)動擴(kuò)音器播放出相應(yīng)音調(diào)的聲音,例如若設(shè)置單片機(jī)定時器1TH0=0xFB,TL0= 0x44,則脈沖周期約為2.424 ms,所發(fā)出的聲音與音調(diào)“do”相似。在此不妨定義發(fā)長音時間為500 ms,發(fā)短音時間為100 ms。長短音信號相互組合成不同的警報信息可用來定義不同的報警類型。

3 調(diào)試與運行
和Keil中進(jìn)行相關(guān)的設(shè)置,可以讓兩者進(jìn)行聯(lián)調(diào),聯(lián)調(diào)可以在同一臺計算機(jī)上進(jìn)行,也可以在不同的計算機(jī)之間進(jìn)行。通過與Keil的聯(lián)調(diào)可以輕易做到在不使用硬件的前提下直接在平臺上進(jìn)行實時,對于系統(tǒng)的調(diào)試具有很大意義。實時能降低調(diào)試的難度,更有利于設(shè)計中一些問題的解決以及BUG的發(fā)現(xiàn)。相比較于只能觀看運行結(jié)果的系統(tǒng)來說,聯(lián)調(diào)可以大大提高設(shè)計制作的效率。Pro-teus與Keil的聯(lián)調(diào)需要用到下的一個動態(tài)鏈接庫文件VDM51.DLL,用其作為Keil鏈接到Proteus的接口。
系統(tǒng)運行后,首先初始化系統(tǒng),并顯示系統(tǒng)信息,數(shù)秒鐘的延時之后LCD將顯示提示“是否輸入新號碼?”,若按“#”則進(jìn)入號碼輸入界面。輸入完畢后按“#”結(jié)束輸入,如果輸入錯誤則按“*”重新輸入,若按“*”則進(jìn)入等待狀態(tài),若報警開關(guān)未打開,則進(jìn)入空閑狀態(tài),此時按“#”可以修改已存儲的電話號碼。若報警開關(guān)已經(jīng)打開,則進(jìn)入監(jiān)控狀態(tài),此時按“#”依然可以修改之前存儲的電話號碼。若此時有外部報警信號進(jìn)入,則進(jìn)入中斷程序,開始撥號。同時,可用電壓探針探測到輸出的撥號脈沖序列,如圖4所示。根據(jù)脈沖撥號原理,數(shù)字1~9撥號脈沖個數(shù)與撥號數(shù)字相同,0的脈沖個數(shù)是10。

d.JPG


撥號完成會延時10 s,之后將會根據(jù)輸入報警信號類型判斷警報內(nèi)容,若打開第六路報警信號開關(guān),此時系統(tǒng)發(fā)出了長、長、短的警報信號。若將報警開關(guān)閉合,系統(tǒng)被掛起,解除報警信號,可模擬成被人暫時關(guān)閉,并開始處理報警內(nèi)容,如:火災(zāi)則滅火,毒氣則通
風(fēng),盜竊則檢查門窗物件等。報警信號解除后,程序跳出中斷循環(huán)程序,返回到主程序的監(jiān)控狀態(tài)。

4 結(jié)語
本文給出了使用Proteus軟件仿真撥號實驗的具體設(shè)計過程,采用模塊程序設(shè)計,利用仿真軟件Proteus及Keil C51聯(lián)合調(diào)試程序。程序設(shè)計過程對每個模塊先進(jìn)行獨立編程,調(diào)試通過之后再一起合并進(jìn)行系統(tǒng)程序總調(diào)試。通過上述方式,學(xué)生完全可以通過Proteus軟件實現(xiàn)單片機(jī)實驗的仿真,并在較短的時間內(nèi)完成單片機(jī)系統(tǒng)的軟、硬件設(shè)計,形象生動地理解并掌握單片機(jī)技術(shù)。不僅彌補(bǔ)了硬件資源投入不足的弊端,還明顯克服了實驗箱教學(xué)中固定硬件資源導(dǎo)致實驗內(nèi)容固定的缺陷,極大地發(fā)揮了學(xué)生的主觀能動性和創(chuàng)造性。


上一頁 1 2 3 4 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉