亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 基于單片機(jī)和C語(yǔ)言的電子密碼鎖課程設(shè)計(jì)論文下載 [打印本頁(yè)]

作者: acdl978721    時(shí)間: 2017-6-13 18:10
標(biāo)題: 基于單片機(jī)和C語(yǔ)言的電子密碼鎖課程設(shè)計(jì)論文下載
摘 要

電子密碼鎖是一種通過(guò)密碼輸入來(lái)控制電路或是芯片工作,從而控制機(jī)械開關(guān)的閉合,完成開鎖、閉鎖任務(wù)的電子產(chǎn)品。它的種類很多,有簡(jiǎn)易的電路產(chǎn)品,也有基于芯片的性價(jià)比較高的產(chǎn)品。現(xiàn)在應(yīng)用較廣的電子密碼鎖是以芯片為核心,通過(guò)編程來(lái)實(shí)現(xiàn)的。

本文以STC89C52單片機(jī)為核心器件,結(jié)合按鍵電路、LED數(shù)碼管顯示電路、報(bào)警指示電路和開鎖機(jī)構(gòu),利用單片機(jī)靈活的編程設(shè)計(jì)和豐富的I/O端口,及其控制的準(zhǔn)確性通過(guò)軟件程序來(lái)控制整個(gè)系統(tǒng)實(shí)現(xiàn)電子密碼鎖的基本功能,其主要具有如下功能:

●密碼通過(guò)鍵盤輸入,若密碼正確,則將鎖打開

●密碼輸入錯(cuò)誤,蜂鳴器將報(bào)警提示

●用戶可以自由設(shè)定密碼

本密碼鎖具有設(shè)計(jì)方法合理,簡(jiǎn)單易行成本低,安全實(shí)用等特點(diǎn),具有一定的推廣價(jià)值。


1 緒 論
隨著人們生活水平的提高, 日常生活和工作中的住宅與部門的安全防范、單位的文件檔案、財(cái)務(wù)報(bào)表以及一些個(gè)人資料的保存等一系列安全防盜問(wèn)題變的尤其突出。傳統(tǒng)的機(jī)械鎖由于其構(gòu)造的簡(jiǎn)單,被撬的事件屢見不鮮,且人們常需攜帶多把鑰匙, 使用極不方便, 一旦鑰匙丟失安全性即大打折扣。隨著科學(xué)技術(shù)的不斷發(fā)展,人們對(duì)日常生活中的安全保險(xiǎn)器件的要求越來(lái)越高。為滿足人們對(duì)鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應(yīng)運(yùn)而生。密碼鎖因具有安全性高、成本低、功耗低、易操作等優(yōu)點(diǎn),受到了廣大用戶的青睞。
現(xiàn)今常見的密碼鎖設(shè)計(jì)主要有兩種方案,一種是中規(guī)模集成電路控制的方案,另一種是單片機(jī)控制的方案。對(duì)于采用集成電路控制的方案,其中的編碼電子鎖電路分為編碼電路、控制電路、復(fù)位電路、解碼電路、防盜報(bào)警電路、門鈴電路,而電子鎖主要由輸入元件、電路(包括電源)以及鎖體三部分組成。顯然此種方案的物理實(shí)現(xiàn)結(jié)構(gòu)較為復(fù)雜且重新設(shè)置密碼、輸入密碼的操作過(guò)程也會(huì)給用戶帶來(lái)一定的不方便;而利用單片機(jī)控制的方案,由于單片機(jī)靈活的編程設(shè)計(jì)和豐富的I/O端口,及其控制的準(zhǔn)確性,不但能實(shí)現(xiàn)基本的密碼鎖功能,還能添加掉電存儲(chǔ)、聲光提示甚至添加遙控控制功能,但其也有一定的局限性,就在于其控制原理的復(fù)雜以及要求設(shè)計(jì)人員具有更加良好的程序設(shè)計(jì)能力,調(diào)試較為繁瑣,否則程序一旦跑飛將造成意想不到的損失。通過(guò)對(duì)這兩種方案的優(yōu)缺點(diǎn)比較,再考慮到本人自己對(duì)單片機(jī)設(shè)計(jì)具有一定的基礎(chǔ),所以此次選擇利用單片機(jī)來(lái)進(jìn)行密碼鎖的設(shè)計(jì)。
本文以STC89C52單片機(jī)為核心器件,結(jié)合按鍵電路、LED數(shù)碼管顯示電路、報(bào)警指示電路和開鎖機(jī)構(gòu),利用單片機(jī)靈活的編程設(shè)計(jì)和豐富的I/O端口,及其控制的準(zhǔn)確性通過(guò)軟件程序來(lái)控制整個(gè)系統(tǒng)實(shí)現(xiàn)電子密碼鎖的基本功能。系統(tǒng)能實(shí)現(xiàn)如下的功能:
(1)密碼通過(guò)鍵盤輸入,若密碼正確,則將鎖打開
(2)密碼輸入錯(cuò)誤,蜂鳴器將報(bào)警提示
(3)用戶可以自由設(shè)定密碼
系統(tǒng)功能實(shí)用,成本低廉,具有一定的實(shí)用價(jià)值。

