版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 緒論</b></p><p> 目前,全球印制電路板(Printed Circuit Board,簡稱為PCB)產(chǎn)業(yè)產(chǎn)值占電子元件產(chǎn)業(yè)總產(chǎn)值的四分之一以上,是各個電子元件細分產(chǎn)業(yè)中比重最大的產(chǎn)業(yè),產(chǎn)業(yè)規(guī)模達400億美元。同時,由于其在電子基礎產(chǎn)業(yè)中的獨特地位,已經(jīng)成為當代電子元件業(yè)中最活躍的產(chǎn)業(yè),2003和2004年,全球PCB產(chǎn)值分別是344億美元和401億
2、美元,同比增長率分別為5.27%和16.47%。我國的PCB研制工作始于1956年,1963.1978年,逐步擴大形成PCB產(chǎn)業(yè)。改革開放后20多年,由于引進國外先進技術和設備,單面板、雙面板和多層板均獲得快速發(fā)展,國內PCB產(chǎn)業(yè)由d,N大逐步發(fā)展起來。2002年,中國PCB產(chǎn)值超過臺灣,成為第三大PCB產(chǎn)出國。2003年,PCB產(chǎn)值和進出口額均超過60億美元,成為世界第二大PCB產(chǎn)出國。2005年中國PCB的產(chǎn)量為1.1057億平方米
3、, 產(chǎn)值達到969億人民幣(折約107億美元),產(chǎn)值及進出口總額雙超100億美元p4l。PCB的產(chǎn)值將首次超過日本(據(jù)預測日本2005年產(chǎn)值約96億美元),成為世界PCB 第一生產(chǎn)大國。</p><p> 國外尤其是歐洲、美國和同本PCB研制丌發(fā)和生產(chǎn)較早,廢水處理也起步較早,在20世紀70年代已刀:始進行PCB廢水污染及其治理方法的研究。早期主要應用混凝沉淀、活性碳、離子交換等工藝進行處理PCB廢水。這此方法
4、工藝只是針對PCB廢水中的某些成份進行處理,隨著PCB行業(yè)的發(fā)展,產(chǎn)品越來越豐富, 生產(chǎn)工藝也越來越復雜,體現(xiàn)在PCB藥劑成份更多更復雜,生產(chǎn)流程更長技術含量更高,PCB廢水污染物的種類多、濃度高,環(huán)境保護要求也更嚴格,原來處理某種單一污染物或某一類廢水的工藝越來越不適應發(fā)展的要求,于是,又相繼研究開發(fā)了新的處理方法,能同時去除多種重金屬離子和有機污染物。這此方法具有代表性有氣態(tài)凝聚法、膠束增強超濾法、重捕劑法和反滲透膜法等。</
5、p><p> 氣態(tài)凝聚——電過濾法是美國在80年代開發(fā)出來的一種不加化學藥劑的新穎廢水處理法,屬于一種物理方法來處理印制電路板廢水。包括三個部分,第一部分是離子化氣體發(fā)生器,空氣被吸入該發(fā)生器,能過離子化磁場改變其化學結構,變成高度活化的磁性氧離子和氮離子,用射流裝置把這種氣體引入廢水中,使廢水中的金屬離子、有機物等有害物質氧化并聚集成團,易于過濾除去;第二部分是電解質過濾器,過濾除去第一部產(chǎn)生的聚團物質:第三部分
6、是高速紫外線照射裝置,紫外線射入水中可氧化有機物和化學絡合劑,降低CODer和BOD5。目前,已開發(fā)出成套一體化設備可直接應用. 國外八十年代以來開始研究一種新的水處理技術,以去除廢水中的有機污染物和金屬離子,即膠束增強超濾法(Mieellar-enhaneed ultrafiltration,簡稱MEUF3,這是一種將表面活性劑和超濾膜耦合起來的新技術。某些陰離子與陽離子或非離子表面活性劑混合后具有協(xié)同作用,能形成較大的膠束,增強對金
7、屬離子的去除效果。膠束增強超濾法處理印制電路板廢水具有工藝簡單、處理效果好的特點,適用于處理濃度較低的印制電路板廢水。砷垤T(三巰三嗪三鈉鹽)是最近美國開發(fā)</p><p> 1 本設計課題的背景及現(xiàn)狀</p><p> 1.1國內環(huán)境保護帶來了嚴重影響</p><p> PCB在給我國帶來經(jīng)濟發(fā)展的同時,也給國內環(huán)境保護帶來了嚴重影響。特別是PCB用水量和排
8、污量都較大“1[21[3"10根據(jù)資料顯示,我國2004年PCB行業(yè)總用水量約】.5x 100噸。未經(jīng)處理捧放的污水含有大量的有毒有害污染物,不但污染江河湖泊,而且嚴重污染地下水資源,印制線路板行業(yè)的環(huán)境保護問題更加突出。PCB廢水中含有大量的Cu2-、NP、Ag+、All+、Sna+/Sn4+、pb2+等會屬離子, 含量變化較大,濃度高,成分復雜,形態(tài)不一,既有固體懸浮金屬顆粒,也有游離態(tài)非絡合金屬離子,同時還有絡合態(tài)的絡合
9、金屬離子。這些金屬離子如不處理,直接捧放到自然界中,會對環(huán)境和人類造成極大的危害。Cu會引發(fā)呼吸系統(tǒng)病癥, Ni會引發(fā)各種皮炎、腸胃疾病和腫瘤,Pb會引發(fā)血液系統(tǒng)、泌尿系統(tǒng)等病癥。金屬離子不僅會對人類的健康造成損害,同時會對自然界的生物造成危害。淡水或海洋中的水生生物對水體中的金屬離子非常敏感,即使很低的濃度也會對其構成威脅; 土壤或灌溉水中的金屬離子會對植物生長產(chǎn)生不利的影響,并且將在植物的葉莖或根部富集,以至影響波及整個食物鏈14]
10、. PCB廢水中還含有大量有機物,體現(xiàn)在混</p><p> 沫、浮垢和引起的渾濁、惡臭等,都足以降低水體的使用價值。廢水若沒有妥善處理就排放,造成受納水體污染、影響水體功能、破壞生態(tài)環(huán)境。氰化物是極毒的物質,廢水中的氰化物可以成為氰化氫氣體逸出,氰化物和氫氰酸能通過皮膚、肺、胃進入體內。氟化物能危害人的骨骼和皮膚。氨氮和磷是造成湖泊和近海富養(yǎng)鹽化的主要營養(yǎng)物質,每年造成極大的經(jīng)濟損失。</p>
11、<p> 1.2擇應綜合考慮各處理工藝的優(yōu)缺點</p><p> 工藝選選擇經(jīng)濟、有效、方便、安全的工藝組合。不僅要注重廢水的處理工藝,還要從環(huán)保角度熟悉PCB生產(chǎn)線的特點, 掌握PCB廢水分類的方法。各類廢水的調節(jié)池(收集池)的容積應不小于一個班的廢水排放量。調節(jié)池(收集池)應設置攪拌混合裝置,將水質混合均勻。由于PCB企業(yè)產(chǎn)品種類、生產(chǎn)工藝、產(chǎn)品比例的不同,PCB廢水的水量及水質成分就會有明顯差
12、異;各個地區(qū)執(zhí)行的排放標準的差異、PCB企業(yè)的廢水循環(huán)回用率的不同、企業(yè)排放的水量大小,都會對PCB廢水的處理工藝的選擇產(chǎn)生一定的影響。PCB廢水分類較多,要統(tǒng)籌考慮每股水的處理和每種污染物的去除,還要結合一般酸堿水洗水的稀釋能力的特點,選擇最優(yōu)化的工藝組合,降低投資和運行成本,確保廢水達標捧放。</p><p> 1.3本設計課題的研究現(xiàn)狀</p><p> 我國R=B企業(yè)所產(chǎn)生的三
13、廢治理還不能達到歐、美、閂等發(fā)達國家的水平。對于PCB </p><p> 廢水的治理,國內采用較多的處理方法有化學沉淀法、鐵屑混合物微電解法、生化法、離子交換法、化學氧化法等,各有優(yōu)劣。這些技術在處理PCB廢水中的某種污染物方面都有一定的優(yōu)勢,也有成功的PCB廢水處理實例。國內的PCB處理與國外的差距主要在以下幾個方面。</p><p> 第一:PCB企業(yè)環(huán)保意識、環(huán)保管理上有差距,
14、比不上歐美同等國家; </p><p> 第二:環(huán)保投資上有差距,預留的廢水處理設施面積狹窄,投資較少,設備和儀表產(chǎn)品質量較低檔; </p><p> 第三:環(huán)保監(jiān)管不到位,標準的執(zhí)行差異較大。</p><p> 第四:廢水分流不徹底和治理工藝不完善,PCB廢水處理技術上也有不少差距。上述的四個方面,前三個方面不是本次研究的內容,本研究著重在第四個方面.具體來
15、說,許多PcB廢水處理不達標,是因為沒有對生產(chǎn)線排水合理的分類收集;只所以沒有合理的分類收集,是因為不了解生產(chǎn)線,不了解生產(chǎn)線的排污特點,因而也就無法有效地將p(m廢水合理地分類。PCB廢水治理方法也經(jīng)歷了一個過程,從最初的只注重重金屬污染物的去除,到目前的全因子達標監(jiān)控,氨氮、CODer等污染物的去除也成為PCB廢水治理的重點。在目前國內環(huán)保投資還不是很到位的情況下,PCB廢水的治理技術(或工藝)優(yōu)化組合,對于降低投資和節(jié)約運行成本都
16、具有重要意義。</p><p><b> 2.1系統(tǒng)設計方案</b></p><p><b> 圖1 系統(tǒng)組成</b></p><p> 鍵盤按鍵密碼輸入,送AT89C51處理,顯示輸出用于及時顯示按鍵輸入的數(shù)字,便于修改,聲音輸出當密碼錯誤時候的報警信息,開鎖部分采用電磁鎖接受芯片送來的信號后自動開鎖。</p
17、><p><b> 2.2系統(tǒng)功能</b></p><p> 本電子密碼鎖具備以下功能:</p><p> 1.沒有set time時液晶顯示器只顯示當時時間,在主界面下如果按set time 鍵,就可以重設時間。</p><p> 2.在主界面下按set psw鍵后進入設置密碼狀態(tài),密碼可在1-15 位范圍內自由設
18、置,最多達1015 種組合,使窮舉法套解密碼成為不可能。</p><p> 3.在主界面下按input鍵后輸入密碼,密碼正確時,在輸出口1 輸出0.5 秒的高脈沖開鎖電平,在輸出口2 輸出0.5 秒的低脈沖開鎖電平,用于開鎖。如果連續(xù)三次輸入錯誤密碼,則啟動報警系統(tǒng)并鎖定鍵盤一段時間。</p><p> 4.退格和按鍵提示功能。每次按鍵都有發(fā)光二極管發(fā)光和聲光提示音,用于指示按鍵有效。
19、同時液晶顯示可以顯示所輸入的數(shù)字是不是錯誤,錯誤的話用退格修改并從輸入,可返回主界面。</p><p> 5.系統(tǒng)設有超級用戶密碼,用于解除用戶忘記其所設密碼時使用,抑或當密碼鎖用于賓館,房客走后,賓館管理員用于清除舊密碼。</p><p> 6.在外部掉電時,內部電源會使芯片繼續(xù)工作原來設置的密碼也不會丟失。</p><p> 2.3硬件部分的相關介紹<
20、;/p><p> 2.3.1 AT89C51 簡介</p><p> AT89C51 是美國Atmel 公司生產(chǎn)的低功耗,高性能CMOS 8 位單片機,片內含4k bytes的系統(tǒng)可編程的Flash 只讀程序存儲器,器件采用Atmel 公司的高密度,非易失性存儲技術生產(chǎn),兼容標準8051 指令系統(tǒng)及引腳。它集成Flash 程序存儲器,既可在線編程(ISP)也可采用傳統(tǒng)的方法進行編程。集8
21、位微處理器于單片芯片中,功能強大,價位低的AT89C51 提供許多高性價比的應用場合,可靈活應用于各種控制領域。</p><p> AT89C51的功能與結構如下: 128 字節(jié)內部RAM,32 個I/O 口線, 4K 字節(jié)Flash 閃速存儲器,看門狗(WDT),兩個16 位定時/計數(shù)器,兩個數(shù)據(jù)指針,一個5 向量兩級中斷結構,片內振蕩器及時鐘電路,同時AT89C51 可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟
22、件可選的節(jié)電工作模式,空閑方式停止CPU 的工作,但允許RAM 定時/計數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM 中的內容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復位。</p><p> 1602 液晶顯示器簡介</p><p> LCD顯示大體分為字符型液晶、點陣圖形液晶、筆段型液晶等幾大類。</p><p><b>
23、圖2 1602引腳</b></p><p> 液晶顯示模塊是一類專門用于顯示數(shù)字、字母、符號、圖形等的點陣型液晶顯示模塊,每一個點陣字符位都可以顯示一個字符,點陣字符位之間的一個點距的間隔起字符間距和行距的作用。它是由若干個5×7 或5×11 等點陣字符組成。</p><p> 液晶顯示模塊LCD1602 的引腳功能如下:</p><
24、p> LCD1602 的引腳功能排列如上圖2所示,它采用的是16 腳接口,而且引腳都分布在LCD1602的一側使用時只要把對應的電源、數(shù)據(jù)線等接好就可以其中:</p><p> 第1 腳:VSS 為電源</p><p> 第2 腳:VDD 接地</p><p> 第3 腳:V0 用于調節(jié)LCD1602的亮度,為液晶顯示器對比度調整端,很多時候液晶顯示沒
25、顯示可能就是這里的原因,LCD 驅動電壓范圍為VDD~VO 接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可通過一個10K 的電位器調整對比度。</p><p> 第4 腳:RS 為寄存器選擇位,低電平時選擇命令寄存器IR、高電平時選擇數(shù)據(jù)寄器DR。</p><p> 第5 腳:RW 為讀寫控制位,高電平時進行讀操作。當RS 和RW共同為低電平時可以寫入
26、指令或者顯示地址,當RS 為低電平RW 為高電平時可以讀忙信號,當RS 為高電平RW 為低電平時可以寫入數(shù)據(jù)。</p><p> 第6 腳:Enable 端為使能控制位,當E 端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。</p><p> 第7~14 腳:D0~D7 為8 位的雙向數(shù)據(jù)總線。</p><p> 第15~16 腳:背光燈的正負極</p>
27、;<p> 圖3 1602的內部框圖</p><p> 2.液晶顯示模塊1602 的內部結構</p><p> 液晶顯示模塊LCD1602 的內部結構如上圖3所示,它主要由CGROM、CGRAM、DDRAM、BF、IR、DR、AC 等大規(guī)模集成電路組成。</p><p> 2.3.3 Protel99SE簡介</p><p
28、> Protel99se主要組成軟件有:</p><p> 原理圖編輯器(advanced schematic ) 用于原理圖的輸入、編輯、查錯。</p><p> 仿真器(Simulator) 用于對原理圖的仿真,包含了常用的直流、交流特性、瞬態(tài)響應等常用的仿真測度,并可以查看波形。</p><p> PCB編輯器(Advanced PCB) 用于
29、PCB的設計、查錯。</p><p> PLD設計工具(PLD designer) 簡單PLD的設計工具。</p><p> 文本編輯器(Text editor) 用于說明文檔、網(wǎng)絡表等的編輯,不支持中文。</p><p> 表格處理軟件(Spread) 用于處理元件表,相當于excel 97。</p><p> Protel 99s
30、e集成了從原理圖設計、仿真到PCB過程中可能涉及到的常用工具,只用它幾科可以完成整個設計的所有工作,功能非常強大,需要一定的時間與精力去學習。</p><p> Protel 99 的主要特點:</p><p> 1.集成設計管理系統(tǒng)(Design Explore)</p><p> 2.使用了智能工具(SmartTool)技術,在設計環(huán)境中集成了所有設計所用
31、到的工具。</p><p> 3.使用了智能文檔(SmartDoc)管理技術,把所有設計時用到的文檔都保存在一個數(shù)據(jù)庫中,在工作中可以使用各種文檔。</p><p> 4.使用了智能組(SmartTeam)管理技術,允許多個設計者通過網(wǎng)絡安全地為同一</p><p> 工程工作。通過集成的設計管理系統(tǒng),可以方便地管理用戶、設置訪問權限等。</p>
32、<p> 5.提供了功能強大的各種文檔的快速瀏覽工具,使用戶可以快速方便地查詢、定位、修改文檔。</p><p> 6.提供了全面而方便使用的幫助系統(tǒng)[3]。</p><p> 2.4 各個硬件模塊的設計</p><p> 2.4.1 電源部分的設計</p><p> 電源部分是先通過一個變壓器把220 伏的交流電變換為
33、9 伏的交流電,再通過全橋整流電路整流成單向脈動的直流電,大容量電解電容C1 用于使脈動的直流電波形更加平直,C2 用于抵消輸入線較長時的電感效應,以防止電路產(chǎn)生自激振蕩,其容量較小,一般小于1μF。在輸出端加接電容C6,一般取值0.1μF,其目的是改善負載的瞬態(tài)響應、防止自激振蕩和減少高頻聲,輸出端輸出較為穩(wěn)定的5V 電壓為整個系統(tǒng)提供工作電壓。E為備用電池一端接地另一端通過二極管接電源,當芯片工作時,二極管反向,當?shù)綦姇r,二極管正向
34、導通,繼續(xù)工作。</p><p><b> 圖4電源部分</b></p><p> 2.4.2最小系統(tǒng)部分的設計</p><p> 最小部分的設計如下圖5所示,時鐘周期是芯片工作時候的最小周期,時鐘電路是計算機的心臟,它控制著計算機的工作節(jié)奏。AT89C51內部有一個帶反饋的線性反相放大器,外接晶振(或陶瓷諧振器)和電容就組成振蕩器,產(chǎn)生
35、時鐘送至單片機的內部工作部件。加電以后延遲一段時間(約10ms)振蕩起振產(chǎn)生時鐘,不受軟件控制(XTAL2輸出幅度為3V左右的正弦波)。振蕩器產(chǎn)生的時鐘頻率主要由晶振上標明的頻率參數(shù)確定,電容C4和C5的作用有兩個:其一是使振蕩器起振,其二是對振蕩器的頻率f起微調作用(C4、C5變大,則f變小),其值一般是30pF左右。</p><p> 復位電路由電容串聯(lián)電阻構成,復位電路的基本功能是:系統(tǒng)上電時提供復位信號
36、,直至系統(tǒng)電源穩(wěn)定后,撤銷復位信號。</p><p><b> 圖5 最小系統(tǒng)部分</b></p><p> 2.4.3輸出部分的設計</p><p> 輸出部分主要包括聲光提示部分和電磁鎖部分。</p><p> 圖中三極管Q1 工作于飽和狀態(tài),復位后單片機輸出口的初始狀態(tài)是高電平,三極管截止,蜂鳴器得不到工作
37、電壓而不能發(fā)聲;當用軟件控制此端口為低電平時,三極管導通,蜂鳴器得電而工作,發(fā)出聲音。通過程序控制此三極管的間歇導通和截止以及導通和截止的時間長短,就可以達到控制聲音頻率和發(fā)聲長短的目的,得到我們所需要的不同聲音。</p><p> 發(fā)光二極管LED1 和一個470 歐的電阻口串接到地,當輸出口P3.4 為高電平時,發(fā)光二極管導通發(fā)光,當輸出口為低電平時,發(fā)光二極管截止熄滅。在程序的初始化部分,要加一條clr
38、p3.4 指令以熄滅此發(fā)光二極管。</p><p> 開鎖部分,使用了P3口的兩跟口線,實際應用中應加上光電隔離以及緩沖放大電路。光電隔離用于防止后面電路的尖峰脈沖干擾通過單片機端口串擾進來,影響單片機的正常運行。緩沖放大電路進行電平轉換和提高驅動能力以直接驅動電磁鎖。做好電磁鎖在市面上就可以買到這里就不介紹了。</p><p><b> 圖6 輸出部分</b>&
39、lt;/p><p> 2.4.4液晶接口部分的設計</p><p> 表1 1602 接口信號說明</p><p> LCD 接口設計可以分為8 位及4 位控制方式,由于本電路采用多達32 個I/O 口的AT89C51 芯片,不存在I/O 口資源使用緊張,不夠使用的情況,為方便程序的編寫,采用最為常見的8 位接口設計。V0 為液晶顯示器對比度調整端,LCD 驅動電
40、壓范圍為Vss~Vdd,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產(chǎn)生“鬼影”,故通過一個10K 的電位器調整顯示屏的對比度。15 和16 腳是液晶背光電壓輸入端,通過一 個單向自鎖開關控制背光的開啟和關閉。</p><p><b> 圖7液晶接口部分</b></p><p> 2.4.5系統(tǒng)PCB圖</p><p>
41、通過自動布線和手工布線后得到的PCB圖 如下:</p><p><b> 圖8 PCB圖</b></p><p><b> 3軟件部分</b></p><p> 3.1軟件的總體編寫思路和流程圖</p><p> 整個流程采用調用子程序的方式增強可讀性,住循環(huán)為無限循環(huán),程序在KEIL C
42、51的環(huán)境下運行。先調試出液晶驅動程序,鍵盤掃描程序兩個最基本的子程序,在需要使用時直接調用即可。在接下來的主循環(huán)中進行時鐘的更新查詢和是否有按鍵的判斷,如果時間有更新(過了一秒)就轉去處理時間更新;如果有按鍵按下,則轉去按鍵處理,并判斷是否是相應的幾個鍵,是就跳轉到相應的功能模塊,不是則返回主界面。</p><p> 由于51 單片機架構的原因,容易會受到外界干擾而出錯,故程序寫完后還要進行進行抗干擾方面的優(yōu)
43、化。通過指令冗余,軟件陷阱等措施將受到干擾而亂飛的程序納入正軌。比如在未開的中斷入口處加入RETI 指令等等。在程序的按鍵部分加延時或者RS觸發(fā)器去鍵盤抖動。</p><p><b> 圖9流程圖</b></p><p> 3.2各個軟件子模塊的編寫</p><p> 3.2.1 1602 液晶驅動程序</p><p&
44、gt; 表2 1602液晶時序參數(shù)</p><p><b> 驅動程序:</b></p><p> 硬件端口定義及軟件資源分配:</p><p> rs bit p1.4 ;//寄存器選擇線</p><p> rw bit p1.5 ;//LCD 讀寫線</p><p> en bit
45、 p1.6 ;//啟用控制線,高電平動作</p><p> lcd equ p0 ;//LCD 雙向數(shù)據(jù)總線</p><p> pos_flag bit 20h.0 ;//字符串顯示位置標志,為0 時顯示在第一行;為1 時顯示在第二行</p><p> blank equ 30h ;//清行時填入的空格個數(shù)控制變量 </p><p>&
46、lt;b> LCD 初始化:</b></p><p> 液晶顯示模塊1602 的控制指令1602 的控制指令共11 條,其中9 條針對命令寄存器IR 的,另外2 條是針對數(shù)據(jù)寄存器DR 的,具體指令如下表所列:</p><p> 表3 1602 指令表</p><p> 指令1:清顯示,指令碼01H,光標復位到地址00H位置</p&g
47、t;<p> 指令2:光標復位,光標返回到地址00H</p><p> 指令3:光標和顯示模式設置 I/D:光標移動方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效</p><p> 指令4:顯示開關控制。 D:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示 C:控制光標的開與關,高電平表示有光標,低電平表示無光標
48、 B:控制光標是否閃爍,高電平閃爍,低電平不閃爍</p><p> 指令5:光標或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標</p><p> 指令6:功能設置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符</p><p> 指令7
49、:字符發(fā)生器RAM地址設置</p><p> 指令8:DDRAM地址設置</p><p> 指令9:讀忙信號和光標地址 BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。</p><p><b> 指令10:寫數(shù)據(jù)</b></p><p><b> 指令11:讀數(shù)據(jù)&l
50、t;/b></p><p> init_lcd: mov a,#01h ;clr display</p><p> call write_cmd</p><p> mov a,#02h</p><p> call write_cmd ;clear address pointer</p><p> mov
51、 a,#06h</p><p> call write_cmd; </p><p> mov a,#0fh</p><p> mov a,#0ch</p><p> call write_cmd ;cursor on,blink</p><p> mov a,#1ch</p><p>
52、 call write_cmd ;display&cursor rotate right</p><p> mov a,#38h</p><p> call write_cmd;two lines,8 bits,5*7</p><p><b> Ret</b></p><p> LCD 忙標志位檢測程序
53、</p><p><b> 圖10讀操作時序</b></p><p><b> 表4 狀態(tài)字說明</b></p><p> 對控制器每次進行讀寫操作之前,都必須進行讀寫檢測,確保STA7 為0</p><p> check: push acc</p><p> mo
54、v lcd,#0ffh</p><p><b> clr en</b></p><p><b> clr rs</b></p><p><b> setb rw</b></p><p><b> setb en</b></p><
55、;p><b> ck: nop</b></p><p> jb lcd.7,ck</p><p><b> clr en</b></p><p><b> pop acc</b></p><p><b> Ret</b></p>
56、<p><b> 寫指令子程序</b></p><p><b> 圖11 寫操作時序</b></p><p> writec: call check</p><p><b> mov lcd,a</b></p><p><b> clr en&
57、lt;/b></p><p><b> clr rs</b></p><p><b> clr rw</b></p><p><b> setb en</b></p><p><b> nop</b></p><p>
58、<b> nop</b></p><p><b> nop</b></p><p><b> clr en</b></p><p><b> Ret</b></p><p><b> 寫數(shù)據(jù)子程序</b></p>
59、<p> writed: call check</p><p><b> mov lcd,a</b></p><p><b> clr en</b></p><p><b> setb rs</b></p><p><b> clr rw<
60、;/b></p><p><b> setb en</b></p><p><b> nop</b></p><p><b> nop</b></p><p><b> nop</b></p><p><b>
61、; clr en</b></p><p><b> Ret</b></p><p> 3.2.2鍵盤掃描程序</p><p> 鍵盤掃描程序主要有下面五個方面:</p><p> 1.在主程序中判斷有無鍵閉合:其方法為在四根列線輸出全“0”,讀取四根行線的電平狀態(tài),若四根行線電平全為“1”,則鍵盤上
62、沒有閉合鍵;若四根行線不全為1,則有鍵處于閉合狀態(tài)。</p><p> 2.去除按鍵的機械抖動:其方法為判別到鍵盤上有鍵閉合后,延遲一段時間再判別鍵盤的狀態(tài),若仍有按鍵閉合,則認為鍵盤上有一個按鍵處于穩(wěn)定的閉合期;否則,認為是按鍵的抖動或單片機受到干擾。</p><p> 3.判別閉合按鍵的鍵號:方法為對鍵盤的列線P2.0-P2.3 進行掃描,讀取行線P2.4-P2.7 返回的電平狀態(tài)
63、,若P2.4-P2.7 為全“1”,則列線輸出“0”的這一列上沒有鍵閉合。設立一按鍵編號計數(shù)單元,每次判斷一個鍵就加1,直到找到閉合鍵,此時計數(shù)單元中的值就是此閉合鍵的編號。</p><p> 4.使CPU 對按鍵的一次閉合作一次處理:設立一按鍵標志key_flag,為1 表明有鍵閉合,為0 表明無鍵閉合。當有鍵按下后,CPU 循環(huán)檢測此按鍵標志,為1 則繼續(xù)檢測,直到該標志量等于0,等待按鍵放開,保證CPU
64、對每一次按鍵僅作一次處理。</p><p> 5.取自已定義的鍵盤布局:取到按鍵編號后,通過查表的方法,取到自己定義的按鍵值。</p><p><b> 軟件資源分配:</b></p><p> key_flag bit 20h.1</p><p> cnt_loop2 equ 31h</p>&l
65、t;p> key_cnt equ 32h</p><p> key_num equ 33h</p><p> scan_sig equ 34h</p><p><b> 掃描主程序:</b></p><p> get_key:call key_scan</p><p> jb k
66、ey_flag,get_key</p><p> mov a,key_num</p><p> mov dptr,#key_pad</p><p> movc a,@a+dptr</p><p><b> call beep</b></p><p><b> ret</b
67、></p><p> ??;=======================================</p><p> key_scan;clr key_flag</p><p> mov p2,#0f0h</p><p><b> mov a,p2</b></p><p> a
68、nl a,#0f0h</p><p> cjne a,#0f0h,key_in</p><p> jmp key_scan</p><p> ?。?-----------------------------------</p><p> key_in: clr key_flag</p><p> mov key
69、_cnt,#0</p><p> mov scan_sig,#0f7h</p><p><b> mov r5,#3</b></p><p> call delay</p><p> scan_loop1:mov a,scan_sig</p><p><b> mov p2,a
70、</b></p><p><b> mov a,p2</b></p><p> mov cnt_loop2,#4</p><p> scan_loop2: jb acc.4,next_key</p><p> setb key_flag</p><p> mov key_nu
71、m,key_cnt</p><p><b> ret</b></p><p> next_key: inc key_cnt</p><p><b> rr a</b></p><p> djnz cnt_loop2,scan_loop2</p><p><b&g
72、t; setb c</b></p><p> mov a,scan_sig</p><p><b> rrc a</b></p><p> mov scan_sig,a</p><p> jc scan_loop1</p><p><b> ret</b&g
73、t;</p><p> 3.2.3密碼輸入和處理部分程序</p><p><b> 軟件資源分配:</b></p><p> pass_flag bit 20h.2</p><p> pass0 equ 40h;40h to 4Eh</p><p> pass1 equ 4fh ;4F
74、h to 5Dh</p><p> lenth0 equ 35h</p><p> lenth1 equ 36h</p><p> cnt_err equ 37h;error time</p><p> c_alm1 equ 38h ;alarm_time control</p><p> c_alm2 eq
75、u 39h</p><p> 1.密碼輸入程序(含退格功能)</p><p> 編寫思路:執(zhí)行清屏指令和開啟光標顯示和閃爍,取字符串“Input Password”并送到屏幕上顯示,移動光標到第二行第一個位置。把密碼計數(shù)單元清為0,并把指針指向輸入密碼存儲RAM 的首地址,長度為15(可根據(jù)需要進行增減)。在輸入主循環(huán)中一直調用等待按鍵,取到鍵值后,用一特定算法判斷是否是確定鍵,退格鍵
76、和數(shù)字鍵,如果不是則丟棄,如果是確定鍵,則返回;如果是退格鍵,則把密碼計數(shù)單元減1 并把指針指向上一個RAM 單元;如果是數(shù)字鍵,則把它存儲到當前指針所指向的RAM 單元,密碼計數(shù)單元加1,同時把指針指向下一RAM 單元。每次密碼計數(shù)單元加1 都要判斷是否已經(jīng)滿15 位,如果滿15 位則等待退格鍵和確定鍵,遇到其它鍵丟棄。</p><p> input_psw:mov a,#01h</p><
77、;p> call write_cmd</p><p> mov a,#0fh</p><p> call write_cmd</p><p> mov dptr,#ipt</p><p> clr pos_flag</p><p> call print</p><p> m
78、ov a,#0c0h</p><p> call write_cmd</p><p> mov lenth1,#0</p><p> mov r1,#pass1</p><p> input_loop: call get_key</p><p><b> mov b,a</b></
79、p><p> key_enter1:cjne a,#0ch,key_bk1 ;enter key</p><p><b> ret</b></p><p> key_bk1: cjne a,#0dh,n1;backspace key</p><p> bk_in1: mov a,lenth1</p>&
80、lt;p><b> clr c</b></p><p><b> subb a,#1</b></p><p> jc relay1 ;jump to main_loop,but target out of range</p><p> dec lenth1</p><p><b&
81、gt; dec r1</b></p><p> call lcd_add</p><p> setb acc.7</p><p><b> dec a</b></p><p><b> mov b,a</b></p><p> call write_c
82、md</p><p><b> mov a,' '</b></p><p> call write_data</p><p><b> mov a,b</b></p><p> call write_cmd</p><p> jmp input_lo
83、op</p><p><b> n1:clr c</b></p><p> subb a,#10</p><p> jnc input_loop ;function key</p><p> mov a,b ;digital key</p><p><b> mov @r1,a
84、</b></p><p> mov a,#'*'</p><p> call write_data</p><p><b> inc r1</b></p><p> inc lenth1</p><p> mov a,lenth1</p><
85、;p> cjne a,#15,input_loop</p><p> n2:call get_key</p><p> cjne a,#0ch,n3</p><p><b> ret</b></p><p> n3:cjne a,#0dh,n2</p><p> jmp bk_i
86、n1</p><p> 2.密碼比較和判斷程序</p><p> 編寫思路:清除密碼正確標志,比較內部設置密碼的長度存儲單元和待比較的密碼長度存儲單元,如果不同,則跳到密碼錯誤處理部分;如果兩者相等,則進行下一步判斷,取兩指針,分別指向內部設置的密碼存儲單元的首個RAM 地址,和待比較的密碼存儲單元的首個RAM 地址,如果兩者相等則把指針指向下一個RAM 地址,再進行比較,遇到不相等就
87、跳到錯誤處理部分。如果在密碼長度范圍內兩比較單元都相等,則跳轉到密碼正確處理部分。</p><p> 錯誤處理部分:取字符串“Access Denied”并送到顯示屏顯示,同時蜂鳴器發(fā)出警示音。每進入錯誤處理部分一次就把密碼錯誤計數(shù)單元加1,當計到第三次時,執(zhí)行報警部分,鎖定鍵盤,鎖定時間過后返回主界面。</p><p> 密碼正確處理部分:清空密碼錯誤計數(shù)單元,取字符串“Access
88、 Granted”并送到顯示屏顯示,同時蜂鳴器發(fā)出密碼正確的提示音,執(zhí)行開鎖部分。</p><p> Compare: clr pass_flag</p><p> mov a,lenth1</p><p> cjne a,lenth0,wrong</p><p> mov r0,#pass0</p><p>
89、 mov r1,#pass1</p><p> cmp_loop:mov a,@r0</p><p><b> mov b,@r1</b></p><p> cjne a,b,wrong</p><p><b> inc r0</b></p><p><b&g
90、t; inc r1</b></p><p> djnz lenth1,cmp_loop</p><p><b> jmp right</b></p><p> wrong:clr pass_flag</p><p> mov dptr,#error</p><p> clr
91、 pos_flag</p><p> call print</p><p> mov r5,#150</p><p> call delay</p><p> inc cnt_err</p><p> mov a,cnt_err</p><p> cjne a,#3,n21</
92、p><p> mov cnt_err,,#0</p><p> mov dptr,#lock</p><p> clr pos_flag</p><p> call print;加上一段延時鎖定鍵盤</p><p> mov c_alm1,#255</p><p> n20: call
93、beep</p><p> mov r5,#10</p><p> call delay</p><p> djnz c_alm1,n20</p><p> n21:call beep</p><p> mov r5,#15</p><p> call delay</p>
94、<p><b> call beep</b></p><p> mov r5,#15</p><p> call delay</p><p><b> call beep</b></p><p> mov r5,#15</p><p> call d
95、elay</p><p> mov r5,#100</p><p> call delay</p><p><b> ret</b></p><p> right:setb pass_flag</p><p> mov cnt_err,#0</p><p> m
96、ov dptr,#ok</p><p> clr pos_flag</p><p> call print</p><p> mov c_alm2,#25</p><p> c22: call beep</p><p> djnz c_alm2,c22</p><p> mov r5
97、, #255</p><p> call delay</p><p><b> Ret</b></p><p> 3.密碼設置程序(含退格功能)</p><p> 編寫思路:執(zhí)行清屏指令,取字符串“Input new....”并送到顯示屏進行顯示,把光標移動到第二行第一個位置。 取一指針指向內部設置密碼存儲單元的
98、首個RAM 的地址同時把內設密碼長度計數(shù)單元清為0。在設置密碼主循環(huán)中一直調用等待按鍵,取到鍵值后,用一特定算法判斷是否是確定鍵,退格鍵和數(shù)字鍵,如果不是則丟棄并跳到輸入循環(huán)中繼續(xù)等待按鍵。如果是確定鍵看是否已經(jīng)有輸入至少一位密碼,如果有則返回,如果還未有輸入則跳到設置密碼主循環(huán)中繼續(xù)等待按鍵。如果是退格鍵,則密碼長度計數(shù)單元減1,同時把密碼計數(shù)單元減1 并把指針指向上一個RAM 單元。如果是數(shù)字鍵,則把它存儲到當前指針所指向的RAM
99、單元,密碼計數(shù)單元加1,同時把指針指向下一RAM 單元。每次密碼長度計數(shù)單元加1 都要判斷是否已經(jīng)滿15 位,如果滿15 則等等待退格鍵和確定鍵,遇到其它鍵丟棄。</p><p> set_psw: mov a,#01h</p><p> call write_cmd</p><p> mov dptr,#new</p><p> c
100、lr pos_flag</p><p> call print</p><p> mov a,#0c0h</p><p> call write_cmd</p><p> mov r0,#pass0</p><p> mov lenth0,#0</p><p> set_loop:
101、call get_key</p><p><b> mov b,a</b></p><p> key_enter2:cjne a,#0ch,key_bk2;enter key</p><p> mov a,lenth0</p><p><b> clr c</b></p>&l
102、t;p><b> subb a,#1</b></p><p><b> ret</b></p><p> key_bk2: cjne a,#0dh,n11 ;backspace key </p><p> jc set_loop</p><p> bk_in2: mov a,lent
103、h0</p><p><b> clr c</b></p><p><b> subb a,#1</b></p><p> jc set_loop</p><p> dec lenth0</p><p><b> dec r0</b></
104、p><p> call lcd_add</p><p> setb acc.7</p><p><b> dec a</b></p><p><b> mov b,a</b></p><p> call write_cmd</p><p> m
105、ov a,#' '</p><p> call write_data</p><p><b> mov a,b</b></p><p> call write_cmd</p><p> jmp set_loop</p><p><b> n11:clr c<
106、;/b></p><p> subb a,#10</p><p> jnc set_loop ;function key</p><p><b> mov a,b</b></p><p><b> mov @r0,a</b></p><p> add a,#3
107、0h</p><p> call write_data</p><p><b> inc r0</b></p><p> inc lenth0</p><p> mov a,lenth0</p><p> cjne a,#15,set_loop</p><p>
108、 n12:call get_key</p><p> cjne a,#0ch,n13</p><p><b> ret</b></p><p> n13:cjne a,#0dh,n12</p><p> jmp bk_in2</p><p> 3.2.4時鐘部分程序</p>
109、<p><b> 軟件資源分配:</b></p><p> hour equ 3ah</p><p> min equ 3bh</p><p> sec equ 3ch</p><p> sec0 equ 3dh</p><p> cnt_timer equ 3eh<
110、/p><p> hour1 equ 21h</p><p> hour0 equ 22h</p><p> min1 equ 23h</p><p> min0 equ 24h</p><p><b> 1.時鐘中斷程序</b></p><p> 在中斷入口處把A
111、和B 寄存器入堆棧保護起來,重新載入定時器初值,并把時間計數(shù)單元加1,查看一下是否已經(jīng)累積到1 秒了,如果不是則退出中斷;如果已經(jīng)1 秒了,則查看是否已滿1 分鐘,如果不是則退出中斷;如果已經(jīng)滿1 分鐘則查看是否滿1 小時,如果不是是退出中斷;如果已經(jīng)滿1 小時則查看是否滿24 小時,如果不是則退出中斷;如果已經(jīng)滿24 小時則復位小時分鐘和秒計數(shù)單元并退出中斷。</p><p> 考慮到晶振頻率的誤差和并在兩端
112、的微調電容的誤差,實際的振蕩頻率不可能在我們所期望的理想值,結合中斷處理所占用的時間,時鐘實際上會有一定的誤差,這時我們可以進行軟件微調,對中斷中載入的定時器初值進行微調,先用載入標準初值進行試調,測試一段時間看是偏快還是偏慢,如果偏快則增加定時器初值,如果測試偏慢則減少定時器初值。在前面標準值的基礎上進和相應的處理,增加或減少定時器初值,再測試新的時鐘是偏快還是偏慢,再進行調節(jié),直到時鐘的誤差到達一個讓人滿意的結果為止。</p&
113、gt;<p> t0_int: push acc</p><p><b> push b</b></p><p> mov th0,#34h</p><p> mov tl0,#0E0h ;subbtract 4T time</p><p> inc cnt_timer</p>&l
114、t;p> mov a,cnt_timer</p><p> cjne a,#20,exit</p><p> mov cnt_timer,#0</p><p><b> inc sec</b></p><p><b> mov a,sec</b></p><p&g
115、t; cjne a,#60,exit</p><p> mov sec,#0</p><p><b> inc min</b></p><p><b> mov a,min</b></p><p> cjne a,#60,exit</p><p> mov min
116、,#0</p><p><b> inc hour</b></p><p> mov a,hour</p><p> cjne a,#24,exit</p><p> mov hour,#0</p><p> mov min,#0</p><p> mov se
117、c,#0</p><p> exit: pop b</p><p><b> pop acc</b></p><p><b> Reti</b></p><p><b> 2.秒刷新程序</b></p><p> 編寫思路:把液晶顯示器地址指針
118、移到第二行第一個位置,依次填入三個空格位,分別把小時變量,分鐘變量和秒變量分離為高位和低位,并轉化為ASCII 碼,送到液晶數(shù)據(jù)口調用液晶寫指令子程序,在液晶屏上顯示出來,同時在小時和分鐘后插入“:”</p><p> 以符合日常習慣。在主程序中循環(huán)查看秒變量有沒有變化,有則刷新舊的時間內容,新完畢后返回主界面。</p><p> Reflash:mov a,#0c0h</p&g
119、t;<p> call write_cmd</p><p> mov a,#' '</p><p> call write_data</p><p> mov a,#' '</p><p> call write_data</p><p> mov a,#
120、9; '</p><p> call write_data</p><p> mov a,hour</p><p> call convert</p><p> mov a,#':'</p><p> call write_data</p><p><b&
121、gt; mov a,min</b></p><p> call convert</p><p> mov a,#':'</p><p> call write_data</p><p><b> mov a,sec</b></p><p> call con
122、vert</p><p> mov a,#0c0h</p><p> call write_cmd</p><p><b> Ret</b></p><p><b> 3.時間設置程序</b></p><p> 編寫思路:此部分是整個程序中最復雜的部分之一。先開啟光
123、標顯示并開閃爍;關閉定時器,清空秒變量;把小時變量和分鐘變量高低位分離并分別到保護到四個RAM 存儲單元中;每按set time 鍵一次,讀取當前液晶顯示器地址計數(shù)器(Address Counter)的內容,根據(jù)光標所在的位置,把地址計數(shù)器的內容進行加1 或加2,使光標移到下一個設置位。能根據(jù)取到的按鍵值分別判斷該次按鍵是不是有效,有效則存儲到相應的存儲單元,否則丟棄。比如當光標在小時高位時,只有按數(shù)字鍵1,2 或確定鍵才有效,其它鍵丟
124、棄。當設置完成,按下確定鍵,把存儲小時和分鐘變量的四個存儲間RAM 單元進行整合并還原到小時變量存儲單元和分鐘變量存儲單元,開啟定時器,返回主界面。</p><p> set_time: mov a,#0fh</p><p> call write_cmd ;cursor on</p><p> mov a,hour</p><p>&
125、lt;b> mov b,#10</b></p><p><b> div ab</b></p><p> mov hour1,a</p><p> mov hour0,b</p><p><b> mov a,min</b></p><p><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子密碼鎖畢業(yè)設計
- 畢業(yè)設計---電子密碼鎖設計
- 電子密碼鎖設計畢業(yè)設計
- 電子密碼鎖畢業(yè)設計
- 電子密碼鎖畢業(yè)設計
- 電子密碼鎖的畢業(yè)設計
- 電子密碼鎖畢業(yè)設計論文
- 畢業(yè)設計---lcd遙控密碼鎖的設計與制作
- 電子密碼鎖畢業(yè)設計論文
- 電子密碼鎖畢業(yè)設計 (2)
- 電子密碼鎖的畢業(yè)設計論文
- 電子密碼鎖設計畢業(yè)設計論文
- 密碼鎖畢業(yè)設計
- 電子密碼鎖畢業(yè)設計論文 (2)
- eda電子密碼鎖畢業(yè)設計論文
- 畢業(yè)設計--基于fpga的電子密碼鎖設計
- 畢業(yè)設計---基于fpga的電子密碼鎖設計
- 電子密碼鎖的設計與制作畢業(yè)設計
- 無限密碼鎖畢業(yè)設計
- 密碼鎖畢業(yè)設計論文
評論
0/150
提交評論