版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 摘要</b></p><p> 摘要:在日常的生活和工作中, 住宅與部門(mén)的安全防范、單位的文件檔案、財(cái)務(wù)報(bào)表以及一些個(gè)人資料的保存多以加鎖的辦法來(lái)解決。若使用傳統(tǒng)的機(jī)械式鑰匙開(kāi)鎖,人們常需攜帶多把鑰匙, 使用極不方便, 且鑰匙丟失后安全性即大打折扣。隨著科學(xué)技術(shù)的不斷發(fā)展,人們對(duì)日常生活中的安全保險(xiǎn)器件的要求越來(lái)越高。為滿(mǎn)足人們對(duì)鎖的使用要求,增加其安全性,用
2、密碼代替鑰匙的密碼鎖應(yīng)運(yùn)而生。密碼鎖具有安全性高、成本低、功耗低、易操作等優(yōu)點(diǎn)。</p><p> 在安全技術(shù)防范領(lǐng)域,具有防盜報(bào)警功能的電子密碼鎖逐漸代替?zhèn)鹘y(tǒng)的機(jī)械式密碼鎖,克服了機(jī)械式密碼鎖密碼量少、安全性能差的缺點(diǎn),使密碼鎖無(wú)論在技術(shù)上還是在性能上都大大提高一步。隨著大規(guī)模集成電路技術(shù)的發(fā)展,特別是單片機(jī)的問(wèn)世,出現(xiàn)了帶微處理器的智能密碼鎖,它除具有電子密碼鎖的功能外,還引入了智能化管理、專(zhuān)家分析系統(tǒng)等功
3、能,從而使密碼鎖具有很高的安全性、可靠性,應(yīng)用日益廣泛。</p><p> 本次設(shè)計(jì)使用 STC公司的STC89C52實(shí)現(xiàn)一基于單片機(jī)的電子密碼鎖的設(shè)計(jì),其主要具有如下功能: </p><p> 1.密碼通過(guò)鍵盤(pán)輸入,若密碼正確,則將鎖打開(kāi),語(yǔ)音提示開(kāi)鎖,蜂鳴器播放一段開(kāi)鎖音樂(lè)。 </p><p> 2.密碼可由管理員修改設(shè)定,鎖打開(kāi)后才能修改密碼。修改密碼之
4、前必須再次輸入密碼,在輸入新密碼時(shí)需要二次確認(rèn),以防止誤操作。</p><p> 3.報(bào)警、鎖定鍵盤(pán)功能。密碼輸入錯(cuò)誤,LCD液晶顯示器會(huì)出現(xiàn)錯(cuò)誤提示,同時(shí)語(yǔ)音提示錯(cuò)誤信息,蜂鳴器鳴響;若密碼輸入錯(cuò)誤次數(shù)達(dá)到3次,蜂鳴器報(bào)警并且鎖定鍵盤(pán),蜂鳴器播放一段報(bào)警音樂(lè)。 </p><p><b> 主要的設(shè)計(jì)過(guò)程:</b></p><p> 首先
5、,選用STC公司的單片機(jī)STC89C52,以及選用其他電子元器件。</p><p> 第二步,使用Alitm Designer 設(shè)計(jì)硬件電路原理圖,完成人工布線。</p><p> 第三步,使用 Keil C51 軟件編寫(xiě)單片機(jī)的 C 語(yǔ)言程序、仿真、軟件調(diào)試。最后,聯(lián)合軟、硬件調(diào)試電路板,完成本次電子綜合設(shè)計(jì)。 </p><p> 關(guān)鍵詞:4×4
6、矩陣鍵盤(pán);STC89C52;ISD1760;LCD液晶顯示器;密碼二次確認(rèn) </p><p><b> 目錄</b></p><p> 第一部分 總 述4</p><p><b> 一.引言4</b></p><p> 二.課題內(nèi)容及要求4</p><p>
7、 第二部分 硬件設(shè)計(jì)部分5</p><p><b> 一.設(shè)計(jì)總框圖5</b></p><p> 二.單片機(jī)STC89C52介紹5</p><p><b> 三.輸入鍵盤(pán)6</b></p><p> 四.LCD液晶顯示8</p><p> 五.ISD176
8、0語(yǔ)音提示9</p><p> 六.蜂鳴器發(fā)聲10</p><p> 第三部分 軟件設(shè)計(jì)部分11</p><p> 一.程序流程圖11</p><p> 二.鍵盤(pán)掃描設(shè)計(jì)11</p><p> 三.液晶顯示設(shè)計(jì)13</p><p> 四.語(yǔ)音提示設(shè)計(jì)18</p&g
9、t;<p> 五.蜂鳴器發(fā)聲設(shè)計(jì)9</p><p> 第四部分 調(diào)試報(bào)告20</p><p><b> 一.硬件調(diào)試24</b></p><p><b> 二.軟件調(diào)試24</b></p><p><b> 三.調(diào)試心得24</b></p
10、><p><b> 總結(jié)25</b></p><p><b> 參考資料25</b></p><p><b> 附錄26</b></p><p> 一.元器件清單26</p><p><b> 二.工具27</b>&
11、lt;/p><p> 三.硬件設(shè)計(jì)總圖27</p><p><b> 四.源程序28</b></p><p><b> 第一部分 總 述</b></p><p><b> 一.引言</b></p><p> 科技的發(fā)展是電子產(chǎn)品的應(yīng)用越來(lái)越廣
12、泛,電子電路的設(shè)計(jì)也越來(lái)越重要。隨著人們生活水平的提高,如何實(shí)現(xiàn)家庭防盜這一問(wèn)題也變的尤其的突出,傳統(tǒng)的機(jī)械鎖由于結(jié)構(gòu)簡(jiǎn)單,被撬的事件屢見(jiàn)不鮮,電子鎖由于其保密性高,使用靈活性好,安全系數(shù)高,受到了廣大用戶(hù)的青睞。同時(shí)隨著電子產(chǎn)品向智能化和微型化的不斷發(fā)展,數(shù)字邏輯電路電子芯片已成為電子產(chǎn)品研制和開(kāi)發(fā)的首選控制器。用電子邏輯電路設(shè)計(jì)的密碼鎖經(jīng)實(shí)際操作表明,該密碼鎖具有安全、實(shí)用、成本低等優(yōu)點(diǎn),符合一般鎖的需要,具有一定的現(xiàn)實(shí)意義。<
13、;/p><p> 本系統(tǒng)采用STC公司的單片機(jī)STC89C52作為主控芯片,結(jié)合外圍的矩陣鍵盤(pán)輸入、LCD顯示、報(bào)警系統(tǒng)和開(kāi)鎖等電路,用C語(yǔ)言編寫(xiě)主控芯片的控制程序,設(shè)計(jì)了一款可以多次更改密碼且具有報(bào)警功能的電子密碼鎖。用戶(hù)想要打開(kāi)鎖,必先通過(guò)提供的鍵盤(pán)輸入正確的密碼才能將鎖打開(kāi),且密碼輸入錯(cuò)誤時(shí)有提示,為了提高安全性,當(dāng)密碼連續(xù)輸入錯(cuò)誤三次將報(bào)警。密碼只可以由管理員自己修改、設(shè)定,鎖打開(kāi)后只有管理員才能修改密碼。
14、修改之前必須先輸入管理員登錄密碼,然后再次輸入舊密碼,在輸入新密碼時(shí)需要二次確認(rèn),以防止誤操作。</p><p><b> 二.課題內(nèi)容及要求</b></p><p><b> 1.設(shè)計(jì)內(nèi)容:</b></p><p> 采用LCD液晶顯示,4*4的矩形鍵盤(pán)輸入的基于單片機(jī)的電子密碼鎖,能夠?qū)崿F(xiàn)修改密碼,糾錯(cuò),確認(rèn)的功
15、能。</p><p><b> 2.基本要求:</b></p><p> 硬件布局基本合理,焊接比較美觀,器件運(yùn)用基本合理,用比較簡(jiǎn)單的電路實(shí)現(xiàn)修改密碼、糾錯(cuò)、確認(rèn)等基本功能。</p><p><b> 提高部分:</b></p><p> 電子密碼鎖能夠?qū)崿F(xiàn)管理員登陸、動(dòng)態(tài)顯示登陸密碼、登
16、陸密碼驗(yàn)證,登陸成功與否給出提示、超次鎖定并報(bào)警鳴示、在登陸成功的情況下管理員可以進(jìn)行修改和確認(rèn)密碼,新密碼位數(shù)不夠或太簡(jiǎn)單給出提示,能在修改密碼成功的情況下給出提示。</p><p> 另外,可以用語(yǔ)音發(fā)聲芯片發(fā)出相應(yīng)的提示信息,并用蜂鳴器報(bào)警,播放簡(jiǎn)單的音樂(lè)段。</p><p> 本方案采用一種以STC89C52為核心的單片機(jī)控制方案。利用單片機(jī)靈活的編程設(shè)計(jì)和豐富的I/O端口,及
17、其控制的準(zhǔn)確性,實(shí)現(xiàn)基本的密碼鎖功能,以及一些擴(kuò)展功能。</p><p> 第二部分 硬件設(shè)計(jì)部分</p><p><b> 一.設(shè)計(jì)總框圖</b></p><p><b> 圖一 總體設(shè)計(jì)框圖</b></p><p> 單片機(jī)STC89C52介紹</p><p>
18、 STC89C52是一種帶8K字節(jié)閃爍可編程可檫除只讀存儲(chǔ)器(FPEROM-Flash Programable and Erasable Read Only Memory )的低電壓,高性能COMOS8的微處理器,俗稱(chēng)單片機(jī)。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。</p><p> STC89C52具體介紹如下:</p><p&g
19、t; ?、?主電源引腳(2根)</p><p> VCC(Pin40):電源輸入,接+5V電源</p><p> GND(Pin20):接地線</p><p> ?、谕饨泳д褚_(2根)</p><p> XTAL1(Pin19):片內(nèi)振蕩電路的輸入端</p><p> XTAL2(Pin20):片內(nèi)振蕩電路的
20、輸出端</p><p><b> ?、劭刂埔_(4根)</b></p><p> RST/VPP(Pin9):復(fù)位引腳,引腳上出現(xiàn)2個(gè)機(jī)器周期的高電平將使單片機(jī)復(fù)位。</p><p> ALE/PROG(Pin30):地址鎖存允許信號(hào)</p><p> PSEN(Pin29):外部存儲(chǔ)器讀選通信號(hào)</p>
21、;<p> EA/VPP(Pin31):程序存儲(chǔ)器的內(nèi)外部選通,接低電平從外部程序存儲(chǔ)器讀指令,如果接高電平則從內(nèi)部程序存儲(chǔ)器讀指令。</p><p> ?、芸删幊梯斎?輸出引腳(32根)</p><p> STC89C52單片機(jī)有4組8位的可編程I/O口,分別位P0、P1、P2、P3口,每個(gè)口有8位(8根引腳),共32根。</p><p> P
22、0口(Pin39~Pin32):8位雙向I/O口線,名稱(chēng)為P0.0~P0.7</p><p> P1口(Pin1~Pin8):8位準(zhǔn)雙向I/O口線,名稱(chēng)為P1.0~P1.7 </p><p> P2口(Pin21~Pin28):8位準(zhǔn)雙向I/O口線,名稱(chēng)為P2.0~P2.7 </p><p> P3口(Pin10~Pin17):8位準(zhǔn)雙向I/O口線,名稱(chēng)為P3
23、.0~P3.7</p><p> STC89C52主要功能如表二所示。</p><p> 表二 STC89C52主要功能</p><p><b> 輸入鍵盤(pán)</b></p><p> 由于本設(shè)計(jì)所用到的按鍵數(shù)量較多而不適合用獨(dú)立按鍵式鍵盤(pán)。采用的是矩陣式按鍵鍵盤(pán),它由行線和列線組成,也稱(chēng)行列式鍵盤(pán),按鍵位于行列
24、的交叉點(diǎn)上,密碼鎖的密碼由鍵盤(pán)輸入完成,與獨(dú)立式按鍵鍵盤(pán)相比,要節(jié)省很多I/O口。本設(shè)計(jì)中使用的這個(gè)4*4鍵盤(pán)不但能完成密碼的輸入還能作特別功能鍵使用,比如清空顯示功能等。鍵盤(pán)的每個(gè)按鍵功能在程序設(shè)計(jì)中設(shè)置。其原理圖如下:</p><p><b> 圖二 矩陣鍵盤(pán)</b></p><p> 每一條水平(行線)與垂直線(列線)的交叉處不相通,而是通過(guò)一個(gè)按鍵來(lái)連通,
25、利用這種行列式矩陣結(jié)構(gòu)只需要N條行線和M條列線,即可組成具有N×M個(gè)按鍵的鍵盤(pán)。</p><p> 在這種行列式矩陣鍵盤(pán)非鍵盤(pán)編碼的單片機(jī)系統(tǒng)中,鍵盤(pán)處理程序首先執(zhí)行等待按鍵并確認(rèn)有無(wú)按鍵按下的程序段。</p><p> 當(dāng)確認(rèn)有按鍵按下后,下一步就要識(shí)別哪一個(gè)按鍵按下。對(duì)鍵的識(shí)別通常有兩種方法:一種是常用的逐行掃描查詢(xún)法;另一種是速度較快的線反轉(zhuǎn)法。</p>
26、<p> 對(duì)照?qǐng)D四所示的4×4鍵盤(pán),說(shuō)明線反轉(zhuǎn)法工作原理:</p><p> 首先辨別鍵盤(pán)中有無(wú)鍵按下,有單片機(jī)I/O口向鍵盤(pán)送全掃描字,然后讀入行線狀態(tài)來(lái)判斷。方法是:向行線輸出全掃描字00H,把全部列線置為低電平,然后將列線的電平狀態(tài)讀入累加器A中。如果有按鍵按下,總會(huì)有一根行線電平被拉至低電平從而使行線不全為1。</p><p> 判斷鍵盤(pán)中哪一個(gè)鍵被按下使
27、通過(guò)將列線逐列置低電平后,檢查行輸入狀態(tài)來(lái)實(shí)現(xiàn)的。方法是:依次給列線送低電平,然后查所有行線狀態(tài),如果全為1,則所按下的鍵不在此列;如果不全為1,則所按下的鍵必在此列,而且是在與零電平行線相交的交點(diǎn)上的那個(gè)鍵。</p><p> 圖三 按鍵操作面板示意圖</p><p> ?。樞蛞詫?shí)際電路為準(zhǔn))</p><p> 10個(gè)數(shù)字鍵用來(lái)輸入密碼,0鍵有切換模式的功
28、能,另外6個(gè)功能鍵分別是:權(quán)限鍵、退出鍵、清零鍵、開(kāi)啟鍵、刪除鍵、確定鍵。其中權(quán)限鍵的功能是設(shè)置密碼修改權(quán)限,只有管理員可以登錄修改密碼。退出鍵的功能是退出當(dāng)前程序。清零鍵鍵的功能是當(dāng)前輸入數(shù)據(jù)清零。開(kāi)啟鍵的功能是退出屏幕保護(hù)界面,開(kāi)啟LCD顯示功能:未按下時(shí)LCD動(dòng)態(tài)顯示屏保圖形,需要開(kāi)鎖時(shí)按下此鍵,LCD上會(huì)顯示“Hello Enter your code”。未輸入密碼時(shí),單獨(dú)按下0鍵具有切換模式功能,密碼輸入后0作為數(shù)字鍵。&l
29、t;/p><p><b> LCD液晶顯示</b></p><p> 為了提高密碼鎖的密碼顯示效果能力。本設(shè)計(jì)的顯示部分由液晶顯示器LCD1602取代普通的數(shù)碼管來(lái)完成。只有按下鍵盤(pán)上的開(kāi)啟按鍵后,顯示器才處于開(kāi)啟狀態(tài)。同理只有按下退出按鍵后顯示器才處于屏保狀態(tài)。否則顯示器將一直處于開(kāi)啟狀態(tài),當(dāng)需要對(duì)密碼鎖進(jìn)行開(kāi)鎖時(shí),按下鍵盤(pán)上的開(kāi)啟按鍵后利用鍵盤(pán)上的數(shù)字鍵0-9輸入
30、密碼,每按下一個(gè)數(shù)字鍵后在顯示器上顯示一個(gè)*,輸入多少位就顯示多少個(gè)*(設(shè)定為6個(gè))。當(dāng)密碼輸入完成時(shí),按下確認(rèn)鍵,如果輸入的密碼正確的話, LCD上顯示“Successfully Lock Is Opened”,單片機(jī)其中P3.1引角會(huì)輸出低電平,使三極管Q1導(dǎo)通,電磁鐵吸合,電子密碼鎖被打開(kāi),如果密碼不正確,LCD顯示屏?xí)@示“Code Error”,P3.1輸出的是高電平,電子密碼鎖不能被打開(kāi)。若連續(xù)三次密碼輸入錯(cuò)誤,則密碼
31、所被鎖定,LCD上顯示“Please Wait….”。若密碼修改太簡(jiǎn)單,則顯示“Code Is Too Simple”。若輸入的密碼大于原密碼,則LCD上顯示“Large”,若輸入的密碼小于原密碼,LCD上顯示“Small”。通過(guò)LCD顯示屏,可以清楚的判斷出</p><p> 圖四 顯示電路原理圖</p><p> ISD1760語(yǔ)音提示</p><p>
32、本設(shè)計(jì)采用ISD760單片60秒高保真語(yǔ)音錄放電路進(jìn)行語(yǔ)音操作,實(shí)時(shí)提示當(dāng)前狀態(tài)。當(dāng)密碼連續(xù)輸入3次錯(cuò)誤之后語(yǔ)音芯片給出語(yǔ)音提示“連續(xù)3次密碼輸入錯(cuò)誤,鍵盤(pán)已鎖定”。語(yǔ)音電路如圖:</p><p> 圖五 語(yǔ)音電路原理圖</p><p><b> 蜂鳴器發(fā)聲</b></p><p> 報(bào)警模塊由蜂鳴器和單片機(jī)組成。選擇一只壓電式蜂鳴器,壓
33、電式蜂鳴器工作時(shí)約需要100mA驅(qū)動(dòng)電流。蜂鳴器電路如圖七所示。當(dāng)89C52的P3.1口輸出為低電平時(shí),蜂鳴器產(chǎn)生蜂鳴音,89C52輸出為高電平時(shí),蜂鳴器不發(fā)聲。</p><p> 圖六 報(bào)警電路原理圖</p><p> 第三部分 軟件設(shè)計(jì)部分</p><p><b> 一.程序流程圖</b></p><p>&l
34、t;b> 圖七 程序流程圖</b></p><p><b> 二.鍵盤(pán)掃描設(shè)計(jì)</b></p><p> 鍵盤(pán)采用查詢(xún)的方式,放在主程序中,當(dāng)沒(méi)有按鍵按下的時(shí)候,單片機(jī)循環(huán)主程序,一旦有按鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。</p><p><b> 主要程序如下:</b></p
35、><p> uchar KeyScan(void) //鍵盤(pán)掃描函數(shù),使用行列逐級(jí)掃描法</p><p><b> {</b></p><p> uchar Val;</p><p> KeyPort=0xf0; //高四位置高,低四位拉低</p>&l
36、t;p> if(KeyPort!=0xf0) //表示有按鍵按下</p><p><b> {</b></p><p> delay(10); //去抖</p><p> if(KeyPort!=0xf0)</p><p> {
37、 //表示有按鍵按下</p><p> KeyPort=0xfe; //檢測(cè)第一行</p><p> if(KeyPort!=0xfe)</p><p><b> {</b></p><p> Val=KeyPort&0xf0;</p><p>
38、 Val+=0x0e;</p><p> while(KeyPort!=0xfe);</p><p> delay(10); //去抖</p><p> while(KeyPort!=0xfe);</p><p> return Val;</p><p><b> }</b>&
39、lt;/p><p> KeyPort=0xfd; //檢測(cè)第二行</p><p> if(KeyPort!=0xfd)</p><p><b> {</b></p><p> Val=KeyPort&0xf0;</p><p> Val+=0x0d;</p>
40、;<p> while(KeyPort!=0xfd);</p><p> delay(10); //去抖</p><p> while(KeyPort!=0xfd);</p><p> return Val;</p><p><b> }</b></p><p>
41、 KeyPort=0xfb; //檢測(cè)第三行</p><p> if(KeyPort!=0xfb)</p><p><b> {</b></p><p> Val=KeyPort&0xf0;</p><p> Val+=0x0b;</p><p> while(Ke
42、yPort!=0xfb);</p><p> delay(10); //去抖</p><p> while(KeyPort!=0xfb);</p><p> return Val;</p><p><b> }</b></p><p> KeyPort=0xf7; //
43、檢測(cè)第四行</p><p> if(KeyPort!=0xf7)</p><p><b> {</b></p><p> Val=KeyPort&0xf0;</p><p> Val+=0x07;</p><p> while(KeyPort!=0xf7);</p>
44、<p> delay(10); //去抖</p><p> while(KeyPort!=0xf7);</p><p> return Val;</p><p><b> }</b></p><p><b> }</b></p><p><b
45、> }</b></p><p> return 0xff;</p><p><b> }</b></p><p> /**********************按鍵值處理函數(shù),返回掃鍵值******************/</p><p> uchar KeyPro(void)</p
46、><p><b> {</b></p><p> switch(KeyScan())</p><p><b> {</b></p><p> case 0xee:return 1;break;//1按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值</p><p> case 0xde:re
47、turn 2;break;//2</p><p> case 0xbe:return 3;break;//3</p><p> case 0xed:return 4;break;//4</p><p> case 0xdd:return 5;break;//5</p><p> case 0xbd:return 6;break;//6
48、</p><p> case 0xeb:return 7;break;//7</p><p> case 0xdb:return 8;break;//8</p><p> case 0xbb:return 9;break;//9</p><p> case 0xe7:return 10;break;//刪除</p>&l
49、t;p> case 0xd7:return 0;break;//0模式</p><p> case 0xb7:return 11;break;//確定</p><p> case 0x7e:return 13;break;//開(kāi)啟</p><p> case 0x7d:return 14;break;//清零</p><p>
50、 case 0x7b:return 15;break;//退出</p><p> case 0x77:return 16;break;//權(quán)限</p><p> default:return 12;break;</p><p><b> }</b></p><p><b> }</b><
51、;/p><p><b> 三.液晶顯示設(shè)計(jì)</b></p><p> 由于是顯示數(shù)據(jù),所以就要用到如下幾個(gè)顯示子程序,分別是:開(kāi)鎖狀態(tài)顯示子程序、密碼輸入及修改狀態(tài)顯示子程序、密碼輸入錯(cuò)誤后的提示子程序。密碼在規(guī)定的時(shí)間內(nèi)輸入錯(cuò)誤次數(shù)超過(guò)3次后的鎖定狀態(tài)顯示子程序,輸入密碼錯(cuò)誤的情況下清除密碼子程序等。</p><p><b> 動(dòng)
52、態(tài)顯示主要程序:</b></p><p> void delay_gd(int ms)</p><p> { // 延時(shí)子程序</p><p><b> int i;</b></p><p> while(ms--)</p><p
53、><b> {</b></p><p> for(i = 0; i< 250; i++)</p><p><b> {</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b>&l
54、t;/p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }<
55、;/b></p><p> bit lcd_bz()</p><p> { // 測(cè)試LCD忙碌狀態(tài)</p><p> bit result;</p><p><b> rs = 0;</b></p><p> lcdrw = 1;
56、</p><p> lcden = 1;</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_
57、();</b></p><p> result = (bit)(P0 & 0x80);</p><p> lcden = 0;</p><p> return result; </p><p><b> }</b></p><p> void lcd_wcmd(uch
58、ar cmd)</p><p> { // 寫(xiě)入指令數(shù)據(jù)到LCD</p><p> while(lcd_bz());</p><p><b> rs = 0;</b></p><p> lcdrw = 0;</p><p> lcden
59、= 0;</p><p><b> _nop_();</b></p><p><b> _nop_(); </b></p><p><b> P0 = cmd;</b></p><p><b> _nop_();</b></p>&l
60、t;p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> lcden = 1;</p><p><b> _nop_();</b>&
61、lt;/p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> lcden = 0; </p><p><b> }<
62、;/b></p><p> void lcd_pos(uchar pos)</p><p> { //設(shè)定顯示位置</p><p> lcd_wcmd(pos | 0x80);</p><p><b> }</b></p><p>
63、 void lcd_wdat(uchar dat) </p><p> { //寫(xiě)入字符顯示數(shù)據(jù)到LCD</p><p> while(lcd_bz());</p><p><b> rs = 1;</b></p><p> lcdrw = 0;</p>
64、;<p> lcden = 0;</p><p><b> P0 = dat;</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</
65、b></p><p><b> _nop_();</b></p><p> lcden = 1;</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b>
66、_nop_();</b></p><p><b> _nop_();</b></p><p> lcden = 0; </p><p><b> }</b></p><p> void lcd_init()</p><p> {
67、 //LCD初始化設(shè)定</p><p> lcd_wcmd(0x38); //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)</p><p> delay_gd(1);</p><p> lcd_wcmd(0x0c); //顯示開(kāi),關(guān)光標(biāo)</p><p> delay_gd(1);<
68、;/p><p> lcd_wcmd(0x06); //移動(dòng)光標(biāo)</p><p> delay_gd(1);</p><p> lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容</p><p> // delay_gd(1);</p><p><b> }&l
69、t;/b></p><p> void lcd_gundong(uchar *dis1)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> lcd_init(); // 初始化LCD</p>
70、;<p> display2(date);</p><p> delay_gd(10);</p><p> lcd_wcmd(0x06); //向右移動(dòng)光標(biāo)</p><p> lcd_pos(0); //設(shè)置顯示位置為第一行的第1個(gè)字符</p><p><b>
71、; i = 0;</b></p><p> while(dis1[ i ] != '\0')</p><p> { //顯示字符"CQ University"</p><p> lcd_wdat(dis1[ i ]);</p><p>
72、<b> i++;</b></p><p> temp=KeyPro();</p><p> if(temp==13) break;</p><p> delay_gd(30); //控制兩字之間顯示速度</p><p><b> }</b></p>
73、;<p> delay_gd(200); //控制停留時(shí)間</p><p> lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容</p><p> display2(date);</p><p><b> }</b></p><p><
74、b> 靜態(tài)顯示主要程序:</b></p><p> void write_com(uchar com)</p><p><b> {</b></p><p><b> P0=com;</b></p><p><b> rs=0;</b></p&
75、gt;<p><b> lcden=0;</b></p><p><b> delay(5);</b></p><p><b> lcden=1;</b></p><p><b> delay(5);</b></p><p><
76、b> lcden=0;</b></p><p><b> }</b></p><p> void write_date(uchar date)</p><p><b> {</b></p><p><b> P0=date;</b></p&g
77、t;<p><b> rs=1;</b></p><p><b> lcden=0;</b></p><p><b> delay(5);</b></p><p><b> lcden=1;</b></p><p><b>
78、 delay(5);</b></p><p><b> lcden=0;</b></p><p><b> }</b></p><p> void init()</p><p><b> {</b></p><p><b&g
79、t; lcden=0;</b></p><p> write_com(0x38);</p><p> delay(10);</p><p> write_com(0x0c);</p><p> delay(10);</p><p> write_com(0x06);</p><
80、;p> delay(10);</p><p> write_com(0x01);</p><p> delay(10);</p><p><b> }</b></p><p> /************************定時(shí)中斷***********************/</p>
81、<p> void intrupt()</p><p> {TMOD=0X10;</p><p> TH1=(65536-50000)/256;</p><p> TL1=(65536-50000)%256;</p><p><b> EA=1;</b></p><p>
82、<b> ET1=1;</b></p><p><b> TR1=1;</b></p><p><b> }</b></p><p> void w_cht(uchar dat)</p><p><b> {</b></p><
83、;p> uchar dat1,dat2;</p><p> dat1=dat/10;</p><p> dat2=dat%10;</p><p> write_com(0x80+0x40+0x06);</p><p> write_date(0x30+dat1);</p><p> write_dat
84、e(0x30+dat2);</p><p><b> }</b></p><p> void T_rupt() interrupt 3</p><p><b> {</b></p><p> TH1=(65536-50000)/256;</p><p> TL1=(
85、65536-50000)%256;</p><p><b> t0++;</b></p><p> if(t0==20)</p><p><b> {</b></p><p><b> t0=0;</b></p><p><b> m
86、iao--;</b></p><p> if(miao>0)</p><p> w_cht(miao);</p><p><b> else</b></p><p><b> TR1=0;</b></p><p><b> }</b
87、></p><p><b> }</b></p><p> /**********************顯示部分************************/</p><p> void display1(uchar *tab)</p><p><b> {</b></p&
88、gt;<p><b> uchar i;</b></p><p> write_com(0x80);</p><p> for(i=0;i<16;i++)</p><p> {write_date(*tab);</p><p><b> tab++;</b></p
89、><p><b> }</b></p><p><b> }</b></p><p> void display2(uchar *tab)</p><p><b> {</b></p><p><b> uchar i;</b>
90、;</p><p> write_com(0x80+0x40);</p><p> for(i=0;i<16;i++)</p><p> {write_date(*tab);</p><p><b> tab++;</b></p><p><b> }</b>
91、</p><p><b> }</b></p><p><b> 四.語(yǔ)音提示設(shè)計(jì)</b></p><p> 使用獨(dú)立按鍵模式,將需要播放的錄音錄入ISD1760芯片內(nèi)部,再使用SPI程序控制方式將ISD1760芯片內(nèi)部的指定地址的錄音播放出來(lái)。</p><p> void Play(uch
92、ar num) //形參=1放1段,2放2段,3放3段,4放4段。16個(gè)地址是2秒。</p><p><b> {</b></p><p> if(num==0x01){StartAdr=0x001e;EndAdr=0x0028;}</p><p> else if(num==0x02){StartAdr=0x0029;End
93、Adr=0x0033;}</p><p> else if(num==0x03){StartAdr=0x0034;EndAdr=0x003c;}</p><p> else if(num==0x04){StartAdr=0x003d;EndAdr=0x0045;}</p><p> else if(num==0x05){StartAdr=0x0046;EndA
94、dr=0x004f;}</p><p> else if(num==0x06){StartAdr=0x0050;EndAdr=0x005b;}</p><p> else if(num==0x07){StartAdr=0x005f;EndAdr=0x006b;}</p><p> else if(num==0x08){StartAdr=0x006c;EndAd
95、r=0x0079;}</p><p> else if(num==0x09){StartAdr=0x007a;EndAdr=0x0087;}</p><p> else if(num==0x0a){StartAdr=0x0088;EndAdr=0x0095;}</p><p> else if(num==0x0b){StartAdr=0x0097;EndAdr
96、=0x00a2;}</p><p> else if(num==0x0c){StartAdr=0x00a3;EndAdr=0x00b1;}</p><p> else if(num==0x0d){StartAdr=0x00b2;EndAdr=0x00c0;}</p><p> else if(num==0x0e){StartAdr=0x00c5;EndAdr=
97、0x00d6;}</p><p> else if(num==0x0f){StartAdr=0x00d7;EndAdr=0x00e4;}</p><p> else if(num==0x10){StartAdr=0x00e7;EndAdr=0x00f6;}</p><p> else if(num==0x11){StartAdr=0x00f7;EndAdr=0
98、x0107;}</p><p> else if(num==0x12){StartAdr=0x0108;EndAdr=0x0120;}</p><p> else if(num==0x13){StartAdr=0x0123;EndAdr=0x0140;}</p><p> ISD_SendData(0x03);//RESET 復(fù)位</p><
99、;p> ISD_SendData(0x00);// </p><p><b> SS=1; </b></p><p> delay_ms(50);</p><p> ISD_SendData(0x01);//PU 上電</p><p> ISD_SendData(0x00); </p>&
100、lt;p><b> SS=1; </b></p><p> delay_ms(50);</p><p> ISD_SendData(0x65);//WR_APC1 </p><p> ISD_SendData(0xa8);//RD_REC_PTR 錄音寄存器 </p><p> ISD_SendDat
101、a(0x0C);</p><p><b> SS=1; </b></p><p> delay_ms(50);</p><p><b> statu=0;</b></p><p> while((statu&0x01)==0x00)</p><p><b
102、> {</b></p><p> ISD_SendData(0x05);//RD_STATUS 狀態(tài)寄存器</p><p> ISD_SendData(0x00); </p><p> statu=ISD_SendData(0x00);</p><p><b> SS=1; </b></
103、p><p><b> }</b></p><p> delay_ms(50);</p><p> ISD_SendData(0x80);//SETPLAY 從起始地址開(kāi)始播放到結(jié)束地址</p><p> ISD_SendData(0x00); </p><p> ISD_SendData(S
104、tartAdr&0x00ff); </p><p> ISD_SendData(StartAdr>>8); </p><p> ISD_SendData(EndAdr&0x00ff);</p><p> ISD_SendData(EndAdr>>8); </p><p> ISD_SendDa
105、ta(0x00); </p><p><b> SS=1;</b></p><p> ISD_SendData(0x05);//RD_STATUS 狀態(tài)寄存器</p><p> ISD_SendData(0x00); </p><p> statu=ISD_SendData(0x00);</p>&
106、lt;p><b> SS=1; </b></p><p> while((statu&0x04)==0x04)</p><p><b> {</b></p><p> ISD_SendData(0x05);//RD_STATUS 狀態(tài)寄存器</p><p> ISD_Send
107、Data(0x00); </p><p> statu=ISD_SendData(0x00);</p><p><b> SS=1; </b></p><p><b> } </b></p><p> ISD_SendData(0x07);//PD 掉電</p><
108、p> ISD_SendData(0x00); </p><p><b> SS=1; </b></p><p><b> }</b></p><p> //******************功 能: 發(fā)送數(shù)據(jù) 返回接收數(shù)據(jù) </p><p> uchar ISD_Send
109、Data(uchar BUF_ISD)</p><p><b> { </b></p><p> uchar i,dat=BUF_ISD; </p><p><b> SCLK=1; </b></p><p><b> SS=0; </b></p><
110、;p> for(i=0;i<8;i++)</p><p><b> { </b></p><p><b> SCLK=0; </b></p><p> I_delay(); </p><p> if(dat&0x01)</p><p><b
111、> { </b></p><p><b> MOSI=1; </b></p><p><b> } </b></p><p><b> else</b></p><p><b> { </b></p><p&
112、gt;<b> MOSI=0; </b></p><p><b> } </b></p><p><b> dat>>=1; </b></p><p><b> if(MISO)</b></p><p><b> { <
113、;/b></p><p> dat|=0x80; </p><p><b> } </b></p><p><b> SCLK=1; </b></p><p> I_delay(); </p><p><b> } </b></p&
114、gt;<p><b> MOSI=0; </b></p><p> return(dat); </p><p><b> } </b></p><p><b> 五.蜂鳴器發(fā)聲設(shè)計(jì)</b></p><p><b> 蜂鳴器的工作原理</b
115、></p><p> 蜂鳴器發(fā)聲原理是電流通過(guò)電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng)來(lái)驅(qū)動(dòng)振動(dòng)膜發(fā)聲的,因此需要一定的電流才能驅(qū)動(dòng)它,單片機(jī) IO 引腳輸出的電流較小,單片機(jī)輸出的 TTL 電平基本上驅(qū)動(dòng)不了蜂鳴器,因此需要增加一個(gè)電流放大的電路,一多半采取一個(gè)三極管來(lái)放大驅(qū)動(dòng)蜂鳴器。蜂鳴器的正極接到 Q1 的集電極 C 極上面,蜂鳴器的負(fù)極地,三極管發(fā)射極 E 極接電源 VCC,基極 B 經(jīng)過(guò)限流電阻 R33 后
116、由單片機(jī)的P3.1引腳控制,當(dāng)P3.1輸出高電平時(shí),三極管 T1 截止,沒(méi)有電流流過(guò)線圈,蜂鳴器不發(fā)聲;當(dāng)P3.1輸出低電平時(shí),三極管導(dǎo)通,這樣蜂鳴器的電流形成回路,發(fā)出聲音。因此,我們可以通過(guò)程序控制P3.1腳的電平來(lái)使蜂鳴器發(fā)出聲音和關(guān)閉聲音。程序中改變單片機(jī)P3.1引腳輸出波形的頻率,就可以調(diào)整控制蜂鳴器音調(diào),產(chǎn)生各種不同音色音調(diào)的聲音,另外改變P3.1輸出電平的高低電平占空比則可以控制蜂鳴器的聲音大小。</p>&
117、lt;p> 蜂鳴器簡(jiǎn)單發(fā)聲程序:</p><p> void beep_( uint frq,uint time)</p><p><b> {</b></p><p> uint tt1,tt2;</p><p> for(tt1=time;tt1>0;tt1--)</p><
118、p> { beep=0;</p><p> for(tt2=frq;tt2>0;tt2--); </p><p><b> beep=1;</b></p><p> for(tt2=frq;tt2>0;tt2--);</p><p><b> }<
119、/b></p><p><b> }</b></p><p><b> 蜂鳴器播放歌曲</b></p><p> 首先,蜂鳴器按其結(jié)構(gòu)可分為兩種蜂鳴器:壓電式、電磁式。有源蜂鳴器內(nèi)部帶振蕩源,無(wú)源蜂鳴器內(nèi)部不帶振蕩源。這里所說(shuō)的“源”不是指“電源”,而是指“振蕩源”。 有源蜂鳴器直接接上額定電源就可連續(xù)發(fā)聲;而
120、無(wú)源的需要在其供電端上加上高低不斷變化的電信號(hào)才可以驅(qū)動(dòng)發(fā)出聲音。對(duì)于無(wú)源的我們可以先讓 BUZZ=1 接著延時(shí)一小段時(shí)間,在又關(guān)閉 BUZZ(即 BUZZ=0);這樣才能聽(tīng)到連續(xù)變化的聲音。</p><p> 蜂鳴器播放歌曲程序:</p><p> unsigned char timer0h, timer0l, time;</p><p> //------
121、--------------------------------</p><p> //單片機(jī)晶振采用12MHz</p><p> //頻率-半周期數(shù)據(jù)表 高八位 本軟件共保存了四個(gè)八度的28個(gè)頻率數(shù)據(jù)</p><p> code unsigned char FREQH[] = {</p><p> 0xF2, 0xF3, 0
122、xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音1234567</p><p> 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i</p><p> 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音 234567</p&
123、gt;<p> 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音 1234567</p><p> //頻率-半周期數(shù)據(jù)表 低八位</p><p> code unsigned char FREQL[] = {</p><p> 0x42, 0xC1, 0x17, 0xB6, 0xD0,
124、0xD1, 0xB6, //低音1234567</p><p> 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F,//1,2,3,4,5,6,7,i</p><p> 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音 234567</p><p> 0
125、x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音 1234567</p><p> //--------------------------------------</p><p> //世上只有媽媽好 數(shù)據(jù)表 要想演奏不同的樂(lè)曲, 只需要修改這個(gè)數(shù)據(jù)表</p><p> code
126、unsigned char sszymmh5[] = {</p><p> 6, 2, 3, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1, 6, 2, 4, </p><p> 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1, 6, 1, 1
127、, 5, 2, 1, 3, 2, 1, 2, 2, 4, </p><p> 2, 2, 3, 3, 2, 1, 5, 2, 2, 5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4,</p><p> 5, 2, 3, 3, 2, 1, 2, 2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5,
128、1, 6, </p><p> 0, 0, 0}; </p><p> //--------------------------------------</p><p> //可惜不是你 數(shù)據(jù)表</p><p> code unsigned char sszymmh1[] = {</p><p> 6,
129、2,1, 5,3,1, 3,3,1, 1,3,1, 2,3,1, 2,3,4,</p><p> 5,2,1, 5,3,1, 3,3,1, 5,2,1, 1,3,1, 1,3,4,</p><p> 6,2,1, 5,3,1, 3,3,1, 1,3,1, 7,2,2, 7,2,1, 1,3,1, 2,3,1,</p><p> 4,3,3, 3,3,1, 3,
130、3,1, 3,3,4,</p><p> 0, 0, 0}; </p><p> //--------------------------------------</p><p> //北京歡迎你 數(shù)據(jù)表</p><p> code unsigned char sszymmh2[] = {</p><p&g
131、t; 3,2,2, 5,2,2, 1,3,1, 5,2,1, 6,2,2, </p><p> 6,2,1, 5,2,1, 3,2,1, 3,2,1, 5,2,1, 5,2,4, </p><p> 3,2,1, 5,2,1, 6,2,1, 1,3,1, 2,3,1, 1,3,1, 5,2,1, 3,2,1, 2,2,1, 5,2,1, 3,2,1, 3,2,1, 3,2,2,<
132、;/p><p> 0, 0, 0}; </p><p> //--------------------------------------</p><p> //送別 數(shù)據(jù)表</p><p> code unsigned char sszymmh3[] = {</p><p> 5,2,2, 3,2,1,
133、 5,2,1, 1,3,4, </p><p> 6,2,2, 1,3,1, 6,2,1, 5,2,4,</p><p> 5,2,2, 1,2,1, 2,2,1, 3,2,2,</p><p> 2,2,1, 1,2,1, 2,2,4,</p><p><b> 0,0,0}; </b></p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于c51的密碼鎖和電子時(shí)鐘
- 基于89c51電子密碼鎖設(shè)計(jì)程序
- 基于c51單片機(jī)的電子密碼鎖課程設(shè)計(jì)
- 基于c51單片機(jī)的電子密碼鎖課程設(shè)計(jì)
- 基于c51單片機(jī)的電子密碼鎖課程設(shè)計(jì)
- 基于51單片機(jī)的多功能電子密碼鎖
- 基于51單片機(jī)的多功能電子密碼鎖
- 基于c51單片機(jī)的電子密碼鎖課程設(shè)計(jì) 2
- 基于89c51電子密碼鎖設(shè)計(jì)
- 基于c51單片機(jī)的電子密碼鎖課程設(shè)計(jì) 2
- 基于89c51電子密碼鎖設(shè)計(jì)設(shè)計(jì)
- 基于89c51的電子密碼鎖設(shè)計(jì)
- 基于89c51電子密碼鎖設(shè)計(jì)報(bào)告
- 多功能電子密碼鎖設(shè)計(jì)【文獻(xiàn)綜述】
- 基于at89s51的多功能電子密碼鎖設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
- 基于89c51電子密碼鎖設(shè)計(jì)課程設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---多功能電子密碼鎖設(shè)計(jì)報(bào)告
- 多功能密碼鎖設(shè)計(jì)開(kāi)題報(bào)告
- 多功能密碼鎖課程設(shè)計(jì)
- 多功能密碼鎖課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論