2 系統(tǒng)的總體設(shè)計(jì)和主要元器件介紹
2.1設(shè)計(jì)要求
  •        以STC89C52單片機(jī)為核心器件,結(jié)合按鍵電路、LED數(shù)碼管顯示電路、報(bào)警指示電路和開鎖機(jī)構(gòu),利用單片機(jī)靈活的編程設(shè)計(jì)和豐富的I/O端口,及其控制的準(zhǔn)確性通過(guò)軟件程序來(lái)控制整個(gè)系統(tǒng)實(shí)現(xiàn)電子密碼鎖的以下基本功能:
  •        1)輸入密碼時(shí)不顯示所輸入的數(shù)字,有一定的防偷窺特點(diǎn)
  •        2)密碼通過(guò)鍵盤輸入,若密碼正確,則顯示燈發(fā)光,將鎖打開
  •        3)密碼輸入錯(cuò)誤,蜂鳴器將報(bào)警提示
  •        4)用戶可以自由設(shè)定密碼
  •        本密碼鎖具有設(shè)計(jì)方法合理,簡(jiǎn)單易行成本低,安全實(shí)用等特點(diǎn),具有一定的推廣價(jià)值。


2.2系統(tǒng)的總體思路設(shè)計(jì)

以STC89C52單片機(jī)為主控制單元,鍵盤為主要輸入單元,結(jié)合開鎖裝置、報(bào)警器和顯示器完成整個(gè)系統(tǒng)設(shè)計(jì)。

系統(tǒng)的運(yùn)行過(guò)程大致如下:
假設(shè)初始狀態(tài)為閉鎖,此時(shí)整個(gè)系統(tǒng)只等待按鍵輸入,數(shù)碼管也不顯示。每按下一個(gè)數(shù)據(jù)鍵(即每輸入一個(gè)密碼),數(shù)碼管相應(yīng)的顯示一個(gè)“-”標(biāo)志,當(dāng)密碼全部輸入完成后,需按下確認(rèn)鍵“#”,此時(shí)系統(tǒng)判斷密碼是否正確,正確則開鎖(仿真中以繼電器動(dòng)作導(dǎo)致發(fā)光二級(jí)管點(diǎn)亮為標(biāo)志),錯(cuò)誤則報(bào)警,此后數(shù)碼管熄滅繼續(xù)等待按鍵;若按下密碼重置鍵“*”,則需先輸入原密碼,正確后請(qǐng)輸入新密碼,輸入密碼過(guò)程中,數(shù)碼管顯示如上“-”。

2.3主要元器件介紹
2.3.1 STC89C52介紹


           STC89C52引腳圖
本次畢業(yè)設(shè)計(jì)選用的是STC89C52,STC89C52是一種帶4K字節(jié)FLASH存儲(chǔ)器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的STC89C52是一種高效微控制器。STC89C52單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。
AT89C51主要特性:
  • 與MCS-51 兼容
  • 4K字節(jié)可編程FLASH存儲(chǔ)器
  • 壽命:1000寫/擦循環(huán)
4. 數(shù)據(jù)保留時(shí)間:10年
5. 全靜態(tài)工作:0Hz-24MHz
6. 三級(jí)程序存儲(chǔ)器鎖定
7. 128×8位內(nèi)部RAM
8.32可編程I/O線
9. 兩個(gè)16位定時(shí)器/計(jì)數(shù)器
10.5個(gè)中斷源
11.可編程串行通道
12. 低功耗的閑置和掉電模式
13. 片內(nèi)振蕩器和時(shí)鐘電路

STC89C52單片機(jī)引腳:
VCC:供電電壓。
  GND:接地。
  P0口:P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P0口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的低八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須接上拉電阻。
  P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為低八位地址接收。
  P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。
  P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
  P3口也可作為STC89C52的一些特殊功能口,如下表所示:
  口管腳 備選功能
  P3.0 RXD(串行輸入口)
  P3.1 TXD(串行輸出口)
  P3.2 /INT0(外部中斷0)
  P3.3 /INT1(外部中斷1)
  P3.4 T0(記時(shí)器0外部輸入)
  P3.5 T1(記時(shí)器1外部輸入)
  P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)
  P3.7 /RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)
  P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。
  RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。
  ALE/PROG:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無(wú)效。
  /PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。
  /EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
  XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。
  XTAL2:來(lái)自反向振蕩器的輸出。

