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