曾晶畢業(yè)論文設(shè)計.doc_第1頁
曾晶畢業(yè)論文設(shè)計.doc_第2頁
曾晶畢業(yè)論文設(shè)計.doc_第3頁
曾晶畢業(yè)論文設(shè)計.doc_第4頁
曾晶畢業(yè)論文設(shè)計.doc_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

健雄職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(論文)緒論目前,全球印制電路板(Printed Circuit Board,簡稱為PCB)產(chǎn)業(yè)產(chǎn)值占電子元件產(chǎn)業(yè)總產(chǎn)值的四分之一以上,是各個電子元件細(xì)分產(chǎn)業(yè)中比重最大的產(chǎn)業(yè),產(chǎn)業(yè)規(guī)模達(dá)400億美元。同時,由于其在電子基礎(chǔ)產(chǎn)業(yè)中的獨特地位,已經(jīng)成為當(dāng)代電子元件業(yè)中最活躍的產(chǎn)業(yè),2003和2004年,全球PCB產(chǎn)值分別是344億美元和401億美元,同比增長率分別為527和1647。我國的PCB研制工作始于1956年,19631978年,逐步擴(kuò)大形成PCB產(chǎn)業(yè)。改革開放后20多年,由于引進(jìn)國外先進(jìn)技術(shù)和設(shè)備,單面板、雙面板和多層板均獲得快速發(fā)展,國內(nèi)PCB產(chǎn)業(yè)由d,N大逐步發(fā)展起來。2002年,中國PCB產(chǎn)值超過臺灣,成為第三大PCB產(chǎn)出國。2003年,PCB產(chǎn)值和進(jìn)出口額均超過60億美元,成為世界第二大PCB產(chǎn)出國。2005年中國PCB的產(chǎn)量為11057億平方米, 產(chǎn)值達(dá)到969億人民幣(折約107億美元),產(chǎn)值及進(jìn)出口總額雙超100億美元p4l。PCB的產(chǎn)值將首次超過日本(據(jù)預(yù)測日本2005年產(chǎn)值約96億美元),成為世界PCB 第一生產(chǎn)大國。 國外尤其是歐洲、美國和同本PCB研制丌發(fā)和生產(chǎn)較早,廢水處理也起步較早,在20世紀(jì)70年代已刀:始進(jìn)行PCB廢水污染及其治理方法的研究。早期主要應(yīng)用混凝沉淀、活性碳、離子交換等工藝進(jìn)行處理PCB廢水。這此方法工藝只是針對PCB廢水中的某些成份進(jìn)行處理,隨著PCB行業(yè)的發(fā)展,產(chǎn)品越來越豐富, 生產(chǎn)工藝也越來越復(fù)雜,體現(xiàn)在PCB藥劑成份更多更復(fù)雜,生產(chǎn)流程更長技術(shù)含量更高,PCB廢水污染物的種類多、濃度高,環(huán)境保護(hù)要求也更嚴(yán)格,原來處理某種單一污染物或某一類廢水的工藝越來越不適應(yīng)發(fā)展的要求,于是,又相繼研究開發(fā)了新的處理方法,能同時去除多種重金屬離子和有機(jī)污染物。這此方法具有代表性有氣態(tài)凝聚法、膠束增強超濾法、重捕劑法和反滲透膜法等。氣態(tài)凝聚電過濾法是美國在80年代開發(fā)出來的一種不加化學(xué)藥劑的新穎廢水處理法,屬于一種物理方法來處理印制電路板廢水。包括三個部分,第一部分是離子化氣體發(fā)生器,空氣被吸入該發(fā)生器,能過離子化磁場改變其化學(xué)結(jié)構(gòu),變成高度活化的磁性氧離子和氮離子,用射流裝置把這種氣體引入廢水中,使廢水中的金屬離子、有機(jī)物等有害物質(zhì)氧化并聚集成團(tuán),易于過濾除去;第二部分是電解質(zhì)過濾器,過濾除去第一部產(chǎn)生的聚團(tuán)物質(zhì):第三部分是高速紫外線照射裝置,紫外線射入水中可氧化有機(jī)物和化學(xué)絡(luò)合劑,降低CODer和BOD5。目前,已開發(fā)出成套一體化設(shè)備可直接應(yīng)用 國外八十年代以來開始研究一種新的水處理技術(shù),以去除廢水中的有機(jī)污染物和金屬離子,即膠束增強超濾法(Mieellar-enhaneed ultrafiltration,簡稱MEUF3,這是一種將表面活性劑和超濾膜耦合起來的新技術(shù)。某些陰離子與陽離子或非離子表面活性劑混合后具有協(xié)同作用,能形成較大的膠束,增強對金屬離子的去除效果。膠束增強超濾法處理印制電路板廢水具有工藝簡單、處理效果好的特點,適用于處理濃度較低的印制電路板廢水。砷垤T(三巰三嗪三鈉鹽)是最近美國開發(fā)的一種新型重金屬沉淀劑,具有以下優(yōu)點:pH值應(yīng)用范圍廣,在pH=4ll范圍內(nèi)都有絮凝效果;具有巨大的凝聚力, 生成絮狀物體積大,沉降速度快;對水中多種重金屬都具有去除效果;不僅能有效地去除水中的懸浮物,而且還能去除水中的CODer、BOD5、色度、硫化物和惡臭等;對絡(luò)合廢水有破絡(luò)作用。1 本設(shè)計課題的背景及現(xiàn)狀1.1國內(nèi)環(huán)境保護(hù)帶來了嚴(yán)重影響PCB在給我國帶來經(jīng)濟(jì)發(fā)展的同時,也給國內(nèi)環(huán)境保護(hù)帶來了嚴(yán)重影響。特別是PCB用水量和排污量都較大“121310根據(jù)資料顯示,我國2004年P(guān)CB行業(yè)總用水量約】5x 100噸。未經(jīng)處理捧放的污水含有大量的有毒有害污染物,不但污染江河湖泊,而且嚴(yán)重污染地下水資源,印制線路板行業(yè)的環(huán)境保護(hù)問題更加突出。PCB廢水中含有大量的Cu2-、NP、Ag+、All+、Sna+Sn4+、pb2+等會屬離子, 含量變化較大,濃度高,成分復(fù)雜,形態(tài)不一,既有固體懸浮金屬顆粒,也有游離態(tài)非絡(luò)合金屬離子,同時還有絡(luò)合態(tài)的絡(luò)合金屬離子。這些金屬離子如不處理,直接捧放到自然界中,會對環(huán)境和人類造成極大的危害。Cu會引發(fā)呼吸系統(tǒng)病癥, Ni會引發(fā)各種皮炎、腸胃疾病和腫瘤,Pb會引發(fā)血液系統(tǒng)、泌尿系統(tǒng)等病癥。金屬離子不僅會對人類的健康造成損害,同時會對自然界的生物造成危害。淡水或海洋中的水生生物對水體中的金屬離子非常敏感,即使很低的濃度也會對其構(gòu)成威脅; 土壤或灌溉水中的金屬離子會對植物生長產(chǎn)生不利的影響,并且將在植物的葉莖或根部富集,以至影響波及整個食物鏈14 PCB廢水中還含有大量有機(jī)物,體現(xiàn)在混合廢水CODer可高達(dá)1000mgL。生產(chǎn)線排出的各種報廢濃缸液(無回收價值)及濃缸后水洗水含有大量的表面活性劑、油墨、綠油、有機(jī)分散劑、光亮劑、除油劑等高濃度的有機(jī)化合物。PCB廢水中還含有氨氮、氰化物、氟化物、磷等污染物。有機(jī)物質(zhì)在分解過程中大量消耗水中的溶解氧,可以使水體缺氧,致使大多數(shù)水生動物難以生存。有機(jī)物質(zhì)分解時放出氧,又會促使藻類及浮游植物大量生成,導(dǎo)致湖泊的加速淤塞。有機(jī)物質(zhì)形成的泡沫、浮垢和引起的渾濁、惡臭等,都足以降低水體的使用價值。廢水若沒有妥善處理就排放,造成受納水體污染、影響水體功能、破壞生態(tài)環(huán)境。氰化物是極毒的物質(zhì),廢水中的氰化物可以成為氰化氫氣體逸出,氰化物和氫氰酸能通過皮膚、肺、胃進(jìn)入體內(nèi)。氟化物能危害人的骨骼和皮膚。氨氮和磷是造成湖泊和近海富養(yǎng)鹽化的主要營養(yǎng)物質(zhì),每年造成極大的經(jīng)濟(jì)損失。1.2擇應(yīng)綜合考慮各處理工藝的優(yōu)缺點工藝選選擇經(jīng)濟(jì)、有效、方便、安全的工藝組合。不僅要注重廢水的處理工藝,還要從環(huán)保角度熟悉PCB生產(chǎn)線的特點, 掌握PCB廢水分類的方法。各類廢水的調(diào)節(jié)池(收集池)的容積應(yīng)不小于一個班的廢水排放量。調(diào)節(jié)池(收集池)應(yīng)設(shè)置攪拌混合裝置,將水質(zhì)混合均勻。由于PCB企業(yè)產(chǎn)品種類、生產(chǎn)工藝、產(chǎn)品比例的不同,PCB廢水的水量及水質(zhì)成分就會有明顯差異;各個地區(qū)執(zhí)行的排放標(biāo)準(zhǔn)的差異、PCB企業(yè)的廢水循環(huán)回用率的不同、企業(yè)排放的水量大小,都會對PCB廢水的處理工藝的選擇產(chǎn)生一定的影響。PCB廢水分類較多,要統(tǒng)籌考慮每股水的處理和每種污染物的去除,還要結(jié)合一般酸堿水洗水的稀釋能力的特點,選擇最優(yōu)化的工藝組合,降低投資和運行成本,確保廢水達(dá)標(biāo)捧放。1.3本設(shè)計課題的研究現(xiàn)狀我國R=B企業(yè)所產(chǎn)生的三廢治理還不能達(dá)到歐、美、閂等發(fā)達(dá)國家的水平。對于PCB 廢水的治理,國內(nèi)采用較多的處理方法有化學(xué)沉淀法、鐵屑混合物微電解法、生化法、離子交換法、化學(xué)氧化法等,各有優(yōu)劣。這些技術(shù)在處理PCB廢水中的某種污染物方面都有一定的優(yōu)勢,也有成功的PCB廢水處理實例。國內(nèi)的PCB處理與國外的差距主要在以下幾個方面。第一:PCB企業(yè)環(huán)保意識、環(huán)保管理上有差距,比不上歐美同等國家; 第二:環(huán)保投資上有差距,預(yù)留的廢水處理設(shè)施面積狹窄,投資較少,設(shè)備和儀表產(chǎn)品質(zhì)量較低檔; 第三:環(huán)保監(jiān)管不到位,標(biāo)準(zhǔn)的執(zhí)行差異較大。第四:廢水分流不徹底和治理工藝不完善,PCB廢水處理技術(shù)上也有不少差距。上述的四個方面,前三個方面不是本次研究的內(nèi)容,本研究著重在第四個方面具體來說,許多PcB廢水處理不達(dá)標(biāo),是因為沒有對生產(chǎn)線排水合理的分類收集;只所以沒有合理的分類收集,是因為不了解生產(chǎn)線,不了解生產(chǎn)線的排污特點,因而也就無法有效地將p(m廢水合理地分類。PCB廢水治理方法也經(jīng)歷了一個過程,從最初的只注重重金屬污染物的去除,到目前的全因子達(dá)標(biāo)監(jiān)控,氨氮、CODer等污染物的去除也成為PCB廢水治理的重點。在目前國內(nèi)環(huán)保投資還不是很到位的情況下,PCB廢水的治理技術(shù)(或工藝)優(yōu)化組合,對于降低投資和節(jié)約運行成本都具有重要意義。2.1系統(tǒng)設(shè)計方案 按鍵輸入顯示與聲音輸出開鎖電源部分AT89C51圖1 系統(tǒng)組成鍵盤按鍵密碼輸入,送AT89C51處理,顯示輸出用于及時顯示按鍵輸入的數(shù)字,便于修改,聲音輸出當(dāng)密碼錯誤時候的報警信息,開鎖部分采用電磁鎖接受芯片送來的信號后自動開鎖。2.2系統(tǒng)功能本電子密碼鎖具備以下功能:1沒有set time時液晶顯示器只顯示當(dāng)時時間,在主界面下如果按set time 鍵,就可以重設(shè)時間。2在主界面下按set psw鍵后進(jìn)入設(shè)置密碼狀態(tài),密碼可在115 位范圍內(nèi)自由設(shè)置,最多達(dá)1015 種組合,使窮舉法套解密碼成為不可能。3在主界面下按input鍵后輸入密碼,密碼正確時,在輸出口1 輸出0.5 秒的高脈沖開鎖電平,在輸出口2 輸出0.5 秒的低脈沖開鎖電平,用于開鎖。如果連續(xù)三次輸入錯誤密碼,則啟動報警系統(tǒng)并鎖定鍵盤一段時間。4退格和按鍵提示功能。每次按鍵都有發(fā)光二極管發(fā)光和聲光提示音,用于指示按鍵有效。同時液晶顯示可以顯示所輸入的數(shù)字是不是錯誤,錯誤的話用退格修改并從輸入,可返回主界面。5系統(tǒng)設(shè)有超級用戶密碼,用于解除用戶忘記其所設(shè)密碼時使用,抑或當(dāng)密碼鎖用于賓館,房客走后,賓館管理員用于清除舊密碼。6在外部掉電時,內(nèi)部電源會使芯片繼續(xù)工作原來設(shè)置的密碼也不會丟失。2.3硬件部分的相關(guān)介紹2.3.1 AT89C51 簡介AT89C51 是美國Atmel 公司生產(chǎn)的低功耗,高性能CMOS 8 位單片機(jī),片內(nèi)含4k bytes的系統(tǒng)可編程的Flash 只讀程序存儲器,器件采用Atmel 公司的高密度,非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)8051 指令系統(tǒng)及引腳。它集成Flash 程序存儲器,既可在線編程(ISP)也可采用傳統(tǒng)的方法進(jìn)行編程。集8 位微處理器于單片芯片中,功能強大,價位低的AT89C51 提供許多高性價比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域。AT89C51的功能與結(jié)構(gòu)如下: 128 字節(jié)內(nèi)部RAM,32 個I/O 口線, 4K 字節(jié)Flash 閃速存儲器,看門狗(WDT),兩個16 位定時/計數(shù)器,兩個數(shù)據(jù)指針,一個5 向量兩級中斷結(jié)構(gòu),片內(nèi)振蕩器及時鐘電路,同時AT89C51 可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式,空閑方式停止CPU 的工作,但允許RAM 定時/計數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM 中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復(fù)位。2.3.2 1602 液晶顯示器簡介LCD顯示大體分為字符型液晶、點陣圖形液晶、筆段型液晶等幾大類。圖2 1602引腳液晶顯示模塊是一類專門用于顯示數(shù)字、字母、符號、圖形等的點陣型液晶顯示模塊,每一個點陣字符位都可以顯示一個字符,點陣字符位之間的一個點距的間隔起字符間距和行距的作用。它是由若干個57 或511 等點陣字符組成。液晶顯示模塊LCD1602 的引腳功能如下:LCD1602 的引腳功能排列如上圖2所示,它采用的是16 腳接口,而且引腳都分布在LCD1602的一側(cè)使用時只要把對應(yīng)的電源、數(shù)據(jù)線等接好就可以其中:第1 腳:VSS 為電源第2 腳:VDD 接地第3 腳:V0 用于調(diào)節(jié)LCD1602的亮度,為液晶顯示器對比度調(diào)整端,很多時候液晶顯示沒顯示可能就是這里的原因,LCD 驅(qū)動電壓范圍為VDDVO 接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可通過一個10K 的電位器調(diào)整對比度。第4 腳:RS 為寄存器選擇位,低電平時選擇命令寄存器IR、高電平時選擇數(shù)據(jù)寄器DR。第5 腳:RW 為讀寫控制位,高電平時進(jìn)行讀操作。當(dāng)RS 和RW共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS 為低電平RW 為高電平時可以讀忙信號,當(dāng)RS 為高電平RW 為低電平時可以寫入數(shù)據(jù)。第6 腳:Enable 端為使能控制位,當(dāng)E 端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714 腳:D0D7 為8 位的雙向數(shù)據(jù)總線。第1516 腳:背光燈的正負(fù)極圖3 1602的內(nèi)部框圖2液晶顯示模塊1602 的內(nèi)部結(jié)構(gòu)液晶顯示模塊LCD1602 的內(nèi)部結(jié)構(gòu)如上圖3所示,它主要由CGROM、CGRAM、DDRAM、BF、IR、DR、AC 等大規(guī)模集成電路組成。2.3.3 Protel99SE簡介Protel99se主要組成軟件有:原理圖編輯器(advanced schematic ) 用于原理圖的輸入、編輯、查錯。仿真器(Simulator)用于對原理圖的仿真,包含了常用的直流、交流特性、瞬態(tài)響應(yīng)等常用的仿真測度,并可以查看波形。PCB編輯器(Advanced PCB)用于PCB的設(shè)計、查錯。PLD設(shè)計工具(PLD designer)簡單PLD的設(shè)計工具。文本編輯器(Text editor)用于說明文檔、網(wǎng)絡(luò)表等的編輯,不支持中文。表格處理軟件(Spread)用于處理元件表,相當(dāng)于excel 97。Protel 99se集成了從原理圖設(shè)計、仿真到PCB過程中可能涉及到的常用工具,只用它幾科可以完成整個設(shè)計的所有工作,功能非常強大,需要一定的時間與精力去學(xué)習(xí)。Protel 99 的主要特點:1集成設(shè)計管理系統(tǒng)(Design Explore)2使用了智能工具(SmartTool)技術(shù),在設(shè)計環(huán)境中集成了所有設(shè)計所用到的工具。3使用了智能文檔(SmartDoc)管理技術(shù),把所有設(shè)計時用到的文檔都保存在一個數(shù)據(jù)庫中,在工作中可以使用各種文檔。4使用了智能組(SmartTeam)管理技術(shù),允許多個設(shè)計者通過網(wǎng)絡(luò)安全地為同一工程工作。通過集成的設(shè)計管理系統(tǒng),可以方便地管理用戶、設(shè)置訪問權(quán)限等。5提供了功能強大的各種文檔的快速瀏覽工具,使用戶可以快速方便地查詢、定位、修改文檔。6提供了全面而方便使用的幫助系統(tǒng)3。2.4 各個硬件模塊的設(shè)計2.4.1 電源部分的設(shè)計電源部分是先通過一個變壓器把220 伏的交流電變換為9 伏的交流電,再通過全橋整流電路整流成單向脈動的直流電,大容量電解電容C1 用于使脈動的直流電波形更加平直,C2 用于抵消輸入線較長時的電感效應(yīng),以防止電路產(chǎn)生自激振蕩,其容量較小,一般小于1F。在輸出端加接電容C6,一般取值0.1F,其目的是改善負(fù)載的瞬態(tài)響應(yīng)、防止自激振蕩和減少高頻聲,輸出端輸出較為穩(wěn)定的5V 電壓為整個系統(tǒng)提供工作電壓。E為備用電池一端接地另一端通過二極管接電源,當(dāng)芯片工作時,二極管反向,當(dāng)?shù)綦姇r,二極管正向?qū)?,繼續(xù)工作。圖4電源部分2.4.2最小系統(tǒng)部分的設(shè)計最小部分的設(shè)計如下圖5所示,時鐘周期是芯片工作時候的最小周期,時鐘電路是計算機(jī)的心臟,它控制著計算機(jī)的工作節(jié)奏。AT89C51內(nèi)部有一個帶反饋的線性反相放大器,外接晶振(或陶瓷諧振器)和電容就組成振蕩器,產(chǎn)生時鐘送至單片機(jī)的內(nèi)部工作部件。加電以后延遲一段時間(約10ms)振蕩起振產(chǎn)生時鐘,不受軟件控制(XTAL2輸出幅度為3V左右的正弦波)。振蕩器產(chǎn)生的時鐘頻率主要由晶振上標(biāo)明的頻率參數(shù)確定,電容C4和C5的作用有兩個:其一是使振蕩器起振,其二是對振蕩器的頻率f起微調(diào)作用(C4、C5變大,則f變小),其值一般是30pF左右。復(fù)位電路由電容串聯(lián)電阻構(gòu)成,復(fù)位電路的基本功能是:系統(tǒng)上電時提供復(fù)位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號。 圖5 最小系統(tǒng)部分2.4.3輸出部分的設(shè)計輸出部分主要包括聲光提示部分和電磁鎖部分。圖中三極管Q1 工作于飽和狀態(tài),復(fù)位后單片機(jī)輸出口的初始狀態(tài)是高電平,三極管截止,蜂鳴器得不到工作電壓而不能發(fā)聲;當(dāng)用軟件控制此端口為低電平時,三極管導(dǎo)通,蜂鳴器得電而工作,發(fā)出聲音。通過程序控制此三極管的間歇導(dǎo)通和截止以及導(dǎo)通和截止的時間長短,就可以達(dá)到控制聲音頻率和發(fā)聲長短的目的,得到我們所需要的不同聲音。發(fā)光二極管LED1 和一個470 歐的電阻口串接到地,當(dāng)輸出口P3.4 為高電平時,發(fā)光二極管導(dǎo)通發(fā)光,當(dāng)輸出口為低電平時,發(fā)光二極管截止熄滅。在程序的初始化部分,要加一條clr p3.4 指令以熄滅此發(fā)光二極管。開鎖部分,使用了P3口的兩跟口線,實際應(yīng)用中應(yīng)加上光電隔離以及緩沖放大電路。光電隔離用于防止后面電路的尖峰脈沖干擾通過單片機(jī)端口串?dāng)_進(jìn)來,影響單片機(jī)的正常運行。緩沖放大電路進(jìn)行電平轉(zhuǎn)換和提高驅(qū)動能力以直接驅(qū)動電磁鎖。做好電磁鎖在市面上就可以買到這里就不介紹了。圖6 輸出部分2.4.4液晶接口部分的設(shè)計表1 1602 接口信號說明編號符號引腳說明編號符號引腳說明1VSS電源地9D2DATA I/O2VDD電源正極10D3DATA I/O3VL液晶顯示偏壓信號11D4DATA I/O4RS數(shù)據(jù)/命令選擇(H/L)12D5DATA I/O5R/W讀/寫選擇端(H/L)13D6DATA I/O6E使能信號14D7DATA I/O7D0DATA I/O15BLA背光源正極8D1DATA I/O16BLK背光源負(fù)極 LCD 接口設(shè)計可以分為8 位及4 位控制方式,由于本電路采用多達(dá)32 個I/O 口的AT89C51 芯片,不存在I/O 口資源使用緊張,不夠使用的情況,為方便程序的編寫,采用最為常見的8 位接口設(shè)計。V0 為液晶顯示器對比度調(diào)整端,LCD 驅(qū)動電壓范圍為VssVdd,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產(chǎn)生“鬼影”,故通過一個10K 的電位器調(diào)整顯示屏的對比度。15 和16 腳是液晶背光電壓輸入端,通過一 個單向自鎖開關(guān)控制背光的開啟和關(guān)閉。圖7液晶接口部分2.4.5系統(tǒng)PCB圖 通過自動布線和手工布線后得到的PCB圖 如下:圖8 PCB圖3軟件部分3.1軟件的總體編寫思路和流程圖整個流程采用調(diào)用子程序的方式增強可讀性,住循環(huán)為無限循環(huán),程序在KEIL C51的環(huán)境下運行。先調(diào)試出液晶驅(qū)動程序,鍵盤掃描程序兩個最基本的子程序,在需要使用時直接調(diào)用即可。在接下來的主循環(huán)中進(jìn)行時鐘的更新查詢和是否有按鍵的判斷,如果時間有更新(過了一秒)就轉(zhuǎn)去處理時間更新;如果有按鍵按下,則轉(zhuǎn)去按鍵處理,并判斷是否是相應(yīng)的幾個鍵,是就跳轉(zhuǎn)到相應(yīng)的功能模塊,不是則返回主界面。由于51 單片機(jī)架構(gòu)的原因,容易會受到外界干擾而出錯,故程序?qū)懲旰筮€要進(jìn)行進(jìn)行抗干擾方面的優(yōu)化。通過指令冗余,軟件陷阱等措施將受到干擾而亂飛的程序納入正軌。比如在未開的中斷入口處加入RETI 指令等等。在程序的按鍵部分加延時或者RS觸發(fā)器去鍵盤抖動。 圖9流程圖3.2各個軟件子模塊的編寫3.2.1 1602 液晶驅(qū)動程序表2 1602液晶時序參數(shù)時序參數(shù)符號極限值單位測試條件最小值典型值最大值E信號周期Tc400-ns引腳EE脈沖寬度Tpw150-nsE上升沿/下降沿時間Tr tf-25ns地址建立時間Tsp130-ns引腳E。RS。R/W地址保持時間Thd110-ns數(shù)據(jù)建立時間(讀操作)Td-100ns引腳DB9-DB7數(shù)據(jù)保持時間(讀操作)Thd220-ns數(shù)據(jù)建立時間(寫操作)Tsp240-ns數(shù)據(jù)保持時間(寫操作)Thd210-ns驅(qū)動程序:硬件端口定義及軟件資源分配:rs bit p1.4 ;/寄存器選擇線rw bit p1.5 ;/LCD 讀寫線en bit p1.6 ;/啟用控制線,高電平動作lcd equ p0 ;/LCD 雙向數(shù)據(jù)總線pos_flag bit 20h.0 ;/字符串顯示位置標(biāo)志,為0 時顯示在第一行;為1 時顯示在第二行blank equ 30h ;/清行時填入的空格個數(shù)控制變量 LCD 初始化:液晶顯示模塊1602 的控制指令1602 的控制指令共11 條,其中9 條針對命令寄存器IR 的,另外2 條是針對數(shù)據(jù)寄存器DR 的,具體指令如下表所列:表3 1602 指令表指令指令碼說明37usRSR/WD7D6D5D4D3D2D1D0清顯示0000000000152ms光標(biāo)返回0000000000光標(biāo)回到顯示器左上方152ms輸入方式00000001I/DS是否移動及移動方向37us顯示器開關(guān)控制0000001DCBD:顯示 C:光標(biāo) B:光標(biāo)閃爍37us移位000001S/CR/L*移動光標(biāo)及整體顯示37us功能設(shè)置00001DLNF*DL:數(shù)據(jù)位數(shù) N:數(shù)據(jù)行數(shù) F:字型37usCGRAM地址設(shè)置0001CGRAM的地址設(shè)置CGRAM地址37usDDRAM地址設(shè)置001DDRAM的地址設(shè)置DDRAM地址37us忙標(biāo)志/讀地址計數(shù)器件01BF地址計數(shù)器(AC)的值讀出忙標(biāo)志和AC的值37usCGRAM或DDRAM數(shù)據(jù)寫10寫數(shù)據(jù)將內(nèi)容寫入RAM中37usCGRAM或DDRAM數(shù)據(jù)讀11讀數(shù)據(jù)將內(nèi)容寫入RAM中讀出37us指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H指令3:光標(biāo)和顯示模式設(shè)置 I/D:光標(biāo)移動方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效指令4:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍指令5:光標(biāo)或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標(biāo)指令6:功能設(shè)置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符指令7:字符發(fā)生器RAM地址設(shè)置指令8:DDRAM地址設(shè)置指令9:讀忙信號和光標(biāo)地址 BF:為忙標(biāo)志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。指令10:寫數(shù)據(jù)指令11:讀數(shù)據(jù)init_lcd: mov a,#01h ;clr displaycall write_cmdmov a,#02hcall write_cmd ;clear address pointermov a,#06hcall write_cmd; mov a,#0fhmov a,#0chcall write_cmd ;cursor on,blinkmov a,#1chcall write_cmd ;display&cursor rotate rightmov a,#38hcall write_cmd;two lines,8 bits,5*7RetLCD 忙標(biāo)志位檢測程序RSR/WEDB0-DB7TSP1TrTpwThd1Thd2Valid DataTcTrTR圖10讀操作時序表4 狀態(tài)字說明STA7D7STA6D6STA5D5STA4D4STA3D3STA2D2STA1D1STA0D0STA0-6當(dāng)前數(shù)據(jù)地址指針的數(shù)值STA7讀寫操作使能1:禁止 0:允許對控制器每次進(jìn)行讀寫操作之前,都必須進(jìn)行讀寫檢測,確保STA7 為0check: push accmov lcd,#0ffhclr enclr rssetb rwsetb enck: nopjb lcd.7,ckclr enpop accRet寫指令子程序RSR/WEDB0-DB7Tsp2TrTpwPWTfThd1Thd1Tsp1TcValid DataThd2圖11 寫操作時序writec: call checkmov lcd,aclr enclr rsclr rwsetb ennopnopnopclr enRet寫數(shù)據(jù)子程序writed: call checkmov lcd,aclr ensetb rsclr rwsetb ennopnopnopclr enRet3.2.2鍵盤掃描程序鍵盤掃描程序主要有下面五個方面:1在主程序中判斷有無鍵閉合:其方法為在四根列線輸出全“0”,讀取四根行線的電平狀態(tài),若四根行線電平全為“1”,則鍵盤上沒有閉合鍵;若四根行線不全為1,則有鍵處于閉合狀態(tài)。2去除按鍵的機(jī)械抖動:其方法為判別到鍵盤上有鍵閉合后,延遲一段時間再判別鍵盤的狀態(tài),若仍有按鍵閉合,則認(rèn)為鍵盤上有一個按鍵處于穩(wěn)定的閉合期;否則,認(rèn)為是按鍵的抖動或單片機(jī)受到干擾。3判別閉合按鍵的鍵號:方法為對鍵盤的列線P2.0-P2.3 進(jìn)行掃描,讀取行線P2.4-P2.7 返回的電平狀態(tài),若P2.4-P2.7 為全“1”,則列線輸出“0”的這一列上沒有鍵閉合。設(shè)立一按鍵編號計數(shù)單元,每次判斷一個鍵就加1,直到找到閉合鍵,此時計數(shù)單元中的值就是此閉合鍵的編號。4使CPU 對按鍵的一次閉合作一次處理:設(shè)立一按鍵標(biāo)志key_flag,為1 表明有鍵閉合,為0 表明無鍵閉合。當(dāng)有鍵按下后,CPU 循環(huán)檢測此按鍵標(biāo)志,為1 則繼續(xù)檢測,直到該標(biāo)志量等于0,等待按鍵放開,保證CPU 對每一次按鍵僅作一次處理。5取自已定義的鍵盤布局:取到按鍵編號后,通過查表的方法,取到自己定義的按鍵值。軟件資源分配:key_flag bit 20h.1cnt_loop2 equ 31hkey_cnt equ 32hkey_num equ 33hscan_sig equ 34h掃描主程序:get_key:call key_scanjb key_flag,get_keymov a,key_nummov dptr,#key_padmovc a,a+dptrcall beepret;=key_scan;clr key_flagmov p2,#0f0hmov a,p2anl a,#0f0hcjne a,#0f0h,key_injmp key_scan;-key_in: clr key_flagmov key_cnt,#0mov scan_sig,#0f7hmov r5,#3call delayscan_loop1:mov a,scan_sigmov p2,amov a,p2mov cnt_loop2,#4scan_loop2: jb acc.4,next_keysetb key_flagmov key_num,key_cntretnext_key: inc key_cntrr adjnz cnt_loop2,scan_loop2setb cmov a,scan_sigrrc amov scan_sig,ajc scan_loop1ret3.2.3密碼輸入和處理部分程序軟件資源分配:pass_flag bit 20h.2pass0 equ 40h;40h to 4Ehpass1 equ 4fh ;4Fh to 5Dhlenth0 equ 35hlenth1 equ 36hcnt_err equ 37h;error timec_alm1 equ 38h ;alarm_time controlc_alm2 equ 39h1密碼輸入程序(含退格功能)編寫思路:執(zhí)行清屏指令和開啟光標(biāo)顯示和閃爍,取字符串“Input Password”并送到屏幕上顯示,移動光標(biāo)到第二行第一個位置。把密碼計數(shù)單元清為0,并把指針指向輸入密碼存儲RAM 的首地址,長度為15(可根據(jù)需要進(jìn)行增減)。在輸入主循環(huán)中一直調(diào)用等待按鍵,取到鍵值后,用一特定算法判斷是否是確定鍵,退格鍵和數(shù)字鍵,如果不是則丟棄,如果是確定鍵,則返回;如果是退格鍵,則把密碼計數(shù)單元減1 并把指針指向上一個RAM 單元;如果是數(shù)字鍵,則把它存儲到當(dāng)前指針?biāo)赶虻腞AM 單元,密碼計數(shù)單元加1,同時把指針指向下一RAM 單元。每次密碼計數(shù)單元加1 都要判斷是否已經(jīng)滿15 位,如果滿15 位則等待退格鍵和確定鍵,遇到其它鍵丟棄。input_psw:mov a,#01hcall write_cmdmov a,#0fhcall write_cmdmov dptr,#iptclr pos_flagcall printmov a,#0c0hcall write_cmdmov lenth1,#0mov r1,#pass1input_loop: call get_keymov b,akey_enter1:cjne a,#0ch,key_bk1 ;enter keyretkey_bk1: cjne a,#0dh,n1;backspace keybk_in1: mov a,lenth1clr csubb a,#1jc relay1 ;jump to main_loop,but target out of rangedec lenth1dec r1call lcd_addsetb acc.7dec amov b,acall write_cmdmov a, call write_datamov a,bcall write_cmdjmp input_loopn1:clr csubb a,#10jnc input_loop ;function keymov a,b ;digital keymov r1,amov a,#*call write_datainc r1inc lenth1mov a,lenth1cjne a,#15,input_loopn2:call get_keycjne a,#0ch,n3retn3:cjne a,#0dh,n2jmp bk_in12密碼比較和判斷程序編寫思路:清除密碼正確標(biāo)志,比較內(nèi)部設(shè)置密碼的長度存儲單元和待比較的密碼長度存儲單元,如果不同,則跳到密碼錯誤處理部分;如果兩者相等,則進(jìn)行下一步判斷,取兩指針,分別指向內(nèi)部設(shè)置的密碼存儲單元的首個RAM 地址,和待比較的密碼存儲單元的首個RAM 地址,如果兩者相等則把指針指向下一個RAM 地址,再進(jìn)行比較,遇到不相等就跳到錯誤處理部分。如果在密碼長度范圍內(nèi)兩比較單元都相等,則跳轉(zhuǎn)到密碼正確處理部分。錯誤處理部分:取字符串“Access Denied”并送到顯示屏顯示,同時蜂鳴器發(fā)出警示音。每進(jìn)入錯誤處理部分一次就把密碼錯誤計數(shù)單元加1,當(dāng)計到第三次時,執(zhí)行報警部分,鎖定鍵盤,鎖定時間過后返回主界面。密碼正確處理部分:清空密碼錯誤計數(shù)單元,取字符串“Access Granted”并送到顯示屏顯示,同時蜂鳴器發(fā)出密碼正確的提示音,執(zhí)行開鎖部分。Compare: clr pass_flagmov a,lenth1cjne a,lenth0,wrongmov r0,#pass0mov r1,#pass1cmp_loop:mov a,r0mov b,r1cjne a,b,wronginc r0inc r1djnz lenth1,cmp_loopjmp rightwrong:clr pass_flagmov dptr,#errorclr pos_flagcall printmov r5,#150call delayinc cnt_errmov a,cnt_errcjne a,#3,n21mov cnt_err,,#0mov dptr,#lockclr pos_flagcall print;加上一段延時鎖定鍵盤mov c_alm1,#255n20: call beepmov r5,#10call delaydjnz c_alm1,n20n21:call beepmov r5,#15call delaycall beepmov r5,#15call delaycall beepmov r5,#15call delaymov r5,#100call delayretright:setb pass_flagmov cnt_err,#0mov dptr,#okclr pos_flagcall printmov c_alm2,#25c22: call beepdjnz c_alm2,c22mov r5, #255call delayRet3密碼設(shè)置程序(含退格功能)編寫思路:執(zhí)行清屏指令,取字符串“Input new.”并送到顯示屏進(jìn)行顯示,把光標(biāo)移動到第二行第一個位置。 取一指針指向內(nèi)部設(shè)置密碼存儲單元的首個RAM 的地址同時把內(nèi)設(shè)密碼長度計數(shù)單元清為0。在設(shè)置密碼主循環(huán)中一直調(diào)用等待按鍵,取到鍵值后,用一特定算法判斷是否是確定鍵,退格鍵和數(shù)字鍵,如果不是則丟棄并跳到輸入循環(huán)中繼續(xù)等待按鍵。如果是確定鍵看是否已經(jīng)有輸入至少一位密碼,如果有則返回,如果還未有輸入則跳到設(shè)置密碼主循環(huán)中繼續(xù)等待按鍵。如果是退格鍵,則密碼長度計數(shù)單元減1,同時把密碼計數(shù)單元減1 并把指針指向上一個RAM 單元。如果是數(shù)字鍵,則把它存儲到當(dāng)前指針?biāo)赶虻腞AM 單元,密碼計數(shù)單元加1,同時把指針指向下一RAM 單元。每次密碼長度計數(shù)單元加1 都要判斷是否已經(jīng)滿15 位,如果滿15 則等等待退格鍵和確定鍵,遇到其它鍵丟棄。set_psw: mov a,#01hcall write_cmdmov dptr,#newclr pos_flagcall printmov a,#0c0hcall write_cmdmov r0,#pass0mov lenth0,#0set_loop: call get_keymov b,akey_enter2:cjne a,#0ch,key_bk2;enter keymov a,lenth0clr csubb a,#1retkey_bk2: cjne a,#0dh,n11 ;backspace key jc set_loopbk_in2: mov a,lenth0clr csubb a,#1jc set_loopdec lenth0dec r0call lcd_addsetb acc.7dec amov b,acall write_cmdmov a,# call write_datamov a,bcall write_cmdjmp set_loopn11:clr csubb a,#10jnc set_loop ;function keymov a,bmov r0,aadd a,#30hcall write_datainc r0inc lenth0mov a,lenth0cjne a,#15,set_loopn12:call get_keycjne a,#0ch,n13retn13:cjne a,#0dh,n12jmp bk_in23.2.4時鐘部分程序軟件資源分配:hour equ 3ahmin equ 3bhsec equ 3chsec0 equ 3dhcnt_timer equ 3ehhour1 equ 21hhour0 equ 22hmin1 equ 23hmin0 equ 24h1時鐘中斷程序在中斷入口處把A 和B 寄存器入堆棧保護(hù)起來,重新載入定時器初值,并把時間計數(shù)單元加1,查看一下是否已經(jīng)累積到1 秒了,如果不是則退出中斷;如果已經(jīng)1 秒了,則查看是否已滿1 分鐘,如果不是則退出中斷;如果已經(jīng)滿1 分鐘則查看是否滿1 小時,如果不是是退出中斷;如果已經(jīng)滿1 小時則查看是否滿24 小時,如果不是則退出中斷;如果已經(jīng)滿24 小時則復(fù)位小時分鐘和秒計數(shù)單元并退出中斷??紤]到晶振頻率的誤差和并在兩端的微調(diào)電容的誤差,實際的振蕩頻率不可能在我們所期望的理想值,結(jié)合中斷處理所占用的時間,時鐘實際上會有一定的誤差,這時我們可以進(jìn)行軟件微調(diào),對中斷中載入的定時器初值進(jìn)行微調(diào),先用載入標(biāo)準(zhǔn)初值進(jìn)行試調(diào),測試一段時間看是偏快還是偏慢,如果偏快則增加定時器初值,如果測試偏慢則減少定時器初值。在前面標(biāo)準(zhǔn)值的基礎(chǔ)上進(jìn)和相應(yīng)的處理,增加或減少定時器初值,再測試新的時鐘是偏快還是偏慢,再進(jìn)行調(diào)節(jié),直到時鐘的誤差到達(dá)一個讓人滿意的結(jié)果為止。t0_int: push accpush bmov th0,#34hmov tl0,#0E0h ;subbtract 4T timeinc cnt_timermov a,cnt_timercjne a,#20,exitmov cnt_timer,#0inc secmov a,seccjne a,#60,exitmov sec,#0inc minmov a,mincjne a,#60,exitmov min,#0inc hourmov a,hourcjne a,#24,exitmov hour,#0mov min,#0mov sec,#0exit: pop bpop accReti2秒刷新程序編寫思路:把液晶顯示器地址指針移到第二行第一個位置,依次填入三個空格位,分別把小時變量,分鐘變量和秒變量分離為高位和低位,并轉(zhuǎn)化為ASCII 碼,送到液晶數(shù)據(jù)口調(diào)用液晶寫指令子程序,在液晶屏上顯示出來,同時在小時和分鐘后插入“:”以符合日常習(xí)慣。在主程序中循環(huán)查看秒變量有沒有變化,有則刷新舊的時間內(nèi)容,新完畢后返回主界面。Reflash:mov a,#0c0hcall write_cmdmov a,# call write_datamov a,# call write_datamov a,# call write_datamov a,hourcall convertmov a,#:call write_datamov a,mincall convertmov a,#:call write_datamov a,seccall convertmov a,#0c0hcall write_cmdRet3時間設(shè)置程序編寫思路:此部分是整個程序中最復(fù)雜的部分之一。先開啟光標(biāo)顯示并開閃爍;關(guān)閉定時器,清空秒變量;把小時變量和分鐘變量高低位分離并分別到保護(hù)到四個RAM 存儲單元中;每按set time 鍵一次,讀取當(dāng)前液晶顯示器地址計數(shù)器(Address Counter)的內(nèi)容,根據(jù)光標(biāo)所在的位置,把地址計數(shù)器的內(nèi)容進(jìn)行加1 或加2,使光標(biāo)移到下一個設(shè)置位。能根據(jù)取到的按鍵值分別判斷該次按鍵是不是有效,有效則存儲到相應(yīng)的存儲單元,否則丟棄。比如當(dāng)光標(biāo)在小時高位時,只有按數(shù)字鍵1,2 或確定鍵才有效,其它鍵丟棄。當(dāng)設(shè)置完成,按下確定鍵,把存儲小時和分鐘變量的四個存儲間RAM 單元進(jìn)行整合并還原到小時變量存儲單元和分鐘變量存儲單元,開啟定時器,返回主界面。set_time: mov a,#0fhcall write_cmd ;cursor onmov a,hourmov b,#10div abmov hour1,amov hour0,bmov a,minmov b,#10div abmov min1, amov min0,bmov sec,#0mov a,#0c9hcall write_cmdmov a,#0call write_datamov a,,#0call write_data ;set second counter zeron30: mov a,#0c3hcall write_cmdsettime_loop: call get_keymov b,akey_settime2: cjne a,#0fh,key_enter5call lcd_addsetb acc.7add1:cjne a,#0c3h,add2mov a,#0c4hcall write_cmdjmp settime_loopadd2

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論