振蕩器特性:
XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過(guò)一個(gè)二分頻觸發(fā)器,因此對(duì)外部時(shí)鐘信號(hào)的脈寬無(wú)任何要求,但必須保證脈沖的高低電平要求的寬度。
2.3.2 繼電器介紹
繼電器是一種電控制器件。它具有控制系統(tǒng)(又稱輸入回路)和被控制系統(tǒng)(又稱輸出回路)之間的互動(dòng)關(guān)系。通常應(yīng)用于自動(dòng)化的控制電路中,它實(shí)際上是用小電流去控制大電流運(yùn)作的一種“自動(dòng)開關(guān)”。故在電路中起著自動(dòng)調(diào)節(jié)、安全保護(hù)、轉(zhuǎn)換電路等作用。
當(dāng)輸入量(如電壓、電流、溫度等)達(dá)到規(guī)定值時(shí),繼電器被所控制的輸出電路導(dǎo)通或斷開。輸入量可分為電氣量(如電流、電壓、頻率、功率等)及非電氣量(如溫度、壓力、速度等)兩大類。繼電器具有動(dòng)作快、工作穩(wěn)定、使用壽命長(zhǎng)、體積小等優(yōu)點(diǎn)。廣泛應(yīng)用于電力保護(hù)、自動(dòng)化、運(yùn)動(dòng)、遙控、測(cè)量和通信等裝置中。
電磁繼電器工作原理和特性:
圖2.5 繼電器原理圖
電磁繼電器一般由鐵芯、線圈、銜鐵、觸點(diǎn)簧片等組成的。只要在線圈兩端加上一定的電壓,線圈中就會(huì)流過(guò)一定的電流,從而產(chǎn)生電磁效應(yīng),銜鐵就會(huì)在電磁力吸引的作用下克服返回彈簧的拉力吸向鐵芯,從而帶動(dòng)銜鐵的動(dòng)觸點(diǎn)與靜觸點(diǎn)(常開觸點(diǎn))吸合。當(dāng)線圈斷電后,電磁的吸力也隨之消失,銜鐵就會(huì)在彈簧的反作用力返回原來(lái)的位置,使動(dòng)觸點(diǎn)與原來(lái)的靜觸點(diǎn)(常閉觸點(diǎn))釋放。這樣吸合、釋放,從而達(dá)到了在電路中的導(dǎo)通、切斷的目的。對(duì)于繼電器的“常開、常閉”觸點(diǎn),可以這樣來(lái)區(qū)分:繼電器線圈未通電時(shí)處于斷開狀態(tài)的靜觸點(diǎn),稱為“常開觸點(diǎn)”;處于接通狀態(tài)的靜觸點(diǎn)稱為“常閉觸點(diǎn)”。繼電器一般有兩股電路,為低壓控制電路和高壓工作電路。
2.3.3 LED數(shù)碼管介紹
圖2.6 數(shù)碼管
LED數(shù)碼管實(shí)際上是由七個(gè)發(fā)光管組成8字形構(gòu)成的,加上小數(shù)點(diǎn)就是8個(gè)。這些段分別由字母a,b,c,d,e,f,g,dp來(lái)表示。當(dāng)數(shù)碼管特定的段加上電壓后,這些特定段就會(huì)發(fā)亮,以形成我們眼睛看到的樣子。以“2”為例,應(yīng)當(dāng)是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。LED數(shù)碼管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。小尺寸數(shù)碼管的顯示筆畫常用一個(gè)發(fā)光二極管組成,而大尺寸的數(shù)碼管由二個(gè)或多個(gè)發(fā)光二極管組成,一般情況下,單個(gè)發(fā)光二極管的管壓降為1.8V左右,電流不超過(guò)30mA。發(fā)光二極管的陽(yáng)極連接到一起連接到電源正極的稱為共陽(yáng)數(shù)碼管,發(fā)光二極管的陰極連接到一起連接到電源負(fù)極的稱為共陰數(shù)碼管。常用LED數(shù)碼管顯示的數(shù)字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
在本次實(shí)驗(yàn)中我們用的是四位一體的數(shù)碼管,圖如下:


3、硬件設(shè)計(jì)
3.1 單片機(jī)主控制模塊(含晶振、復(fù)位基本工作電路)
圖3.1 主控制模塊







    • 鍵盤輸入模塊
圖2.7 矩陣鍵盤
在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P1口)就可以構(gòu)成3*4=12個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤是合理的。矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,上圖中,列線通過(guò)電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下時(shí),所有的輸入端都是高電平,代表無(wú)鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過(guò)讀入輸入線的狀態(tài)就可得知是否有鍵按下了。

按鍵功能介紹:
第一行自左至右依次是1,2,3鍵, 第二行自左至右依次是4,5,6鍵, 第三行自左至右依次是7,8,9鍵, 第四行自左至右依次是*,0,#鍵

表3.1 按鍵功能

按 鍵
鍵 名
功 能 說(shuō) 明
0-9鍵
數(shù) 字 鍵
輸 入 密 碼
* 鍵
重 設(shè) 密 碼 鍵
設(shè) 定 新 密 碼
# 鍵
確認(rèn)鍵
確認(rèn)密碼輸入完畢



3.3 顯示模塊
                                 圖3.3 顯示模塊

此設(shè)計(jì)中,使用了四個(gè)共陰極數(shù)碼管,使用動(dòng)態(tài)顯示技術(shù)控制數(shù)碼管。其4個(gè)位選信號(hào)與P2.0-P2.3相連,當(dāng)其中某位為低電平時(shí)表示選中該位;8段段選信號(hào)與P0口相連,當(dāng)其中某段為高電平時(shí)導(dǎo)通該段,特殊的,由于STC89C52的P0口的驅(qū)動(dòng)能力較弱,不足以驅(qū)動(dòng)數(shù)碼管點(diǎn)亮,故在此又引入上拉電阻以驅(qū)動(dòng)數(shù)碼管。
關(guān)于上拉電阻有如下介紹:
  • 當(dāng)TTL電路驅(qū)動(dòng)CMOS電路時(shí),如果電路輸出的高電平低于CMOS電路的最低高電平(一般為3.5V), 這時(shí)就需要在TTL的輸出端接上拉電阻,以提高輸出高電平的值。
    2、OC門電路必須加上拉電阻,以提高輸出的高電平值。  
3、為加大輸出引腳的驅(qū)動(dòng)能力,有的單片機(jī)管腳上也常使用上拉電阻。  
4、在CMOS芯片上,為了防止靜電造成損壞,不用的管腳不能懸空,一般接上拉電阻產(chǎn)生降低輸入阻抗, 提供泄荷通路。  
5、芯片的管腳加上拉電阻來(lái)提高輸出電平,從而提高芯片輸入信號(hào)的噪聲容限增強(qiáng)抗干擾能力。
6、提高總線的抗電磁干擾能力。管腳懸空就比較容易接受外界的電磁干擾 。
7、長(zhǎng)線傳輸中電阻不匹配容易引起反射波干擾,加上下拉電阻是電阻匹配,有效的抑制反射波干擾。  

