版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計說明書</b></p><p> 簡易數字電壓表的設計 </p><p> 院(系) </p><p> 專 業(yè) 機械電子工程 </p><p> 班 級 二班
2、 </p><p> 學生姓名 </p><p><b> 指導老師 </b></p><p> 2015 年 3月 13 日</p><p> 課 程 設 計 任 務 書</p><p> 茲發(fā)給
3、機械電子工程(2) 班學生 課程設計任務書,內容如下:</p><p> 設計題目: 簡易數字電壓表的設計 </p><p> 應完成的項目: </p><
4、;p> ?。?) 可測0~5V的8路電壓輸入值; </p><p> (2) 在LED數碼管上輪流顯示; </p><p> ?。?) 單路選擇顯示;
5、 </p><p> ?。?) 利用功能鍵可以實現滾動顯示,顯示啟動/停止等; </p><p> 參考資料以及說明: </p><p> [1]劉瑞新.單片機原理及應用教程[M]
6、.北京:機械工業(yè)出版社, 2003.7 </p><p> [2]張俊,鐘知原,王日根.簡易數字電壓表的設計[J].科協(xié)論壇:下半月,2012(8)34-35 </p><p> [3]趙靜,劉少聰,丁浩.王莉莎.基于單片機的數字電壓表的設計[J].數
7、字技術與應用,2011(6):121-125 </p><p> [4]魏立峰.單片機原理及應用技術[M].北京大學出版社,2005年 </p>
8、<p> [5]譚浩強.C語言程序設計(第二版)[M].北京:清華大學出版社,2005.12 </p><p> [6]蔡美琴.MCS-51系列單片機系統(tǒng)及其應用[M].北京:高等教育出版社,2004.4 </p&g
9、t;<p> 本設計任務書于2015年 3月2日發(fā)出,應于2015年3月13日前完成,然后進行答辯。</p><p> 專業(yè)教研室、研究所負責人 審核 年 月 日</p><p> 指導教師 簽發(fā) 年 月 日</p><p><b> 課程設計評語
10、:</b></p><p><b> 課程設計總評成績:</b></p><p> 課程設計答辯負責人簽字:</p><p> 年 月 日</p><p><b> 摘要</b></p><p> 在電量的測量中,電壓、電流和頻率是最基本的三
11、個被測量,其中電壓量的測量最為經常。而且隨著電子技術的發(fā)展,更是經常需要測量高精度的電壓,所以數字電壓表就成為一種必不可少的測量儀器。</p><p> 數字電壓表(Digital Voltmeter)簡稱DVM,它是采用數字化測量技術,把連續(xù)的模擬量(直流輸入電壓)轉換成不連續(xù)、離散的數字形式并加以顯示的儀表。采用單片機的數字電壓表,由精度高、抗干擾能力強,可擴展性強、集成方便,還可與PC進行實時通信。目前,
12、由各種單片A/D 轉換器構成的數字電壓表,已被廣泛用于電子及電工測量、工業(yè)自動化儀表、自動測試系統(tǒng)等智能化測量領域,示出強大的生命力。</p><p> 本實驗設計主要講述了數字電壓表的設計過程,主要包括硬件設計和程序設計,硬件主要包括以STC89C51單片機為主要控制電路、數據采樣電路、顯示電路等,是基于51單片機開發(fā)平臺實現的一種數字電壓表系統(tǒng)。該設計采用STC89C51單片機作為控制核心,驅動控制四塊數碼
13、管顯示被測電壓,以ADC0809為模數轉換數據采樣,實現被測電壓的數據采樣,使得該數字電壓表能夠測量0-5V之間的直流電壓值。</p><p> 關鍵詞:STC89C51、ADC0809、顯示電路、數據采樣</p><p><b> 目錄</b></p><p><b> 摘要0</b></p>&l
14、t;p> 第一章 設計總體方案1</p><p><b> 1.1設計任務1</b></p><p><b> 1.2設計要求1</b></p><p> 第二章 芯片功能簡介1</p><p> 2.1 STC89C51單片機簡介1</p><p>
15、; 2.1.1主要性能特點2</p><p> 2.1.2 管腳說明3</p><p> 2.2 ADC0809模數轉換簡介5</p><p> 2.2.1 主要性能特點5</p><p> 2.2.2內部結構6</p><p> 2.3 74HC164移位寄存器6</p><
16、;p> 2.4 74HC573鎖存器9</p><p> 2.5 LED顯示系統(tǒng)10</p><p> 2.5.1 LED顯示器的選擇10</p><p> 2.5.2 LED譯碼方式11</p><p> 第三章 設計方案11</p><p> 3.1硬件設計11</p>
17、<p> 3.1.1單片機最小系統(tǒng)設計12</p><p> 3.1.2采樣電路的設計14</p><p> 3.1.3 鍵盤電路的設計15</p><p> 3.1.4 LED顯示電路的設計15</p><p> 3.1.5 整體電路的設計16</p><p> 3.2系統(tǒng)程序的設計
18、17</p><p> 第四章 電路板制作與仿真調試24</p><p> 4.1電路板的設計與制作24</p><p> 4.2偉福仿真器的仿真調試25</p><p><b> 第五章 總結26</b></p><p> 5.1課程設計總結26</p><
19、;p><b> 參考文獻27</b></p><p> 第一章 設計總體方案</p><p><b> 1.1設計任務</b></p><p> 利用單片機AT89C51與ADC0809設計制作一個數字電壓表,能夠測量直流電壓值。</p><p> (1)可測0~5V的8路輸入電壓
20、值;</p><p> (2)在LED數碼管上輪流顯示;</p><p><b> (3)單路選擇顯示</b></p><p><b> 1.2設計要求</b></p><p><b> A.系統(tǒng)硬件設計</b></p><p> (1)單片機
21、采用MCS51系列</p><p> (2) A/D轉換器0809</p><p> (3)鍵盤為4×4行列式鍵盤,按鍵設有10個數字鍵0……9,和5個功能鍵依次是: 各通道輪流顯示鍵、單通道顯示鍵、向左滾動顯示鍵、顯示啟動/停止鍵、回車鍵。</p><p> (4)有4位LED管,左邊1位用于指示顯示通道,右邊3位顯示電壓值。</p
22、><p><b> B.系統(tǒng)軟件設計</b></p><p> (1) 鍵盤管理程序(包括鍵掃描、鍵處理程序)。</p><p> (2) LED動態(tài)顯示程序,包括:</p><p> (3) 各通道輪流顯示,共顯示8個通道,每通道顯示1s;</p><p> (4) 單通道顯示,僅顯示指定
23、通道電壓,并保持到其他功能鍵按下。</p><p> 第二章 芯片功能簡介</p><p> 2.1 STC89C51單片機簡介</p><p> STC89C51單片機學習板是一款基于8位單片機處理芯片STC89C52RC的系統(tǒng)。其功能強大,可以實現單片機開發(fā)的多種要求,學習、開發(fā)者可以根據需要選配多種常用模塊,達到實驗及教學的目的?! ?9C51單片機學習
24、板功能強大,具有報警,跑馬燈、串行通信(max232)、段碼液晶(msm0801LCD)和字符液晶顯示(LCD1602)、電機控制(L298)、A/D轉換(TLC2543)、D/A轉換(TLC5615)、溫度采集(DS18B20)、數字信號合成(AD9851)、實時時鐘電路(DS1302)、4—20mA輸出、PWM輸出(UC3842)、紅外檢測(KSM-603LM)控制等十七種功能,供學習者學習開發(fā)使用。如圖2-1所示外觀圖。</
25、p><p> 圖2-1 STC89C51芯片</p><p> 2.1.1主要性能特點</p><p> 1、4k Bytes Flash片內程序存儲器; </p><p> 2、128 bytes的隨機存取數據存儲器(RAM); </p><p> 3、32個外部雙向輸入/輸出(I/O)口; </p>
26、;<p> 4、2個中斷優(yōu)先級、2層中斷嵌套中斷; </p><p><b> 5、6個中斷源; </b></p><p> 6、2個16位可編程定時器/計數器; </p><p> 7、2個全雙工串行通信口; </p><p> 8、看門狗(WDT)電路; </p><p&g
27、t; 9、片內振蕩器和時鐘電路; </p><p> 10、與MCS-51兼容; </p><p> 11、全靜態(tài)工作:0Hz-33MHz; </p><p> 12、三級程序存儲器保密鎖定; </p><p> 13、可編程串行通道; </p><p> 14、低功耗的閑置和掉電模式。</p>
28、<p> 2.1.2 管腳說明</p><p> P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的低八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。 </p><p> P1口:P
29、1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 </p><p> P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且
30、作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 </p><p> P3口:P3口管腳是8個帶內部上拉電阻的雙向
31、I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口除了作為普通I/O口,還有第二功能: </p><p> P3.0 RXD(串行輸入口) </p><p> P3.1 TXD(串行輸出口) </p><p> P3.2 /INT0
32、(外部中斷0) </p><p> P3.3 /INT1(外部中斷1) </p><p> P3.4 T0(T0定時器的外部計數輸入) </p><p> P3.5 T1(T1定時器的外部計數輸入) </p><p> P3.6 /WR(外部數據存儲器的寫選通) </p><p> P3.7 /RD(外部數據
33、存儲器的讀選通) </p><p> P3口同時為閃爍編程和編程校驗接收一些控制信號。 </p><p> I/O口作為輸入口時有兩種工作方式,即所謂的讀端口與讀引腳。讀端口時實際上并不從外部讀入數據,而是把端口鎖存器的內容讀入到內部總線,經過某種運算或變換后再寫回到端口鎖存器。只有讀端口時才真正地把外部的數據讀入到內部總線。89C51的P0、P1、P2、P3口作為輸入時都是準雙向口。
34、除了P1口外P0、P2、P3口都還有其他的功能。 </p><p> RST:復位輸入端,高電平有效。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。 </p><p> ALE/PROG:地址鎖存允許/編程脈沖信號端。當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的低位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信
35、號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 </p><p> PSEN:外部程序存儲器的選通信號,低電平有效。在由外部程序存儲器取
36、指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。 </p><p> EA/VPP:外部程序存儲器訪問允許。當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP
37、)。 </p><p> XTAL1:片內振蕩器反相放大器和時鐘發(fā)生器的輸入端。 </p><p> XTAL2:片內振蕩器反相放大器的輸出端。</p><p> 圖2-2 AT89C51芯片管腳</p><p> 2.2 ADC0809模數轉換簡介</p><p> ADC0809是美國國家半導體公司生產的
38、帶有8位A/D轉換器、8路多路開關以及微處理機兼容的控制邏輯的CMOS組件。它是逐次逼近式A/D轉換器,可以和單片機直接接口。ADC0809由一個8路模擬開關、一個地址鎖存與譯碼器、一個A/D轉換器和一個三態(tài)輸出鎖存器組成。多路開關可選通8個模擬通道,允許8路模擬量分時輸入,共用A/D轉換器進行轉換。產品外觀圖如圖2-3所示。</p><p> 圖2-3 ADC0809芯片</p><p&g
39、t; 2.2.1 主要性能特點</p><p> ?。?)8路輸入通道,8位A/D轉換器,即分辨率為8位。 </p><p> ?。?)具有轉換起??刂贫?。 </p><p> ?。?)轉換時間為100μs(時鐘為640kHz時),130μs(時鐘為500kHz時) </p><p> (4)單個+5V電源供電 </p>
40、<p> ?。?)模擬輸入電壓范圍0~+5V,不需零點和滿刻度校準。 </p><p> (6)工作溫度范圍為-40~+85攝氏度 </p><p> ?。?)低功耗,約15mW。 </p><p><b> 2.2.2內部結構</b></p><p> ADC0809內部邏輯電路如下:</p>
41、;<p> 圖2-4 ADC0809內部圖</p><p> ADC0809是CMOS單片型逐次逼近式A/D轉換器,內部結構如圖所示,它由8路模擬開關、地址鎖存與譯碼器、比較器、8位開關樹型A/D轉換器、逐次逼近寄存器、邏輯控制和定時電路組成。</p><p> 2.3 74HC164移位寄存器</p><p><b> 2.3.1
42、概述</b></p><p> 74HC164、74HCT164 是高速硅門 CMOS 器件,與低功耗肖特基型 TTL (LSTTL) 器件的引腳兼容。74HC164、74HCT164 是 8 位邊沿觸發(fā)式移位寄存器,串行輸入數據,然后并行輸出。數據通過兩個輸入端(DSA 或 DSB)之一串行輸入;任一輸入端可以用作高電平使能端,控制另一輸入端的數據輸入。兩個輸入端或者連接在一起,或者把不用的輸入端
43、接高電平,一定不要懸空。</p><p> 時鐘 (CP) 每次由低變高時,數據右移一位,輸入到 Q0, Q0 是兩個數據輸入端(DSA 和 DSB)的邏輯與,它將上升時鐘沿之前保持一個建立時間的長度。</p><p> 主復位 (MR) 輸入端上的一個低電平將使其它所有輸入端都無效,同時非同步地清除寄存器,強制所有的輸出為低電平。</p><p><b&
44、gt; 2.3.2 特性</b></p><p><b> 門控串行數據輸入 </b></p><p><b> 異步中央復位 </b></p><p> 符合 JEDEC 標準 no. 7A </p><p> 靜電放電 (ESD) 保護: ·HBM
45、EIA/JESD22-A114-B 超過 2000 V ·MM EIA/JESD22-A115-A 超過 200 V 。 </p><p><b> 多種封裝形式 </b></p><p> 額定從 -40 °C 至 +85 °C 和 -40 °C 至 +125 °C 。</p><
46、p><b> 2.3.3 功能圖</b></p><p> 圖2-5. 邏輯符號</p><p> 圖2-6 74HC164管腳分布圖</p><p> 74HC164典型工作時序圖:</p><p> 圖2-7 74HC164工作時序圖</p><p> 2.4 74HC573
47、鎖存器</p><p> 在數碼管顯示方面,要維持一個數據的顯示,往往要持續(xù)的快速的刷新。尤其是在四段八位數碼管等這些要選通的顯示設備上。在人類能夠接受的刷新頻率之內,大概每三十毫秒就要刷新一次。這就大大占用了處理器的處理時間,消耗了處理器的處理能力,還浪費了處理器的功耗。</p><p> 鎖存器的使用可以大大的緩解處理器在這方面的壓力。當處理器把數據傳輸到鎖存器并將其鎖存后,鎖存器
48、的輸出引腳便會一直保持數據狀態(tài)直到下一次鎖存新的數據為止。這樣在數碼管的顯示內容不變之前,處理器的處理時間和IO引腳便可以釋放。可以看出,處理器處理的時間僅限于顯示內容發(fā)生變化的時候,這在整個顯示時間上只是非常少的一個部分。而處理器在處理完后可以有更多的時間來執(zhí)行其他的任務。這就是鎖存器在LED和數碼管顯示方面的作用:節(jié)省了寶貴的MCU時間。</p><p> 鎖存器作用:鎖存器(Latch)是一種對脈沖電平敏
49、感的存儲單元電路,它們可以在特定輸入脈沖電平作用下改變狀態(tài)。鎖存,就是把信號暫存以維持某種電平狀態(tài)。鎖存器的最主要作用是緩存,其次完成高速的控制其與慢速的外設的不同步問題,再其次是解決驅動的問題,最后是解決一個 I/O 口既能輸出也能輸入的問題。</p><p> 鎖存器就是把當前的狀態(tài)鎖存起來,使CPU送出的數據在接口電路的輸出端保持一段時間鎖存后狀態(tài)不再發(fā)生變化,直到解除鎖定。還有些芯片具有鎖存器,比如芯片
50、74LS244就具有鎖存的功能,它可以通過把一個引腳置高后,輸出就會保持現有的狀態(tài),直到把該引腳清0后才能繼續(xù)變化。</p><p> 圖2-8 74HC573鎖存器管腳圖</p><p> LE為鎖存控制端;OE為使能端。</p><p> 2.5 LED顯示系統(tǒng)</p><p> 2.5.1 LED顯示器的選擇</p>
51、;<p> 在本設計中,選擇4位一體的數碼型LED顯示器,簡稱“4-LED”。本系統(tǒng)中第一位為通道顯示,第二位為顯示電壓的整數位,即個位,后兩位顯示電壓的小數位,分別為十分位和百分位。</p><p> 4-LED顯示器引腳如圖2-9所示,是一個共陰極接法的4位LED數碼顯示管,其中a,b,c,e,f,g為4位LED各段的公共輸出端,1、2、3、4分別是每一位的位數選端,dp是小數點引出端,4位
52、一體LED數碼顯示管的內部結構是由4個單獨的LED組成,每個LED的段輸出引腳在內部都并聯后,引出到器件的外部。</p><p> 圖2-9 4位LED外觀及引腳圖</p><p> 圖2-10 A5416AH四位共陰數碼管引腳詳圖</p><p> 對于這種結構的LED顯示器,它的體積和結構都符合設計要求,由于4位LED陰極的各段已經在內部連接在一起,所以必
53、須使用動態(tài)掃描方式(將所有數碼管的段選線并聯在一起,用一個I/O接口控制)顯示。</p><p> 2.5.2 LED譯碼方式</p><p> 譯碼方式是指由顯示字符轉換得到對應的字段碼的方式,對于LED數碼管顯示器,通常的譯碼方式有硬件譯碼和軟件譯碼方式兩種。</p><p> 硬件譯碼是指利用專門的硬件電路來實現顯示字符碼的轉換。</p>
54、<p> 軟件譯碼就是編寫軟件譯碼程序,通過譯碼程序來得到要顯示的字符的字段碼,譯碼程序通常為查表程序[3]。</p><p> 本設計系統(tǒng)中為了簡化硬件線路設計,LED譯碼采用軟件編程來實現。由于本設計采用的是共陰極LED,其對應的字符和字段碼如下表2-1所示。</p><p> 表2-1 共陰極字段碼表</p><p><b> 第三
55、章 設計方案</b></p><p><b> 3.1硬件設計</b></p><p> 圖3-1為硬件的總體框圖,可分為四個模塊。模數轉換使用ADC0809芯片,它將輸入的模擬電壓量轉換為一個8位的二進制數字,然后進入到單片機STC80C51控制單元,經過驅動處理模塊用數碼管顯示出直流電壓值。另外注意ADC0809芯片輸入電壓不可大于5V。</
56、p><p> 3.1.1單片機最小系統(tǒng)設計</p><p><b> 1.時鐘電路的設計</b></p><p> MCS-51單片機芯片內部有一個高增益反相放大器,用于構成震蕩器,XTAL1為該放大器的輸入端,XTAL2為該放大器輸出端,但形成時鐘電路還需附加其他電路。</p><p> 本設計系統(tǒng)采用內部時鐘方式
57、,利用單片機內部的高增益反相放大器,外部電路簡,只需要一個晶振和 2個電容即可,如圖3-2所示。</p><p> 圖3-2 時鐘電路的設計</p><p><b> 2.復位電路的設計</b></p><p> 單片機在啟動運行時都需要復位,使CPU和系統(tǒng)中的其他部件都處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。MCS-51單片機有一
58、個復位引腳RST,采用施密特觸發(fā)輸入。當震蕩器起振后,只要該引腳上出現2個機器周期以上的高電平即可確保時器件復位。復位電路如圖3-3所示。</p><p> 圖3-3 復位電路的設計</p><p> 3.單片機電源電路設計</p><p> 只要能夠提供穩(wěn)定的+5V電壓的各種電源都可以,但一般都用三端穩(wěn)壓器7805。</p><p>
59、 接法如圖,7805的“1”有7V以上就行。C1可選1000~2200微法的電解電容,C3可選10~100微法的電解電容,C2、C4可選0.01~0.1微法的無極電容。如圖3-4所示。當然,電源這塊不是我們本次實驗的設計重點,這里大概提一下。</p><p><b> 圖3-4電源電路</b></p><p> 3.1.2采樣電路的設計</p>&
60、lt;p> 這里使用的是ADC0809的模數轉換芯片,可根據其工作機理來設計電路圖:首先輸入3位地址,并使ALE=1,將地址存入地址鎖存器中。此地址經譯碼選通8路模擬輸入之一到比較器。START上升沿將逐次逼近寄存器復位。下降沿啟動 A/D轉換,之后EOC輸出信號變低,指示轉換正在進行。直到A/D轉換完成,EOC變?yōu)楦唠娖?,指示A/D轉換結束,結果數據已存入鎖存器,這個信號可用作中斷申請。當OE輸入高電平 時,輸出三態(tài)門打開,轉
61、換結果的數字量輸出到數據總線上。 </p><p> 轉換數據的傳送 A/D轉換后得到的數據應及時傳送給單片機進行處理。數據傳送的關鍵問題是如何確認A/D轉換的完成,因為只有確認完成后,才能進行傳送。采樣電路如圖3-5所示。</p><p><b> 圖3-5 采樣電路</b></p><p> 3.1.3 鍵盤電路的設計</p&g
62、t;<p> 當按鍵數量較多時,為節(jié)省I/O口線和減少引線,常將其按矩陣方式連接。每條行線與列線的交叉處通過一個按鍵來接通,則只需要N條行線和M條列線,即可組成N*M個按鍵的鍵盤。比如,有16個按鍵的鍵盤,可將其按4*4的方式連接,即4根行線和4根列線,每根行線和列線交叉點處即為一個鍵位,其連接形式如圖3-6所示。</p><p> 圖3-6 鍵盤電路的設計</p><p&g
63、t; 3.1.4 LED顯示電路的設計</p><p> 單片機的并行口不能直接驅動LED顯示器,所以,在一般情況下,必須采用專用的驅動電路芯片,使之產生足夠大的電流,顯示器才能正常工作[7]。如果驅動電路能力差,即負載能力不夠時,顯示器亮度就低,而且驅動電路長期在超負荷下運行容易損壞,因此,LED顯示器的驅動電路設計是一個非常重要的問題。</p><p> 為了簡化數字式直流電壓表
64、的電路設計,在LED驅動電路的設計上,可以利用單片機P0口上外接的上拉電阻來實現,即將LED的A-G段顯示引腳和DP小數點顯示引腳并聯到P0口與上拉電阻之間,這樣,就可以加大P0口作為輸出口德驅動能力,使得LED能按照正常的亮度顯示出數字,如圖3-7所示。</p><p> 圖3-7 LED顯示電路的設計</p><p> 3.1.5 整體電路的設計</p><p&
65、gt; 最終結合整體硬件布局以及適合布線規(guī)劃的設計。最終整體電路的設計如圖3-8所示。</p><p> 圖3-8 整體電路的設計</p><p> 3.2系統(tǒng)程序的設計</p><p> 系統(tǒng)程序的設計是對照已經設計好的硬件電路進行編寫的程序,其每個函數模塊及其硬件原理都可以在上一節(jié)中進行對應。</p><p><b>
66、 系統(tǒng)程序設計代碼:</b></p><p> //-------------------------頭文件與宏定義-------------------------------</p><p> #include<reg52.h> //頭文件</p><p> #include <intrins.h>
67、; //使用其中的移位函數_crol_與_cror_</p><p> #define uchar unsigned char //簡寫定義,方面后面書寫</p><p> #define uint unsigned int</p><p> #define ADD P3</p><p> uchar code
68、LED_Data1[]=</p><p> {0xfc,0xc0,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};//共陰數碼管表0~9</p><p> uchar code LED_Data2[]=</p><p> {0xfd,0x61,0xdb,0xf3,0x67,0xb7,0xb7,0xe1,0xff,0xf7};/
69、/共陰數碼管表0.~9.</p><p> sbit HC164_DATA=P1^1; //定義HC164數據位</p><p> sbit HC164_CLK=P1^0; //定義HC164時鐘位</p><p> sbit a0=ACC^0;</p><p> sbit channel=P1^2; //定義數碼管通道<
70、;/p><p> sbit wei1=P1^3; //定義各個數碼管的位選</p><p> sbit wei2=P1^4;</p><p> sbit wei3=P1^5;</p><p> sbit ST=P1^6; //定義A/D轉換啟動信號輸入端</p><p> sbit O
71、E=P1^7; //定義輸出允許控制端</p><p> sbit ADD_A=P3^5; //定義A/D轉換三個地址位</p><p> sbit ADD_B=P3^6;</p><p> sbit ADD_C=P3^7;</p><p> uchar num,getdata,temp1,temp2,tem
72、p3,temp4;</p><p> uchar a=0,b=0,c=0,t=0,k=0,sig_flag=0,on_off=0,CHAN=0,chan_temp=0;nTIME=0,sig_mul=0,k1=0;</p><p> //-------------------------原函數聲明---------------------------------</p>
73、<p> void init();</p><p> void AD_convert(uchar j);</p><p> void HC164_Display(uchar data_buf);</p><p> void LED_scan(uchar l,uchar m,uchar n,uchar w);</p><p>
74、 void mul_display();</p><p> void left_display();</p><p> uchar keyscan();</p><p> uchar key_driver();</p><p> void delay_ms(uint);</p><p> //-------
75、---------------------主函數----------------------------------</p><p> void main() </p><p><b> {</b></p><p> init(); //通電即初始化</p><p><b> while
76、(1)</b></p><p><b> {</b></p><p> switch (key_driver())</p><p><b> {</b></p><p> case 0:if(sig_flag==1)k=0;k1=0;break;</p>&l
77、t;p> case 1:if(sig_flag==1){k=0x20;k1=1;}break;</p><p> case 2:if(sig_flag==1){k=0x40;k1=2;}break;</p><p> case 3:if(sig_flag==1){k=0x60;k1=3;}break;</p><p> case 4:if(sig_fl
78、ag==1){k=0x80;k1=4;}break;</p><p> case 5:if(sig_flag==1){k=0xa0;k1=5;}break;</p><p> case 6:if(sig_flag==1){k=0xc0;k1=6;}break; </p><p> case 7:if(sig_flag==1){k=0xe0;k1=7;}bre
79、ak;</p><p><b> case 8:;</b></p><p> case 9:;break;</p><p> case 10:if(on_off==1){sig_mul=2;TR0=1;}sig_flag=0;break; //多通道顯示 </p>&
80、lt;p> case 11:sig_flag=1;TR0=0;break; //單通道顯示</p><p> case 12:if(on_off==1)left_display();break; //向左滾動顯示</p><p> case 1
81、3:on_off++; //啟動與關閉顯示</p><p> if(on_off==1){channel=0;wei1=0;wei2=0;wei3=0;TR0=1;};</p><p> if(on_off==2){channel=1;wei1=1;wei2=1;wei3=1;on_off=0;}</p><p><b> break;<
82、;/b></p><p> case 14:break;</p><p><b> case 15:</b></p><p> if(sig_flag==1){sig_mul=1;}break;//enter</p><p> default: //默認為多通道,但關閉顯示<
83、/p><p> if(on_off==1){</p><p> if(sig_mul==1){AD_convert(k);LED_scan(k1,a,b,c);}</p><p> else mul_display();</p><p><b> }</b></p><p><b>
84、 break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //------------------------初始化函數-------------------
85、----------------</p><p> void init() //初始化定時器以及數碼管位選</p><p><b> {</b></p><p> channel=1;wei1=1;wei2=1;wei3=1;</p><p><b> P2=0XF0;<
86、;/b></p><p> TMOD=0X01; //T0為模式1</p><p> TH0=(65536-50000)/256;//0.05s</p><p> TL0=(65536-50000)%256;</p><p><b> EA=1;</b></p><p&g
87、t;<b> ET0=1;</b></p><p><b> on_off=1;</b></p><p><b> }</b></p><p> //------------------------ADC0809轉換----------------------------------</
88、p><p> void AD_convert(uchar j) //將模擬量轉化為數字量</p><p><b> {</b></p><p> P0=0xff; //讀取前先寫1</p><p><b> P3=j;</b></p><p>
89、;<b> ST=0;</b></p><p><b> ST=1;</b></p><p><b> ST=0;</b></p><p> delay_ms(5); //延時以便芯片轉化完畢</p><p><b> OE=1;<
90、/b></p><p> delay_ms(1);</p><p> temp4=P0; //根據電路圖,將獲取數據順序57684321調整為12345678,使其為真實值</p><p> temp1=(_crol_(temp4,3)&0x80)|(temp4&0x6f)|(_cror_(temp4,3)&
91、;0x10);</p><p> temp4=(_crol_(temp1,7)&0x80)|(_crol_(temp1,5)&0x40)|(_crol_(temp1,3)&0x20)|(_crol_(temp1,1)&0x10);</p><p> temp3=(_cror_(temp1,7)&0x01)|(_cror_(temp1,5)&
92、;0x02)|(_cror_(temp1,3)&0x04)|(_cror_(temp1,1)&0x08);</p><p> getdata=temp3|temp4;</p><p> delay_ms(10);</p><p> getdata=getdata*2 ; //標度變換(用范圍0~500來表示5V)</p>
93、<p> a=getdata/100; //個位數值獲取</p><p> b=(getdata-a*100)/10; //十分位數值獲取</p><p> c=getdata-a*100-b*10; //百分位數值獲取</p><p><b> OE=0;</b></p><p&
94、gt; return a,b,c ;</p><p><b> }</b></p><p> //----------------------HC164串入并出函數------------------------------</p><p> void HC164_Display(uchar data_buf)</p>&
95、lt;p><b> {</b></p><p><b> uchar i;</b></p><p> ACC=data_buf;</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p&g
96、t; HC164_CLK=0; //上升沿出發(fā)移位</p><p> HC164_DATA=a0; //將ACC^0賦值給數據位</p><p> HC164_CLK=1;</p><p> ACC=ACC>>1; //對ACC進行移位</p><p><b>
97、 }</b></p><p><b> }</b></p><p> //---------------------數碼管動態(tài)掃描函數------------------------------</p><p> void LED_scan(uchar l,uchar m,uchar n,uchar w)</p>
98、<p><b> {</b></p><p> channel=0;wei1=1;wei2=1;wei3=1;HC164_Display(LED_Data1[l]);delay_ms(10);HC164_Display(0x0);channel=1;delay_ms(1); //channel通道開 </p><p> wei1=0;chann
99、el=1;wei2=1;wei3=1;HC164_Display(LED_Data2[m]);delay_ms(10);HC164_Display(0x0);wei1=1;delay_ms(1); //wei1通道開</p><p> wei2=0;channel=1;wei1=1;wei3=1;HC164_Display(LED_Data1[n]);delay_ms(10);HC164_Display
100、(0x0);wei2=1;delay_ms(1); //wei2通道開</p><p> wei3=0;channel=1;wei1=1;wei2=1;HC164_Display(LED_Data1[w]);delay_ms(10);HC164_Display(0x0);wei3=1;delay_ms(1); //wei3通道開</p><p><b> }&
101、lt;/b></p><p> //-------------------------8個通道輪流顯示-----------------------------</p><p> void mul_display()</p><p><b> {</b></p><p> AD_convert(CHAN);
102、</p><p> delay_ms(8);</p><p> LED_scan(chan_temp,a,b,c);</p><p><b> }</b></p><p> //--------------------------延時子程序---------------------------------<
103、/p><p> void delay_ms(uint i) </p><p><b> { </b></p><p> uchar x,j; </p><p> for(j=0;j<i;j++) </p><p> for(x=0;x<=50;x++); </p>
104、;<p><b> }</b></p><p> //--------------------------鍵盤掃描程序-------------------------------</p><p> uchar keyscan()</p><p><b> {</b></p><p
105、> uchar sccode; //定義鍵盤行列變量</p><p> uchar recode;</p><p><b> P2=0xf0;</b></p><p> if((P2&0xf0)!=0xf0) //檢測是否有鍵被按下</p><p>&
106、lt;b> {</b></p><p> delay_ms(8); //延時消抖動</p><p> if((P2&0xf0)!=0xf0)</p><p><b> {</b></p><p> sccode=0xfe;</p><p&
107、gt; while((sccode&0x10)!=0)</p><p><b> {</b></p><p> P2=sccode;</p><p> if((P2&0xf0)!=0xf0)</p><p><b> {</b></p><p>
108、 recode=(P2&0xf0)|0x0f;</p><p> while((P2&0xf0)!=0xf0);</p><p> return(~recode+~sccode);</p><p><b> }</b></p><p><b> else</b></p&
109、gt;<p><b> {</b></p><p> sccode=(sccode<<1)|0x01;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>&l
110、t;/p><p> while((P2&0xf0)!=0xf0);</p><p><b> }</b></p><p> return(0);</p><p><b> }</b></p><p> //--------------------按鍵編碼對應表
111、-----------------------------------</p><p> uchar key_driver()</p><p><b> {</b></p><p> uchar temp=0,num=100;</p><p> temp=keyscan();</p><p&g
112、t; switch (temp)</p><p><b> {</b></p><p> case 0x11:num=1;break;</p><p> case 0x12:num=2;break;</p><p> case 0x14:num=3;break;</p><p> ca
113、se 0x18:num=10;break;</p><p> case 0x21:num=4;break;</p><p> case 0x22:num=5;break;</p><p> case 0x24:num=6;break;</p><p> case 0x28:num=11;break;</p><p&
114、gt; case 0x41:num=7;break;</p><p> case 0x42:num=8;break;</p><p> case 0x44:num=9;break;</p><p> case 0x48:num=12;break;</p><p> case 0x81:num=13;break;</p>
115、<p> case 0x82:num=0;break;</p><p> case 0x84:num=14;break;</p><p> case 0x88:num=15;break;</p><p> default :break;</p><p><b> }</b></p>&
116、lt;p> return num;</p><p><b> }</b></p><p> //--------------------------定時器定時---------------------------------</p><p> void timer0(void) interrupt 1</p><
117、;p><b> {</b></p><p> TH0=(65536-49995)/256; //裝定時初值</p><p> TL0=(65536-49995)%256;</p><p><b> nTIME++;</b></p><p> if(nTIME==20)<
118、;/p><p><b> {</b></p><p><b> nTIME=0;</b></p><p> chan_temp++;</p><p> CHAN=chan_temp<<5;</p><p> if(chan_temp==8)chan_temp
119、=0;</p><p><b> }</b></p><p><b> }</b></p><p> 第四章 電路板制作與仿真調試</p><p> 4.1電路板的設計與制作</p><p> ?。?)打印:根據調整好的PCB圖,進行設置,并打印出來,PCB打印圖如圖
120、4-1所示。</p><p> ?。?)曝光:撕開感光板上的白色不透明保護膜,感光板銅皮面被綠色的化學物質——感光膜所覆蓋 ,將打印的原理圖一面與感光膜貼合,放入曝光機中,注意紙在下層,先進行抽真空,然后設置參數為下曝光,曝光時間為300秒,啟動曝光。</p><p> ?。?)顯像:將曝光好的板子放入顯像劑中,邊抖動邊觀察板子,一旦板上出現清晰的圖案就應立即將板子拿出,避免顯影過度,然后
121、放入清水中沖洗干凈。檢查磨面線路是否有短路或開路的地方,短路的地方用小刀刮掉,斷路的地方用油性筆修補.</p><p> ?。?)腐蝕:將板子放入腐蝕液中浸泡直至該腐蝕掉的銅消除干凈。注意不要過度腐蝕。</p><p> ?。?)打孔與焊接:根據所需孔的大小選擇尺寸合適的鉆頭打孔,利用電烙鐵、焊錫和松香將元器件焊接在電路板上。</p><p> ?。?)檢查電路:對
122、整個電路板進行全面的測試,如果有問題結合原理圖對電路進行更換元件,重新焊接等調整,測試通過后整個電路板就算順利完成了。</p><p> 圖4-1 PCB打印圖</p><p> 4.2偉福仿真器的仿真調試</p><p> 硬件仿真,就是仿真器接電腦,仿真器再通過仿真頭接目標板,然后程序就能在線仿真。這里使用的是偉福仿真器V8/T,當仿真器連接好了以后,打開
123、51開發(fā)軟件平臺KEIL(version2),通過在KEIL中修改你的程序中不滿意的部分,仿真器會在軟件平臺KEIL的控制下時時聯動。然后通過單步運行程序或者讓程序運行到指定的程序行停止,等等調試方法調試你的程序,直到你滿意為止,全部過程硬件都會和程序同步運行,所見即所得。可以極大地提高效率,不用再反復的用編程器向51芯片中燒錄程序。仿真器就是通過仿真頭用軟件來代替了在目標板上的51芯片,關鍵是不用反復的燒寫,不滿意隨時可以改,可以單步
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 簡易數字電壓表單片機課程設計
- 單片機課程設計--簡易數字電壓表
- 課程設計----單片機簡易數字電壓表
- 單片機課程設計--簡易數字電壓表的設計
- 單片機課程設計--簡易數字電壓表的設計
- 單片機課程設計---基于單片機的簡易數字電壓表設計
- 單片機課程設計-多通路簡易數字電壓表
- 數字電壓表課程設計--基于單片機的簡易數字電壓表的設計
- 數字電壓表課程設計--基于單片機的簡易數字電壓表的設計
- 單片機課程設計-數字電壓表
- 單片機課程設計---數字電壓表
- 單片機課程設計-數字電壓表
- 單片機(數字電壓表)課程設計
- 簡易數字電壓表-單片機原理及應用課程設計
- 簡易數字電壓表-單片機原理及應用課程設計
- 單片機課程設計----數字電壓表
- 單片機課程設計-數字電壓表
- 單片機課程設計--數字電壓表
- 數字電壓表單片機畢業(yè)設計
- 數字電壓表單片機畢業(yè)設計
評論
0/150
提交評論