導航:首頁 > 操作系統 > 基於單片機的密碼鎖設計答辯

基於單片機的密碼鎖設計答辯

發布時間:2023-12-09 00:08:08

A. 單片機畢業論文答辯陳述

單片機畢業論文答辯陳述

難忘的大學生活將要結束,畢業生都要通過最後的畢業論文,畢業論文是一種有計劃的檢驗大學學習成果的形式,那麼畢業論文應該怎麼寫才合適呢?以下是我為大家收集的單片機畢業論文答辯陳述,僅供參考,希望能夠幫助到大家。

單片機畢業論文答辯陳述

各位老師好!我叫劉天一,來自**,我的論文題目是《基於AVR單片機的GSM—R基站天線傾角測量系統》。在這里,請允許我向寧提綱老師的悉心指導表示深深的謝意,向各位老師不辭勞苦參加我的論文答辯表示衷心的感謝。

下面我將從論文的背景意義、結構內容、不足之處三個方面向各位老師作一大概介紹,懇請各位老師批評指導。

首先,在背景和意義上,移動通信網路建設初期,基站站間距大、數量少、站型也不大,並且頻率資源相對比較豐富。在這一階段的網路規劃時很少對天線的傾角做詳細的規劃,基站功率常常以滿功率發射。對於越區覆蓋則主要通過增加鄰區的辦法予以解決。

但隨著網路的迅速發展,城市中的基站越來越密集,在一個中等城市通常分布著數十個基站,在省會城市更是達到了數百個基站之多,並且基站的密度越來越高,站型也越來越大,如果對越區覆蓋的問題仍然釆用老辦法解決,那麼網路質量將難以保證。因此有必要在規劃階段就對基站天線的傾角、基站靜態發射功率等進行更加細化合理的規劃,從而減輕優化階段的工作量。

合理設置天線下傾角不但可以降低同頻干擾的影響,有效控制基站的覆蓋范圍,而且可以加強本基站覆蓋區內的信號強度。通常天線下傾角的設定有兩方面側重,一方面側重於干擾抑制,另一方面側重於加強覆蓋。這兩方面側重分別對應不同的下傾角演算法。一般而言,對基站分布密集的地區應該側重於考慮干擾抑制(大下傾角);而基站分布比較稀疏的地方則側重於考慮加強覆蓋(小下傾角)。

規劃階段進行的傾角設計,在實際施工過程中會出現一定的偏差,在使用的過程中,由於季節變化或風、雨、雪、溫度、濕度等自然條件影響,基站天線傾角會發生變化,進而影響場強質量。而移動通信已經是人類日常生活中不可或缺的一部分,正常的通信離不開基站的建設與維護,因此,基站天線傾角的實時、精確測量就顯得尤為重要了。但現階段移動通信基站的天線方位角、下傾角等基本是依靠人工現場通過羅盤、坡度儀等儀器進行測量得到的,而且由於基站的數量巨大,因而測量耗費了大量的時間、人力、物力,並且存在較大的測量人員人身安全隱患。因此,實現一種省時、省力的自動化測量儀器是非常亟需的。

為此,擬研發GSM—R基站天線傾角測量系統,實現不登塔作業即可完成基站天線傾角的測量工作,並可對各基站測試點進行聯網,實現對基站天線傾角的實時監測。本系統可以大大降低GSM—R系統現場維護作業的人身安全風險和作業難度、強度,具有很高的實用性和安全性。

其次,在結構內容上,論文主要對基站傾角測量系統進行設計,主要研宄內容為:

(1)根據控制要求,選用傾角測量模塊;學會使用並通過使用手冊深入學習其特性及原理。

(2)採用ATmegal62作為控制晶元,進行傾角測量系統的硬體電路設計。整個系統分為主板和從板,通過晶元內置的TWI串列匯流排傳輸介面進行通信,由主板將數據通過無線模塊發送給手持終端。

(3)採用JZ863數傳模塊,將其與上位機控制晶元、下位機控制晶元的非同步串列接收/發送器USART連接,進行上位機與下位機的無線數據通信。

(4)在硬體平台基礎上根據模塊化思想進行傾角測量系統的軟體程序設計。

(5)在設計好的軟硬體平台上進行相關實驗,實現控制系統設計目標和要求。

本文各章節安排如下:

第1章「引言」,對傾角測量系統進行了簡要概述,介紹了研宄背景,並對本文的內容作了簡介。

第2章「傾角測量感測器」,主要分析了本系統比較重要的傾角測量模塊的原理以及SCA100T—D01傾角測量晶元,對其各個引腳的功能以及通信協議等進行了闡述,為後面的具體實現打下了基礎。

第3章「ATmegal62微處理器結構及原理」,分析了本畢設使用的核心單片機晶元ATmegal62,包括它的各個引腳以及I/O埠,並且分析了本論文主要使用的通信協議,即同步串列SPI介面和USART串列口。