3.4 報(bào)警和開鎖模塊

圖3.4 報(bào)警和開鎖模塊

報(bào)警模塊由蜂鳴器、PNP三極管和單片機(jī)組成。選擇一只壓電式蜂鳴器,壓電式蜂鳴器工作時(shí)約需要100mA驅(qū)動(dòng)電流。特殊的,此處為加強(qiáng)驅(qū)動(dòng)能力,選用三極管來(lái)放大電流驅(qū)動(dòng)蜂鳴器。當(dāng)STC89C52的P3.0口輸出為低電平時(shí),三極管導(dǎo)通,蜂鳴器產(chǎn)生蜂鳴音,STC89C52輸出為高電平時(shí),蜂鳴器不發(fā)聲。
此處以繼電器的動(dòng)作來(lái)模擬鎖的開閉。同樣,為了增強(qiáng)驅(qū)動(dòng)能力添加了PNP三極管以放大電流,當(dāng)P3.1口為低電平時(shí),三極管導(dǎo)通,此時(shí)繼電器動(dòng)作(鎖開),燈亮;二極管具有續(xù)流作用以保護(hù)器件安全




4、軟件設(shè)計(jì)

4.1系統(tǒng)框圖

4.2 系統(tǒng)程序設(shè)計(jì)流程圖

                                    圖3.6 總程序流程圖



4.2 系統(tǒng)程序設(shè)計(jì)
重要端口定義說(shuō)明:
sbit buzzer=P3^0;
sbit relay=P3^1;
uchar code table[2]={0x40,0x00 }; //共陰極數(shù)碼管編碼 顯示‘-’和 熄滅
uchar keyword[4]={1,1,1,1};
uchar keycmp[4];
uchar key=0,num=0,flg=0;

報(bào)警子程序:(通過(guò)控制buzzer端口的高低電平來(lái)控制三極管的通斷,從而控制蜂鳴器)
void alarm()
     {              num=0;
                  buzzer=0;
                            delay(100);
                            buzzer=1;
              }


數(shù)碼管顯示子程序:
LED顯示器工作方式有兩種:靜態(tài)顯示方式和動(dòng)態(tài)顯示方式。靜態(tài)顯示的特點(diǎn)是每個(gè)數(shù)碼管的段選必須接一個(gè)8位數(shù)據(jù)線來(lái)保持顯示的字形碼。當(dāng)送入一次字形碼后,顯示字形可一直保持,直到送入新字形碼為止。這種方法的優(yōu)點(diǎn)是占用CPU時(shí)間少,顯示便于監(jiān)測(cè)和控制。缺點(diǎn)是硬件電路比較復(fù)雜,成本較高;動(dòng)態(tài)顯示的特點(diǎn)是將所有位數(shù)碼管的段選線并聯(lián)在一起,由位選線控制是哪一位數(shù)碼管有效。選亮數(shù)碼管采用動(dòng)態(tài)掃描顯示。所謂動(dòng)態(tài)掃描顯示即輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數(shù)碼管同時(shí)都在顯示。動(dòng)態(tài)顯示的亮度比靜態(tài)顯示要差一些。
本設(shè)計(jì)使用動(dòng)態(tài)顯示方法。
void display()
     { uchar i,j,cs=0x7f;

                 for(i=num;i>0;i--)            
                   {
                    P0=table[0];
                    cs=_crol_(cs,1);
                    P2=cs;
                    delay(10);
                              }
                            for(j=4-num;j>0;j--)
                              {
                               P0=table[1];
                     cs=_crol_(cs,1);
                     P2=cs;
                     delay(10);
                              }
              }

按下確認(rèn)鍵后執(zhí)行功能子程序:(使用標(biāo)志變量flg,根據(jù)其值來(lái)選擇執(zhí)行相應(yīng)的功能)
  1. void ok()
  2.      {              uchar i=0;
  3.                  display(); // P0=(flg+1);delay(1000);
  4.                  if(flg==0)
  5.                     {
  6.                                              for(i=0;i<4;i++)
  7.                                               if(keyword[i]!=keycmp[i]) {alarm();break;}
  8.                                           if(num==4) {relay=0;num=0;}
  9.                               }
  10.                  if(flg==2)
  11.                     {
  12.                                num=0;
  13.                                for(i=0;i<4;i++) keyword[i]=keycmp[i];
  14.                                flg=0;
  15.                               }
  16.                  if(flg==1)
  17.                     {
  18.                               
  19.                                 for(i=0;i<4;i++)
  20.                                               if(keyword[i]!=keycmp[i]) {alarm();break;}
  21.                                           if(num==4)
  22.                                               {
  23.                                                           num=0;
  24.                                                           display(); // P0=0x07;delay(1000);
  25.                                                           flg=2;
  26.                                                         }
  27.                                             
  28.                               }
  29.                
  30.               }
復(fù)制代碼


