![課程設(shè)計(jì)(論文)基于單片機(jī)的遙控密碼鎖_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/20/4fd9c32e-4df7-4644-967a-72915b0ba79b/4fd9c32e-4df7-4644-967a-72915b0ba79b1.gif)
![課程設(shè)計(jì)(論文)基于單片機(jī)的遙控密碼鎖_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/20/4fd9c32e-4df7-4644-967a-72915b0ba79b/4fd9c32e-4df7-4644-967a-72915b0ba79b2.gif)
![課程設(shè)計(jì)(論文)基于單片機(jī)的遙控密碼鎖_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/20/4fd9c32e-4df7-4644-967a-72915b0ba79b/4fd9c32e-4df7-4644-967a-72915b0ba79b3.gif)
![課程設(shè)計(jì)(論文)基于單片機(jī)的遙控密碼鎖_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/20/4fd9c32e-4df7-4644-967a-72915b0ba79b/4fd9c32e-4df7-4644-967a-72915b0ba79b4.gif)
![課程設(shè)計(jì)(論文)基于單片機(jī)的遙控密碼鎖_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/20/4fd9c32e-4df7-4644-967a-72915b0ba79b/4fd9c32e-4df7-4644-967a-72915b0ba79b5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、遙控密碼鎖遙控密碼鎖 -基于基于 51 單片機(jī)單片機(jī) 附帶程序 目錄目錄 1目的和意義目的和意義 .2 2方案設(shè)計(jì)方案設(shè)計(jì) .2 3 硬件原理分析及設(shè)計(jì)硬件原理分析及設(shè)計(jì) .2 3.1 發(fā)射模塊原理.2 3.1.1 紅外發(fā)送系統(tǒng)原理.3 3.1.2 nec編碼格式介紹.3 3.2 接收解碼模塊.4 3.2.1 接收解碼原理.4 3.2.2 接收解碼模塊的硬件電路.5 3.4 液晶顯示模塊.6 4 軟件設(shè)計(jì)軟件設(shè)計(jì) .7 4.1 編程語(yǔ)言.7 4.2 主要程序說(shuō)明及流程圖.7 4.2.1 主程序.7 4.2.2 接收解碼程序.8 4.2.3 按鍵數(shù)字分配.11 4.2.4 密碼判斷、報(bào)警及修改程
2、序.12 4.2.5 按鍵發(fā)聲程序.19 4.2.6 沒(méi)操作響應(yīng).19 5 功能分析及總結(jié)功能分析及總結(jié) .20 5.1 功能分析.20 5.2 c 語(yǔ)言編程的延時(shí)技巧.21 5.3 本設(shè)計(jì)優(yōu)缺點(diǎn).23 5.4 設(shè)計(jì)總結(jié).23 參參 考考 文文 獻(xiàn)獻(xiàn) .1 附錄附錄 c 實(shí)物圖實(shí)物圖.3 摘要 單片機(jī)遙控系統(tǒng)是將紅外遙控技術(shù)和單片機(jī)應(yīng)用技術(shù)相結(jié)合的一種方案。本系統(tǒng)為 紅外遙控電子密碼鎖的控制管理部分,只要再連接上不同用途的電磁鎖即可成為一個(gè)完 整的紅外遙控電子密碼鎖系統(tǒng)應(yīng)用到各種領(lǐng)域中。而且本系統(tǒng)還設(shè)計(jì)有學(xué)習(xí) nec 紅外編 碼遙控器的功能,通過(guò)紅外接收解碼電路,把遙控器的鍵碼還原并儲(chǔ)存起來(lái),
3、再利用查 找對(duì)比的方法便能夠識(shí)別不同的遙控器,大大提高了系統(tǒng)的靈活性和實(shí)用性。 本系統(tǒng)以單片機(jī)作為核心元件將電子密碼鎖和無(wú)線遙控技術(shù)結(jié)合起來(lái),使其具有修 改密碼、報(bào)警鎖定等功能,不僅能進(jìn)行遠(yuǎn)距離遙控解鎖,還能實(shí)現(xiàn)近距離按鍵密碼初始 化及復(fù)位解除報(bào)警。同時(shí)采用 e2prom 作為存儲(chǔ)單元,方便用戶存儲(chǔ)、修改密碼和遙控 器鍵碼;采用 lcd 顯示令使用更加方便直觀。紅外線遙控電子密碼鎖能實(shí)現(xiàn)多種控制功 能,改善了傳統(tǒng)機(jī)械鎖的各種缺點(diǎn),有較好的市場(chǎng)發(fā)展前景和技術(shù)應(yīng)用價(jià)值。而且本系 統(tǒng)的紅外接收解碼部分延時(shí)計(jì)數(shù)準(zhǔn)確,并且有錯(cuò)誤校驗(yàn),所以整個(gè)接收解碼的準(zhǔn)確性非 常高。 設(shè)計(jì)電路主要由紅外線解碼學(xué)習(xí)電路、
4、密碼修改和存儲(chǔ)電路、聲光提示報(bào)警電路、 lcd 顯示電路組成。系統(tǒng)能完成輸入密碼開鎖、出錯(cuò)報(bào)警、超次鎖定、修改用戶密碼等 基本的密碼鎖的功能,并且還能實(shí)現(xiàn)遠(yuǎn)距離遙控、按鍵密碼初始化、掉電存儲(chǔ)、聲光提 示、遙控器學(xué)習(xí)識(shí)別等附加功能。本設(shè)計(jì)詳細(xì)介紹了單片機(jī)遙控系統(tǒng)的軟硬件設(shè)計(jì)方法, 并給出了具體的各單元電路設(shè)計(jì)、程序設(shè)計(jì)及主程序流程圖。 關(guān)鍵詞:電子密碼鎖紅外遙控單片機(jī)nec 編碼 1目的和意義 隨著人們生活水平的提高,如何實(shí)現(xiàn)家庭防盜這一問(wèn)題也變得尤其重要。目前國(guó)內(nèi), 大部分人使用的還是傳統(tǒng)的機(jī)械鎖。傳統(tǒng)的機(jī)械鎖由于其構(gòu)造的簡(jiǎn)單,被撬的事件屢見(jiàn) 不鮮。即使是一把質(zhì)量過(guò)關(guān)的機(jī)械鎖,通過(guò)急開鎖,甚至
5、可以在不損壞鎖的前提下將鎖 打開。而且,在日常的生活和工作中,若使用傳統(tǒng)的機(jī)械式鑰匙開鎖,人們常需攜帶多 把鑰匙,使用極不方便,且鑰匙丟失后安全性即大打折扣。為此,本系統(tǒng)試著設(shè)計(jì)具有 防盜報(bào)警功能的紅外線遙控電子密碼鎖來(lái)代替?zhèn)鹘y(tǒng)的機(jī)械式密碼鎖,克服了機(jī)械式密碼 鎖密碼量少、安全性能差的缺點(diǎn)。而且還添加了紅外遙控、遙控器學(xué)習(xí)識(shí)別和 lcd 顯 示等功能,可以實(shí)現(xiàn)遠(yuǎn)距離開關(guān)鎖、修改密碼等,系統(tǒng)靈活性強(qiáng),操作簡(jiǎn)單直觀、使用 非常方便。 2方案設(shè)計(jì) 用以下方案設(shè)計(jì)本次系統(tǒng):發(fā)射模塊使用型號(hào)為 hz-ft007 的 20 鍵車載 mp3 紅外 遙控器和創(chuàng)維 rc-585 型 dvd 遙控器,因?yàn)樗鼈兌际?/p>
6、采用 nec 編碼格式的紅外遙控芯 片作為主要芯片;使用一體化紅外接收頭 sm0038 和單片機(jī) stc89c51rc 結(jié)合的方式 完成接收解碼模塊,學(xué)習(xí)識(shí)別 nec 編碼格式的不同遙控器;使用 at24c02 這一串行 e2prom 作為存儲(chǔ)模塊;使用 lcd1602a 實(shí)現(xiàn)系統(tǒng)的顯示模塊。系統(tǒng)的總框圖如圖 3 所 示。這樣的選擇使系統(tǒng)在較低成本的情況下較好地實(shí)現(xiàn)系統(tǒng)的功能,而且系統(tǒng)有著較高 的抗干擾性和穩(wěn)定性。 按鍵 upd6122g sm0038 mcu at24c02 lcd1602 電磁鎖 nec 編碼遙控器 圖 3 選用方案系統(tǒng)框圖 3 硬件原理分析及設(shè)計(jì) 3.1 發(fā)射模塊原理 3
7、.1.1 紅外發(fā)送系統(tǒng)原理 紅外遙控信號(hào)是一連串的二進(jìn)制脈沖碼。為了使其在無(wú)線傳輸過(guò)程中免受其他紅外 信號(hào)的干擾,通常都是先將其調(diào)制在特定的載波頻率上,然后再經(jīng)紅外發(fā)光二極管發(fā)射 出去,紅外線接收裝置則會(huì)濾除其它雜波只接收該特定頻率的信號(hào)并將其還原成二進(jìn)制 脈沖碼。在本紅外遙控系統(tǒng)中,紅外信號(hào)的載波頻率為 38khz。 通常,紅外遙控系統(tǒng)中所采用的編碼方式有兩種:通過(guò)脈沖寬度來(lái)實(shí)現(xiàn)信號(hào)調(diào)制的 脈寬調(diào)制(pwm)和通過(guò)脈沖串之間的時(shí)間間隔來(lái)實(shí)現(xiàn)信號(hào)調(diào)制的脈時(shí)調(diào)制(ppm) 。本 系統(tǒng)是采用 ppm 方法,即用兩個(gè)脈沖之間的時(shí)間間隔來(lái)表示二進(jìn)制信息。 為了確保發(fā)送端和接收端之間數(shù)據(jù)傳輸?shù)臏?zhǔn)確無(wú)誤,
8、紅外線信號(hào)還要按照特定的傳 輸協(xié)議來(lái)進(jìn)行信號(hào)傳輸。常用的紅外線信號(hào)傳輸協(xié)議有 nec 協(xié)議、rc-5 協(xié)議、rc-6 協(xié)議、sharp 協(xié)議等。 3.1.2 nec 編碼格式介紹 本系統(tǒng)使用的型號(hào)為 hz-ft007 的 20 鍵車載 mp3 紅外遙控器和創(chuàng)維 rc-585 型 dvd 遙 控器請(qǐng)參看附錄 c 中的實(shí)物圖,它們主要芯片都是 nec 編碼格式的紅外遙控芯片。 nec 編碼廣泛應(yīng)用于電視機(jī),dvd,pc 電腦,音響等,是比較常用的一種紅外編碼格式。 下面以 nec 編碼標(biāo)準(zhǔn)的紅外編碼芯片 upd6122g 作為例子介紹。nec 遙控編碼是連續(xù) 的 32 位二進(jìn)制碼組,其中的前十六位
9、是用戶碼,后 16 位為 8 位的數(shù)據(jù)碼及其反碼。在 每次編碼之前還會(huì)發(fā)送 9ms 高電平和 4.5ms 低電平組成的引導(dǎo)碼(或稱起始碼) 。而且 第二段的用戶碼也可以在遙控應(yīng)用電路中被設(shè)置為第一段用戶碼的反碼。它的幀結(jié)構(gòu)如 圖 4 所示。 圖 4 upd6122g 編碼格式 nec 編碼標(biāo)準(zhǔn)是以用不同脈沖的時(shí)間間隔來(lái)區(qū)分0和1的,upd6122g 以脈 寬為 0.56ms、間隔 0.565ms、周期為 1.125ms 的組合表示二進(jìn)制的0 ;以脈寬為 0.56ms、間隔 1.69ms,周期為 2.25ms 的組合表示二進(jìn)制的1 。其波形如圖 5 所示。 圖 5 upd6122g0和1波形圖
10、使用 455khz 晶振時(shí)各代碼所占的時(shí)間如圖 6 所示: 圖 6 使用 455khz 晶振時(shí)各代碼所占的時(shí)間 upd6122g 按鍵輸出有兩種方式:一種是每次按鍵都輸出完整的一幀數(shù)據(jù);另一種 是按下按鍵不松開時(shí),發(fā)送完整的一幀數(shù)據(jù)后再發(fā)送重復(fù)碼,直到按鍵被松開。其波形 如圖 7 所示。 圖 7 重復(fù)碼的波形圖 3.2 接收解碼模塊 3.2.1 接收解碼原理 接收解碼的關(guān)鍵是如何識(shí)別0和1 ,本系統(tǒng)使用的是一體化紅外接收頭進(jìn)行紅 外信號(hào)接收,在沒(méi)有信號(hào)的時(shí)候其輸出端是高電平,而有信號(hào)的時(shí)候是低電平,所以其 輸出信號(hào)電平正好和遙控發(fā)射端相反。從上面的討論可以發(fā)現(xiàn)在遙控發(fā)射端0和 1均以 0.56
11、ms 的高電平開始,不同的是低電平的寬度, 0為 0.565ms, 1為 1.69ms,所以必須根據(jù)低電平的寬度區(qū)別0和1 。本系統(tǒng)用中斷的方式實(shí)現(xiàn)從接 收頭到 mcu 的信號(hào)傳輸。如圖 9 所示,紅外接收頭的輸出端連接到單片機(jī)的 int0 腳。 接收頭輸出端有低電平信號(hào)輸出時(shí)引起單片機(jī)的中斷。單片機(jī)響應(yīng)中斷并進(jìn)行信號(hào)的接 收解碼。解碼后的信號(hào)就變成相應(yīng)的遙控器按鍵代碼,從而可以成為密碼鎖的密碼。 接收頭 sm0038 mcu int0 圖 9 中斷接收示意圖 3.2.2 接收解碼模塊的硬件電路 接收解碼電路由一體化紅外接收頭 sm0038 和單片機(jī) stc89c51rc 組成。 stc 系列
12、單片機(jī)具有在系統(tǒng)中直接可編程特性,其好處是:省去購(gòu)買通用編程器, 單片機(jī)在用戶系統(tǒng)上即可下載/燒錄用戶程序,而無(wú)須將單片機(jī)從已生產(chǎn)好的產(chǎn)品上拆 下,再用通用編程器將程序代碼燒錄進(jìn)單片機(jī)內(nèi)部。有些程序尚未定型的產(chǎn)品可以一邊 生產(chǎn),一邊完善,加快了產(chǎn)品進(jìn)入市場(chǎng)的速度,減小了新產(chǎn)品由于軟件缺陷帶來(lái)的風(fēng)險(xiǎn)。 由于可以在用戶的目標(biāo)系統(tǒng)上將程序直接下載進(jìn)單片機(jī)看運(yùn)行結(jié)果對(duì)錯(cuò),故無(wú)須仿真器, 因此選擇使用這款單片機(jī)。 一體化紅外接收頭 sm0038 是集信號(hào)放大、濾波、檢波、整形于一體的紅外接收器, 電路內(nèi)置 pin 二極管和前置放大器,采用可以紅外濾波的環(huán)氧樹脂材料封裝,可靠性高, 不易受環(huán)境影響并可以防
13、止非控制信號(hào)的輸出脈沖出現(xiàn)。它的內(nèi)部電路如圖 10 所示。 圖 10 sm0038 內(nèi)部結(jié)構(gòu)圖 sm0038 內(nèi)置帶通濾波器、積分器、和自動(dòng)增益控制電路以抑制各種干擾和噪音。 數(shù)據(jù)信號(hào)和干擾信號(hào)的主要區(qū)別在于載波頻率、脈沖波長(zhǎng)和工作周期上。所以數(shù)據(jù)信號(hào) 應(yīng)該滿足以下的要求。而本系統(tǒng)選用的 sm0038 在這三方面和 nec 編碼格式是相配的。 載波信號(hào)的頻率盡量接近帶通濾波器的中心頻率(38khz) 。 脈沖長(zhǎng)度在 300us 以上。 數(shù)據(jù)的編碼類型相兼容。 3.4 液晶顯示模塊 系統(tǒng)中采用 lcd1602 作為顯示器件輸出信息。與傳統(tǒng)的 led 數(shù)碼管顯示器件相比, 液晶顯示模塊具有體積小、
14、功耗低、顯示內(nèi)容豐富等優(yōu)點(diǎn),而且不需要外加驅(qū)動(dòng)電路, 現(xiàn)在液晶顯示模塊已經(jīng)是單片機(jī)應(yīng)用設(shè)計(jì)中最常用的顯示器件了。lcd1602 可以顯示 2 行16 個(gè)字符,具有 8 位數(shù)據(jù)總線 d0-d7,和 rs、r/w、e 三個(gè)控制端口,工作電壓 為 5v,并且?guī)в凶址麑?duì)比度調(diào)節(jié)和背光設(shè)置。lcd1602 與單片機(jī)的連接電路圖參考附 錄 a。 其管腳功能簡(jiǎn)介如下: vl:lcd 對(duì)比度調(diào)節(jié)端,電壓調(diào)節(jié)范圍為 05v。接正電源時(shí)對(duì)比度最弱,接地 電源時(shí)對(duì)比度最高,可以用一個(gè) 10k 的電位器來(lái)調(diào)整對(duì)比度; rs:數(shù)據(jù)或者指令選擇端。處理器寫入指令時(shí),rs 為低電平,寫入數(shù)據(jù)時(shí),rs 為 高電平; r/w:
15、讀寫控制端。r/w 為高電平時(shí),讀取數(shù)據(jù);r/w 為低電平時(shí),寫入數(shù)據(jù); e:lcd 模塊使能信號(hào)控制端。寫數(shù)據(jù)時(shí),需要下降沿觸發(fā)模塊; d0d7:8 位數(shù)據(jù)總線,三態(tài)雙向; bla: led 背光正極。需要背光時(shí),bla 串接一個(gè)限流電阻接 vcc; blk: led 背光負(fù)極。 4 軟件設(shè)計(jì) 4.1 編程語(yǔ)言 目前,對(duì)單片機(jī)的編程主要采用匯編和 c 語(yǔ)言。匯編語(yǔ)言有執(zhí)行效率高、速度快、 與硬件結(jié)合緊密等特點(diǎn)。尤其在進(jìn)行 i/o 端口管理時(shí),使用匯編語(yǔ)言有快捷、直觀的優(yōu) 點(diǎn)。但是使用匯編語(yǔ)言相對(duì)于使用高級(jí)語(yǔ)言編程難度要大一些,且程序可讀性低,開放 性差,從系統(tǒng)開發(fā)時(shí)間來(lái)看,效率不是很高。 c
16、 語(yǔ)言是一種結(jié)構(gòu)化語(yǔ)言,可產(chǎn)生緊湊代碼。c 語(yǔ)言可以用許多機(jī)器級(jí)函數(shù)直接控 制操作 8051 硬件。與匯編語(yǔ)言相比,c 語(yǔ)言有如下的優(yōu)點(diǎn): 不要求了解單片機(jī)的指令系統(tǒng),僅要求對(duì) 8051 的存儲(chǔ)結(jié)構(gòu)有初步了解; 寄存器分配,不同存儲(chǔ)器的尋址及數(shù)據(jù)類型等細(xì)節(jié)可由編譯器管理; 程序有規(guī)范的結(jié)構(gòu),可分為不同的函數(shù),這種方式可使程序結(jié)構(gòu)化; 具有將可變的選擇與特殊操作組合在一起的能力,改善了程序的可讀性; 關(guān)鍵字及運(yùn)算符可用近似人的思維方式使用; 編程及程序調(diào)試時(shí)間顯著縮短,從而提高效率; 提供的庫(kù)包含許多標(biāo)準(zhǔn)子程序,具有較強(qiáng)的數(shù)據(jù)處理能力; 已編好的程序可容易地植入新程序,因?yàn)樗哂蟹奖愕哪K化編程
17、技術(shù)。 當(dāng)然,采用混編模式,就能結(jié)合兩者的優(yōu)點(diǎn)。本著學(xué)習(xí)的目的,本系統(tǒng)均采用 c51 語(yǔ)言編寫。 4.2 主要程序說(shuō)明及流程圖 4.2.1 主程序 本系統(tǒng)的軟件程序主要包括主程序、接收解碼程序、密碼判斷和報(bào)警程序、密碼修 改程序、遙控器學(xué)習(xí)識(shí)別程序幾個(gè)大的模塊程序。完整程序見(jiàn)附錄 b。 主程序首先是初始化程序,然后就等待紅外接收頭輸出端的低電平,低電平出現(xiàn)說(shuō) 明遙控有鍵按下,外部中斷設(shè)定為下降沿觸發(fā),故單片機(jī)進(jìn)入中斷服務(wù)程序進(jìn)行信號(hào)的 接收解碼。系統(tǒng)進(jìn)入密碼輸入界面,并且接收到八位的密碼以后就開始運(yùn)行密碼核對(duì)程 序,當(dāng)密碼輸入正確后,就可以進(jìn)行開鎖、上鎖或修改密碼的操作。當(dāng)密碼輸入錯(cuò)誤的 時(shí)候
18、就會(huì)進(jìn)入密碼輸入提醒程序提醒用戶重新輸入密碼,密碼輸入累積到 3 次時(shí)系統(tǒng)會(huì) 報(bào)警并鎖定。相應(yīng)的主程序流程圖如圖 12 所示。 初始化 等待遙控識(shí)別按鍵 時(shí)鐘模式 密碼核對(duì) 報(bào)警鎖定 開鎖上鎖密碼修改 n 錯(cuò)誤 正確 密碼鎖按鍵 密碼鎖模式 y 圖 12 主程序流程圖 4.2.2 接收解碼程序 紅外接收解碼的關(guān)鍵是如何識(shí)別0和1碼,我的做法是根據(jù)0和1碼 的高電平寬度不一樣的特點(diǎn)來(lái)進(jìn)行識(shí)別。接收程序的流程圖如圖 13 所示。 進(jìn)入紅外接收程序后先關(guān)閉中斷。接著的工作是避開 9ms 高電平、4.5ms 的低電平 的引導(dǎo)碼,并且判斷是否干擾信號(hào)或者重復(fù)信號(hào)。正如前面所說(shuō),一體化紅外接收頭的 輸出端
19、電平跟遙控發(fā)射端電平相反。如圖 14 所示。 所以只要遙控有鍵按下單片機(jī)就會(huì)馬上產(chǎn)生中斷接收數(shù)據(jù)。跟在引導(dǎo)碼后面的是 32 位用戶碼和數(shù)據(jù)碼,也就是我們想要的數(shù)據(jù),單片機(jī)把它接收并保存。當(dāng)接收完 8 位的 數(shù)據(jù)時(shí)要更換另外一個(gè)數(shù)據(jù)緩沖區(qū),當(dāng) 32 位的鍵碼都接收完的時(shí)候就意味這一幀的數(shù) 據(jù)已經(jīng)接收完畢。然后根據(jù)接收到的數(shù)據(jù)碼和數(shù)據(jù)反碼是否對(duì)應(yīng)位相反來(lái)確定接收的這 一幀數(shù)據(jù)是否正確,最后退出接收解碼程序。 紅外中斷程序 關(guān)中斷 是否 9ms 低電平 開始接收 32 位編 碼 接收信號(hào) “1” 保存,接收了 8 位? 是否 4.5ms 低電平 低電平大于 800us 接收信號(hào) “0” 保存,接收了
20、 32 位? 開中斷 返回 干擾信號(hào)重復(fù)信號(hào) n n n n n y y y y y 圖 13 紅外接收程序流程圖 發(fā)射模塊mcu 9ms 4.5ms 接收頭 9ms 4.5ms 圖 14 接收頭前導(dǎo)碼信號(hào)變相圖 而單片機(jī)的接收端的0 1波形圖如圖 15 所示。在保存0碼和1碼的時(shí) 候還有一個(gè)保存時(shí)機(jī)的問(wèn)題,如果從 0.56ms 低電平過(guò)后開始延時(shí),0.56ms 以后若讀到 為低電平,說(shuō)明該位為0 ,反之則為1 。為安全起見(jiàn),延時(shí)必須比 0.56ms 長(zhǎng)一些, 但又不能超過(guò) 1.12ms,否則如果該位為0讀到的已是下一位的高電平,因此取( 1.12ms + 0.56ms )/2=0.84ms
21、較為可靠,一般取 0.84ms 左右均可。 圖 15 單片機(jī)接收端的0 1波形圖 接收解碼關(guān)鍵程序: sbit ir = p32; / 紅外中斷輸入端口(int0) void ir_svr(void) interrupt 0 using 0 int width=0,i; ex0 = 0; /關(guān)中斷 /*常規(guī)狀態(tài)下 int0 為高電平,由高電平跳變?yōu)榈碗娖綍r(shí)(即下降沿)產(chǎn)生中斷*/ / 引導(dǎo)信號(hào):9ms 低電平 while(!ir) delay_100us(); width+; /計(jì)算引導(dǎo)電平的寬度 if (width 80) ex0 = 1; return; / 8ms=80*100us 如果
22、不到 8ms 視為干擾信號(hào) / 計(jì)算 4.5ms 高電平寬度 width = 0 x00; while(ir) delay_100us(); width+; if (width 30) ex0 = 1; return;/ 3ms=30*100us 如果不到 3ms 即視為 2.5ms 重復(fù)信 號(hào) / 至此,引導(dǎo)碼已校驗(yàn),以下接收地址碼和數(shù)據(jù)碼,一共 32 位 i=0; while(i+ 32) /接收 32 位編碼 while(!ir); /等待高電平 width = 0 x00; while(ir) /記錄高電平寬度 delay_100us(); width+; ir_data 0 x08)
23、ir_data |= 0 x01; /信號(hào)1和0判斷 if (i=8) /保存接收到的數(shù)據(jù) datair0 = ir_data; if (i=16) datair1 = ir_data; if (i=24) datair2 = ir_data; if (i=32) datair3 = ir_data; if (datair2 != datair3) /糾錯(cuò)校驗(yàn) ex0 = 1; return; ir_data = datair2; ir_flag = 1; /接收成功標(biāo)志位 tr1=0; /有按鍵關(guān)定時(shí)器 1 t=0; ex0 = 1; 4.2.3 按鍵數(shù)字分配 由于遙控器的編碼是為了不容易出
24、錯(cuò)而編的,導(dǎo)致數(shù)據(jù)比較亂,為了編程方便,我們特意修改 了數(shù)據(jù)。09 號(hào)為密碼數(shù)據(jù),10 號(hào)為退格鍵,11 號(hào)為密碼修改鍵,18 號(hào)為開鎖鍵,14 號(hào)為調(diào)整時(shí) 間鍵,8 號(hào)調(diào)時(shí),9 號(hào)調(diào)分。 /* 按 鍵 數(shù) 據(jù) 編 碼 */ /* 18,19,20 */ /* 15,16,17 */ /* 12,13,14 */ /* 0, 10,11 */ /* 1, 2, 3 */ /* 4, 5, 6 */ /* 7, 8, 9 */ /* 遙控器 */ uchar key_match() switch(ir_data) case 0 x68: return(0); case 0 x30: return
25、(1); case 0 x18: return(2); case 0 x7a: return(3); case 0 x10: return(4); case 0 x38: return(5); case 0 x5a: return(6); case 0 x42: return(7); case 0 x4a: return(8); case 0 x52: return(9); case 0 x98: return(10); case 0 xb0: return(11); case 0 xe0: return(12); case 0 xa8: return(13); case 0 x90: ret
26、urn(14); case 0 x22: return(15); case 0 x02: return(16); case 0 xc2: return(17); case 0 xa2: return(18); case 0 x62: return(19); case 0 xe2: return(20); default : return(99); 4.2.4 密碼判斷、報(bào)警及修改程序 電子密碼鎖的軟件編程主要分為兩方面,分別是接收密碼后判斷及報(bào)警部分和密碼 修改控制部分。 首先介紹密碼判斷及報(bào)警程序。顯示收到的鍵碼并保存到接收緩存 receive_code8, 直到 8 位鍵碼接收完畢。然后和
27、原密碼緩存 origin_code8比較,判斷密碼是否正確。若 密碼正確則將標(biāo)志位 code_right=1;若不正確則報(bào)警并使密碼輸入錯(cuò)誤次數(shù) wrong_num+,再判斷錯(cuò)誤次數(shù)是否已達(dá) 3 次,若是則程序進(jìn)入死循環(huán)鎖定。程序流程 圖如圖 16 所示。 輸入密碼 接收了 8 位鍵碼? code_right=1 密碼是否正確 wrong_num+ wrong_num=3? 錯(cuò)誤警告 報(bào)警鎖定 n n n y y y 圖 16 密碼判斷及報(bào)警流程圖 接著介紹密碼修改控制程序。當(dāng)密碼輸入正確以后用戶按下“密碼修改鍵”就會(huì)進(jìn) 入密碼修改操作,單片機(jī)也就會(huì)運(yùn)行密碼修改程序。程序流程圖如圖 17 所示
28、。 code_right=1 修改密碼? 保存新密碼 新密碼接收完畢? 返回 n n n n y y y y 新密碼確認(rèn)完畢? 兩次密碼相同? 顯示錯(cuò)誤 圖 17 密碼修改流程圖 進(jìn)入密碼修改程序首先等待新密碼的第一次輸入。第一次輸入的新密碼放在接收緩 存 receive_code8中,當(dāng)輸入完第八個(gè)密碼后系統(tǒng)會(huì)提示再次輸入密碼,第二次輸入的 新密碼放在密碼比較緩存 com_code8中。第二次輸入密碼完成后就檢驗(yàn)兩次輸入的新 密碼是否相同,如果相同的話就更換密碼,將新密碼儲(chǔ)存到 at24c02 中。 關(guān)鍵程序如下: void check_code(void) if(ir_flag=1) fl
29、ag=0, key_data=key_match() , beep(),ir_flag=0,j=0; /beep 函數(shù)發(fā) 出按鍵聲音 if(show=1 flag=1; rec_num-; if(key_data=18) /跳到時(shí)鐘模式 key_data=99; delay_lcm(10); lcm_cls(); show=0 ; beep_flag=0;rec_num=0; k=1; if(rec_num=8)/輸入八個(gè)密碼后密碼檢查 for(j=7;j0;j-) if(origin_codej!=receive_codej)/與原密碼比較 wrong_num+; if(wrong_num=
30、1) delay_lcm(1000);lcm_cls();delay_lcm(1000); displaylistchar(0,0,input it again!); else if(wrong_num=2) delay_lcm(1000);lcm_cls();delay_lcm(1000); displaylistchar(0,0,the last time); else if(wrong_num=3) lcm_cls(); displaylistchar(0,0,wrong!); displaylistchar(0,1,lock); led1=1;led2=1;led3=0; speake
31、r=0; /3 次錯(cuò)誤報(bào)警 delay_lcm(10000); while(1); /3 次錯(cuò)誤進(jìn)入死循環(huán)鎖定 code_right=0; rec_num=0; return; lcm_cls(); displaylistchar(0,0, (_);/密碼正確,開鎖成功 displaylistchar(0,1,what you want?); rec_num=0; show=0; code_right=1;/密碼正確標(biāo)識(shí)位 void change_code(void) int i,j; if(ir_flag=1) key_data=key_match(),flag=0,beep(),ir_fl
32、ag=0; if( code_right=1 lcm_cls(); displaylistchar(0,0,input new code); new_code1=1;/修 ii 改密碼標(biāo)識(shí)位 1 if(new_code1=1 rec_num-; flag=1; if(code_right=1 lcm_cls(); displaylistchar(0,0,input again!); rec_num=0; new_code2=1;/修改密碼標(biāo)識(shí)位 2 new_code1=0; if(new_code2=1 rec_num-; flag=1; if(code_right=1 new_code2=0
33、; j=8; while(j-) /判斷兩次輸入是否一致 if(com_codej!=com1_codej) delay_lcm(10); lcm_cls(); displaylistchar(0,0,not match!); displaylistchar(0,1,press change key); delay_lcm(200); return; lcm_cls(); for(i=0;i8;i+) /密碼一致,開始修改密碼 origin_codei=com_codei; displaylistchar(0,0,new codes saved!);/修改密碼成功 delay_lcm(5000
34、); wrong_num=0; code_right=0; ir_flag = 0; k=1; /跳到時(shí)鐘 return; 4.2.3 時(shí)鐘模式 一開始進(jìn)入運(yùn)行的是時(shí)鐘模式。 while(1) /時(shí)鐘部分程序 f1: displaylistchar(0,0, ); displaylistchar(0,1, ); displaylistchar(6,0,(0_0); displaylistchar(3,1, : : ); write_sfm(3,shi); write_sfm(6,fen); write_sfm(9,miao); while(1) delay_lcm(2000); display
35、listchar(6,0,(_); if(ir_flag=1) key_data=key_match(),ir_flag=0; if(key_data=14)key_data=99;goto f2; if(key_data=18) /轉(zhuǎn)入密碼模式 beep_flag=1; beep(); key_data=99; lcm_cls(); delay_lcm(10); displaylistchar(0,0,input the code! ); show=1; beep_flag=1; goto a1; miao+; if(miao=60) miao=0; fen+; if(fen=60) fen
36、=0; shi+; if(shi=24) shi=0; write_sfm(3,shi); write_sfm(6,fen); write_sfm(9,miao); f2: while(1) if(ir_flag=1) key_data= key_match(); switch(key_data) case 8: if(shi=23)shi=0; else shi+;ir_flag=0;write_sfm(3,shi);break; case 9: if(fen=59)fen=0; else fen+;ir_flag=0;write_sfm(6,fen);break; default: dis
37、playlistchar(6,0,(-_-);ir_flag=0;delay_lcm(3000);displaylistchar(6,0,(0);break; if(key_data=14)key_data=99;goto f1; 4.2.5 按鍵發(fā)聲程序 如果有按鍵的話,就執(zhí)行以下發(fā)聲程序 beep() ,靠定時(shí)器產(chǎn)生不同頻率的聲音。 void beep(void) int currentfre,temp_t; if(key_data=18) beep_flag=1; speaker = 1; tr0 = 0; ea = 1; if(key_data!=99 /查出對(duì)應(yīng)音符的頻率 temp_
38、t = 65536-(50000/currentfre)*10/(12000000/system_osc); /計(jì)算計(jì)數(shù)器初值 sound_temp_th0 = temp_t/256; sound_temp_tl0 = temp_t%256; th0 = sound_temp_th0; tl0 = sound_temp_tl0 + 12; /加 12 是對(duì)中斷延時(shí)的補(bǔ)償 tr0=1;/開計(jì)時(shí)中斷 if(key_data=18) delay_lcm(500);/開機(jī)鍵響 0.5 秒,其它 0.2 秒 else delay_lcm(200); tr0=0;/關(guān)計(jì)時(shí)器 speaker = 1; vo
39、id beeptimer0(void) interrupt 1 speaker = !speaker; th0 = sound_temp_th0; tl0 = sound_temp_tl0; 4.2.6 沒(méi)操作響應(yīng) 如果沒(méi)有操作的話就開定時(shí)器 0,開始計(jì)時(shí),5s 過(guò)后就返回時(shí)鐘模式。在這段時(shí)間 之內(nèi)只要有按鍵操作,就會(huì)關(guān)定時(shí)器 0。 void no_action(void) interrupt 3 if(t100) t+;th1=0x3c;tl1=0xb0; else rec_num=0,k=1,t=0,tr1=0; 5 功能分析及總結(jié) 5.1 功能分析 本系統(tǒng)順利完成了輸入正確密碼開鎖、出錯(cuò)
40、報(bào)警、超次鎖定、修改用戶密碼等基本 的密碼鎖功能,并且還能實(shí)現(xiàn)遠(yuǎn)距離遙控、掉電存儲(chǔ)、聲光提示、遙控器學(xué)習(xí)識(shí)別等功 能。 完成后的實(shí)物圖如圖 19 所示。打開系統(tǒng)電源后程序初始化,lcd 提示輸入遙控器識(shí)別 按鍵,同時(shí)等待紅外接收頭輸出端的低電平,低電平出現(xiàn)說(shuō)明遙控有鍵按下,外部中斷 設(shè)定為下降沿觸發(fā),故單片機(jī)進(jìn)入中斷服務(wù)程序進(jìn)行信號(hào)的接收解碼。接收解碼程序有 很好的抗干擾性,脈沖寬度的延時(shí)計(jì)數(shù)準(zhǔn)確,能夠識(shí)別重復(fù)信號(hào),屏蔽多余按鍵避免誤 操作,并且 32 位編碼接收完畢后還要進(jìn)行錯(cuò)誤校驗(yàn),所以整個(gè)接收解碼的準(zhǔn)確性非常 高。 圖 19 不帶 lcd 的硬件實(shí)物圖 當(dāng)接收到識(shí)別按鍵后,單片機(jī)便可解碼
41、出相應(yīng)的鍵碼和該遙控器的用戶碼,組成該 遙控器的 id。此 id 是單片機(jī)識(shí)別不同遙控器的根據(jù),單片機(jī)從 at24c02 中查找相應(yīng) 的 id,如果此 id 不存在,就會(huì)提示輸入該遙控器其余鍵碼的信息并保存到 at24c02 相應(yīng)的地址。如果 id 存在,系統(tǒng)即進(jìn)入電子密碼鎖模式。系統(tǒng)進(jìn)入密碼輸入界面,每 輸入一位密碼 lcd 就顯示“*”號(hào),而且程序設(shè)有回格功能,刪除上一位輸入的密碼, 直到接收完八位的密碼后就開始運(yùn)行密碼核對(duì)程序。若密碼輸入正確,就可以選擇進(jìn)行 開鎖、上鎖或修改密碼的操作,并伴有 led 燈顯示。當(dāng)密碼輸入錯(cuò)誤的時(shí)候就會(huì)進(jìn)入 密碼輸入提醒程序提醒錯(cuò)誤次數(shù),密碼輸入錯(cuò)誤次數(shù)累
42、積到 3 次時(shí)系統(tǒng)就會(huì)通過(guò)蜂鳴器 報(bào)警,而且程序進(jìn)入死循環(huán),系統(tǒng)被鎖定。系統(tǒng)被鎖定后無(wú)法通過(guò)遙控器解鎖,只能夠 按電子鎖上面的復(fù)位鍵使整個(gè)程序復(fù)位。 密碼初始化 及遙控器 id 清零按鍵 lcd 對(duì)比 度調(diào)節(jié)電阻 at24c02 一體化紅外接 收頭 sm0038 stc89c51rc 復(fù)位鍵 led 燈指示 如果選擇了密碼修改操作,lcd 提示輸入第一次新密碼,接收完 8 位新密碼后,保 存并 lcd 提示輸入第二次新密碼。兩次新密碼接收完畢后,進(jìn)入密碼比較程序,判斷 兩次輸入的密碼是否相同。若相同則把新密碼保存到 origin_code 中,由于沒(méi)有外部存 儲(chǔ)器,密碼在下一次開機(jī)的時(shí)候還是原
43、始密碼。若不相同則 lcd 顯示錯(cuò)誤,程序返回。 5.2 c 語(yǔ)言編程的延時(shí)技巧 編寫單片機(jī)程序的時(shí)候,經(jīng)常會(huì)遇到需要短時(shí)間延時(shí)的情況,如本系統(tǒng)紅外接收解 碼的時(shí)候就需要用到精確的 100us 的短時(shí)間延時(shí)來(lái)確保接收解碼的準(zhǔn)確性,有時(shí)甚至還 需要更高的精度。c 語(yǔ)言不像匯編一樣可以計(jì)算指令運(yùn)行所要的時(shí)間,所以 c 語(yǔ)言的定 時(shí)是 c 語(yǔ)言編寫單片機(jī)程序最大的一個(gè)缺陷。當(dāng)然可以在 c 里嵌入?yún)R編來(lái)解決這個(gè)問(wèn)題, 但在這里我沒(méi)有使用這個(gè)方法。還有可以考慮用定時(shí)器,但進(jìn)出中斷程序以及重新裝載 計(jì)數(shù)初值也是要耗費(fèi)一些時(shí)間的,也很難精確定時(shí)到微秒級(jí),而且在極端的情況下,計(jì) 時(shí)器甚至已經(jīng)全部有其它的用途。
44、所以在這里使用了循環(huán)計(jì)時(shí)的方式計(jì)時(shí),用斷點(diǎn)的方 式來(lái)調(diào)試。keil uvision2 編譯器有程序調(diào)試的功能,通過(guò)調(diào)試本系統(tǒng)成功地只用 c51 語(yǔ)言產(chǎn)生精確的定時(shí)。編寫 100us 的延時(shí)程序,程序如下: void delay_100us(void) unsigned char i=48; while(-i); 首先在 keil uvision2 上編譯上面的程序,并打開其匯編代碼。如圖 20 所示然后進(jìn) 入 keil uvision2 的調(diào)試狀態(tài)。在延時(shí)子程序的開始和結(jié)束處設(shè)下兩個(gè)斷點(diǎn),見(jiàn)圖中的 兩個(gè)紅點(diǎn)。紅點(diǎn)之間的程序就是所調(diào)試的延時(shí)程序,接著把項(xiàng)目所用的晶振設(shè)為 12m, 這與硬件電路相
45、對(duì)應(yīng)。按運(yùn)行后程序運(yùn)行到斷點(diǎn) 1 時(shí)所用的時(shí)間為 0.000616 秒; 第 1 個(gè)斷點(diǎn) 到第 1 個(gè) 斷點(diǎn)用時(shí) 圖 20 第一個(gè)斷點(diǎn)調(diào)試圖 再次按運(yùn)行又可以從圖 21 中看到運(yùn)行到斷點(diǎn) 2 所用的時(shí)間是 0.000717 秒。兩時(shí)間 相減是 0.000101 秒,就是說(shuō)延時(shí)程序的運(yùn)行時(shí)間是 101us,與理想值只差 1us,延時(shí)十 分精確。 圖 21 第二個(gè)斷點(diǎn)調(diào)試圖 5.3 本設(shè)計(jì)優(yōu)缺點(diǎn) 紅外技術(shù)是一門相當(dāng)成熟的技術(shù),而單片機(jī)技術(shù)也有著相當(dāng)長(zhǎng)的一段發(fā)展時(shí)間,本 系統(tǒng)把兩門技術(shù)結(jié)合起來(lái),發(fā)揮各自的優(yōu)點(diǎn),使紅外技術(shù)應(yīng)用在單片機(jī)控制的電子密碼 鎖上,也就是利用紅外遙控實(shí)現(xiàn)密碼鎖的開鎖、上鎖和修改
46、密碼的操作。這樣的結(jié)合使 到第 2 個(gè) 斷點(diǎn)用時(shí) 第 2 個(gè)斷點(diǎn) 密碼鎖的使用更加方便,安全性能得到進(jìn)一步的提高。本系統(tǒng)的遙控器使用的是家電遙 控中使用得最多的專用芯片,所以抗干擾能力比較強(qiáng),而且十分準(zhǔn)確可靠,誤碼率很低。 本系統(tǒng)還具有學(xué)習(xí)識(shí)別 nec 編碼遙控器的功能,可以實(shí)現(xiàn)多對(duì)一操作,不同的遙控器 采用相同的密碼,不用擔(dān)心遙控器遺失的問(wèn)題,而且用戶可以經(jīng)常更改密碼,防止密碼 被盜。當(dāng)輸入密碼多次錯(cuò)誤時(shí),報(bào)警系統(tǒng)自動(dòng)啟動(dòng)。接收部分用單片機(jī)作為主芯片,可 以根據(jù)不同要求來(lái)修改設(shè)定不同的密碼位數(shù)或改變、增添一些新功能。這是使用專用的 密碼鎖芯片和以前的機(jī)械密碼鎖都不能做到的。而且本系統(tǒng)既可以室
47、內(nèi)使用,也可以在 野外使用。 但是紅外射束易受塵埃、雨水等物質(zhì)的吸收,易受氣候的影響。在惡劣的環(huán)境使用 出現(xiàn)故障的機(jī)率會(huì)大大的提高。而且本系統(tǒng)的最大一個(gè)技術(shù)缺陷是密碼在發(fā)送過(guò)程中無(wú) 法避免通過(guò)監(jiān)測(cè)反射的紅外線和濾除環(huán)境噪聲的竊聽(tīng),這也是紅外通訊的最大的缺點(diǎn)。 還有就是由于紅外遙控編碼的調(diào)制方式有很多種,編碼格式也各不相同。所以要對(duì) 各種形式的遙控器進(jìn)行學(xué)習(xí)就存在著一定的難度,最常用的學(xué)習(xí)紅外編碼的方法也就是 記錄下編碼的所有高低電平時(shí)間,這種方式能實(shí)現(xiàn)對(duì)大部分的遙控器進(jìn)行學(xué)習(xí),不過(guò)這 樣需要大量的存儲(chǔ)空間,尤其是空調(diào)的遙控器,空調(diào)遙控器的編碼包含很多的信息,編 碼特別長(zhǎng)。因此本系統(tǒng)只針對(duì)最常用
48、的 nec 編碼格式的遙控器進(jìn)行學(xué)習(xí)與識(shí)別,舍棄 其它編碼。這樣的優(yōu)點(diǎn)是專用性強(qiáng),解碼的準(zhǔn)確率高;缺點(diǎn)是并不是所有編碼格式的遙 控器都能學(xué)習(xí),有一定的局限性。 5.4 設(shè)計(jì)總結(jié) 本次的課程設(shè)計(jì)過(guò)程中,proteus 仿真軟件中都是沒(méi)有此類硬件的,只能放棄仿真。 由于電烙鐵不好用,所一制作了很久。用 keil 寫程序的時(shí)候,由于我們受 fpga 和組態(tài) 軟件的影響,總是認(rèn)為程序是并行執(zhí)行的,所以遇到了一些困難。調(diào)試過(guò)程中,學(xué)習(xí)了 外部中斷還有定時(shí)中斷,感覺(jué)很有用。我們小組參考了一個(gè)音樂(lè)播放器的程序而想出了 按鍵發(fā)音的主意。沒(méi)操作返回也是用定時(shí)器寫的。液晶顯示方面,參考了一些程序,對(duì) 寫命令還有寫
49、數(shù)據(jù)有了一定的認(rèn)識(shí)??傮w感覺(jué)就是要認(rèn)真思考,用不同的方法去思考一 些遇到的問(wèn)題,或者去驗(yàn)證我們的想法。 參 考 文 獻(xiàn) 李朝青. 2005. 單片機(jī)原理及接口技術(shù)(第 3 冊(cè))m. 北京: 北京航空航天大學(xué)出版社. 17- 140 來(lái)清民. 2008. 傳感器與單片機(jī)接口及實(shí)例m. 北京: 北京航空航天大學(xué)出版社. 213-226 張義和,陳敵北,周金圣. 2006. 例說(shuō) protel2004m. 北京: 人民郵電出版社. 142-204 康華光. 2000. 電子技術(shù)基礎(chǔ)數(shù)字部分(第四版)m. 北京: 高等教育出版社.213-228 譚浩強(qiáng). 2005. c 語(yǔ)言程序設(shè)計(jì)(第三版)m. 北
50、京: 清華教育出版社. 204-278 q1 8550 p1.0/t2 1 p1.1/t2ex 2 p1.2 3 p1.3 4 p1.4 5 p1.5 6 p1.6 7 p1.7 8 rst 9 p3.0/rxd 10 p3.1/txd 11 p3.2/int0 12 p3.3/int1 13 p3.4/t0 14 p3.5/t1 15 p3.6/wr 16 p3.7/rd 17 xtal2 18 xtal1 19 vss 20 p2.0/a8 21 p2.1/a9 22 p2.2/a10 23 p2.3/a11 24 p2.4/a12 25 p2.5/a13 26 p2.6/a14 27 p
51、2.7/a15 28 psen 29 ale 30 ea/vpp 31 p0.7/ad7 32 p0.6/ad6 33 p0.5/ad5 34 p0.4/ad4 35 p0.3/ad3 36 p0.2/ad2 37 p0.1/ad1 38 p0.0/ad0 39 vcc 40 u1 89s51 12 y1 xtal 104 c1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 lcd1 lcd1602 vcc 1 2 3 4 5 6 7 8 9 rp1 r_10k 30p c2 30p c3vcc 10uf e1 vcc 1k r3 1k r9 1k r10 d2
52、 led d3 led vcc led1 led2 1k r5 vcc 100 r6 speaker led2 led1 led3 d0 d1 d2 d3 d4 d5 d6 d7 e rw rs d0 d1 d2 d3 d4 d5 d6 d7 e rw rs e0 1 e1 2 e2 3 gnd 4 sda 5 scl 6 wc 7 vcc 8 u3 24c02 vcc 10k r7 10k r8 wc scl sda wc scl sda vcc vcc 1k r4 d1 led 42 13 s1 1k r2r1 10k in 1 3 out 2 gnd u2 7805 1 2 j1 pow
53、erin vcc 104 c4 sw-power1 sw-spst vss 1 vdd 2 out 3 1 vcc 42 13 s2 d4 led 1k r11 led3 speaker speaker1 speaker 附錄 a 電路連接圖 附錄 c 實(shí)物圖 圖 1hz-ft007 的 20 鍵車載 mp3 紅外遙控器 圖 2 不帶 lcd 硬件實(shí)物圖 圖 3 帶 lcd 硬件實(shí)物圖 程序附錄: 主程序: #include sbit ir = p32; / 紅外中斷輸入端口(int0 sbit speaker=p30; sbit led1=p13; sbit led2=p14; sbit l
54、ed3=p15; #define system_osc 12000000/定義晶振頻率 12000000hz #define uchar unsigned char #define uint unsigned int uchar datair4,ir_data,new_code1=0,new_code2=0; uchar key_data=100; int rec_num=0,show=0,wrong_num=0,flag=0; uchar origin_code=1,2,3,4,5,6,7,8,receive_code8,com_code8,com1_code8; int t,ir_flag
55、=0,code_right=0,j=0,n=0,beep_flag=0,shi,fen,miao,k=0; int code fretab21 = 300,400,600,800,800,1200,1400,300,400,600,800,800,1200,1400,300,400,600,800,800,1200,1400 ; /原始 頻率表 uchar sound_temp_th0,sound_temp_tl0;/音符定時(shí)器初值暫存 extern void delay_100us(void); extern void write_sfm(uchar add,uchar date); ext
56、ern void initlcm( void); /lcd 初始化子程序 extern void displaylistchar(uchar x,uchar y, unsigned char *ddata); extern void displayonechar(uchar x,uchar y, unsigned char ddata); extern void delay_lcm(uint k); /顯示指定坐標(biāo)的一串字符子函數(shù) extern void lcm_cls(void); void delay_lcm(uint k); void delay_100us(void); void ch
57、eck_code(void); void change_code(void); void beep(void); /* 按 鍵 數(shù) 據(jù) 編 碼 */ /* 18,19,20 */ /* 15,16,17 */ /* 12,13,14 */ /* 0, 10,11 */ /* 1, 2, 3 */ /* 4, 5, 6 */ /* 7, 8, 9 */ /* 遙控器 */ uchar key_match() switch(ir_data) case 0 x68: return(0); case 0 x30: return(1); case 0 x18: return(2); case 0 x7a
58、: return(3); case 0 x10: return(4); case 0 x38: return(5); case 0 x5a: return(6); case 0 x42: return(7); case 0 x4a: return(8); case 0 x52: return(9); case 0 x98: return(10); case 0 xb0: return(11); case 0 xe0: return(12); case 0 xa8: return(13); case 0 x90: return(14); case 0 x22: return(15); case
59、0 x02: return(16); case 0 xc2: return(17); case 0 xa2: return(18); case 0 x62: return(19); case 0 xe2: return(20); default : return(99); main(void) th1=0x3c;tl1=0xb0; initlcm(); tmod |= 0 x11;/定時(shí)器 0 和定時(shí)器 1 工作方式都是 1 et0 = 1; et1=1; it0=1; ex0=1; ea=1; tr0=0; displaylistchar(3,0,welcome!); displaylist
60、char(3,1,00:00:00); shi=0; fen=0; miao=0; delay_lcm(5000); while(1) /時(shí)鐘部分程序 f1: displaylistchar(0,0, ); displaylistchar(0,1, ); displaylistchar(6,0,(0_0); displaylistchar(3,1, : : ); write_sfm(3,shi); write_sfm(6,fen); write_sfm(9,miao); while(1) delay_lcm(2000); displaylistchar(6,0,(_); if(ir_flag=
溫馨提示
- 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司委托消防責(zé)任合同范本
- 冰激凌保證合同范本
- 修建住房糾紛合同范本
- 加盟合同服務(wù)合同范本
- 人力資源管理與發(fā)展規(guī)劃考核試卷
- 上海吊車買賣合同范本
- 單位房屋改建合同范例
- 借售房合同范本
- 2025-2030年可持續(xù)時(shí)尚材料企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 傳感器在智能照明系統(tǒng)中的應(yīng)用考核試卷
- 長(zhǎng)江委水文局2025年校園招聘17人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年湖南韶山干部學(xué)院公開招聘15人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 廣東省廣州市番禺區(qū)2023-2024學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)試題
- JGJ46-2024 建筑與市政工程施工現(xiàn)場(chǎng)臨時(shí)用電安全技術(shù)標(biāo)準(zhǔn)
- 企業(yè)動(dòng)火作業(yè)安全管理制度范文
- 信息安全意識(shí)培訓(xùn)課件
- pp顧問(wèn)的常見(jiàn)面試問(wèn)題
- 法理學(xué)原理與案例完整版教學(xué)課件全套ppt教程
- 軟體家具、沙發(fā)質(zhì)量檢驗(yàn)及工藝
- 電鍍廢水中各種重金屬?gòu)U水處理反應(yīng)原理及控制條件
- Q∕GDW 12118.1-2021 人工智能平臺(tái)架構(gòu)及技術(shù)要求 第1部分:總體架構(gòu)與技術(shù)要求
評(píng)論
0/150
提交評(píng)論