第4章「傾角測量系統軟硬體實現」,本章首先對系統的總體設計進行了實現,包括主要的技術指標、主要的功能模塊等。接著進行了本系統的硬體實現和軟體實現。硬體實現包括各個功能模塊的具體電路設計以及最後的PCB電路板製作,軟體實現包括各個功能模塊的程序設計。

第5章「傾角測量系統調試及實驗」,本章主要進行了硬體電路的調試,並介紹了通過AVR Studio進行軟體模擬以及下載,最後在搭建的系統軟硬體平台的基礎上,進行調試和實驗,以此來驗證基站傾角測量系統的硬體與軟體設計。

第6章「結論」,本章主要總結了本論文的研究結果,並闡述了系統的不足之處和對以後工作的展望。

最後,在不足之處上,這篇論文的寫作以及修改的過程,也是我越來越認識到自己知識與經驗缺乏的過程。雖然,我盡可能地收集材料,竭盡所能運用自己所學的知識進行論文寫作,但論文還是存在許多不足之處,有待改進。請各位評委老師多批評指正,讓我在今後的學習中學到更多。

[知識拓展]

論文答辯提問方式

在畢業論文答辯會上,主答辯老師的提問方式會影響到組織答辯會目的的實現以及學員答辯水平的發揮。主答辯老師有必要講究自己的提問方式。

1、提問要貫徹先易後難原則。主答辯老師給每位答辯者一般要提三個或三個以上的問題,這些要提的問題以按先易後難的次序提問為好。所提的第一個問題一般應該考慮到是學員答得出並且答得好的問題。學員第一個問題答好,就會放鬆緊張心理,增強「我」能答好的信心,從而有利於在以後幾個問題的答辯中發揮出正常水平。反之,如果提問的第一個問題就答不上來,學員就會背上心理包袱,加劇緊張,產生慌亂,這勢必會影響到對後面幾個問題的答辯,因而也難以正確檢查出學員的答辯能力和學術水平。

2、提問要實行逐步深入的方法。為了正確地檢測學員的專業基礎知識掌握的情況,有時需要把一個大問題分成若干個小問題,並採取逐步深入的提問方法。如有一篇《淺論科學技術是第一生產力》的論文,主答辯老師出的探測水平題,是由以下四個小問題組成的。

(1)什麼是科學技術?

(2)科學技術是不是生產力的一個獨立要素?在學員作出正確回答以後,緊接著提出第三個小問題:

(3)科學技術不是生產力的一個獨立要素,為什麼說它也是生產力呢?

(4)你是怎樣理解科學技術是第一生產力的?通過這樣的提問,根據學員的答辯情況,就能比較正確地測量出學員掌握基礎知識的扎實程度。如果這四個小問題,一個也答不上,說明該學員專業基礎知識沒有掌握好;如果四個問題都能正確地回答出來,說明該學員基礎知識掌握得很扎實;如果能回答出其中的2—3個,或每個小問題都能答一點,但答得不全面,或不很正確,說明該學員基礎知識掌握得一般。倘若不是採取這種逐步深入的提問法,就很難把一個學員掌握專業基礎知識的情況准確測量出來。假如上述問題採用這樣提問法:請你談談為什麼科學技術是第一生產力?學員很可能把論文中的主要內容重述一遍。這樣就很難確切知道該學員掌握基礎知識的情況是好、是差、還是一般。

3、當答辯者的觀點與自己的觀點相左時,應以溫和的態度,商討的語氣與之開展討論,即要有「長者」風度,施行善術,切忌居高臨下,出言不遜。不要以「真理」掌握者自居,輕易使用「不對」、「錯了」、「謬論」等否定的斷語。要記住「是者可能非,非者可能有是」的格言,要有從善如流的掂量。如果作者的觀點言之有理,持之有據,即使與自己的觀點截然對立,也應認可並樂意接受。倘若作者的觀點並不成熟、完善,也要善意地、平和地進行探討,並給學員有辯護或反駁的平等權利。當自己的觀點不能為作者接受時,也不能以勢欺人,以權壓理,更不要出言不遜。雖然在答辯過程中,答辯老師與學員的地位是不平等的(一方是審查考核者,一方是被考核者),但在人格上是完全平等的。在答辯中要體現互相尊重,做到豁達大度,觀點一時難以統一,也屬正常。不必將自己的觀點強加於人,只要把自己的觀點亮出來,供對方參考就行。事實上,只要答辯老師講得客氣、平和,學員倒愈容易接受、考慮你的觀點,愈容易重新審視自己的觀點,達到共同探索真理的目的。