鍵盤掃描子程序:(運(yùn)用矩陣鍵盤逐行逐列掃描法,一次檢測(cè)各個(gè)按鍵)
鍵盤是單片機(jī)常用輸入設(shè)備,在按鍵數(shù)量較多時(shí),為了節(jié)省I/O口等單片機(jī)資源,一般采取掃描的方式來(lái)識(shí)別到底是哪一個(gè)鍵被按下。即通過(guò)確定被按下的鍵處在哪一行哪一列來(lái)確定該鍵的位置,獲取鍵值以啟動(dòng)相應(yīng)的功能程序。
查找哪個(gè)按鍵被按下的方法為:一個(gè)一個(gè)地查找。 先第一行輸出0,檢查列線是否非全高;否則第二行輸出0,檢查列線是否非全高;否則第三行輸出0,檢查列線是否非全高;如果某行輸出0時(shí),查到列線非全高,則該行有按鍵按下;根據(jù)第幾行線輸出0與第幾列線讀入為0,即可判斷在具體什么位置的按鍵按下。
  1. void keyscan()
  2.      {
  3.                  uchar temp1,temp2;
  4.                  P1=0xfe;//令第一列為低電平,檢測(cè)第1列
  5.                  temp1=P1;
  6.                  if(temp1!=0xfe)
  7.                     {
  8.                                 delay(5);              //去抖
  9.                                              temp2=P1;
  10.                                           if(temp1==temp2)
  11.                                              {
  12.                                               switch(temp2)
  13.                                                               {
  14.                                                                       case 0xf6: if(num<4){key=1;keycmp[num]=key;num++;display();}
  15.                                                                                                                    else alarm();
  16.                                                                                                break;
  17.                                                                       case 0xee: if(num<4){key=4;keycmp[num]=key;num++;display();}
  18.                                                                                                                    else alarm();
  19.                                                                                                break;
  20.                                                                       case 0xde: if(num<4){key=7;keycmp[num]=key;num++;display();}
  21.                                                                                                                    else alarm();
  22.                                                                                                break;
  23.                                                                       case 0xbe: set();break;
  24.                                                                         }
  25.                                              }
  26.                               }
  27.                             while(temp1!=0xfe)              temp1=P1;//等待按鍵釋放

  28.                  P1=0xfd;//檢測(cè)第2列
  29.                  temp1=P1;
  30.                  if(temp1!=0xfd)
  31.                     {
  32.                                 delay(5);              //去抖
  33.                                              temp2=P1;
  34.                                           if(temp1==temp2)
  35.                                              {
  36.                                               switch(temp2)
  37.                                                               {
  38.                                                                       case 0xf5: if(num<4){key=2;keycmp[num]=key;num++;display();}
  39.                                                                                                else alarm();
  40.                                                                                                                    break;
  41.                                                                       case 0xed: if(num<4){key=5;keycmp[num]=key;num++;display();}
  42.                                                                                                else alarm();
  43.                                                                                                                    break;
  44.                                                                       case 0xdd: if(num<4){key=8;keycmp[num]=key;num++;display();}
  45.                                                                                                                    else alarm();
  46.                                                                                                break;
  47.                                                                       case 0xbd: if(num<4){key=0;keycmp[num]=key;num++;display();}
  48.                                                                                                                    else alarm();
  49.                                                                                                break;
  50.                                                                         }
  51.                                              }
  52.                               }
  53.                             while(temp1!=0xfd)              temp1=P1;//等待按鍵釋放

  54.                             P1=0xfb;//檢測(cè)第3列
  55.                  temp1=P1;
  56.                  if(temp1!=0xfb)
  57.                     {
  58.                                 delay(5);              //去抖
  59.                                              temp2=P1;
  60.                                           if(temp1==temp2)
  61.                                              {
  62.                                               switch(temp2)
  63.                                                               {
  64.                                                                       case 0xf3: if(num<4){key=3;keycmp[num]=key;num++;display();}
  65.                                                                                                                    else alarm();
  66.                                                                                                break;
  67.                                                                       case 0xeb: if(num<4){key=6;keycmp[num]=key;num++;display();}
  68.                                                                                                                    else alarm();
  69.                                                                                                break;
  70.                                                                       case 0xdb: if(num<4){key=9;keycmp[num]=key;num++;display();}
  71.                                                                                                                    else alarm();
  72.                                                                                                break;
  73.                                                                       case 0xbb: if(num==4) ok();
  74.                                                                                                else alarm();
  75.                                                                                                                    break;
  76.                                                                         }
  77.                                              }
  78.                               }
  79.                             while(temp1!=0xfb)              temp1=P1;//等待按鍵釋放

  80.                  display();
  81.               }
復(fù)制代碼


中斷服務(wù)函數(shù):(當(dāng)通過(guò)機(jī)械手段關(guān)鎖時(shí),將通過(guò)外部中斷的形式使程序初始化恢復(fù)原狀態(tài))
void Int0() interrupt 0
    {
                relay=1;
              }
整個(gè)系統(tǒng)的完整程序設(shè)計(jì)詳見附錄。




5、系統(tǒng)仿真設(shè)計(jì)

5.1 Proteus 軟件介紹

