




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1 緒論單片機一詞最初是源于singlechipmicrocomputer”,簡稱scm。在單片機誕生時,scm是一個準確、流行的稱謂,“單片機”一詞準確地表達了這概念。隨著scm在技術(shù)上、體系結(jié)構(gòu)上不斷擴展其控制功能,單片機已不能用“單片微型計算機”來準確表達其內(nèi)涵。國際上逐漸采用mcu(microcontrollerunit”)來代替,形成了單片機界公認的、最終統(tǒng)一的名詞。在國內(nèi)因為“單片機”一詞已約定俗成,故而繼續(xù)沿用。單片機是將中央處理器cpu、存儲器和i/o接口電路等主要功能部件集成在一塊集成電路芯片上的微型計算機,但由于工藝和其它方面的原因,很多功能部件并未集成在單片機芯片內(nèi)部。于
2、是,用戶通常的做法是根據(jù)系統(tǒng)設(shè)計的需要在外圍擴展功能芯片。如今的市場上為我們提供了豐富多彩的單片機產(chǎn)品。從宏觀上講,有risc和cisc兩大類型;從微觀上說,有intel、motorola、philips、microchip、emc、nec等公司的相關(guān)產(chǎn)品。在未來相當長的時間內(nèi),都將維持這種群雄并起、共性與個性共存的局面。但是,以80c51為代表的單片機的基礎(chǔ)地位不會動搖。這是因為80c51的架構(gòu)和指令系統(tǒng)為后來的單片機提供了參考基準和強大支持,凡是學(xué)過80c51單片機的人再去學(xué)用其它類型的單片機易如反掌,借梯子爬坡何樂而不為呢?因此,通過這次課程設(shè)計,以80c51芯片為核心實現(xiàn)密碼鎖功能,學(xué)
3、習(xí)單片機最小系統(tǒng)的原理以及用c語言編程,為以后的學(xué)習(xí)打下基礎(chǔ)。隨著集成電路技術(shù)的快速發(fā)展和“以人為本”思想在單片機設(shè)計上的體現(xiàn),很多單片機生產(chǎn)廠家充分考慮到用戶的需求,將一些常用的功能部件,如a/d(模/數(shù)轉(zhuǎn)換器)、d/a(數(shù)/模轉(zhuǎn)換器)、pwm(脈沖產(chǎn)生器)以及l(fā)cd(液晶)驅(qū)動器等集成到芯片內(nèi)部,盡量做到單片化;同時,用戶還可以提出要求,由廠家量身定作(soc設(shè)計)或自行設(shè)計。2 設(shè)計內(nèi)容及要求2.1設(shè)計的目的及主要任務(wù)2.1.1設(shè)計的目的學(xué)會單片機的工作原理以及根據(jù)實際要求進行外圍擴展實現(xiàn)電子密碼鎖功能。根據(jù)實際要求學(xué)會畫程序流程圖,然后用c語言編程,并了解在keil c51 uvisi
4、on3 集成開發(fā)環(huán)境下運行程序和燒錄程序。 2.1.2 設(shè)計任務(wù)及主要技術(shù)指標 其密碼為方4位(或8位)二進制代碼(代碼自設(shè)定)。 開鎖指令為串行輸入碼,當開鎖密碼與存儲密碼一致時,鎖被打開。當開鎖密碼與存儲密碼不一致時,可重復(fù)進行,若連續(xù)三次未將鎖打開,電路則報警并實現(xiàn)自鎖。(報警動作為響1分鐘,停10秒)運用專業(yè)單片機仿真軟件proteus 7.12的仿真功能對所設(shè)計的數(shù)字電子密碼鎖的各個模塊及頂層電路的功能進行仿真分析。將所設(shè)計的整個系統(tǒng)寫入單片機系統(tǒng)中,加上需要的外圍電路實現(xiàn)整個系統(tǒng)的硬件搭建。2.2設(shè)計思想本次設(shè)計首先在keil c51集成開發(fā)環(huán)境中對單片機最小系統(tǒng)的各個部分利用c語
5、言予以設(shè)計,生成模塊,分別有控制模塊,矩陣鍵盤模塊,數(shù)碼管顯示模塊;外圍電路有掉電存儲模塊和開鎖電路模塊。隨后運用單片機仿真軟件proteus 7.12的仿真功能對其予以仿真,從仿真的結(jié)果中分析程序的正確性。待所有模塊的功能正確之后,運用原理圖搭建頂層電路并進行整體仿真直至達到最初的設(shè)計要求,最后在焊制的電路板上運行驗證其正確性。3 方案論證與比較3.1 方案一:方案一采用數(shù)字電路控制,其原理方框圖如圖3-1所示圖3-1數(shù)字密碼鎖電路框圖采用數(shù)字密碼鎖電路的好處就是設(shè)計簡單。用以74ls112雙jk觸發(fā)器構(gòu)成的數(shù)字邏輯電路作為密碼鎖的核心控制,共設(shè)了9個用戶輸入鍵,其中只有4個是有效的密碼按鍵
6、,其它的都是干擾按鍵,若按下干擾鍵,鍵盤輸入電路自動清零,原先輸入的密碼無效,需要重新輸入;如果用戶輸入密碼的時間超過40秒(一般情況下,用戶不會超過40秒,若用戶覺得不便,還可以修改)電路將報警80秒,若電路連續(xù)報警三次,電路將鎖定鍵盤5分鐘,防止他人的非法操作。電路由兩大部分組成:密碼鎖電路和備用電源(ups),其中設(shè)置ups電源是為了防止因為停電造成的密碼鎖電路失效,使用戶免遭麻煩。密碼鎖電路包含:鍵盤輸入、密碼修改、密碼檢測、開鎖電路、執(zhí)行電路、報警電路、鍵盤輸入次數(shù)鎖定電路。3.2 方案二:方案二是用以at89s51為核心的單片機控制方案。利用單片機靈活的編程設(shè)計和豐富的io端口,及
7、其控制的準確性,不但能實現(xiàn)基本的密碼鎖功能,還能添加調(diào)電存儲、聲光提示甚至添加遙控控制功能。其原理如圖3-2所示89s51單片機矩陣鍵盤控制輸入錯誤鎖定鍵盤延時報警控制電路at24c02掉電存儲開鎖控制電路指示電路串口顯示電路圖3-2單片機控制方案通過比較以上兩種方案,單片機方案有較大的活動空間,不但能實現(xiàn)所要求的功能而且能在很大的程度上擴展功能,而且還可以方便的對系統(tǒng)進行升級,所以我們采用后一種方案。4單元模塊設(shè)計4.1開鎖電路模塊通過單片機送給開鎖執(zhí)行機構(gòu),電路驅(qū)動電磁鎖吸合,從而達到開鎖的目的。其原理如圖4-1-1所示。單片機微控制器開鎖驅(qū)動電路電磁鎖密碼正確?y返回n圖4-1-1密碼鎖
8、開鎖機構(gòu)示意圖當用戶輸入的密碼正確的話,單片機便輸出開門信號,送到開鎖驅(qū)動電路,然后驅(qū)動電磁鎖,達到開門的目的。其實際電路如圖4-2-2所示。圖4-2-2密碼鎖開鎖機構(gòu)示意圖電路驅(qū)動和開鎖兩級組成。由d5、r1、t10組成驅(qū)動電路,其中t10可以選擇普通的小功率三極管如9014、9018都可以滿足要求。d5作為開鎖的提示;由d6、c24、t11組成。其中d6、c24是為了消除電磁鎖可能產(chǎn)生的反向高電壓以及可能產(chǎn)生的電磁干擾。t11可選用中功率的三極管如8050,電磁鎖的選用要視情況而定,但是吸合力要足夠且由一定的余量。在本次設(shè)計中,基于節(jié)省材料的原則,暫時用發(fā)光二極管代替電磁鎖,發(fā)光管亮,表示
9、開鎖;滅,表示沒有開鎖。4.2 矩陣鍵盤模塊由于設(shè)計要求使用矩陣鍵盤,所以本設(shè)計就采用行列式鍵盤,同時也能減少鍵盤與單片機接口是所占用的i/o線數(shù)目,在按鍵比較多的時候,通常采用這樣方法。其原理如圖4-2-1所示。89s51d0d1d2d3d4d5d6d7d8d9d105.1k x 45.1k x 4vcc圖4-2-1行列式鍵盤原理電路圖每一條水平(行線)與垂直線(列線)的交叉處不相通,而是通過一個按鍵來連通,利用這種行列式矩陣結(jié)構(gòu)只需要n條行線和m條列線,即可組成具有nm個按鍵的鍵盤。在這種行列式矩陣鍵盤非鍵盤編碼的單片機系統(tǒng)中,鍵盤處理程序首先執(zhí)行等待按鍵并確認有無按鍵按下的程序段。當確認
10、有按鍵按下后,下一步就要識別哪一個按鍵按下。對鍵的識別通常有兩種方法:一種是常用的逐行掃描查詢法;另一種是速度較快的線反轉(zhuǎn)法。對照圖4-2-1所示的44矩陣鍵盤,說明線反轉(zhuǎn)個工作原理。首先辨別鍵盤中有無鍵按下,有單片機i/o口向鍵盤送全掃描字,然后讀入行線狀態(tài)來判斷。方法是:向行線輸出全掃描字00h,把全部列線置為低電平,然后將列線的電平狀態(tài)讀入累加器a中。如果有按鍵按下,總會有一根行線電平被拉至低電平從而使行線不全為1。判斷鍵盤中哪一個鍵被按下使通過將列線逐列置低電平后,檢查行輸入狀態(tài)來實現(xiàn)的。方法是:依次給列線送低電平,然后查所有行線狀態(tài),如果全為1,則所按下的鍵不在此列;如果不全為1,則
11、所按下的鍵必在此列,而且是在與零電平行線相交的交點上的那個鍵。4.3數(shù)碼管顯示模塊在所設(shè)計電路中,指示電路選用數(shù)碼管動態(tài)掃描電路。它是把所有顯示器的8個筆畫段a到h的各同名段端互相并接在一起,并用它們接到字段輸出口上。為了防止各顯示器同時顯示相同的數(shù)字,各顯示器的公共端com還要受到另一組信號控制,即把它們接到位輸出口上。這樣,對于一組led數(shù)碼顯示器,需要由兩組信號來控制:一組是字段輸出口輸出的字形代碼,用來控制顯示的字形;另一組是位輸出口輸出的控制信號,用來選擇第幾位顯示器工作。圖4-3-1是其動態(tài)顯示示意圖。圖4-3-1 led動態(tài)顯示示意圖4.4掉電存儲模塊掉電存儲單元的作用是在電源斷
12、開的時候,存儲當前設(shè)定的信息。at24c02是atmel公司的2kb字節(jié)的電可擦除存儲芯片,采用兩線串行的總線和單片機通訊,電壓最低可以到2.5v,額定電流為1ma,靜態(tài)電流10ua(5.5v),芯片內(nèi)的資料可以在斷電的情況下保存40年以上,而且采用8腳的dip封裝,使用方便。其電路如圖4-4-1所示。 圖4-4-1掉電存儲電路原理圖圖中r8、r10是上拉電阻,其作用是減少at24c02的靜態(tài)功耗,由于at24c02的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線scl(移位脈沖)和sda(數(shù)據(jù)/地址)與單片機傳送數(shù)據(jù)。每當設(shè)定一次初次密碼,系統(tǒng)就自動調(diào)用存儲程序,將該信息保存
13、在芯片內(nèi);當系統(tǒng)重新上電的時候,自動調(diào)用讀存儲器程序,將存儲器內(nèi)的存儲信息,讀到緩存單元中,供主程序使用。5 程序設(shè)計5.1模塊介紹 主程序模塊: 主程序主要完成初始化、設(shè)置中斷向量、檢查有無按鍵按下、以及調(diào)用顯示等等。 鍵盤掃描及識別子程序:鍵盤采用查詢的方式,放在主程序中,當沒有按鍵按下的時候,單片機循環(huán)主程序,一旦有按鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。掉電存儲程序:當比較密碼的時候,需要讀at24c02程序,將存儲在芯片內(nèi)的數(shù)據(jù)讀到ram中,然后和輸入的密碼相比較。當修改密碼的時候,需要把輸入的密碼保存到at24c02。顯示子程序:由于是分屏顯示數(shù)據(jù),所以就要用到5個顯示子
14、程序,分別是:關(guān)閉狀態(tài)顯示子程序(dis_a)、開鎖狀態(tài)顯示子程序(dis_b)、密碼輸入及修改狀態(tài)顯示子程序(dis_c)、密碼輸入錯誤后的提示子程序(dis_d)。密碼在規(guī)定的時間內(nèi)輸入錯誤次數(shù)超過3次后的鎖定狀態(tài)顯示子程序(dis_e).5.2程序流程圖以及程序5.1.1程序流程圖程序流程圖如圖5-1-1所示。開始初始化有鍵按下?調(diào)用顯示啟動定時識別按鍵全部按完?超時?比較密碼開門開始自動清除3次?鎖定nnyyyynn修改密碼啟動定時輸入密碼存入緩沖再輸入一次比較密碼調(diào)用24c02調(diào)用顯示完畢y重新輸入n主程序流程圖修改密碼流程圖圖5-1-1 程序流程圖5.1.2 程序書寫 /晶振11.
15、0592mhz,t1每250微秒中斷,按鍵p1.0-p1.7,發(fā)光二極管接p3.0-p3.3,p3.7接蜂鳴器/*變量的定義: show_val6: 顯示的值 init_val6: 密碼初始值 key_val: 返回按鍵的值 255-表示無按鍵按下 key_index: 當前按鍵是哪一位密碼 t1_cnt: 定時器計數(shù)溢出數(shù) cnt_val_15s: 報警計時的數(shù)值 cnt_val_5s: 待機時間計時 cnt_val_4s: 輸入正確,等待4秒清除開鎖信號 cnt_state: 計時狀態(tài) error_num: 錯誤次數(shù)led_seg_code:數(shù)碼管7段碼*/#include reg52.h
16、/*說明 key0=p10; key1=p11;key2=p12; key3=p13;key4=p14;key5= p15;key6= p16; key7= p17sbit relay_open=p30; /電磁鎖開鎖驅(qū)動sbit pw_error=p31; /密碼錯誤信號sbit alarm_out=p32; /報警輸出sbit open_lock=p33; /已開鎖指示信號sbit audio_out=p37; /有源蜂鳴器unsigned char data cnt_val_15s,cnt_val_5s,cnt_val_4s,cnt_state;unsigned int data t1_
17、cnt;unsigned char data key_val,key_index,key_val_old;unsigned char data state_val,error_num;unsigned char data show_val6;char code init_val6=1,2,3,4,5,0;/char code led_seg_code11=0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;char code led_seg_code11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8
18、,0x80,0x90,0x88;/led_seg_code0-9代表0-9 led_seg_code10=0x00數(shù)碼管不顯示任何內(nèi)容/-延時程序-void delay(unsigned int i)/延時 while(-i); /-清除輸入內(nèi)容-void init_variant()unsigned char i; for(i=0;i3999) /如果計數(shù)3999, 計時1s t1_cnt=0; switch (cnt_state) case 0: /待機,需要計時5s if(cnt_val_5s5) cnt_val_5s+; else cnt_val_5s=0; init_variant(
19、);/待機計時到5秒時,清除輸入的內(nèi)容 tr1=0; /停止計時 break; case 1:/密碼輸入正確,需要計時4s if(cnt_val_4s4) cnt_val_4s+; else cnt_val_4s=0; init_variant();/密碼輸入正確,計時到4秒時,清除輸入的內(nèi)容 open_lock=1; /已開鎖信號清零 relay_open=1; /開鎖信號清零 cnt_state=0; tr1=0; /停止計時 break; case 2: /密碼輸入錯誤3次,計時15s if(cnt_val_15s15) cnt_val_15s+; else cnt_val_15s=0;
20、 init_variant();/三次密碼錯誤時,計時15秒,清除輸入的內(nèi)容 open_lock=1; / 清除所有指示和報警 relay_open=1; alarm_out=1; pw_error=1; cnt_state=0; tr1=0; /停止計時 break; /-判斷鍵盤輸入內(nèi)容與密碼是否一致-unsigned char check_input_pw() unsigned char i,k; k=1; for(i=0;i x=19 tl1=0x19; ea=1; /開中斷 et1=1; tr1=0; /開定時器t1 while(1) key_val=scan_key(); /按鍵輸
21、入,有鍵按下key_val為0-7,無鍵按下key_val為255。 if (key_val!=key_val_old) key_val_old=key_val; if (key_val!=255& cnt_state!=2) audio_out=0; delay(100); /延時去抖動 audio_out=1; switch (key_val) case 0: case 1: case 2: case 3: case 4: case 5: if(key_index6) /密碼為6位,超過6位視為輸入無效 show_valkey_index=key_val; key_index+; brea
22、k; case 6: /確認鍵 if(check_input_pw() /密碼正確 error_num=0; /密碼輸入錯誤次數(shù)清零 /- pw_error=1; /密碼錯誤指示燈滅 relay_open=0; /開鎖驅(qū)動信號燈亮 open_lock=0; /已開鎖信號燈亮 /- delay(50000); /兩聲短滴聲 audio_out=0; delay(50000); audio_out=1; delay(50000); audio_out=0; delay(50000); audio_out=1; /- cnt_state=1; /下一狀態(tài)處于4秒計時的狀態(tài) tr0=1; /啟動定時
23、else if (error_num2) error_num+; /輸入錯誤次數(shù)小于3次時,設(shè)錯一次error_num增一 pw_error=0; /密碼錯誤指示燈亮 /- delay(20000);/一聲長滴聲,提示錯誤 audio_out=0; delay(60000); audio_out=1; /- init_variant();/清除所有輸入,等待下一次輸入 else /輸入錯誤次數(shù)超過3次 alarm_out=0; /報警燈亮 pw_error=0; /密碼錯誤指示燈亮 error_num=0; /密碼輸入錯誤次數(shù)清零 /- audio_out=0; /長鳴聲報警 delay(60
24、000); delay(60000); delay(60000); delay(60000); delay(60000); delay(60000); delay(60000); delay(60000); delay(60000); audio_out=1; /- tr1=1; /打開定時器計時 cnt_state=2; /下一狀態(tài)處于15秒計時的狀態(tài) break; case 7:/取消鍵 init_variant(); break; led_show();/-程序結(jié)束-6 電路仿真分析由于驗證方法手段不斷改進和提高,對于一個系統(tǒng)的設(shè)計,提倡用軟件、硬件協(xié)同驗證方法,加速仿真過程。程序編寫完
25、畢,運用專業(yè)單片機仿真軟件proteus 7.12的仿真功能對所設(shè)計的數(shù)字電子密碼鎖進行仿真,進而確認設(shè)計電路與程序的正確性。圖6-1 數(shù)字密碼鎖仿真圖如圖6.1為密碼鎖工作狀態(tài)仿真。 7 硬件調(diào)試仿真結(jié)果正確后,就可將文件下載到芯片中。連接硬件系統(tǒng)后,通上電源,觀察驗證所焊制的電路板能否達到預(yù)期的要求,主要需要觀察led數(shù)碼管顯示是否準確穩(wěn)定,并且是否能被鍵盤準確控制,以及輸入密碼正確開鎖、輸入錯誤報警是否能正確實現(xiàn)。硬件電路調(diào)試是否能成功除了取決于編寫的程序之外,與外圍電路的焊制也有很大的關(guān)系,因為外圍電路的焊制良好性決定了整個電路最后運行的穩(wěn)定性以及準確性,如數(shù)碼管顯示是否穩(wěn)定等現(xiàn)象,很大程度取決于硬件電路。實驗測試表明,整個電路能很好的實現(xiàn)數(shù)字密碼鎖的功能,led數(shù)碼管能夠很好顯示所輸入的密碼,開鎖以及報警也能準確的實現(xiàn),初始密碼為1234,輸完后按確定鍵開鎖,取消鍵清除所有輸入。密碼輸入正確后,輸出一個電磁鎖開鎖信號與已開鎖信號,并發(fā)出兩聲短“滴”聲提示。4秒后開鎖信號與已開鎖指示清零。密碼輸入錯誤時,發(fā)出一聲長“滴”聲錯誤指示提示音,并密碼錯誤指
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 京派建筑設(shè)計特色與發(fā)展
- 迪安診斷宮頸癌精準篩查解決方案
- 顧客轉(zhuǎn)介紹課件
- 順產(chǎn)產(chǎn)婦護理
- 音標課件軟件工程筆記
- 水肌酸產(chǎn)品項目經(jīng)濟效益和社會效益分析報告(范文參考)
- 電網(wǎng)側(cè)獨立儲能示范項目建設(shè)管理方案(模板范文)
- 2025年玻璃纖維網(wǎng)墊項目建議書
- 2025年壓電陶瓷元件項目建議書
- 電網(wǎng)側(cè)獨立儲能示范項目初步設(shè)計
- 弘揚教育家精神做新時代大學(xué)教師
- 2026年高考政治一輪復(fù)習(xí):高考政治命題備考策略
- 2024年湖南省辰溪縣檔案局公開招聘試題帶答案
- 鋰離子電池安全性能優(yōu)化:針刺實驗與失效機制分析
- 2025至2030年中國森林消防車行業(yè)市場全景評估及未來趨勢研判報告
- 2025生產(chǎn)與運作管理試題及答案
- 暑假的一次冒險經(jīng)歷記事作文4篇范文
- 入職預(yù)支薪資協(xié)議書
- 《中國特色社會主義理論體系的形成和發(fā)展》(課件)
- 職業(yè)技術(shù)學(xué)院嬰幼兒托育服務(wù)與管理專業(yè)人才培養(yǎng)方案
- 2025臺州市椒江區(qū)輔警考試試卷真題
評論
0/150
提交評論