4、當學員的回答答不到點子上或者一時答不上來的問題,應採用啟發式、引導式的提問方法。參加過論文答辯委員會的老師可能都遇到過這樣的情況:學員對你所提的問題答不上來,有的就無可奈何地「呆」著;有的是東拉西扯,與你繞圈子,其實他也是不知道答案。碰到這種情況,答辯老師既不能讓學員尷尬地「呆」在那裡,也不能聽憑其神聊,而應當及時加以啟發或引導。學員答不上來有多種原因,其中有的是原本掌握這方面的知識只是由於問題完全出乎他的意料而顯得心慌意亂,或者是出現一時的「知覺盲點」而答不上來。這時只要稍加引導和啟發,就能使學員「召回」知識,把問題答好。只有通過啟發和引導仍然答不出或答不到點子上的,才可判定他確實不具備這方面的知識。

【拓展】

單片機畢業論文開題報告參考

1. 課題名稱:

數字鍾的設計

近年來,隨著單片機檔次的不斷提高,功能的不斷完善,其應用日趨成熟、應用領域日趨廣泛,特別是工業測控、尖端武器和日常家用電器等領域更是因為有了單片機而生輝增色,不少設備、儀器已經把單片機作為核心部分。單片機應用技術已經成為一項新的工程應用技術。尤其是Intel公司生產的MCS-51系列單片機,由於其具有集成度高、處理功能強、可靠性高、系統結構簡單、價格低廉等優點,在我國得到了廣泛的`應用,在智能儀器儀表機電一體化等方面取得了令人矚目的成果。現在單片機可以說是百花齊放,百家爭鳴,世界上各大晶元製造公司都推出了自己的單片機,從8位,16位,到32位,數不勝數,應有盡有由於主流C51兼容的,也有不兼容的,但他們各具特色,互成互補,為單片機的應用提供了廣泛的天地。在高節奏發展的現代社會,以單片機技術為核心的數字鍾越來越彰顯出它的重要性。

3. 設計目的和意義:

單片機的出現具有劃時代的意義。它的出現使得許多原本花費很高的復雜電路以及繁多的電氣元器件都被取締,取而代之的是一塊小小的晶元。伴隨著計算機技術的不斷發展,單片機也得到了相應的發展,而且其應用的領域也得到更好的擴展。在民用,工用,醫用以及軍用等眾多領域上都有所應用。為了,能夠更好的適應這日新月異的社會,我們應當充實我們的知識面,方能不被時代的潮流踩在腳下。

介於單片機的重要性,我們應當對單片機的原理,發展以及應用有著一定的了解。所以,我們應當查閱相關資料,從而能夠對單片機有個全方位的了解。進而將探討的領域指向具體的國內,從而能夠在科技與經濟飛速發展的當今社會更好的應用這項技術。事實上,該項技術在國內有著極為廣泛的發展前景,因此,通過對本課題的研究,我們因當能夠充分認識到單片機技術的重要性,對單片機未來的發展趨勢有所展望。

單片機的形成背景:

1.隨著微電子技術的不斷創新和發展,大規模集成電路的集成度和工藝水平不斷提高。硅材料與人類智慧的結合,生產出大批量的低成本、高可靠性和高精度的微電子結構模塊,推動了一個全新的技術領域和產業的發展。在此基礎上發展起來的器件可編程思想和微處理(器)技術可以用軟體來改變和實現硬體的功能。微處理器和各種可編程大規模集成專用電路、半定製器件的大量應用,開創了一個嶄新的應用世界,以至廣泛影響著並在逐步改變著人類的生產、生活和學習等社會活動。

2.計算機硬體平台性能的大幅度提高,使很多復雜演算法和方便使用的界面得以實現,大大提高了工作效率,給復雜嵌入式系統輔助設計提供了物理基礎。

3.高性能的EDA綜合開發工具(平台)得到長足發展,而且其自動化和智能化程度不斷提高,為復雜的嵌入式系統設計提供了不同用途和不同級別集編輯、布局、布線、編譯、綜合、模擬、測試、驗證和器件編程等一體化的易於學習和方便使用的開發集成環境。

4.硬體描述語言HDL(Hardware Description Language)的發展為復雜電子系統設計提供了建立各種硬體模型的工作媒介。它的描述能力和抽象能力強,給硬體電路,特別是半定製大規模集成電路設計帶來了重大的變革。

5.軟體技術的進步,特別是嵌入式實時操作系統EOS(Embedded Operation System)的推出,為開發復雜嵌入式系統應用軟體提供了底層支持和高效率開發平台。EOS是一種功能強大、應用廣泛的實時多任務系統軟體。它一般都具有操作系統所具有的各種系統資源管理功能,用戶可以通過應用程序介面API調用函數形式來實現各種資源管理。用戶程序可以在EOS的基礎上開發並運行。

單片機的發展歷史:20世紀70年代,微電子技術正處於發展階段,集成電路屬於中規模發展時期,各種新材料新工藝尚未成熟,單片機仍處在初級的發展階段,元件集成規模還比較小,功能比較簡單,一般均把CPU、RAM有的還包括了一些簡單的I/O口集成到晶元上,它還需配上外圍的其他處理電路方才構成完整的計算系統。類似的單片機還有Z80微處理器。

1976年INTEL公司推出了MCS-48單片機,這個時期的單片機才是真正的8位單片微型計算機,並推向市場。它以體積小,功能全,價格低贏得了廣泛的應用,為單片機的發展奠定了基礎,成為單片機發展史上重要的里程碑。

在MCS-48的帶領下,其後,各大半導體公司相繼研製和發展了自己的單片機。到了80年代初,單片機已發展到了高性能階段,象INTEL公司的MCS-51系列,Motorola公司的6801和6802系列等等,此外,日本的著名電氣公司NEC和HITACHI都相繼開發了具有自己特色的專用單片機。

80年代,世界各大公司均競相研製出品種多功能強的單片機,約有幾十個系列,300多個品種,此時的單片機均屬於真正的單片化,大多集成了CPU、RAM、ROM、數目繁多的I/O介面、多種中斷系統,甚至還有一些帶A/D轉換器的單片機,功能越來越強大,RAM和ROM的容量也越來越大,定址空間甚至可達64kB,可以說,單片機發展到了一個全新階段,應用領域更廣泛,許多家用電器均走向利用單片機控制的智能化發展道路。

1982年以後,16位單片機問世,代表產品是INTEL公司的MCS-96系列,16位單片機比起8位機,數據寬度增加了一倍,實時處理能力更強,主頻更高,集成度達到了12萬只晶體管,RAM增加到了232位元組,ROM則達到了8kB,並且有8個中斷源,同時配置了多路的A/D轉換通道,高速的I/O處理單元,適用於更復雜的控制系統。

九十年代以後,單片機獲得了飛速的發展,世界各大半導體公司相繼開發了功能更為強大的單片機。美國Microchip公司發布了一種完全不兼容MCS-51的新一代PIC系列單片機,引起了業界的廣泛關注,特別它的產品只有33條精簡指令集吸引了不少用戶,使人們從INTEL的111條復雜指令集中走出來。PIC單片機獲得了快速的發展,在業界中佔有一席之地。

隨後的事情,熟悉單片機的人士都比較清楚了,更多的單片機種蜂擁而至,MOTOROLA公司相繼發布了MC68HC系列單片機,日本的幾個著名公司都研製出了性能更強的產品,但日本的單片機一般均用於專用系統控制,而不象INTEL等公司投放到市場形成通用單片機。例如NEC公司生產的uCOM87系列單片機,其代表作uPC7811是一種性能相當優異的單片機。MOTOROLA公司的MC68HC05系列其高速低價等特點贏得了不少用戶。

1990年美國INTEL公司推出了80960超級32位單片機引起了計算機界的轟動,產品相繼投放市場,成為單片機發展史上又一個重要的里程碑。

我國開始使用單片機是在1982年,短短五年時間里發展極為迅速。1986年在上海召開了全國首屆單片機開發與應用交流會,有的地區還成立了單片微型計算機應用協會,那是全國形成的第一次高潮。截止今日,單片機應用技術飛速發展,我們上網際網路輸入一個「單片機」的搜 索,將會看到上萬個介紹單片機的網站,這還不包括國外的。隨著微電子技術的高速發展,單片機在國民經濟的各個領域得到了廣泛的應用。首先,單片機技術不斷進步,出現了許多新的技術和新的產品。本文以Intel MCS-51系列單片機為模型,闡述單片機的一般原理、應用以及單片機的影響,較為詳細地介紹當前主要單片機廠家的產品系列及發展動向。主要內容包括:單片機的基本原理、硬體結構、發展趨勢以及具體的應用介紹。本文主要目的是想讓大家對單片機有一個更為深入的了解。

科技的進步需要技術不斷的提升。試想,曾經一塊大而復雜的模擬電路花費了您巨大的精力,繁多的元器件增加了您的成本。而現在,只需要一塊幾厘米見方的單片機,寫入簡單的程序,就可以使您以前的電路簡單很多。相信您在使用並掌握了單片機技術後,不管在您今後開發或是工作上,一定會帶來意想不到的驚喜。

數字鍾的發展:1350年6月6日,義大利人喬萬尼·德·黨笛製造了世界上第一台結構簡單的機械打點多功能數字鍾,由於數字鍾報價便宜,功能齊全,因此很快受到眾多用戶的喜愛。1657年,荷蘭人惠更斯率先把重力擺引入機械鍾,進而才創立了擺鍾。

到了20世紀以後,隨著電子工業的快速發展,電池驅動鍾、交流電鍾、電機械表、指針式石英電子鍾表以及數字顯示式石英鍾表相繼問世,數字鍾報價非常合理,再加上產品的不斷改良,多功能數字鍾的日差已經小於0.5秒,因此受到廣大用戶的青睞。尤其是原子鍾的出現,它是使用原子的振動來控制計時的,是目前世界上最精準的時鍾,即使經過將近100萬年,其偏差也不可能超過1秒鍾。

多功能數字鍾最早是在歐洲中世紀的教堂,屬於完全機械式結構,動力使用重錘,打點鍾聲完全使用人工進行撞擊鑄鍾,所以當時一個多功能數字鍾工程在建築與機械結構方面是非常復雜的,進而影響了數字鍾報價。進入電子時代以後,電子多功能數字鍾也相繼問世。我國電子多功能數字鍾行業從80年代開始漸漸成長壯大,目前不僅數字鍾報價合理,在技術和應用水平上也已經達到世界同類水平。

4. 國內外現狀和發展趨勢:

縱觀單片機的發展過程,可以預示單片機的發展趨勢,大致有:

1.低功耗CMOS化

MCS-51系列的8031推出時的功耗達630mW,而現在的單片機普遍都在100mW左右,隨著對單片機功耗要求越來越低,現在的各個單片機製造商基本都採用了CMOS(互補金屬氧化物半導體工藝)。象80C51就採用了HMOS(即高密度金屬氧化物半導體工藝)和CHMOS(互補高密度金屬氧化物半導體工藝)。CMOS雖然功耗較低,但由於其物理特徵決定其工作速度不夠高,而CHMOS則具備了高速和低功耗的特點,這些特徵,更適合於在要求低功耗象電池供電的應用場合。所以這種工藝將是今後一段時期單片機發展的主要途徑。

2.微型單片化

現在常規的單片機普遍都是將中央處理器(CPU)、隨機存取數據存儲(RAM)、只讀程序存儲器(ROM)、並行和串列通信介面,中斷系統、定時電路、時鍾電路集成在一塊單一的晶元上,增強型的單片機集成了如A/D轉換器、PMW(脈寬調制電路)、WDT(看門狗)、有些單片機將LCD(液晶)驅動電路都集成在單一的晶元上,這樣單片機包含的單元電路就更多,功能就越強大。甚至單片機廠商還可以根據用戶的要求量身定做,製造出具有自己特色的單片機晶元。

此外,現在的產品普遍要求體積小、重量輕,這就要求單片機除了功能強和功耗低外,還要求其體積要小。現在的許多單片機都具有多種封裝形式,其中SMD(表面封裝)越來越受歡迎,使得由單片機構成的系統正朝微型化方向發展。

3.主流與多品種共存

現在雖然單片機的品種繁多,各具特色,但仍以80C51為核心的單片機佔主流。所以C8051為核心的單片機占據了半壁江山。而Microchip公司的PIC精簡指令集(RISC)也有著強勁的發展勢頭,中國台灣的HOLTEK公司近年的單片機產量與日俱增,與其低價質優的優勢,占據一定的市場分額。此外還有MOTOROLA公司的產品,日本幾大公司的專用單片機。在一定的時期內,這種情形將得以延續,將不存在某個單片機一統天下的壟斷局面,走的是依存互補,相輔相成、共同發展的道路。

;

B. 51單片機關於密碼鎖的畢業設計,論文

程序設計內容

(1). 密碼的設定,在此程序中密碼是固定在程序存儲器ROM中,假設預設的密碼為「12345」共5位密碼。

(2). 密碼的輸入問題:由於採用兩個按鍵來完成密碼的輸入,那麼其中一個按鍵為功能鍵,另一個按鍵為數字鍵。在輸入過程中,首先輸入密碼的長度,接著根據密碼的長度輸入密碼的位數,直到所有長度的密碼都已經輸入完畢;或者輸入確認功能鍵之後,才能完成密碼的輸入過程。進入密碼的判斷比較處理狀態並給出相應的處理過程。

(3).按鍵禁止功能:初始化時,是允許按鍵輸入密碼,當有按鍵按下並開始進入按鍵識別狀態時,按鍵禁止功能被激活,但啟動的狀態在3次密碼輸入不正確的情況下發生的。

C語言源程序

#includeunsignedcharcodeps[]={1,2,3,4,5};

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,                              

0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsignedcharpslen=9;unsignedchartemplen;

unsignedchardigit;unsignedcharfuncount;

unsignedchardigitcount;

unsignedcharpsbuf[9];

bitcmpflag;

bithibitflag;

biterrorflag;

bitrightflag;

unsignedintsecond3;

unsignedintaa;

unsignedintbb;

bitalarmflag;

bitexchangeflag;

unsignedintcc;

unsignedintdd;

bitokflag;

unsignedcharoka;

unsignedcharokb;

voidmain(void)

{ 

unsignedchari,j; 

P2=dispcode[digitcount]; 

TMOD=0x01; 

TH0=(65536-500)/256; 

TL0=(65536-500)%6; 

TR0=1; 

ET0=1; 

EA=1; 

while(1)  

 {     

if(cmpflag==0)       

{         

if(P3_6==0)//functionkey          

 {             

for(i=10;i>0;i--)             

for(j=248;j>0;j--);     

        if(P3_6==0)               

{               

  if(hibitflag==0)      

             {    

                 funcount++; 

                    if(funcount==pslen+2)

                       { 

                        funcount=0;

                         cmpflag=1;

                        }

                      P1=dispcode[funcount];

                   }

                   else

                     {

                        second3=0;

                     } 

                while(P3_6==0);

               }

           }

         if(P3_7==0)//digitkey

           {

             for(i=10;i>0;i--)

             for(j=248;j>0;j--);

             if(P3_7==0)

               {

                 if(hibitflag==0)

                   {

                     digitcount++; 

                 if(digitcount==10)

                       {

                         digitcount=0;

                       }

                     P2=dispcode[digitcount];

                     if(funcount==1)

                       {

                         pslen=digitcount;                         

templen=pslen;

                       }

                       elseif(funcount>1)

                         { 

                          psbuf[funcount-2]=digitcount;

                         }

                   }

                   else

                     {

                       second3=0;

                     }

                 while(P3_7==0);

               }

           }

       } 

      else

         {

           cmpflag=0;

           for(i=0;i

             { 

              if(ps[i]!=psbuf[i])

                 {

                   hibitflag=1;

                   i=pslen;

                   errorflag=1;

                   rightflag=0;

                   cmpflag=0;

                   second3=0;

                   gotoa; 

                }

             }  

         cc=0; 

          errorflag=0; 

          rightflag=1;

           hibitflag=0;

a:   cmpflag=0;

         }

}

}

voidt0(void)

interrupt1using0{ TH0=(65536-500)/256; 

TL0=(65536-500)%6; 

if((errorflag==1)&&(rightflag==0)) 

{

     bb++;

     if(bb==800)

       {

         bb=0;

         alarmflag=~alarmflag;

       }

     if(alarmflag==1)

       {

         P0_0=~P0_0;

       }

     aa++;

     if(aa==800)

       {

         aa=0;

         P0_1=~P0_1;

       }

     second3++;

     if(second3==6400)

       {

         second3=0;

         hibitflag=0;

         errorflag=0;

         rightflag=0;

         cmpflag=0;

         P0_1=1; 

        alarmflag=0;

         bb=0; 

        aa=0; 

      }

   }

 if((errorflag==0)&&(rightflag==1))

   {

     P0_1=0;

     cc++;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(cc<1000)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=1;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elseif(cc<2000)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errorflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rightflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hibitflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmpflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_1=1;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc=0;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=0;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=1;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(okflag==1)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka++;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(oka==2)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=~P0_0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb++;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(okb==3)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=~P0_0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;}

}

C. 基於單片機的電子密碼鎖設計

功能鍵
S6---S15 數字鍵0-9
S16---更改密碼 S17---更改密碼完畢後確認
S18---重試密碼、重新設定 S19---關閉密碼鎖
初始密碼:000000 密碼位數:6位
注意:掉電後,所設密碼會丟失,重新上點時,密碼恢復為原始的000000
與P1相連的8位發光LED點亮代表鎖被打開;熄滅代表鎖被鎖上

程序功能: 本程序結合了24C02存儲器的存儲功能,可以掉電保存密碼。
第一次運行時,若輸入000000原始密碼後無反應,可以試驗著將主程序中前面的
一小段被注釋線屏蔽的程序前的注釋線刪掉,然後重新編譯下載(可以將密碼還原為000000)。
此後,再將這小段程序屏蔽掉,再編譯下載。方可正常使用。
1、開鎖:
下載程序後,直接按六次S7(即代表數字1),8位LED亮,鎖被打開,輸入密碼時,
六位數碼管依次顯示小橫杠。
2、更改密碼:
只有當開鎖(LED亮)後,該功能方可使用。
首先按下更改密碼鍵S16,然後設置相應密碼,此時六位數碼管會顯示設置密碼對應
的數字。最後設置完六位後,按下S17確認密碼更改,此後新密碼即生效。
3、重試密碼:
當輸入密碼時,密碼輸錯後按下鍵S18,可重新輸入六位密碼。
當設置密碼時,設置中途想更改密碼,也可按下此鍵重新設置。
4、關閉密碼鎖:
按下S19即可將打開的密碼鎖關閉。
推薦初級演示步驟:輸入原始密碼000000---按下更改密碼按鍵S16---按0到9設置密碼---按S17
確認密碼更改---按S18關閉密碼鎖---輸入新的密碼打開密碼鎖
*******************************************************************************/
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

uchar old1,old2,old3,old4,old5,old6; //原始密碼000000
uchar new1,new2,new3,new4,new5,new6; //每次MCU採集到的密碼輸入
uchar a=16,b=16,c=16,d=16,e=16,f=16; //送入數碼管顯示的變數
uchar wei,key,temp;

bit allow,genggai,ok,wanbi,retry,close; //各個狀態位

sbit la=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
sbit sda=P2^0; //IO口定義
sbit scl=P2^1;

unsigned char code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};

/*****************IIC晶元24C02存儲器驅動程序************************************/

void nop()
{
_nop_();
_nop_();
}
/////////24C02讀寫驅動程序////////////////////
void delay1(unsigned int m)
{ unsigned int n;
for(n=0;n<m;n++);
}

void init() //24c02初始化子程序
{
scl=1;
nop();
sda=1;
nop();
}

void start() //啟動I2C匯流排
{
sda=1;
nop();
scl=1;
nop();
sda=0;
nop();
scl=0;
nop();
}

void stop() //停止I2C匯流排
{
sda=0;
nop();
scl=1;
nop();
sda=1;
nop();
}

void writebyte(unsigned char j) //寫一個位元組
{
unsigned char i,temp;
temp=j;
for (i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
nop();
sda=CY; //temp左移時,移出的值放入了CY中
nop();
scl=1; //待sda線上的數據穩定後,將scl拉高
nop();
}
scl=0;
nop();
sda=1;
nop();
}

unsigned char readbyte() //讀一個位元組
{
unsigned char i,j,k=0;
scl=0; nop(); sda=1;
for (i=0;i<8;i++)
{
nop(); scl=1; nop();
if(sda==1)
j=1;
else
j=0;
k=(k<<1)|j;
scl=0;
}
nop();
return(k);
}

void clock() //I2C匯流排時鍾
{
unsigned char i=0;
scl=1;
nop();
while((sda==1)&&(i<255))
i++;
scl=0;
nop();
}

////////從24c02的地址address中讀取一個位元組數據/////
unsigned char read24c02(unsigned char address)
{
unsigned char i;
start();
writebyte(0xa0);
clock();
writebyte(address);
clock();
start();
writebyte(0xa1);
clock();
i=readbyte();
stop();
delay1(100);
return(i);
}

//////向24c02的address地址中寫入一位元組數據info/////
void write24c02(unsigned char address,unsigned char info)
{
start();
writebyte(0xa0);
clock();
writebyte(address);
clock();
writebyte(info);
clock();
stop();
delay1(5000); //這個延時一定要足夠長,否則會出錯。因為24c02在從sda上取得數據後,還需要一定時間的燒錄過程。
}
/****************************密碼鎖程序模塊********************************************************/

void delay(unsigned char i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}

void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)
{
la=0;
P0=table[a];
la=1;
la=0;

wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);

P0=table[b];
la=1;
la=0;

P0=0xfd;
wela=1;
wela=0;
delay(5);

P0=table[c];
la=1;
la=0;

P0=0xfb;
wela=1;
wela=0;
delay(5);

P0=table[d];
la=1;
la=0;

P0=0xf7;
wela=1;
wela=0;
delay(5);

P0=table[e];
la=1;
la=0;

P0=0xef;
wela=1;
wela=0;
delay(5);

P0=table[f];
la=1;
la=0;

P0=0xdf;
wela=1;
wela=0;
delay(5);
}

void keyscan()
{
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
wei++;
break;

case 0xde:
key=1;
wei++;
break;

case 0xbe:
key=2;
wei++;
break;

case 0x7e:
key=3;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
wei++;
break;

case 0xdd:
key=5;
wei++;
break;

case 0xbd:
key=6;
wei++;
break;

case 0x7d:
key=7;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
wei++;
break;

case 0xdb:
key=9;
wei++;
break;

case 0xbb:
genggai=1;
wei=0;
break;

case 0x7b:
if(allow)
ok=1;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:
retry=1;
break;

case 0xd7:
close=1;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
}
}

void shumima() //對按鍵採集來的數據進行分配
{
if(!wanbi)
{
switch(wei)
{
case 1:new1=key;
if(!allow) a=17;
else a=key; break;
case 2:new2=key;
if(a==17) b=17;
else b=key; break;
case 3:new3=key;
if(a==17) c=17;
else c=key; break;
case 4:new4=key;
if(a==17) d=17;
else d=key; break;
case 5:new5=key;
if(a==17) e=17;
else e=key; break;
case 6:new6=key;
if(a==17) f=17;
else f=key;
wanbi=1; break;
}
}
}

void yanzheng() //驗證密碼是否正確
{
if(wanbi) //只有當六位密碼均輸入完畢後方進行驗證
{
if((new1==old1)&(new2==old2)&(new3==old3)&(new4==old4)&(new5==old5)&(new6==old6))
allow=1; //當輸入的密碼正確,會得到allowe置一
}
}

void main()
{

init(); //初始化24C02
/*********下面的一小段程序的功能為格式化密碼存儲區。************
******當24c02中這些存儲區由於其他程序的運行而導致***************
*******所存數據發生了變化,或者密碼遺忘時, ********************
******可以刪掉其前面的注釋線,然後重新編譯下載。****************
******而將密碼還原為000000後,請將下面的程序用******************
******注釋屏蔽掉,重新編譯、下載,方可正常使用****************/
// write24c02(110,0x00);
// write24c02(111,0x00);//24c02的第110到115地址單元作為密碼存儲區
// write24c02(112,0x00);
// write24c02(113,0x00);
// write24c02(114,0x00);
// write24c02(115,0x00);
/*******************************************************************/

old1=read24c02(110);
old2=read24c02(111);
old3=read24c02(112);
old4=read24c02(113);
old5=read24c02(114);
old6=read24c02(115);

while(1)
{
keyscan();
shumima();
yanzheng();
if(allow) //驗證完後,若allow為1,則開鎖
{
P1=0x00;
if(!genggai)
wanbi=0;
}
if(genggai) //當S16更改密碼鍵被按下,genggai會被置一
{
if(allow) //若已經把鎖打開,才有更改密碼的許可權
{
while(!wanbi) //當新的六位密碼沒有設定完,則一直在這里循環
{
keyscan();
shumima();
if(retry|close) //而當探測到重試鍵S18或者關閉密碼鎖鍵S19被按下時,則跳出
{ wanbi=1;
break;
}
display(a,b,c,d,e,f);
}
}
}
if(ok) //更改密碼時,當所有六位新密碼均被按下時,可以按下此鍵,結束密碼更改
{ //其他時間按下此鍵無效
ok=0; wei=0;
genggai=0;
old1=new1;old2=new2;old3=new3; //此時,舊的密碼將被代替
old4=new4;old5=new5;old6=new6;
//新密碼寫入存儲區。
write24c02(110,old1);
write24c02(111,old2);
write24c02(112,old3);
write24c02(113,old4);
write24c02(114,old5);
write24c02(115,old6);
a=16;b=16;c=16;d=16;e=16;f=16;
}
if(retry) //當重試按鍵S18被按下,retry會被置位
{
retry=0; wei=0;wanbi=0;
a=16;b=16;c=16;d=16;e=16;f=16;
new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;
}
if(close) //當關閉密碼鎖按鍵被按下,close會被置位
{
close=0;genggai=0;//所有變數均被清零。
wei=0; wanbi=0;
allow=0;
P1=0xff;
a=16;b=16;c=16;d=16;e=16;f=16;
new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;
}
display(a,b,c,d,e,f); //實時顯示
}
}
對著代碼自己做吧,,要是還做不出來,,那我就不說什麼了,,

D. 基於單片機課程設計密碼鎖

採用數字密碼鎖電路的好處就是設計簡單。用以74LS112雙JK觸發器構成的數字邏輯電路作為密碼鎖的核心控制,共設了9個用戶輸入鍵,其中只有4個是有效的密碼按鍵,其它的都是干擾按鍵,若按下干擾鍵,鍵盤輸入電路自動清零,原先輸入的密碼無效,需要重新輸入;如果用戶輸入密碼的時間超過40秒(一般情況下,用戶不會超過40秒,若用戶覺得不便,還可以修改)電路將報警80秒,若電路連續報警三次,電路將鎖定鍵盤5分鍾,防止他人的非法操作。
電路由兩大部分組成:密碼鎖電路和備用電源(UPS),其中設置UPS電源是為了防止因為停電造成的密碼鎖電路失效,使用戶免遭麻煩。
密碼鎖電路包含:鍵盤輸入、密碼修改、密碼檢測、開鎖電路、執行電路、報警電路、鍵盤輸入次數鎖定電路。

閱讀全文

與基於單片機的密碼鎖設計答辯相關的資料

熱點內容
編程思想和能力的書 瀏覽:149
linux基本命令實驗報告 瀏覽:250
博途畫面編譯錯誤 瀏覽:146
ios14給某個app加密 瀏覽:602
小福牛app傭金在哪裡查 瀏覽:240
java獲取imei 瀏覽:385
wpf程序反編譯 瀏覽:737
delphi編譯器是什麼 瀏覽:568
pdf連圖 瀏覽:250
重慶空氣壓縮機廠 瀏覽:591
nsa消息加密由哪個層執行 瀏覽:412
surface3編程 瀏覽:77
蘋果app編譯失敗 瀏覽:376
游戲語言反編譯應用 瀏覽:399
小新列印加密文件 瀏覽:566
android開發簡單實例 瀏覽:606
編譯器生成構造函數 瀏覽:12
蘋果解壓專家佔用內存 瀏覽:935
桌面屏蔽文件夾 瀏覽:132
修改aix默認加密演算法 瀏覽:663