Proteus軟件是英國(guó)Labcenter electronics公司出版的EDA工具軟件(該軟件中國(guó)總代理為廣州風(fēng)標(biāo)電子技術(shù)有限公司)。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。它是目前最好的仿真單片機(jī)及外圍器件的工具。雖然目前國(guó)內(nèi)推廣剛起步,但已受到單片機(jī)愛好者、從事單片機(jī)教學(xué)的教師、致力于單片機(jī)開發(fā)應(yīng)用的科技工作者的青睞。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計(jì),真正實(shí)現(xiàn)了從概念到產(chǎn)品的完整設(shè)計(jì)。是目前世界上唯一將電路仿真軟件、PCB設(shè)計(jì)軟件和虛擬模型仿真軟件三合一的設(shè)計(jì)平臺(tái),其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列處理器,并持續(xù)增加其他系列處理器模型。在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯器。
在PROTEUS繪制好原理圖后,調(diào)入已編譯好的目標(biāo)代碼文件:*.HEX,可以在PROTEUS的原理圖中看到模擬的實(shí)物運(yùn)行狀態(tài)和過(guò)程。
  PROTEUS 是單片機(jī)課堂教學(xué)的先進(jìn)助手。
  PROTEUS不僅可將許多單片機(jī)實(shí)例功能形象化,也可將許多單片機(jī)實(shí)例運(yùn)行過(guò)程形象化。前者可在相當(dāng)程度上得到實(shí)物演示實(shí)驗(yàn)的效果,后者則是實(shí)物演示實(shí)驗(yàn)難以達(dá)到的效果。
  它的元器件、連接線路等卻和傳統(tǒng)的單片機(jī)實(shí)驗(yàn)硬件高度對(duì)應(yīng)。這在相當(dāng)程度上替代了傳統(tǒng)的單片機(jī)實(shí)驗(yàn)教學(xué)的功能,例:元器件選擇、電路連接、電路檢測(cè)、電路修改、軟件調(diào)試、運(yùn)行結(jié)果等。
  課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)是學(xué)生走向就業(yè)的重要實(shí)踐環(huán)節(jié)。由于PROTEUS提供了實(shí)驗(yàn)室無(wú)法相比的大量的元器件庫(kù),提供了修改電路設(shè)計(jì)的靈活性、提供了實(shí)驗(yàn)室在數(shù)量、質(zhì)量上難以相比的虛擬儀器、儀表,因而也提供了培養(yǎng)學(xué)生實(shí)踐精神、創(chuàng)造精神的平臺(tái)
  隨著科技的發(fā)展,“計(jì)算機(jī)仿真技術(shù)”已成為許多設(shè)計(jì)部門重要的前期設(shè)計(jì)手段。它具有設(shè)計(jì)靈活,結(jié)果、過(guò)程的統(tǒng)一的特點(diǎn)。可使設(shè)計(jì)時(shí)間大為縮短、耗資大為減少,也可降低工程制造的風(fēng)險(xiǎn)。相信在單片機(jī)開發(fā)應(yīng)用中PROTEUS也能茯得愈來(lái)愈廣泛的應(yīng)用。
使用Proteus 軟件進(jìn)行單片機(jī)系統(tǒng)仿真設(shè)計(jì),是虛擬仿真技術(shù)和計(jì)算機(jī)多媒體技術(shù)相結(jié)合的綜合運(yùn)用,有利于培養(yǎng)學(xué)生的電路設(shè)計(jì)能力及仿真軟件的操作能力;在單片機(jī)課程設(shè)計(jì)和全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽中,我們使用 Proteus 開發(fā)環(huán)境對(duì)學(xué)生進(jìn)行培訓(xùn),在不需要硬件投入的條件下,學(xué)生普遍反映,對(duì)單片機(jī)的學(xué)習(xí)比單純學(xué)習(xí)書本知識(shí)更容易接受,更容易提高。實(shí)踐證明,在使用 Proteus 進(jìn)行系統(tǒng)仿真開發(fā)成功之后再進(jìn)行實(shí)際制作,能極大提高單片機(jī)系統(tǒng)設(shè)計(jì)效率。因此,Proteus 有較高的推廣利用價(jià)值。

5.2 Proteus 仿真圖

圖5.1系統(tǒng)仿真圖

實(shí)物照

布線圖





總結(jié)

使用單片機(jī)制作的電子密碼鎖具有軟硬件設(shè)計(jì)簡(jiǎn)單,易于開發(fā),成本較低,安全可靠,操作方便等特點(diǎn)。本實(shí)訓(xùn)在設(shè)計(jì)之初認(rèn)真分析了幾種方案的優(yōu)缺點(diǎn),正是由于單片機(jī)的眾多優(yōu)良特性的吸引,最終從經(jīng)濟(jì)實(shí)用的角度出發(fā),采用單片機(jī)STC89C52作為主控芯片,結(jié)合外圍的鍵盤輸入、顯示、報(bào)警、開鎖等電路,用C語(yǔ)言編寫主控芯片的控制程序,設(shè)計(jì)了一款可以多次更改密碼具有報(bào)警功能的電子密碼鎖。


參考文獻(xiàn):
[1]  于殿泓,王新年.單片機(jī)原理與程序設(shè)計(jì)實(shí)驗(yàn)教程[M].西安:西安電子科技大學(xué)出版社,2007,8.
[2]  趙文博,劉文濤.單片機(jī)語(yǔ)言C51程序設(shè)計(jì)[M].北京:人民郵電出版社,2005,10.
[3]  李愛秋.紅外線遙控12位電子密碼鎖的設(shè)計(jì)[J]. 溫州職業(yè)技術(shù)學(xué)院學(xué)報(bào)第8卷第一期,2008.
[4]  陳杰,黃鴻.傳感器與檢測(cè)技術(shù)[M].北京:高等教育出版社,2010,8.
[5]  周航慈. 單片機(jī)應(yīng)用程序設(shè)計(jì)技術(shù)[M]. 北京:北京航空航天大學(xué)出版社,2011,2.
[6]  李朝青. 單片機(jī)原理及接口技術(shù)[M]. 北京:北京航空航天大學(xué)出版社, 2005,10.
[7]  孫育才. MCS-51系列單片微型計(jì)算機(jī)及其應(yīng)用[M]. 東南大學(xué)出版社, 2004,6.
[8]  沈紅衛(wèi). 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)實(shí)力與分析[M]. 北京:北京航空航天大學(xué)出版社,2003.
[9]  徐愛鈞, 彭秀華. 單片機(jī)高級(jí)語(yǔ)言C51應(yīng)用程序設(shè)計(jì)[M].北京航空航天大學(xué)出版社,2006.
[10]  曾一江. 單片微機(jī)原理與接口技術(shù)[M]. 北京:科技出版社,2009,12.
[11]  康華光. 電子技術(shù)基礎(chǔ)(模擬部分)[M]. 北京:高等教育出版社, 2004,4.



