版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 一 引言2</b></p><p> 二 硬件系統(tǒng)方案設(shè)計(jì)2</p><p> 2.1電話撥號(hào)防盜報(bào)警器硬件系統(tǒng)方案2</p><p> 2.1.1 硬件系統(tǒng)方案設(shè)計(jì)2</p><p> 2.1.2 脈沖撥號(hào)原理3</p><p> 2.1.3
2、脈沖撥號(hào)實(shí)現(xiàn)過(guò)程4</p><p> 2.1.4 AT89S2052單片機(jī)的功能特點(diǎn)5</p><p> 2.2 時(shí)鐘計(jì)時(shí)器的硬件設(shè)計(jì)方案論證分析8</p><p> 2.2.1 功能要求8</p><p> 2.2.2 方案論證8</p><p> 2.2.3 系統(tǒng)硬件電路設(shè)計(jì)8</p
3、><p> 4.1.2時(shí)鐘計(jì)時(shí)器的硬件電路設(shè)計(jì)描述9</p><p> 三 系統(tǒng)的軟件設(shè)計(jì)10</p><p> 3.1電話撥號(hào)防盜報(bào)警器程序設(shè)計(jì)10</p><p> 3.1.1主程序設(shè)計(jì)11</p><p> 3.2 時(shí)鐘顯示程序設(shè)計(jì)12</p><p> 3.2.1主函數(shù)
4、12</p><p> 3.2.2 LED顯示子函數(shù)13</p><p> 3.2.3 定時(shí)器T0中斷函數(shù)13</p><p> 3.2.4 中斷函數(shù)14</p><p> 3.2.5 功能函數(shù)14</p><p> 四 系統(tǒng)的調(diào)試部分15</p><p> 4.1 時(shí)鐘
5、系統(tǒng)的調(diào)試15</p><p> 4.1.1 時(shí)鐘系統(tǒng)的硬件調(diào)試15</p><p> 4.1.2 時(shí)鐘系統(tǒng)的軟件調(diào)試15</p><p> 4.1.3 性能分析15</p><p> 4.2 撥號(hào)報(bào)警器功能調(diào)試15</p><p><b> 五 總結(jié)16</b></p
6、><p><b> 參考文獻(xiàn)17</b></p><p><b> 附錄18</b></p><p> 附錄1 程序清單18</p><p> 附錄2 系統(tǒng)使用說(shuō)明18</p><p> 附錄3 英文資料18</p><p> 附錄4
7、 系統(tǒng)PCB板圖18</p><p> 附錄1:程序清單19</p><p> 附錄2:系統(tǒng)使用說(shuō)明36</p><p><b> 一 引言</b></p><p> 隨著人們生活水平的不斷提高,大家對(duì)住宅和辦公室的安全意識(shí)也日益增加。因此,研究和開(kāi)發(fā)防盜報(bào)警裝置引起了科研單位和生產(chǎn)廠家的重視,特別是面對(duì)普
8、通居民、價(jià)格低、運(yùn)行可靠的自動(dòng)報(bào)警系統(tǒng)。</p><p> 長(zhǎng)期以來(lái),一些電子雜志介紹的廉價(jià)防盜報(bào)警均無(wú)電話撥號(hào)報(bào)警功能,而市售的可自動(dòng)撥號(hào)報(bào)警的防盜器材又價(jià)格高昂。這里介紹的電話撥號(hào)防盜報(bào)警器可在這兩者之間找到平衡,即兼具高性能和低價(jià)位。為了以低成本實(shí)現(xiàn)高性能,設(shè)計(jì)時(shí)利用了電信局的交換機(jī)支持脈沖撥號(hào)方式來(lái)實(shí)現(xiàn)撥號(hào)報(bào)警,這樣可利用單片機(jī)直接發(fā)出撥號(hào)脈沖,精簡(jiǎn)了電路,降低了成本。</p><p
9、> 電話撥號(hào)防盜報(bào)警器作為家庭防盜報(bào)警器材的一員,非常經(jīng)濟(jì)實(shí)用。它進(jìn)入工作警戒后,主控CPU不斷檢查觸發(fā)開(kāi)關(guān)的狀態(tài),當(dāng)盜賊入室觸發(fā)開(kāi)關(guān)時(shí),立即啟動(dòng)電話撥號(hào)報(bào)警程序向主人告警(當(dāng)然也可以通過(guò)修改軟件使其在現(xiàn)場(chǎng)發(fā)出高分貝報(bào)警音)。實(shí)踐證明,該系統(tǒng)報(bào)警快速、準(zhǔn)確。由于該系統(tǒng)電路簡(jiǎn)單,而且利用的是公共通信網(wǎng),因此不存在建立的報(bào)警系統(tǒng)網(wǎng)絡(luò)問(wèn)題,具有成本低、體積小、能耗極低、體積小、能耗極低且不影響正常打電話等突出優(yōu)點(diǎn)。平時(shí)可以作為時(shí)鐘計(jì)時(shí)
10、器來(lái)使用,真是一舉兩得。</p><p> 二 硬件系統(tǒng)方案設(shè)計(jì) </p><p> 2.1電話撥號(hào)防盜報(bào)警器硬件系統(tǒng)方案</p><p> 2.1.1 硬件系統(tǒng)方案設(shè)計(jì)</p><p> 圖2.1為電話撥號(hào)報(bào)警器的系統(tǒng)構(gòu)成方框圖,由單片機(jī)控制器、鍵盤(pán)輸入、數(shù)碼管顯示、觸發(fā)電路、撥號(hào)電路及電源等6部分組成。</p>&l
11、t;p> 單片機(jī)控制器是整個(gè)系統(tǒng)的核心,負(fù)責(zé)控制檢測(cè)輸入/輸出顯示、模擬摘機(jī)、撥號(hào)摘機(jī)、撥號(hào)報(bào)警、掛機(jī)等一系列的程序動(dòng)作。這里使用了小引腳、高性能、低價(jià)位的AT89S2052。</p><p> 鍵盤(pán)輸入電路負(fù)責(zé)輸入電片機(jī)中一系列工作參數(shù)及功能設(shè)定。</p><p> 發(fā)光二極管數(shù)碼管顯示器在整個(gè)系統(tǒng)工作過(guò)程中充當(dāng)一個(gè)簡(jiǎn)單的人機(jī)界面,用以顯示工作狀況及輸入/輸出的數(shù)據(jù)等。<
12、;/p><p> 電話撥號(hào)防盜報(bào)警器的觸發(fā)電路用磁性開(kāi)關(guān)(門(mén)磁開(kāi)關(guān)),簡(jiǎn)單可靠,也可用紅外探測(cè)器或無(wú)線門(mén)磁,以實(shí)現(xiàn)全方位遠(yuǎn)距離監(jiān)測(cè)。報(bào)警器應(yīng)采用隱蔽安裝,防止小偷發(fā)現(xiàn)。</p><p> 撥號(hào)及報(bào)警電路用來(lái)完成模擬摘機(jī)、撥號(hào)、發(fā)出報(bào)警音、掛機(jī)等工作過(guò)程,它的工作由單片機(jī)控制。</p><p> 電源部分負(fù)責(zé)對(duì)整個(gè)系統(tǒng)供電。平時(shí)由電話線上取得工作電流并對(duì)后備電池充電
13、,撥號(hào)報(bào)警時(shí)轉(zhuǎn)由后備電池供電。</p><p> 圖2.1 電話撥號(hào)防盜報(bào)警器方框圖</p><p> 2.1.2 脈沖撥號(hào)原理</p><p> 脈沖撥號(hào)是目前電話機(jī)兩種撥號(hào)方式中的一種,另一種為雙音多頻撥號(hào)方式。</p><p> 脈沖撥號(hào)就是指在電話機(jī)上撥入的電話號(hào)碼以脈沖個(gè)數(shù)的形式發(fā)出,也就是說(shuō),在已經(jīng)通以直流電流的回路上,利
14、用撥號(hào)盤(pán)及發(fā)號(hào)電路將回路斷開(kāi)、再接通而形成的脈沖信號(hào),來(lái)完成輸入電話號(hào)碼的發(fā)送。在操作中,若用戶撥1,則送出1個(gè)脈沖,回路中斷一次、接通一次;撥2,則發(fā)出2個(gè)脈沖,回路斷一次、接通一次、再斷一次;……;而撥0時(shí),則發(fā)出10個(gè)脈沖,回路斷、接通輪流10次。圖2.2為電話號(hào)碼“32”的脈沖波形。</p><p> 圖2.2 電話號(hào)碼“32”的脈沖波形 </p><p> 正常撥號(hào)時(shí),電路
15、電流中斷的時(shí)間一般在58~65ms之間,視斷續(xù)比的不同而不同??焖贀芴?hào)時(shí),只要取一半時(shí)間即可。電路電流接通的時(shí)間(即在同一位號(hào)碼中的2個(gè)斷脈沖之間的接通電流時(shí)間)約在32~42ms之間,視斷續(xù)比的不同而不同??焖贀芴?hào)時(shí),只要取一半時(shí)間即可。顯然脈沖周期等于脈沖中斷時(shí)間和脈沖接通時(shí)間之和,每一個(gè)周期的時(shí)間為100ms左右??焖贀芴?hào)時(shí),在50ms左右。2位號(hào)碼(即2組脈沖串)之間的最小時(shí)間間隔,通常為800ms左右;而快速撥號(hào)時(shí),其值減半,
16、為400ms左右。</p><p> 我國(guó)目前采用的電話脈沖撥號(hào)的速率是10PPS(每秒的脈沖數(shù)),即每秒發(fā)出10個(gè)脈沖,因此上述各參數(shù)不存在快速撥號(hào)時(shí)的值。</p><p> 為了提高撥號(hào)的可靠性及穩(wěn)定性,這里設(shè)計(jì)時(shí)選定更低的脈沖撥號(hào)速率:1個(gè)脈沖代表播出1,2個(gè)脈沖代表?yè)艹?,……,10個(gè)脈沖代表?yè)艹?,每個(gè)脈沖的寬度和間隔為100ms。工作時(shí)首先進(jìn)行模擬摘機(jī),然后開(kāi)始脈沖撥號(hào),撥
17、出1位號(hào)碼后停頓500ms(保持接通)再撥下一位,直至全部撥完后再發(fā)報(bào)警音,……,最后掛機(jī)。</p><p> 2.1.3 脈沖撥號(hào)實(shí)現(xiàn)過(guò)程</p><p> 圖2.3為脈沖撥號(hào)的實(shí)現(xiàn)電路。平時(shí)電話線上的電壓約為50~60V左右。未撥號(hào)時(shí)電片機(jī)的P3.0、P3.1 均輸出低電平。</p><p><b> 撥號(hào)過(guò)程如下:</b><
18、/p><p> ?、賳纹瑱C(jī)的P3.0輸出高電平,使TR1導(dǎo)通,由于電話線路上接入了負(fù)載R1,這樣電話線的電壓下降,模擬摘機(jī)。</p><p> ?、趩纹瑱C(jī)的P3.0開(kāi)始輸出撥號(hào)脈沖,使電話線的電壓(電平)也呈高、低變化。1個(gè)脈沖代表?yè)艹?,2個(gè)脈沖代表?yè)艹?,……,10個(gè)脈沖代表?yè)艹?,每個(gè)脈沖的寬度和間隔均為100ms。撥出1位號(hào)碼后停頓500ms(保持P3.0高電平)再撥下一位,直至全部撥
19、完。</p><p> ?、跴3.0 保持高電平(保持電話線路接通),P3.1輸出1KHz的報(bào)警音脈沖驅(qū)動(dòng)TR2,以2Hz進(jìn)行調(diào)制(即接通1kHz信號(hào)0.5s、斷開(kāi)1kHz信號(hào)0.5s),這樣從接聽(tīng)方的電話中就會(huì)聽(tīng)到“嘟、嘟……”的報(bào)警聲。報(bào)警音的時(shí)間根據(jù)設(shè)計(jì)為60s。</p><p> ?、?0后,P3.1輸出低電平,TR2 截止,停止報(bào)警。隨后P3.0也輸出低電平,模擬掛機(jī)。完成一次報(bào)
20、警過(guò)程。</p><p> 2.1.4 AT89S2052單片機(jī)的功能特點(diǎn)</p><p> 電話撥號(hào)防盜報(bào)警器的核心控制器是單片機(jī)AT89S2052。AT89S2052 是美國(guó)ATMEL半導(dǎo)體公司生產(chǎn)的一種高性能單片機(jī)。該單片機(jī)以與MCS-51系列單片機(jī)高度兼容、低功耗、可以在接近零頻率下工作等諸多優(yōu)點(diǎn),而廣泛應(yīng)用于各類計(jì)算機(jī)系統(tǒng)、工業(yè)控制、電信設(shè)備、消費(fèi)類產(chǎn)品中。由于ATMEL是
21、全球最大的FLASH和EEPROM生產(chǎn)制造公司之一,加之以其EEPROM技術(shù)與INTEL的80C51內(nèi)核技術(shù)交換,使ATMEL擁有了80C51內(nèi)核的使用權(quán),其生產(chǎn)的AT89系列電片機(jī)不僅與80C51有極好的兼容性,而且具有極高的性能價(jià)格比。</p><p> AT89S2051的主要性能特點(diǎn)</p><p> 指令與MCS-51完全兼容;內(nèi)帶2KB可編程閃速存儲(chǔ)器(FLASH MEMO
22、RY)可重復(fù)擦寫(xiě)1000次;數(shù)據(jù)保留10年;工作電壓范圍2.7~6V;工作頻率0~24MHZ;兩極程序加密鎖定;128B內(nèi)部RAM;15條可編程雙向I/O口線;2個(gè)16位定時(shí)器/計(jì)時(shí)器;5個(gè)中斷源;可編程串行UART通道;輸出口可直接驅(qū)動(dòng)LED;片內(nèi)含模擬比較器;低功耗的閑置和掉電模式。</p><p> AT89S2052是AT89 系列電片機(jī)種的一種精簡(jiǎn)產(chǎn)品。它是將TA89C52的P0口、P2口、EA/Vp
23、p、ALE/PROG、PSEN口線省去后,形成的一種僅20個(gè)引腳的單片機(jī),相當(dāng)于早期INTEL8031的最小應(yīng)用系統(tǒng)。這對(duì)于一些不太復(fù)雜的控制場(chǎng)合,僅用一片AT89S2052就足夠了,是真正意義上的“單片機(jī)”。</p><p> 由于將多功能8位CPU和2KB的閃速存儲(chǔ)器集成在單個(gè)芯片中,使其成為一種高效的微控制器。AT89S2052的出現(xiàn)為很多規(guī)模不太大的嵌入式控制系統(tǒng)提供了一種極佳的選擇方案,使傳統(tǒng)的51系
24、列單片機(jī)的體積大、功耗大、可選模式少等諸多困擾設(shè)計(jì)工程師們的致命弱點(diǎn)不復(fù)存在。</p><p><b> 引腳功能介紹</b></p><p> AT89S2052引腳外形如圖所示。</p><p><b> Vcc:電源端。</b></p><p><b> GND:接地。<
25、;/b></p><p> P1 口(P1.0~P1.7):是一個(gè)8位雙向I/O口,其中P1.2至P1.7提供內(nèi)部上拉電阻,P1.0和P1.1需外接上拉電阻。P1.0和P1.1也可作為片內(nèi)精確模擬比較器的正向輸入(AINO)和反向輸入(AINI)。P1口輸出緩沖器能提供20mA的灌電流,可直接驅(qū)動(dòng)LED。P1口寫(xiě)入“1”后可用作輸入。</p><p> P3口:引腳P3.0至P3
26、.7(P3.5除外)是7個(gè)帶內(nèi)部上拉電阻的雙向I/O口線。原P3.6不能使用,已連接片內(nèi)比較器輸出端。與P1口相同,P3口也能提供20mA的灌電流,并可直接驅(qū)動(dòng)LED顯示器。與80C51相同,P3口也有第2功能,P3.0作為串行數(shù)據(jù)接收RXD;P3.1作為串行數(shù)據(jù)發(fā)送TXD;P3.2為外部中斷0申請(qǐng)INT0;P3.3 為外部中斷1申請(qǐng)INT1;P3.4 為定時(shí)器/計(jì)時(shí)器0輸入;P3.5位定時(shí)器/計(jì)數(shù)器1輸入;P3.7無(wú)第2功能RD。&l
27、t;/p><p> RST:復(fù)制輸入。要使芯片可靠復(fù)位,要保持RST引腳2個(gè)機(jī)器周期的高電平。</p><p> XTAL1:反向振蕩放大的輸入及內(nèi)部時(shí)鐘電路的殊榮。</p><p> XTAL2:來(lái)自反向振蕩放大器的輸出。</p><p> 特殊功能寄存器(SFR)與80C51完全相同</p><p><b
28、> 程序存儲(chǔ)器鎖定</b></p><p> AT89S2052片內(nèi)有2個(gè)鎖定位,可以不編程(U),也可以編程(P),以獲得一些附加的特性,如表2.1所示。</p><p> 表2.1 程序存儲(chǔ)器鎖定</p><p><b> 5、閑置模式</b></p><p> 在閑置模式下,CPU自身
29、處于休眠狀態(tài),而片內(nèi)所有其他外圍設(shè)備保持工作狀態(tài)。該模式是軟件生成的。在該模式期間,片內(nèi)RAM和所有特殊功能寄存器的內(nèi)容保持不變。閑置模式可以允許由中斷或硬件復(fù)位終止。如果不采用外部上拉,P1.0和P1.1應(yīng)置0;如果采用外部上拉,則置1。應(yīng)注意的是,當(dāng)閑置模式被硬件復(fù)位中止時(shí),器件要從閑置處恢復(fù)程序的執(zhí)行,執(zhí)行2個(gè)機(jī)器周期后,內(nèi)部復(fù)位算法才起作用。此時(shí),硬件禁止訪問(wèn)內(nèi)部RAM,但允許訪問(wèn)端口引腳。為了排除閑置被復(fù)位中止時(shí)對(duì)端口意外寫(xiě)入
30、的可能性,跟在生成閑置模式后的指令不應(yīng)是對(duì)端口引腳的讀/寫(xiě)操作。</p><p><b> 6.掉電模式</b></p><p> 在掉電模式下,振蕩器停止工作,生成掉電狀態(tài)的指令是最后執(zhí)行的一條指令。片內(nèi)RAM和特殊功能寄存器保持其值不變直到掉電模式終止。從掉電模式退出的唯一辦法是硬件復(fù)位。復(fù)位將重新定義特殊功能寄存器(SFR),但不會(huì)影響片內(nèi)RAM。在Vcc沒(méi)
31、有恢復(fù)到其正常工作電壓之前,不應(yīng)進(jìn)行復(fù)位,且復(fù)位的保持時(shí)間應(yīng)足夠長(zhǎng),使振蕩器能重新開(kāi)始工作并穩(wěn)定下來(lái)。同樣,如果不采用外部下拉,P1.0和P1.1應(yīng)置0,如果采用外部上拉,則置1。</p><p> 2.2 時(shí)鐘計(jì)時(shí)器的硬件設(shè)計(jì)方案論證分析</p><p> 2.2.1 功能要求</p><p> 時(shí)鐘計(jì)時(shí)器要求用六位LED數(shù)碼管顯示時(shí)、分、秒、以二十四小時(shí)方
32、式運(yùn)行,使用按鍵開(kāi)關(guān)實(shí)現(xiàn)時(shí),分調(diào)整功能。</p><p> 2.2.2 方案論證</p><p> 為實(shí)現(xiàn)LED顯示器的數(shù)字顯示,可以采用靜態(tài)顯示法和動(dòng)態(tài)顯示法。由于靜態(tài)顯示法需要數(shù)據(jù)鎖存器等硬件,接口復(fù)雜一些,考慮到時(shí)鐘顯示只有六位,且系統(tǒng)沒(méi)有其它復(fù)雜的處理任務(wù),所以決定用動(dòng)態(tài)掃描實(shí)現(xiàn)LED顯示。單片機(jī)采用易購(gòu)的AT89S52系列,這種單片機(jī)可具有足夠的空余硬件資源,以實(shí)現(xiàn)其它的擴(kuò)
33、充功能。若使用電池供電,可采用低電壓的LV系列單片機(jī)時(shí)鐘計(jì)時(shí)器電路系統(tǒng)的總體設(shè)計(jì)框架如圖3.1所示。</p><p> 圖3.1 硬件系統(tǒng)的總體設(shè)計(jì)框架</p><p> 2.2.3 系統(tǒng)硬件電路設(shè)計(jì)</p><p> 電話撥號(hào)防盜報(bào)警器的硬件電路設(shè)計(jì)描述</p><p> 為了發(fā)揮電片機(jī)強(qiáng)大的計(jì)算、控制能力,充分發(fā)揮軟件的優(yōu)勢(shì),這
34、里極大地簡(jiǎn)化了電路,但可實(shí)現(xiàn)以前需要幾片甚至十幾片小規(guī)模數(shù)字電路才能完成的任務(wù)。</p><p> 電路原理如圖所示,共有4個(gè)按鍵,即rst、ok、up、set。</p><p> rst:系統(tǒng)復(fù)位鍵。</p><p> ok:輸入數(shù)據(jù)確認(rèn)鍵。</p><p> up:顯示的數(shù)字增加鍵。</p><p> s
35、et:工作模式設(shè)定鍵,可設(shè)定管機(jī)、工作、輸入時(shí)間t1、輸入時(shí)間t2及輸入電話號(hào)碼5種模式。</p><p> 磁性開(kāi)關(guān)即為裝于門(mén)或窗口的防盜感應(yīng)開(kāi)關(guān),門(mén)關(guān)閉時(shí)常開(kāi),門(mén)打開(kāi)時(shí)閉合接通。當(dāng)然也可改用其他的感應(yīng)器件,如激光探測(cè)、超聲波感應(yīng)、熱釋電感應(yīng)、主動(dòng)紅外線探測(cè)或無(wú)線門(mén)磁等,以實(shí)現(xiàn)全方位遠(yuǎn)距離檢測(cè)。為了防止磁性開(kāi)關(guān)離控制器較遠(yuǎn)而產(chǎn)生引入干擾,使用了光耦作信號(hào)傳遞,效果良好。LED數(shù)碼管用于工作狀態(tài)指示或輸入數(shù)據(jù)指
36、示。L1、L2接電話線,ZND為擊穿電壓120V的壓敏二極管,防止電路受雷電干擾。平時(shí)系統(tǒng)處于低功耗待機(jī)狀態(tài)(此時(shí)耗電僅2mA左右),由電話線上取電工作,并對(duì)3.6V/60mA鎳鉻電池充電,當(dāng)輸入數(shù)據(jù)進(jìn)行設(shè)定或進(jìn)行撥號(hào)報(bào)警時(shí),耗電會(huì)達(dá)到10mA,這時(shí)主要由鎳鉻電池供電。由于有鎳鉻電池后備供電,即使電話線斷電也不會(huì)使已輸入的數(shù)據(jù)丟失。該機(jī)除用于防盜報(bào)警外,若對(duì)軟件進(jìn)行一些修改,也可通過(guò)電話線進(jìn)行遠(yuǎn)程數(shù)據(jù)傳遞。三極管T1、T2及電阻R1、R
37、2構(gòu)成撥號(hào)及報(bào)警電路,其工作原理前面已作詳細(xì)介紹。</p><p> 4.1.2時(shí)鐘計(jì)時(shí)器的硬件電路設(shè)計(jì)描述</p><p> 時(shí)鐘計(jì)時(shí)器的硬件電路,采用AT89S52單片機(jī)最小化應(yīng)用設(shè)計(jì),顯示采用共陽(yáng)七段LED顯示器,P0口輸出段數(shù)碼數(shù)據(jù),P2.0~P2.5口作列掃描輸出,P1.0,P1.1和P1.2口接三個(gè)按鈕開(kāi)關(guān)用以實(shí)現(xiàn)調(diào)時(shí),調(diào)分功能.為了提供共陽(yáng)LED數(shù)碼管的驅(qū)動(dòng)電壓,用三極管
38、8550作電源驅(qū)動(dòng)輸出。采用12MHZ晶振有利于提高秒計(jì)時(shí)的精確性。硬件電路圖如圖3.2示。</p><p><b> 三 系統(tǒng)的軟件設(shè)計(jì)</b></p><p> 3.1電話撥號(hào)防盜報(bào)警器程序設(shè)計(jì)</p><p> 3.1.1主程序設(shè)計(jì)</p><p> 主程序的工作過(guò)程為:先進(jìn)行初始化工作,隨后根據(jù)輸入的鍵值
39、分別散轉(zhuǎn)輸入的鍵值分別散轉(zhuǎn)至對(duì)應(yīng)的子程序(管機(jī)、警戒工作、輸入時(shí)間t1、輸入時(shí)間t2、輸入電話號(hào)碼)循環(huán)工作。T0為100ms定時(shí)中斷服務(wù)子程序,它實(shí)現(xiàn)精確的撥號(hào)脈沖時(shí)序。INT0外中斷服務(wù)子函數(shù)用于實(shí)現(xiàn)功能選擇;而INT1外中斷服務(wù)子函數(shù)則檢測(cè)防盜觸發(fā)開(kāi)關(guān)的狀態(tài)。</p><p> 主程序狀態(tài)流程圖如圖3.6所示。INT0外中斷服務(wù)子函數(shù)狀態(tài)流程圖及INT1外中斷服務(wù)子函數(shù)的狀態(tài)流程圖分別如圖3.7、圖3.8
40、所示。</p><p> 3.2 時(shí)鐘顯示程序設(shè)計(jì)</p><p><b> 3.2.1主函數(shù)</b></p><p> 本設(shè)計(jì)中計(jì)時(shí)采用定時(shí)器T0中斷完成,其余狀態(tài)循環(huán)調(diào)用顯示子函數(shù)及鍵掃描子函數(shù),當(dāng)端口開(kāi)關(guān)按下時(shí),轉(zhuǎn)入相應(yīng)調(diào)時(shí)功能。其主函數(shù)執(zhí)行流程如圖3.3所示。</p><p> 3.2.2 LED顯示子函
41、數(shù)</p><p> 數(shù)碼管顯示的數(shù)據(jù)存放在內(nèi)存單元dis[0]~dis[5]中,其中dis[0]~dis[1]存放秒數(shù)據(jù),dis[2]~dis[3]存放分?jǐn)?shù)據(jù),dis[4]~dis[5]存放時(shí)數(shù)據(jù),每一單元內(nèi)均為十進(jìn)制BCD碼。由于采用軟件動(dòng)態(tài)掃描實(shí)現(xiàn)數(shù)據(jù)顯示功能,顯示用的十進(jìn)制BCD碼數(shù)據(jù)的對(duì)應(yīng)段碼存放在ROM表(dis7[11])中,顯示時(shí),先取出dis[0]~dis[5]中的某一數(shù)據(jù),然后查得對(duì)應(yīng)得顯示
42、段碼從P0口輸出,P2口將對(duì)應(yīng)得數(shù)碼管選中供電,就能顯示該地址單元的數(shù)據(jù)值。</p><p> 3.2.3 定時(shí)器T0中斷函數(shù)</p><p> 定時(shí)器T0用于時(shí)間計(jì)時(shí)。定時(shí)溢出中斷周期可設(shè)為50ms,中斷進(jìn)入后先判斷,中斷計(jì)時(shí)累計(jì)20次(即1ms)時(shí)對(duì)妙計(jì)數(shù)單元進(jìn)行加1操作。時(shí)鐘計(jì)數(shù)單元在 義的6個(gè)單元(timedata[6])中。timedata[0]~timedata[1]存放秒
43、數(shù)據(jù),timedata[2]~timedata[3]存放分?jǐn)?shù)據(jù),timedata[4]~timedata[5]存放時(shí)數(shù)據(jù)。最大計(jì)時(shí)值為23小時(shí)59分59秒。在計(jì)數(shù)單元中采用十進(jìn)制BCD碼計(jì)數(shù),秒,分、時(shí)之間滿60進(jìn)位。T0中斷服務(wù)程序執(zhí)行流程如圖3.4所示。</p><p> 3.2.4 中斷函數(shù)</p><p> T1中斷服務(wù)程序用于指示調(diào)整數(shù)字單元的亮閃,在時(shí)間調(diào)整狀態(tài)下,每過(guò)0.
44、4s,將對(duì)應(yīng)單元的顯示數(shù)據(jù)換成“熄滅符”數(shù)據(jù)(0x0a)。這樣,在調(diào)整時(shí)間時(shí),對(duì)應(yīng)調(diào)整單元的顯示數(shù)據(jù)會(huì)間隔閃亮。</p><p> 3.2.5 功能函數(shù)</p><p> 調(diào)時(shí)功能函數(shù)的設(shè)計(jì)方法是:按下T0鍵,進(jìn)入調(diào)分狀態(tài),時(shí)鐘停止走動(dòng);按T1或T2鍵可進(jìn)行加1或減1操作 ;繼續(xù)按T0鍵可分別進(jìn)行分十位、時(shí)個(gè)位和時(shí)十位調(diào)整;最后按T0建將退出調(diào)整狀態(tài),時(shí)鐘開(kāi)始計(jì)時(shí)運(yùn)行。</p&g
45、t;<p><b> 四 系統(tǒng)的調(diào)試部分</b></p><p> 4.1 時(shí)鐘系統(tǒng)的調(diào)試</p><p> 4.1.1 時(shí)鐘系統(tǒng)的硬件調(diào)試</p><p> 硬件調(diào)試時(shí)可先檢查印制板及焊接的質(zhì)量情況,在檢查無(wú)誤后可通電檢查L(zhǎng)ED顯示器的點(diǎn)亮狀況。若亮度不理想,可以調(diào)整P0口的電阻大小,一般情況下取200歐姆電阻即可獲得滿
46、意的亮度效果。</p><p> 4.1.2 時(shí)鐘系統(tǒng)的軟件調(diào)試</p><p> 軟件調(diào)試Keil C51編譯器,源程序編譯及仿真調(diào)試應(yīng)分段或以子函數(shù)為單位一個(gè)個(gè)地進(jìn)行,最后可結(jié)合硬件實(shí)時(shí)運(yùn)行調(diào)試。</p><p> 4.1.3 性能分析</p><p> 按照設(shè)計(jì)程序分析,LED顯示器動(dòng)態(tài)掃描頻率約為167Hz,實(shí)際使用觀察時(shí)完全
47、沒(méi)有閃爍,實(shí)際計(jì)時(shí)時(shí)精度較高,可滿足一般場(chǎng)合的應(yīng)用需要。 </p><p> 4.2 撥號(hào)報(bào)警器功能調(diào)試</p><p> 通電前應(yīng)檢查焊接質(zhì)量,確認(rèn)無(wú)短路、虛焊等故障。將撥碼開(kāi)關(guān)J2指向下側(cè),即斷開(kāi)3.6V鎳鉻電池與系統(tǒng)的連接。將外部直流可調(diào)穩(wěn)壓電源調(diào)整為3.6V。接入系統(tǒng)的Vcc與地。如果系統(tǒng)耗電小于15mA為正常,否則應(yīng)檢查是否有短路、元器件不良或錯(cuò)焊現(xiàn)象存在。隨后取下外接直流穩(wěn)
48、壓電源,恢復(fù)3.6V鎳鉻電池與系統(tǒng)的連接,進(jìn)行軟、硬件統(tǒng)調(diào)測(cè)試。</p><p> 由于AT89S52的I/O引腳有限,故數(shù)碼管只設(shè)一位,因此輸入數(shù)字時(shí)只能分階段一位一位輸入。</p><p> 假設(shè)需輸入t1=061,t2=025,電話號(hào)碼=12345678,在此詳述如下:</p><p> 地1步:接上電話線(也即接上電源)后,數(shù)碼管顯示“E”,意為數(shù)據(jù)錯(cuò)
49、誤,因?yàn)榇藭r(shí)我們尚未輸入任何數(shù)據(jù)。</p><p><b> 第2步:</b></p><p> ?、冱c(diǎn)按一下set鍵,鍵值加1,即此時(shí)set=1.這時(shí)數(shù)碼管最下的一橫點(diǎn)亮,顯示“_”,意為可輸入時(shí)間t1,點(diǎn)按ok鍵確認(rèn)(小數(shù)點(diǎn)被同時(shí)點(diǎn)亮)。然后數(shù)碼管顯示數(shù)字“0”。</p><p> ?、诎聪聈p鍵后,數(shù)字開(kāi)始從0~9循環(huán)遞增,調(diào)至0后松開(kāi)
50、up鍵,點(diǎn)按ok鍵確認(rèn)(小數(shù)點(diǎn)被同時(shí)點(diǎn)亮)。此時(shí)百位數(shù)字“0”存入內(nèi)存。</p><p> ?、郯聪聈p鍵后,數(shù)字開(kāi)始循環(huán)遞增,調(diào)至1后松開(kāi)up鍵,點(diǎn)按ok鍵確認(rèn)(小數(shù)點(diǎn)被同時(shí)點(diǎn)亮)。此時(shí)十位數(shù)字“6”存入內(nèi)存。</p><p> ?、馨聪聈p鍵后,數(shù)字開(kāi)始循環(huán)遞增,調(diào)至1后松開(kāi)up鍵,點(diǎn)按ok鍵確認(rèn)(小數(shù)點(diǎn)被同時(shí)點(diǎn)亮)。此時(shí)個(gè)位數(shù)字“6”存入內(nèi)存。</p><p>
51、; 這樣就完成了將061(代表t1=61s)存入內(nèi)存的過(guò)程。同時(shí)數(shù)碼管又恢復(fù)顯示“_”</p><p><b> 。</b></p><p><b> 第3步:</b></p><p> ?、冱c(diǎn)按一下set鍵,鍵值加1,即此時(shí)set=2。這時(shí)數(shù)碼管下面的二橫點(diǎn)亮,顯示“二”,意為可輸入時(shí)間t2,點(diǎn)按ok鍵確認(rèn)(小數(shù)點(diǎn)
52、被同時(shí)點(diǎn)亮)。然后數(shù)碼管顯示數(shù)字“0”。</p><p> ?、诎聪聈p鍵后,數(shù)字開(kāi)始從從0~9循環(huán)遞增,調(diào)至0后松開(kāi)up鍵,點(diǎn)按ok鍵確認(rèn)(小數(shù)點(diǎn)被同時(shí)點(diǎn)亮)。此時(shí)百位數(shù)字“0”存入內(nèi)存。</p><p> ③按下up鍵后,數(shù)字開(kāi)始循環(huán)遞增,調(diào)至2后松開(kāi)up鍵,點(diǎn)按ok鍵確認(rèn)(小數(shù)點(diǎn)被同時(shí)點(diǎn)亮)。此時(shí)十位數(shù)字“2”存入內(nèi)存。</p><p> ?、馨聪聈p鍵后,
53、數(shù)字開(kāi)始循環(huán)遞增,調(diào)至5后松開(kāi)up鍵,點(diǎn)按ok鍵確認(rèn)(小數(shù)點(diǎn)被同時(shí)點(diǎn)亮)。此時(shí)個(gè)位數(shù)字“5”存入內(nèi)存。</p><p> 這樣就完成了將025(代表t1=25s)存入內(nèi)存的過(guò)程。同時(shí)數(shù)碼管又恢復(fù)顯示“二”</p><p> 以后的調(diào)試同前面的方法相同。</p><p><b> 五 總結(jié)</b></p><p>
54、 本系統(tǒng)以單片機(jī)89S52作為核心部件,利用單片機(jī)實(shí)現(xiàn)了電話撥號(hào)報(bào)警、時(shí)鐘顯示等功能,最終使系統(tǒng)完成設(shè)計(jì)要求的各項(xiàng)任務(wù)。在系統(tǒng)設(shè)計(jì)過(guò)程中,力求硬件線路簡(jiǎn)單,并綜合運(yùn)用了C語(yǔ)言、單片機(jī)等各種知識(shí),采用了一些特別的方法使磁電檢測(cè)達(dá)到最佳的效果 ,充分發(fā)揮軟件編程方便靈活的特點(diǎn),來(lái)滿足系統(tǒng)設(shè)計(jì)的要求。</p><p> 在設(shè)計(jì)過(guò)程中主要遇到幾個(gè)關(guān)鍵性問(wèn)題。如檢測(cè)部分信號(hào)不穩(wěn)定,經(jīng)檢查該問(wèn)題與周?chē)母蓴_有密切相關(guān),將檢
55、測(cè)部分的外圍進(jìn)行了合理,使檢測(cè)信號(hào)很準(zhǔn)確地檢測(cè)到。還有撥號(hào)電路模塊起初方案采用電橋和三極管進(jìn)行控制,此設(shè)計(jì)采用單片機(jī)I/O口直接控制指示燈以及開(kāi)關(guān)來(lái)進(jìn)行控制。不僅節(jié)省了硬件資源,還提高了系統(tǒng)的穩(wěn)定性。</p><p> 變量定義及初始化模塊</p><p><b> 參考文獻(xiàn)</b></p><p> [1]楊長(zhǎng)春.電子報(bào)合訂本 2002
56、年上:261</p><p> [2]電子產(chǎn)品世界,2004,9(167):81-82</p><p> [3]耿德根,詹衛(wèi)前,李青.單片機(jī)創(chuàng)新開(kāi)發(fā)與機(jī)器人制作.北京 :北京航空航天大學(xué)出版社,2005.3:85-120</p><p> [4]吳祖峰,葛麗,李剛.傳感器個(gè)數(shù)及距離對(duì)盲分離影響的分析.電子科技大學(xué)學(xué)報(bào),2006,4,35(2):186-188&
57、lt;/p><p> [5]韋敏,寧方立,韋娟.基于智能功率模塊的無(wú)刷直流電機(jī)控制器.西北工業(yè)大學(xué)學(xué)報(bào),2006,4,24(2):161-164</p><p> [6]熊磊,黃玉水.一種改進(jìn)型PDM調(diào)動(dòng)控制方式.南昌大學(xué)學(xué)報(bào),2006,3,28(1):99-102</p><p> [7]黃智偉.全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽訓(xùn)練教程. 北京:電子工業(yè)出版社,2005.
58、1</p><p> [8]閆志峰,劉立君,崔立彪.管道弧焊機(jī)器人控制系統(tǒng)設(shè)計(jì).哈爾濱理工大學(xué)學(xué)報(bào),</p><p> [9] 萬(wàn)光毅,嚴(yán)義.單片機(jī)實(shí)驗(yàn)與實(shí)踐教程(一).北京:北京航空航天大學(xué)出版社,2003.12:123-131</p><p> [10]黃河,鮑宏亞.Protel DXP 培訓(xùn)教程.北京:清華大學(xué)出版社,2004.9</p>
59、<p><b> 致 謝</b></p><p> How time flies!馬上就要畢業(yè)了。在院、系領(lǐng)導(dǎo)和老師的關(guān)心、教育和幫助下,經(jīng)過(guò)五年的努力,已經(jīng)使自己變成一個(gè)動(dòng)手動(dòng)腦的復(fù)合型人才。我將利用在校學(xué)習(xí)的專業(yè)知識(shí)投身職業(yè)教育事業(yè),為我國(guó)的職業(yè)教育發(fā)展做出自己的貢獻(xiàn)。</p><p> 五年來(lái)我學(xué)習(xí)到了大量的專業(yè)理論知識(shí)和動(dòng)手實(shí)踐技能,畢業(yè)設(shè)計(jì)是
60、對(duì)我這五年來(lái)學(xué)習(xí)的最好總結(jié)。在畢業(yè)設(shè)計(jì)過(guò)程中我遇到了很多困難,正是因?yàn)檫@些困難使我學(xué)習(xí)到了很多有用的實(shí)用知識(shí),加深了書(shū)本理論知識(shí)和實(shí)踐的結(jié)合,這對(duì)我以后從事專業(yè)課教學(xué)工作是很有益處的。在大學(xué)的學(xué)習(xí)期間,我意識(shí)到了——大學(xué)更重要的是教給我分析和解決問(wèn)題的方法,這些必將對(duì)我以后的工作和生活產(chǎn)生深遠(yuǎn)的影響。</p><p> 在畢業(yè)設(shè)計(jì)過(guò)程中,得到了*老師的大力支持和幫助,請(qǐng)?jiān)试S我向*老師表示誠(chéng)摯的感謝!五年來(lái)我見(jiàn)證
61、了母校的發(fā)展壯大,希望母校再接再厲,健全體制,走向更加輝煌的明天。最后祝愿?jìng)ゴ蟮哪感G俺趟棋\!祝愿所有的老師身體健康,工作順利!</p><p><b> 附錄</b></p><p><b> 附錄1 程序清單</b></p><p> 附錄2 系統(tǒng)使用說(shuō)明</p><p><b>
62、; 附錄3 英文資料</b></p><p> 附錄4 系統(tǒng)PCB板圖</p><p><b> 附錄1:程序清單</b></p><p> (1) 電話撥號(hào)報(bào)警程序</p><p> 程序設(shè)計(jì)時(shí)需要設(shè)立3個(gè)數(shù)組DATA[20]、X[3]、Y[3]。DATA[20]用于存放電話號(hào)碼(最長(zhǎng)20位),X
63、[3]用于存放時(shí)間t1(000~999s),Y[3]用于存放時(shí)間t2(000~999s)。</p><p> 另外還要設(shè)立3個(gè)軟件計(jì)數(shù)器data_flag、t1_flag、t2_flag。Data_flag用于統(tǒng)計(jì)輸入的電話號(hào)碼位長(zhǎng),t1_flag用于統(tǒng)計(jì)輸入的時(shí)間t1位長(zhǎng),t2位長(zhǎng)。</p><p> uchar DATA[20]; /*存放電話號(hào)碼的數(shù)組*/</p&g
64、t;<p> uchar X[3]; /*存放時(shí)間t1數(shù)組*/</p><p> uchar Y[3]; /*存放時(shí)間t2數(shù)組*/</p><p> uchar flag; /*RAM區(qū)防干擾標(biāo)志*/ </p><p> uchar data_flag=0; /*輸入電話號(hào)碼計(jì)數(shù)器(最長(zhǎng)20位)*
65、/</p><p> uchar set=0; /*功能鍵值*/</p><p> uchar m=0; //全局變量</p><p> uchar n=0;</p><p><b> uint f;</b></p><p> uchar t1_flag=0;
66、/*輸入時(shí)間t1計(jì)數(shù)器(最長(zhǎng)3位)*/</p><p> uchar t2_flag=0; /*輸入時(shí)間t2計(jì)數(shù)器(最長(zhǎng)3位)*/</p><p> uchar cnt_1=0; /*時(shí)間t1單元數(shù)學(xué)運(yùn)算后暫存單元*/</p><p> uchar cnt_2=0; /*時(shí)間t2單元數(shù)學(xué)運(yùn)算后暫存單元*/</p>
67、<p> /*定時(shí)器T0初始化*/ </p><p> viod init_timer()</p><p><b> { </b></p><p> TMOD=0x01; //定時(shí)器T0方式1 </p><p> TH0=-(50000/256); //裝載100m
68、s定時(shí)初值</p><p> TL0=-(50000%256);</p><p> IE=0x82; //開(kāi)中斷</p><p><b> }</b></p><p> 啟動(dòng)報(bào)警器子程序模塊 </p><p> /*---啟動(dòng)報(bào)警器進(jìn)入警戒---*/</
69、p><p> void work()</p><p><b> {uchar h;</b></p><p> p1=0xdf; /*數(shù)碼管左上角顯示“1”*/</p><p><b> delay(1);</b></p><p> if(set==1) /*進(jìn)
70、入時(shí)間1循環(huán)*/</p><p> {while(cnt<=x[0]*100+X[1]*10+X[2]) </p><p><b> {</b></p><p> delay(1000);</p><p> cnt_1++; /*計(jì)數(shù)器cnt_1累加*/</p>
71、<p> if(set!=1){EX1=0;cnt_1=0;break;}</p><p> } /*如按下Set鍵,則推出此循環(huán)*/</p><p><b> } </b></p><p> else {EX1=1;PCON=0x00;}</p><p&g
72、t; if(set==1)</p><p> {if(cnt_1>=X[0]*100+X[1]*10+X[2])</p><p> {EX1=1;cnt_1=0;} /*時(shí)間1到,打開(kāi)外中斷1,計(jì)數(shù)器歸零*/</p><p> /*進(jìn)入待機(jī)。若有1s以上開(kāi)關(guān)動(dòng)作,退出待機(jī)*/</p><p><b> while
73、(1)</b></p><p> {PCON=0x01;if(f>=5{PCON=0x00;break;})</p><p><b> }</b></p><p> /*-----------------------------------------------------------*/</p><
74、;p> EX1=0; /*關(guān)閉外中斷1*/</p><p> if(set==1) /*進(jìn)入時(shí)間2循環(huán)*/</p><p> {while(cnt_2<=Y[0]*100+Y[1]*10+Y[2])</p><p><b> {</b></p><p> delay(1000);</p
75、><p> cnt_2++; /*計(jì)時(shí)器cnt_2累加*/</p><p> if(set!=1){cnt_2=0;break;}</p><p> } /*如按下Set鍵,則退出此循環(huán)*/</p><p><b> }</b></p><p> if(set==1)
76、</p><p><b> {</b></p><p> bh(); /*時(shí)間2到,調(diào)用撥號(hào)子程序*/</p><p> delay(3000);</p><p> p3_7=0; //控制輸出端為低,可驅(qū)動(dòng)蜂鳴器等</p><p> for(h=0;h<60;
77、h++) /*發(fā)出60s警音*/</p><p> { for(f=0;f<500;f++)</p><p><b> {f++;</b></p><p> P3_1=! P3_1;P1=0x5f;</p><p><b> delay(1);</b></p>&
78、lt;p><b> }</b></p><p> P3_1=0;P1=0x7f;delay(500);</p><p><b> }</b></p><p> P3_7=1;//控制輸出端恢復(fù)高</p><p> cnt_1=0;cnt_2=0; /*有關(guān)計(jì)數(shù)器、端口回到初始狀態(tài)
79、*/</p><p> P3_0=0;P3_1=0;P1_7=1;</p><p> for(f=0;f<3;f++)delay(60000); /*關(guān)閉3min,讓接警人進(jìn)行手機(jī)或電話座機(jī)報(bào)警*/</p><p><b> }</b></p><p><b> }</b></
80、p><p><b> 撥號(hào)脈沖子程序模塊</b></p><p> /*---撥號(hào)---*/</p><p><b> void bh()</b></p><p> {data_flag=0; /*電話號(hào)碼計(jì)數(shù)器(20位)歸零*/</p><p> P3_0=1;
81、 /*接通線路*/</p><p> p1_7=0; /*數(shù)碼管小數(shù)點(diǎn)亮*/</p><p> delay(1000);</p><p> while (DATA[data_flag]<10) /*號(hào)碼小于10進(jìn)入循環(huán)撥號(hào)狀態(tài)*/</p><p><b> {</b></p>
82、<p> if(DATA[data_flag]==0) /*若號(hào)碼為0*/</p><p> {TR0=1; /*啟動(dòng)T0定時(shí)器*/ </p><p> if(n==20){data_flag++; /*進(jìn)行20次中斷,產(chǎn)生10個(gè)脈沖*/</p><p> n=0;TR0=0;</p><
83、;p> P3_0=1;P1_7=0;</p><p> delay(500);</p><p><b> }</b></p><p><b> }</b></p><p> if(DATA[data_flag]>0) /*若號(hào)碼〉0但<10*/</p>
84、<p> {TR=1; /*啟動(dòng)T0定時(shí)器*/</p><p> if(n==((DATA[data_flag]*2)) /*進(jìn)行號(hào)碼x2次中斷,產(chǎn)生號(hào)碼個(gè)脈沖*/</p><p> {data_flag++;</p><p> n=0;TR0=0;</p><p> P3_0=1;P1
85、_7=0;</p><p> delay(500);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> TR0=0;</b><
86、/p><p><b> }</b></p><p><b> 關(guān)機(jī)子程序模塊 </b></p><p> void stop() //*關(guān)機(jī)子程序</p><p> {if(flag==0x55)P1=0xfb; //*若標(biāo)志為55H,說(shuō)明內(nèi)存區(qū)未受干擾,數(shù)碼</p
87、><p> //管右下角顯示“1”</p><p> else P1=0x86; //否則數(shù)碼管顯示“E”</p><p> delay(1); //延時(shí)1ms再判</p><p> if(flag==0x55)PCON=0x01; //進(jìn)入低耗節(jié)電待機(jī)狀態(tài)</p><p>
88、 delay(1); //延時(shí)1ms</p><p><b> }</b></p><p><b> 完整代碼 </b></p><p> #include<AT89x052.H> //器件配置文件</p><p> #define uchar unsigned cha
89、r //變量類型的宏定義</p><p> #define uint unsigned int</p><p> uchar code DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99</p><p> 0x92,0x82,0xF8,0x80,0x90,}; /*0~9數(shù)碼管段碼*/</p><p>
90、uchar DATA[20]; /*存放電話號(hào)碼的數(shù)組*/</p><p> uchar x[3]; /*存放時(shí)間t2數(shù)組*/</p><p> uchar flag; /*RAM區(qū)防干擾標(biāo)志*/</p><p> uchar data_flag=0; /*輸入電話號(hào)碼計(jì)數(shù)器(最長(zhǎng)20位)*/</p><p> ucha
91、r set=0; /* 功能鍵值*/</p><p> uchar m=0; //全局變量</p><p> uchar n=0;</p><p><b> uint f;</b></p><p> uchar t1_flag=0; /*輸入時(shí)間1計(jì)數(shù)器(最長(zhǎng)3位)*/</p><
92、;p> uchar t2_flag=0; /*輸入時(shí)間2 計(jì)數(shù)器(最長(zhǎng)3位)*/</p><p> uchar cnt_1=0; /*時(shí)間t1單元數(shù)學(xué)運(yùn)算后暫存單元*/</p><p> uchar cnt_2=0; /*時(shí)間t2單元數(shù)學(xué)運(yùn)算后暫存單元*/</p><p> /****************************
93、*********************/</p><p> void delay(uint k); /*延時(shí)子函數(shù)聲明*/</p><p> void stop(); /*關(guān)機(jī)子函數(shù)聲明*/</p><p> void bh(); /*撥號(hào)子函數(shù)聲明*/</p><p> /*******
94、******************************************/</p><p> /*定時(shí)器T0初始化*/</p><p> void init_timer()</p><p><b> {</b></p><p> TMOD=0x01;</p><p> TH0
95、=-(50000/256);</p><p> TL0=-(50000%256);</p><p><b> IE=0x82;</b></p><p><b> }</b></p><p> /*************************************************
96、**********/</p><p> /*100ms定時(shí)中斷服務(wù)子函數(shù)*/</p><p> void zd0()interrupt 1</p><p><b> {</b></p><p> P3_0=! P3_0; //P3.0每100ms取反一次,送出脈沖</p><p>
97、 P1_7=! P1_7; //數(shù)碼管小數(shù)點(diǎn)同步閃爍</p><p><b> n++;</b></p><p> TH0=-(50000/256);</p><p> TL0=-(50000%256);</p><p><b> }</b></p><p>
98、/********************************************************/</p><p> /*100ms定時(shí)中斷服務(wù)子函數(shù)*/</p><p> void zd0()interrupt 1</p><p><b> {</b></p><p> p3_0=!P3_0;
99、 //P3.0每100ms取反一次,送出脈沖</p><p> P1_7=!P1_7; //數(shù)碼管小數(shù)點(diǎn)同步閃爍</p><p><b> n++;</b></p><p> TH0=-(50000/256);</p><p> TL0=-(50000%256);</p><p>&l
100、t;b> }</b></p><p> /*********************************************/</p><p> /*INT0中斷服務(wù)子函數(shù)*/</p><p> viod zd_int0()interrupt 0</p><p><b> {</b>&
101、lt;/p><p> delay(10); </p><p> if(P3_2==0)set++; //功能鍵值遞增</p><p> if(set>=5)set=0; //鍵值的范圍0~4</p><p> if(set==1)flag=0x55; //向RAM區(qū)的標(biāo)志flag寫(xiě)入55
102、H </p><p> PCON=0x00;f=8;</p><p> again:if(P3_2==0)goto again; //若按鍵未釋放,則等待</p><p><b> }</b></p><p> /*****************************************/</p&
103、gt;<p> /*INT1中斷服務(wù)子函數(shù)*/</p><p> void zd_int1()interrupt 2</p><p><b> {uchar h;</b></p><p><b> f=0;</b></p><p> for(h=0;h<10;h++)
104、 /*檢查磁性開(kāi)關(guān)(P3_3狀態(tài))10次,共1s*/</p><p><b> {</b></p><p> delay(100)</p><p> if(P3_3==0)f++;</p><p><b> }</b></p><p><b> }<
105、;/b></p><p> /********************************************************************/</p><p> /*---關(guān)機(jī)---*/</p><p> void stop()</p><p> {if(flag==0x55)P1=0xfb;</
106、p><p> elsep1=0x86; //數(shù)碼管右下角顯示“1”。</p><p><b> delay(1);</b></p><p> if(flag==0x55)PCON=0x01; /*進(jìn)入節(jié)電待機(jī)狀態(tài)*/</p><p><
107、;b> delay(1);</b></p><p><b> }</b></p><p> /*********************************************************************/</p><p> /*延時(shí)1ms*K子函數(shù)*/</p><p&g
108、t; void delay(uint k)</p><p><b> {</b></p><p><b> uint i,j;</b></p><p> for(i=1;j<k;i++){</p><p> for(j=0;j<60;j++)</p><p&
109、gt;<b> {;}}</b></p><p><b> }</b></p><p> /*********************************************************************/</p><p> /*----輸入時(shí)間t1----*/</p>&l
110、t;p> viod in_time1()</p><p><b> {</b></p><p> P1=0xf7;delay(1); /*數(shù)碼管顯示“—”*/</p><p> if(P3_5==0)</p><p><b> {</b><
111、/p><p> delay(10); /*按下OK鍵確認(rèn)并點(diǎn)亮小數(shù)點(diǎn)*/</p><p> if(P3_5==0){P1=0x7f;m=0;t1_flag=0;delay(500);}</p><p> while(t1_flag<3)</p><p><b> {</b
112、></p><p> if(P3_4==0)</p><p> {delay(10);if(P3_4==0) /*按下UP鍵數(shù)碼管作0~9遞增顯示*/</p><p> {m++;if(m==10)m=0;P1=DATA_7SEG[m];delay(300);}</p><p><b> }
113、</b></p><p> P1=DATA_7SEG[m];delay(1); /*若不按下UP鍵數(shù)碼管也作0~9顯示*/</p><p> if(P3_5==0) </p><p> {delay(10);if(P3_5==0) /*按下OK鍵顯示的數(shù)據(jù)
114、存入數(shù)組X中*/</p><p> {X[t1_flag]=m;t1_flag++;P1=0x7f;delay(500);}</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><
115、p> if(t1_flag>=3)t1_flag=0; /*時(shí)間1計(jì)數(shù)器>=3時(shí)歸零*/</p><p><b> }</b></p><p> /**********************************************************************</p><p&
116、gt;<b> /</b></p><p> /*-----輸入時(shí)間t2-----*/ </p><p> viod in_time2()</p><p><b> {</b></p><p> P1=0xb7;delay(1); /*數(shù)碼管顯示“二”*/
117、</p><p> if(P3_5==0)</p><p><b> {</b></p><p> delay(10); /*按下OK鍵確認(rèn)并點(diǎn)亮小數(shù)點(diǎn)*/</p><p> if(P3_5==0){P1=0X7f;m=0;t2_flag=0;delay(500);}&l
118、t;/p><p> while(t2_flag<3)</p><p><b> {</b></p><p> if(P3_4==0)</p><p> {delay(10);if(P3_4==0) /*按下UP鍵數(shù)碼管作0~9遞增顯示*/</p><p> {m++
119、;if(m==10)m=0;P1=DATA_7SEG[m];delay(300);}</p><p><b> }</b></p><p> P1=DATA_7SEG[m];delay(1); /*若不按UP鍵數(shù)碼管也作0~9顯示*/ </p><p> if(P3_5==0)</p><p>
120、 {delay(10);if(P3_5==0) /*按下OK鍵顯示的數(shù)據(jù)存入數(shù)組Y中*/</p><p> {Y[t2_flag=m;t2_flag++;P1=0x7f;delay(500);}</p><p><b> }</b></p><p><b> } </b></p&g
121、t;<p><b> }</b></p><p> if(t2_flag>=3)t2_flag=0; /*時(shí)間2計(jì)數(shù)器>=3時(shí)歸零*/ </p><p><b> }</b></p><p> /***********************************
122、************************************</p><p><b> /</b></p><p> /*----輸入電話號(hào)碼----*/</p><p> vioa in_data()</p><p> {uchar g; </p
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 多功能數(shù)字時(shí)鐘畢業(yè)設(shè)計(jì)
- 多功能數(shù)字時(shí)鐘的設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)基于fpga的多功能數(shù)字時(shí)鐘
- 畢業(yè)設(shè)計(jì)基于fpga的多功能的數(shù)字時(shí)鐘設(shè)計(jì)
- 電子時(shí)鐘畢業(yè)設(shè)計(jì)--多功能數(shù)字鐘設(shè)計(jì)
- 多功能電子時(shí)鐘畢業(yè)設(shè)計(jì)
- 電子畢業(yè)設(shè)計(jì)---多功能電子時(shí)鐘
- 數(shù)字時(shí)鐘畢業(yè)設(shè)計(jì)
- 單片機(jī)多功能數(shù)字電子時(shí)鐘設(shè)計(jì)畢業(yè)設(shè)計(jì)論文
- 畢業(yè)設(shè)計(jì)-數(shù)字時(shí)鐘設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)----多功能數(shù)字中的設(shè)計(jì)
- 多功能數(shù)字鐘畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---電子數(shù)字時(shí)鐘
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的多功能時(shí)鐘設(shè)計(jì)
- 單片機(jī)多功能時(shí)鐘程序設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 數(shù)字電子時(shí)鐘畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì) 多功能數(shù)字鐘電路設(shè)計(jì)
- 數(shù)字電路多功能數(shù)字鐘畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---多功能遙控?cái)?shù)字鐘的設(shè)計(jì)
- 多功能椅子設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
評(píng)論
0/150
提交評(píng)論