實(shí)訓(xùn)感想

緊張又繁忙的兩周實(shí)訓(xùn)終于即將要結(jié)束了。在這兩周的學(xué)習(xí)中,讓我收獲很多,也讓我知道自己所學(xué)的專業(yè)必須要求自己一絲不茍,特別認(rèn)真耐心完成每一條線路的連接,如果稍有大意就會(huì)使做出來(lái)的成品無(wú)法正常顯示,導(dǎo)致功虧一簣。

在這兩周期間,我們這組做的是電子密碼鎖。兩周,需要學(xué)的東西很多,而且有些東西,比如我們新學(xué)的三項(xiàng)軟件,并不是在短時(shí)間就能掌握的,必需靠長(zhǎng)時(shí)間的練習(xí)去把握,理解。所以任務(wù)對(duì)我們來(lái)說(shuō)顯得很重。但不知道為什么,學(xué)校只給我們排了兩周的電工實(shí)習(xí),而且還是這學(xué)期最后兩周,實(shí)訓(xùn)結(jié)束馬上就要考試,所以我們不得不一邊做實(shí)訓(xùn)項(xiàng)目電子密碼鎖,一邊為這學(xué)期的考試做準(zhǔn)備。對(duì)于這樣的安排我們?nèi)5膶W(xué)生應(yīng)該都只有兩個(gè)字來(lái)形容我們此刻的心情——無(wú)語(yǔ)!希望學(xué)校能夠盡快重視起實(shí)訓(xùn)時(shí)間的安排。所以兩周下來(lái),基本上就沒有休息時(shí)間,只有一個(gè) 感覺,時(shí)間緊,任務(wù)重。

要完成這項(xiàng)工藝品,前面已經(jīng)提過(guò)要用到我們新學(xué)的三項(xiàng)軟件,我們需要先設(shè)計(jì)出電路圖,用Proteus把電路圖畫出來(lái),仿真電路,看電路是否能正常運(yùn)行,如果不能正常運(yùn)行就必須修改到正常運(yùn)行為止,然后就要用到第二個(gè)軟件——Keil,我們要在上面編寫出我們所用的單片機(jī)C程序,之后生成HEX文件,最后就是要用到的最后一個(gè)軟件,Altium Designer ,我們要用它制作PCB,這個(gè)PCB真的好難,不僅需要對(duì)這個(gè)軟件足夠了解,還要知道電路元器件的實(shí)際尺寸,因?yàn)槲覀冃枰獙?duì)元器件做封裝,為了保證元器件能插到電路板上,必須對(duì)元器件的實(shí)際尺寸有清楚的了解,這樣封裝才能做到位,才能保證實(shí)驗(yàn)的成功。然而,讓我們更心酸的是在我們終于完成電路的pcb之后,自我感覺還是不錯(cuò)的時(shí)候,老師給我們狠狠潑了一盆涼水,接著就是我們?nèi)齻(gè)埋頭修改的身影,不幸的是接著我們又被吵了好多次,在此期間,我感觸頗多,同時(shí)也讓我學(xué)會(huì)了很多知識(shí),盡管被老師吵了好多次,但是正是老師的批評(píng)指責(zé),才讓我們的pcb更加完美,在此,我要對(duì)每一位為我們是實(shí)訓(xùn)付出辛苦的老師說(shuō)一聲“謝謝您”。你們的無(wú)私奉獻(xiàn)真的讓我們很感動(dòng),真不愧是知識(shí)的傳播者。

另外,在實(shí)訓(xùn)中我深切的體會(huì)到了團(tuán)隊(duì)的力量和與人溝通的重要性。從這次的實(shí)訓(xùn)中,我懂得了一個(gè)組要想成為一個(gè)優(yōu)秀的組,最重要的是要團(tuán)結(jié),還有就是組員之間的信任以及溝通都是很必要的;這個(gè)組中的成員還要有一個(gè)共同的目標(biāo),有了共同的目標(biāo)我們才能有目的的去完成作品。這次實(shí)訓(xùn)我體會(huì)最深的還有一個(gè)“累”字,它不僅僅是身體的疲憊,勞動(dòng)的汗水;更多的是一種“苦盡甘來(lái)”的滋味,我會(huì)為我曾經(jīng)“累”過(guò)而感到驕傲和滿足。正是這種“累”讓我發(fā)現(xiàn)了自身的不足,讓我學(xué)會(huì)了更多的專業(yè)技能;也正是這種“累”讓我懂得了責(zé)任和團(tuán)隊(duì)的意義。實(shí)訓(xùn)雖然結(jié)束了,但我們現(xiàn)在的學(xué)習(xí)并未結(jié)束,我們應(yīng)該珍惜在學(xué)校的每一天,多學(xué)習(xí),把自身的弱勢(shì)和不足變成優(yōu)勢(shì)與特長(zhǎng),掃清我們就業(yè)道路上的絆腳石,為自己擁有一個(gè)美好的未來(lái)而加倍努力!

總而言之,這兩周的實(shí)訓(xùn)讓我整個(gè)人都變得很充實(shí),讓我增長(zhǎng)了很多知識(shí)。更讓堅(jiān)定了我對(duì)本專業(yè)的信心,我相信自己會(huì)走好人生路上的每一步,跟希望像這樣實(shí)訓(xùn)的活動(dòng)能更多一些。

最后,再次希望學(xué)校能合理安排實(shí)訓(xùn)時(shí)間,畢竟實(shí)訓(xùn)是一次很重要的機(jī)會(huì),對(duì)我們動(dòng)手以及其它方面能力的提高都有極大的好處,誰(shuí)都不想匆匆而過(guò),誰(shuí)都愿意認(rèn)真對(duì)待。     

****

                                                 **************




附錄2:   元器件清單
電子密碼鎖器件清單
單片機(jī)AT89C51             1片
30pf電容                   2個(gè)
10uf電解電容               1個(gè)
12MHZ晶振                                       1個(gè)
1k電阻                     5個(gè)
10k電阻                    1個(gè)
PNP三極管                  2個(gè)
按鍵                       12個(gè)
5v的5管腳繼電器           1個(gè)
發(fā)光二極管                  1個(gè)
普通二極管                  1個(gè)
10k的8管腳排阻             1個(gè)
微型喇叭                    1個(gè)
4位一體共陽(yáng)數(shù)碼管           1個(gè)
管座(4位一體數(shù)碼管用)     1個(gè)
管座(51單片機(jī)用)          1個(gè)


附錄1:      
總程序:
  1. #include

  2. #include

  3. #define uint unsigned int

  4. #define uchar unsigned char

  5. sbit buzzer=P3^0;

  6. sbit relay=P3^1;

  7. uchar code table[2]={0x40,0x00 }; //共陰極數(shù)碼管編碼 顯示'-'和 熄滅

  8. uchar keyword[4]={1,1,1,1};

  9. uchar keycmp[4];

  10. uchar key=0,num=0,flg=0;

  11. //==============================延遲程序 延時(shí)x毫秒

  12. void delay(uint x)

  13.      {

  14.                  uint i,j;

  15.                  for(i=x;i>0;i--)

  16.                      for(j=110;j>0;j--);

  17.                 }

  18. //==============================報(bào)警程序

  19. void alarm()

  20.      {              int i;            

  21.                             num=0;

  22.                             for(i=0;i<3;i++)

  23.                                           {            

  24.                                 buzzer=0;

  25.                                           delay(120);

  26.                                           buzzer=1;

  27.                                           delay(120);

  28.                                           }

  29.               }

  30. //==============================數(shù)碼管顯示程序

  31. void display()

  32.      { uchar i,j,cs=0x7f;

  33.                  for(i=num;i>0;i--)            

  34.                    {

  35.                     P0=table[0];

  36.                     cs=_crol_(cs,1);

  37.                     P2=cs;

  38.                     delay(10);

  39.                               }

  40.                             for(j=4-num;j>0;j--)

  41.                               {

  42.                                P0=table[1];

  43.                      cs=_crol_(cs,1);

  44.                      P2=cs;

  45.                      delay(10);

  46.                               }

  47.               }

  48. //==============================密碼重置程序

  49. void set()

  50.       {

  51.                   num=0;

  52.                             display();

  53.                             flg=1;

  54.                 }

  55. //==============================確認(rèn)鍵程序

  56. void ok()

  57.      {              uchar i=0;

  58.                  display(); // P0=(flg+1);delay(1000);

  59.                  if(flg==0)

  60.                     {

  61.                                              for(i=0;i<4;i++)

  62.                                               if(keyword[i]!=keycmp[i]) {alarm();}

  63.                                           if(num==4) {relay=0;num=0;}

  64.                               }

  65.                  if(flg==2)

  66.                     {

  67.                                num=0;

  68.                                for(i=0;i<4;i++) keyword[i]=keycmp[i];

  69.                                flg=0;

  70.                               }

  71.                  if(flg==1)

  72.                     {

  73.                               

  74.                                 for(i=0;i<4;i++)

  75.                                               if(keyword[i]!=keycmp[i]) {alarm();break;}

  76.                                           if(num==4)

  77.                                               {

  78.                                                           num=0;

  79.                                                           display(); // P0=0x07;delay(1000);

  80.                                                           flg=2;

  81.                                                         }

  82.                                             

  83.                               }

  84.                

  85.               }

  86. //==============================鍵盤掃描程序

  87. void keyscan()

  88.      {

  89.                  uchar temp1,temp2;

  90.                  P1=0xfe;//令第一列為低電平,檢測(cè)第1列



  91. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

完整論文下載(word格式 可編輯):
基于單片機(jī)和C語(yǔ)言的電子密碼鎖.doc (3.84 MB, 下載次數(shù): 83)




作者: 348652560    時(shí)間: 2017-6-14 22:26
非常好
作者: 348652560    時(shí)間: 2017-6-15 17:12
謝謝分享!收藏了!
作者: zxy51    時(shí)間: 2017-12-17 16:00
下載查看了,程序沒問(wèn)題,問(wèn)就是初始密碼還要自己設(shè)定嗎?
作者: zxy51    時(shí)間: 2017-12-17 16:04
論文里有很多錯(cuò)的,比如共陽(yáng)數(shù)碼管,應(yīng)該是共陰
作者: zxy51    時(shí)間: 2017-12-17 17:28
無(wú)法使用,程序有編寫錯(cuò)誤,謹(jǐn)慎下載
作者: lijianbin    時(shí)間: 2019-11-24 20:33
不錯(cuò),謝謝分享




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1