版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 題 目:簡易數字電壓表的設計</p><p><b> 姓 名: </b></p><p><b> 學 號: </b></p><p> 專 業(yè):電子信息科學與技術</p><p><b> 指導老師: </b></p>
2、;<p><b> 設計時間: </b></p><p><b> 目 錄</b></p><p><b> 1.引 言1</b></p><p> 1.1.設計意義1</p><p> 1.2.系統(tǒng)功能要求1</p><p
3、> 1.3.本組成員所做的工作2</p><p><b> 2.方案設計2</b></p><p><b> 3.硬件設計3</b></p><p> 3.1 單片機最小系統(tǒng)4</p><p> 3.1.1.主控芯片STC89C52單片機介紹4</p><
4、;p> 3.1.2. 復位電路6</p><p> 3.1.3. 時鐘電路6</p><p> 3.2數碼管顯示電路7</p><p> 3.2.1.四位一體共陽數碼管7</p><p> 3.2.2. 74LS244鎖存器8</p><p> 3.2.3.整體顯示電路9</p>
5、;<p> 3.3.模數轉換模塊10</p><p><b> 4.軟件設計13</b></p><p> 4.1.初始化程序13</p><p> 4.2. 主程序14</p><p> 4.3. 顯示子程序14</p><p> 4.4. A/D轉換測量子程
6、序15</p><p><b> 5.系統(tǒng)調試15</b></p><p> 5.1.調試過程15</p><p> 5.2.性能分析16</p><p><b> 6.設計總結16</b></p><p> 附 錄A 源程序17</p>
7、<p> 附 錄B 系統(tǒng)仿真圖22</p><p> 附 錄C 作品實物圖片23</p><p> 附 錄D 測試圖片24</p><p><b> 參考文獻26</b></p><p><b> 簡易電壓變的設計</b></p><p>
8、<b> 1.引 言</b></p><p><b> 1.1.設計意義</b></p><p> 數字電壓表(Digital Voltmeter)簡稱DVM,它是采用數字化測量技術,連續(xù)的模擬量(直流輸入電壓)轉換成不連續(xù)、離散的數字形式并加以顯示的儀表。傳統(tǒng)的指針式電壓表功能單一、精度低,不能滿足數字化時代的需求,采用單片機的數字電壓表
9、,由精度高、抗干擾能力強,可擴展性強、集成方便,還可與PC進行實時通信。在電氣測量中,電壓是一個很重要的參數。如何準確地測量模擬信號的電壓值,一直是電測儀器研究的內容之一。數字電壓表是通用儀器中使用較廣泛的一種測試儀器,很多電量或非電量經變化后都用可數字電壓表完成測試。因此,數字電壓表被廣泛地應用于科研和生產測試中。</p><p> 本設計主要研究的是以AT89C52單片機為核心的電壓測量系統(tǒng),該系統(tǒng)能夠在單
10、片機的控制下完成對電壓信號采集,能夠根據采樣值進行量程自動轉換,并且測量結果可通過四個數碼管顯示出來,從而實現(xiàn)人工智能。</p><p> 1.2.系統(tǒng)功能要求</p><p> 1.設計一款數字電壓表,以MCS-51系列單片機為核心器件,組成一個簡單 的直流數字電壓表,將模擬的電壓信號轉換出來顯示在數碼管上。</p><p> 2.可以測量0~5V范圍內的8
11、路直流電壓值。在4位LED數碼管上輪流顯示各路電壓值或單路選擇顯示,其中3位LED數碼管顯示電壓值,顯示范圍為0.00V~5.00V,1位LED數碼管顯示路數,8路分別為0-7。要求測量的最小分辨率為0.02V。</p><p> 3.要求穩(wěn)定,無抖動,盡量使用較少的元器件。</p><p> 1.3.本組成員所做的工作</p><p> 本次的單片機課程設計
12、我們組分工明確,張翼和郭大亨主要負責電路板的器件的布局以及連線,而我則負責程序的編寫與調試以及課程設計報告的編寫。</p><p> 當電路板焊接完成后,我們一起進行硬件電路的檢測與調試。由于接線中存在虛焊和接線錯誤之類的問題,我們組員之間一起細心排查各個環(huán)節(jié),逐一進行調試,最后終于找出了錯誤。共同完成硬件電路的調試。</p><p><b> 2.方案設計</b>
13、;</p><p> 根據功能要求,提出合理的設計方案,畫出方案方框圖,并對系統(tǒng)工作原理進行闡述。</p><p> 按系統(tǒng)功能實現(xiàn)要求,決定控制系統(tǒng)采用AT89S51單片機,A/D轉換采用ADC0809。系統(tǒng)除了能確保實現(xiàn)要求的功能外,還可以方便地進行8路其他A/D轉換量的測量和遠程測量結果傳送等擴展功能。數字電壓表的系統(tǒng)設計方案如框圖1.1所示。</p><p&
14、gt; 圖1.1 數字電壓表系統(tǒng)設計方案框圖</p><p><b> 3.硬件設計</b></p><p> 硬件電路的設計主要包括單片機系統(tǒng)及顯示電路、超聲波發(fā)射電路和超聲波檢測接收電路三部分。單片機采用STC89C52或其兼容系列。采用12MHz高精度的晶振,以獲得較穩(wěn)定時鐘頻率,減小測量誤差。單片機用P1.0端口輸出超聲波換能器所需的40kHz的方波信
15、號,利用外中斷0口監(jiān)測超聲波接收電路輸出的返回信號。超聲波發(fā)射電路主要有反相器74HC04和超聲波發(fā)射換能器T構成,超聲波檢測接收電路主要是由集成電路CX20106A組成,顯示電路采用簡單實用的LED數碼管顯示。</p><p> 3.1整體設計思路框圖及原理圖</p><p> 硬件電路設計由6個部分組成; A/D轉換電路,AT89C51單片機系統(tǒng),LED顯示系統(tǒng)、時鐘電路、復位電路
16、以及測量電壓輸入電路。</p><p> A/D轉換由集成電路ADC0809完成。ADC0809具有8路模擬輸入端口,地址線(第23~25腳)可決定對哪一路模擬輸入作A/D轉換。第22腳為地址鎖存控制,當輸入為高電平時,對地址信號進行鎖存。第6腳為測試控制,當輸入一個2μs寬高電平脈沖時,就開始A/D轉換。第7腳為A/D轉換結束標志,當A/D轉換結束時,第7腳輸出高電平。 第9腳為A/D轉換數據輸出允許控制,當
17、OE腳為高電平時,A/D轉換數據從端口輸出。第10腳為A/D轉換的時鐘輸入端,利用單片機第30腳的6分頻晶振頻率,再通過14024二分頻得到1MHz時鐘。</p><p> 單片機的P1,P3.0~P3.3端口作為4位LED數碼管顯示控制。P3.5端口用作單路顯示/循環(huán)顯示轉換按鈕,P3.6端口用作單路顯示時選擇顯示的通道。P0端口用作A/D轉換數據讀入,P2端口用作ADC0809的A/D轉換控制。</p
18、><p> 系統(tǒng)原理總圖如圖3-1:</p><p> 圖3-1 系統(tǒng)原理圖</p><p> 3.1 單片機最小系統(tǒng)</p><p> 單片機最小系統(tǒng)由單片機STC89C52芯片,復位電路,時鐘電路等構成。</p><p> 3.1.1.主控芯片STC89C52單片機介紹</p><p&
19、gt; STC89C52是一種低功耗、高性能、CMOS八位微處理器,片內有4K字節(jié)的在線可重復編程、快速擦除快速寫入程序的存儲器,能重復寫入/擦除1000次,數據保存時間為十年。它與MCS-51系列單片機在指令系統(tǒng)和引腳上完全兼容,不僅可完全代替MCS-51系列單片機,而且能使系統(tǒng)具有許多MCS-51系列產品沒有的功能。</p><p> STC89C52可構成真正的單片機最小應用系統(tǒng),縮小系統(tǒng)體積,增加系統(tǒng)
20、的可靠性,降低系統(tǒng)的成本。只要程序長度小于4K,四個I/O口全部提供給用戶??捎?V電壓編程,而且擦寫時間僅需10ms,僅為8751/87C51的擦寫時間的百分之一,與8751/87C51的12V電壓擦寫相比,不易損壞器件,沒有兩種電源的要求,改寫時不撥下芯片,適合許多嵌入式控制領域。工作電壓范圍寬(2.7V~6V),全靜態(tài)工作,工作頻率寬在0Hz~24 MHz,比8751/87C51等系列的6MHz~24 MHz更具有靈活性,系統(tǒng)能快
21、能慢。STC89C52芯片提供三級程序存儲器加密,提供了方便靈活而可靠的硬加密手段,能完全保證程序或者系統(tǒng)不被仿制。STC89C52單片機為40引腳芯片,如下圖3-1所示。</p><p> P0口:三態(tài)雙向口,通稱數據總線口,因為只有該口能直接用于對外部存儲器的讀/寫操作。也用以輸出外部存儲器的低8位地址。由于是分時輸出,故應在外部價鎖存器將此地址數據鎖存。地址鎖存信號用ALE。</p><
22、;p> P1口:專門供用戶使用的I/O口,是準雙向口。</p><p> P2口:從系統(tǒng)擴展時作為高8位地址線用。不擴展外部存儲器時,也可以作為用戶I/O口線使用,是準雙向口。</p><p> P3口:雙功能口,該口的每一位均可獨立地定義為第一I/O功能或者第二I/O功能。作為第一功能使用時操作同P1口。第二功能如下表3-1所示。</p><p>
23、圖3-1 STC89C52引腳圖</p><p> 表3-1 P3口的第二功能</p><p> RST:當晶振工作時,RST引腳持續(xù)2個機器周期高電平將使單片機復位。</p><p> XTAL1:反相振蕩放大器的輸入及內部時鐘工作電路的輸入。</p><p> XTAL2:來自反相振蕩器的輸出。</p><p&
24、gt; 3.1.2. 復位電路</p><p> 單片機上電時,當振蕩器正在運行時,只要持續(xù)給出RST引腳兩個機器周期的高電平,便可完成系統(tǒng)復位。外部復位電路是為提供兩個機器周期以上的高電平而設計的。系統(tǒng)采用上電自動復位,上電瞬間電容器上的電壓不能突變,RST上的電壓是Vcc上的電壓與電容器上的電壓之差,因而RST上的電壓與Vcc上的電壓相同。隨著充電的進行,電容器上的電壓不斷上升,RST上的電壓就隨著下降,
25、RST腳上只要保持10ms以上高電平,系統(tǒng)就會有效復位。</p><p> 復位電路的實現(xiàn)可以有很多種方法,但是從功能上一般分為兩種:一種是電源復位,即外部的復位電路在系統(tǒng)通上電源之后直接使單片機工作,單片機的起停通過電源控制;另一種方法是在復位電路中設計按鍵開關,通過按鍵開關觸發(fā)復位電平,控制單片機的復位。本設計使用了第一種方法,其電路圖如圖3-2所示。</p><p> 圖3-2
26、STC89C52單片機最小系統(tǒng)</p><p> 3.1.3. 時鐘電路</p><p> STC89C52單片機有一個用于構成內部振蕩器的反相放大器,XTAL1和XTAL2分別是放大器的輸入、輸出端,外接石英晶體或陶瓷振蕩器以及補償電容C2、C3構成并聯(lián)諧振電路。當外接石英晶體時,電容C2、C3選30pF±10pF;當外接陶瓷振蕩器時,電容C2、C3選40pF±1
27、0pF。STC89C52系統(tǒng)中晶振頻率一般在1.2~12MHz選擇。外接電容C2、C3的大小會影響振蕩器頻率的高低、振蕩頻率的穩(wěn)定度、起振時間及溫度穩(wěn)定性。在設計電路板時,晶振和電容應靠近單片機,以便減少寄生電容,保證振蕩器穩(wěn)定可靠工作。</p><p> 3.2數碼管顯示電路</p><p> 3.2.1.四位一體共陽數碼管</p><p> 數碼管按段數分
28、為七段數碼管和八段數碼管,八段比七段多一個發(fā)光二極管單元(小數點);按能顯示多少個“8”可分為1位、2位、4位或多位數碼管。按發(fā)光二極管單元連接方式分為共陽數碼管和共陰數碼管,本課題中使用的就是四位一體共陽數碼管,其引腳圖如下圖3-3所示:</p><p> 圖3-3 四位一體共陽數碼管引腳圖</p><p> 共陽數碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數碼管
29、,它在應用時應將公共極COM接到+5V,當某一字段發(fā)光二極管的陰極為低電平時,相應字段就點亮。當某一字段的陰極為高電平時,相應字段就不亮。數碼管邏輯功能圖如下圖3-4所示:</p><p> 圖3-4 數碼管邏輯功能圖</p><p> 3.2.2. 74LS244鎖存器</p><p> 總線驅動器74LS244和74LS245經常用作三態(tài)數據緩沖器,74
30、LS244為單向三態(tài)數據緩沖器,而74LS245為雙向三態(tài)數據緩沖器。單向的內部有8個三態(tài)驅動器,分成兩組,分別由控制端1G和2G控制; 雙向的有16個三態(tài)驅動器,每個方向8個。在控制端G有效時(G為低電平),由DIR端控制驅動方向:DIR為“1”時方向從左到右(輸出允許),DIR為“0”時方向從右到左(輸入允許)。74LS244和74LS245的引腳圖如圖3-5所示。</p><p> 圖3-5 74LS24
31、4以及74LS245引腳圖</p><p> 74LS245內部結構及真值表如下圖3-6所示。</p><p> 圖3-6 74LS245真值表以及內部結構圖</p><p> G=0,DIR=0,B->A;G=0, DIR=1, A->B;G=1, DIR=X, X=0或者1,輸入和輸出均為高阻態(tài);高阻態(tài)的含意就是相當于沒有這個芯片</
32、p><p> 74LS245是8路3態(tài) 雙向緩沖驅動,也叫做總線驅動門電路或線驅動。主要使用在數據的雙向緩沖,原來常見于51的數據接口電路,比如,早期電路中,擴展了很多的8255/8155/8251/8253/573等芯片的時候,擔心8031的數據驅動能力不足,就使用一片245作為數據緩沖電路,增強驅動能力;也常見與ISA卡的接口電路.</p><p> 3.2.3.整體顯示電路</
33、p><p> 由于單片機的并行口不能直接驅動LED顯示器,所以,在一般情況下,必須采用專用的驅動電路芯片,使之產生足夠大的電流,顯示器才能正常工作[7]。如果驅動電路能力差,即負載能力不夠時,顯示器亮度就低,而且驅動電路長期在超負荷下運行容易損壞,因此,LED顯示器的驅動電路設計是一個非常重要的問題。</p><p> 為了簡化數字式直流電壓表的電路設計,在LED驅動電路的設計上,以利用單
34、片機P1口經過鎖存器LS244限流電阻連接到數碼管的段選,如下圖所</p><p> 3.3.模數轉換模塊</p><p> ADC0809是帶有8位A/D轉換器、8路多路開關以及微處理機兼容的控制邏輯的CMOS組件。它是逐次逼近式A/D轉換器,可以和單片機直接接口。 (1)ADC0809的內部邏輯結構 </p><p> 由下圖可知,ADC0809由一個8
35、路模擬開關、一個地址鎖存與譯碼器、一個A/D轉換器和一個三態(tài)輸出鎖存器組成。多路開關可選通8個模擬通道,允許8路模擬量分時輸入,共用A/D轉換器進行轉換。三態(tài)輸出鎖器用于鎖存A/D轉換完的數字量,當OE端為高電平時,才可以從三態(tài)輸出鎖存器取走轉換完的數據。</p><p> ?。?).ADC0809引腳結構 </p><p> ADC0809各腳功能如下:D7-D0:8位數字量輸出引腳
36、。IN0-IN7:8位模擬量輸入引腳。VCC:+5V工作電壓。GND:地。REF(+):參考電壓正端。REF(-):參考電壓負端。START:A/D轉換啟動信號輸入端。ALE:地址鎖存允許信號輸入端。(以上兩種信號用于啟動A/D轉換).EOC:轉換結束信號輸出引腳,開始轉換時為低電平,當轉換結束時為高電平。OE:輸出允許控制端,用以打開三態(tài)數據輸出鎖存器。CLK:時鐘信號輸入端(一般為500KHz)。A、B、C:
37、地址輸入線。</p><p> ADC0809對輸入模擬量要求:信號單極性,電壓范圍是0-5V,若信號太小,必須進行放大;輸入的模擬量在轉換過程中應該保持不變,如若模擬量變化太快,則需在輸入前增加采樣保持電路。 </p><p> 地址輸入和控制線:4條 </p><p> ALE為地址鎖存允許輸入線,高電平有效。當ALE線為高電平時,地址鎖存與譯碼器將A,
38、B,C三條地址線的地址信號進行鎖存,經譯碼后被選中的通道的模擬量進入轉換器進行轉換。A,B和C為地址輸入線,用于選通IN0-IN7上的一路模擬量輸入。通道選擇表如下表所示。</p><p> 數字量輸出及控制線:11條 </p><p> ST為轉換啟動信號。當ST上跳沿時,所有內部寄存器清零;下跳沿時,開始進行A/D轉換;在轉換期間,ST應保持低電平。EOC為轉換結束信號。當EOC為
39、高電平時,表明轉換結束;否則,表明正在進行A/D轉換。OE為輸出允許信號,用于控制三條輸出鎖存器向單片機輸出轉換得到的數據。OE=1,輸出轉換得到的數據;OE=0,輸出數據線呈高阻狀態(tài)。D7-D0為數字量輸出線。 </p><p> CLK為時鐘輸入信號線。因ADC0809的內部沒有時鐘電路,所需時鐘信號必須由外界提供,通常使用頻率為500KHZ, </p><p> VREF(+),
40、VREF(-)為參考電壓輸入。 </p><p> 2. ADC0809應用說明 </p><p> (1). ADC0809內部帶有輸出鎖存器,可以與AT89S51單片機直接相連。 </p><p> (2). 初始化時,使ST和OE信號全為低電平。 </p><p> ?。?). 送要轉換的哪一通道的地址到A,B,C端口上。 <
41、;/p><p> ?。?). 在ST端給出一個至少有100ns寬的正脈沖信號。 </p><p> ?。?). 是否轉換完畢,我們根據EOC信號來判斷。 </p><p> ?。?). 當EOC變?yōu)楦唠娖綍r,這時給OE為高電平,轉換的數據就輸出給單片機了。 </p><p><b> 4.軟件設計</b></p>
42、;<p> 整個系統(tǒng)的程序包括初始化程序、主程序、顯示子程序、A/D轉換測量子程序,下面就各個分塊的程序進行分析:</p><p><b> 4.1.初始化程序</b></p><p> 系統(tǒng)上電時,初始化程序主要用來執(zhí)行對單片機各個端口的初始化,包括P0-P3口,另外初始化的另一個作用是對定時器的初始化,確定其工作方式。</p>&
43、lt;p><b> 4.2. 主程序</b></p><p> 在剛上電時,系統(tǒng)默認為循環(huán)顯示8個通道的電壓值狀態(tài)。當進行一次測量后,將顯示每一通道的A/D轉換值,每個通道的數據顯示時間在1s左后。主程序在調用顯示子程序與測量程序之間循環(huán)。</p><p> 主程序流程圖如圖4-1所示。</p><p> 圖4-1 主程序流程圖&
44、lt;/p><p> 4.3. 顯示子程序</p><p> 顯示子程序采用動態(tài)掃描法實現(xiàn)4位數碼管的數值顯示。測量所得的A/D轉換數據放在70H-77H內存單元中,測量數據在顯示時須經過轉換成十進制BCD碼放在78H-7BH單元中,其中7BH存放通道標志數。寄存器R3用作8路循環(huán)控制,R0用作顯示數據地址指針。</p><p> 4.4. A/D轉換測量子程序
45、</p><p> A/D轉換測量子程序用來對ADC0809的8路模擬輸入電壓的A/D轉換,并將對應數值移入70H-77H單元中。</p><p> A/D轉換測量子程序流程圖如圖4-2所示。</p><p> 圖4-2 A/D轉換測量子程序流程圖</p><p><b> 5.系統(tǒng)調試</b></p>
46、;<p><b> 5.1.調試過程</b></p><p> 這次的單片機課程設計雖然簡單,但調試時還是很麻煩。首先,我們要清楚地了解整個簡易電壓表各個部分的工作原理以及各個部分的作用,只有這樣才能在調試當中對出現(xiàn)問題進行合理的分析與排查。</p><p> 我們這次系統(tǒng)的調試,剛焊接完成,我們將初步寫好的測試程序燒進單片機,進行硬件電路的調試,
47、初步檢測完畢上電時數碼管并沒有亮,整個系統(tǒng)沒什么反應,于是我們對每個芯片進行測試,看是否為其提供了工作電壓,結果發(fā)現(xiàn)用于分頻的CD4024沒有工作,電源的正極沒有加上去。排查這個錯誤后,我們再次上電,這次數碼管上的碼顯示得不對,出現(xiàn)了亂碼的現(xiàn)象。進過分析,只有兩種可能,一是數碼管的段選和位選接錯了,二是鎖存器接得有問題,后經過組員們的檢查,發(fā)現(xiàn)是鎖存器接得有問題,于是我們又將鎖存器重新接了下。最終,進過我們的共同努力,我們的電路板在硬件
48、上沒有了問題。</p><p> 在保證硬件沒問題的前提下,我們對軟件進行進一步完善,使硬件能很好地與軟件融合,讓整個系統(tǒng)能按預期的目標工作。在調試軟件時,一上電時,數碼管就有顯示,我檢測了程序的初始化部分,自己把P1口的初始化加了進去,使在沒有輸入電壓時,數碼管顯示為零。但再一次上電測試時,數碼管還是有顯示,上網查閱了相關資料,有可能是懸空電壓所致,所以雖沒接輸入電壓,但還是有個電壓值。</p>
49、<p><b> 5.2.性能分析</b></p><p> (1)由于單片機為8位處理器,當輸入電壓為5.00V時,ADC0809輸出數據值為255(FFH),因此單片機最高的數值分辨率為0.0196V(5/255)。這就決定了該電壓表最高分辨率(精度)只能達到0.0196V,測量時電壓一般以0.02V的幅度變化。如果要獲得更高的精度要求,則應采用12位、13位的A/D轉換
50、器。</p><p> (2)關于實際測量結果(見附錄C),從圖中可以看出自己所做的電壓表與實際的數字電壓表的數值上有些誤差,但誤差值都在0.1V以內,對要求不太高的場合沒有多大影響。</p><p> (3)關于懸空電壓的問題,就是在AD模塊沒有接輸入時,數碼管上有顯示,經查閱資料可知可通過接大電阻接地來消除。</p><p><b> 6.設計總
51、結</b></p><p> 經過近二周的單片機課程設計,終于完成了我的數字電壓表的設計,基本達到設計要求。 </p><p> 對于此次課程設計,有許多的感觸與體會,遇到的難題多,學習到的知識也就更多。 </p><p> 第一,硬件電路遇到了ADC0809 無內部時鐘,需外接外部時鐘,如何解決這個問題,我 們小組進行了多次討論,最終確定了在程序
52、中提供時鐘信號,大大降低了硬件電路的復雜度。 </p><p> 第二,則是解決程序設計的問題,而程序設計是一個很靈活的東西,它反映了你解決問 題的邏輯思維和創(chuàng)新能力,它才是一個設計的靈魂所在。因此在整個設計過程中大部分時間 是用在程序上面的。其中,我遇到了很多的問題,雖然以前還做過這樣的設計,但是以前的 都是用C 語言進行編程。而此次運用匯編語言編程,著實讓我當頭一棒,因為除了微機原理 實驗進行過相關編程,匯
53、編語言的編程能力還停留在理論階段。在此次編程中,首先,我是 先用C 語言編程,進行調試后,成功的達到了課程設計的要求。其次,查找匯編語言的相關 資料,經過不懈的努力與調試,終于將匯編語言版的成功編程出來。 </p><p> 第三,在一個課題中,要設計一個成功的電路,必須要有耐心,要有堅持的毅力。在整個電路的設計過程中,重要的是各個單元電路的連接及電路的細節(jié)設計上,如在多種方案的 選擇中,我們仔細比較分析其原理
54、以及可行的原因。這就要求我們對硬件系統(tǒng)中各組件部分 有充分透徹的理解和研究,并能對之靈活應用。完成這次設計后,我在書本理論知識的基礎 上又有了更深層次的理解。 第四,在本次設計的過程中,我還學會了高效率的查閱資料、運用工具書、利用網絡查 找資料。我發(fā)現(xiàn),在我們所使用的書籍上有一些知識在實際應用中其實并不是十分理想,各 種參數都需要自己去調整,這就要求我們應更加注重實踐環(huán)節(jié)。 </p><p> 最后,還要在此感
55、謝課程設計的指導老師和我的組員們,他們在整個過程中都給予了我充分的幫助與支持。這次單片機課程設計,雖然做的是簡單的數字電壓表,所涉及到的器件也不是很多,但此次還是有所收獲。</p><p><b> 附 錄A 源程序</b></p><p> #include<reg52.h></p><p> #include<in
56、trins.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> sbit wei1=P3^0; //定義數碼管位選端口</p><p> sbit wei2=P3^1;</p><p&g
57、t; sbit wei3=P3^2;</p><p> sbit wei4=P3^3;</p><p> sbit s1=P3^5; //定義“單路/循環(huán)”端口</p><p> sbit s2=P3^6; //定義“通道選擇”端口</p><p> sbit eoc=P3^7; //定義外部觸發(fā)信號的端
58、口,單片機正常工作時,此頻率為時鐘震蕩頻率的1/6</p><p> sbit oe=P2^5; //定義ADC0809輸出允許控制端</p><p> sbit start=P2^4; //定義A/D轉換啟動信號輸入端</p><p> sbit ale=P2^3; //定義ADC0809地址鎖存信號輸入端</p><
59、;p> sbit cc=P2^2; //定義地址輸入線C,B,A</p><p> sbit bb=P2^1;</p><p> sbit aa=P2^0;</p><p> uint count=0,num,ch,flag,bai,shi,ge,t; //定義無符號變臉</p><p> uchar tem
60、p; //定義無符號字符變量 </p><p> uchar code table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //定義0-9的編碼</p><p> uchar code table_d[10]={0x40,0x79,0x24,0x3
61、0,0x19,0x12,0x02,0x78,0x00,0x10};</p><p> void display(); //聲明顯示函數</p><p><b> /*延時函數*/</b></p><p> void delay(uint del)</p><p><b> {</
62、b></p><p><b> uint x,y;</b></p><p> for(x=0;x<del;x++)</p><p> for(y=0;y<50;y++);</p><p><b> } </b></p><p> /*循環(huán)顯示函數*
63、/</p><p> void delay1(uint m)</p><p><b> {</b></p><p><b> uint i;</b></p><p> for(i=0;i<=m;i++)</p><p><b> {</b>
64、;</p><p> display(); //調用顯示函數</p><p><b> }</b></p><p><b> }</b></p><p><b> /*初始化函數*/</b></p><p> void i
65、nit()</p><p><b> {</b></p><p> TMOD=0x01; //確定定時器T0工作方式為方式1,即16位計數器</p><p> TH0=0x4c; //裝計數初值</p><p> TL0=0x00; </p><p
66、> EA=1; //開總中斷</p><p> ET0=1; //開定時器T0允許位</p><p> TR0=1; //啟動定時器T0</p><p> P3=0xff; //P3口置高電平</p><p> P0=0xff;
67、 //P0口置高電平,沒有數據寫入</p><p> P2=0x00; //P2口置低電平,此時ADC0809不能工作</p><p> P1=0xff; //P1口置高電平,數碼管全滅</p><p><b> }</b></p><p> /*定時器中斷服務程序*/&l
68、t;/p><p> void time0() interrupt 1</p><p><b> {</b></p><p> TH0=0x4c; //重裝初值</p><p><b> TL0=0x00;</b></p><p> count++;
69、 //技術值加1</p><p> if(count==40) //判斷是否計數到40次</p><p><b> {</b></p><p> count=0; //如果計數滿40次,則計數標記位清零</p><p> ch++; //通道計數標志位加1 </p>
70、;<p> if(ch==8) //判斷8通道是否循環(huán)了一次</p><p> ch=0; //若8個通道循環(huán)顯示了一遍,則通道計數標志位置0</p><p><b> }</b></p><p><b> }</b></p><p> /*ADC0809調用函數*
71、/</p><p> void ad0809()</p><p><b> {</b></p><p> ale=1; //地址鎖存允許位置1</p><p> _nop_();_nop_(); //調用延時函數,待數據穩(wěn)定</p><p> ale=0;
72、 //地址鎖存允許位置0</p><p> start=1; //啟動ADC0809</p><p> _nop_();_nop_(); //調用延時函數,待數據穩(wěn)定</p><p> start=0; //關閉ADC0809</p><p> _nop_();_nop_();_no
73、p_();_nop_(); //調用延時函數,待數據穩(wěn)定</p><p> while(eoc==0); //</p><p> oe=1; //輸出允許端置1</p><p> temp=P0;
74、//將P0口數據賦給temp </p><p><b> }</b></p><p><b> /*顯示函數*/</b></p><p> void display()</p><p><b> {</b></p><p> n
75、um=temp; //將temp的值賦給num </p><p> bai=num/51; //百位轉換為BCD碼</p><p> t=num%51; </p><p><b> t=t*10;</b></p><p> shi
76、=t/51; //十位轉換為BCD碼</p><p><b> t=shi%51;</b></p><p><b> t=t*10;</b></p><p> ge=t/51; //個位轉換為BCD碼</p><p> P1=0xff;
77、 //數碼管全滅,消去余暉 </p><p> wei4=1; //關第4位,開第1位</p><p><b> wei1=0;</b></p><p> P1=table[ch%10]; //將表中數值賦給P1口</p><p><b> delay(1);&
78、lt;/b></p><p><b> P1=0xff;</b></p><p> wei1=1; //關第1位,開第2位</p><p><b> wei2=0;</b></p><p> P1=table_d[bai];</p><p&g
79、t;<b> delay(1);</b></p><p><b> P1=0xff;</b></p><p><b> wei2=1;</b></p><p><b> wei3=0;</b></p><p> P1=table[shi];<
80、;/p><p><b> delay(1);</b></p><p><b> P1=0xff;</b></p><p><b> wei3=1;</b></p><p><b> wei4=0;</b></p><p> P
81、1=table[ge];</p><p><b> delay(1);</b></p><p><b> }</b></p><p> /*按鍵掃描函數*/</p><p> void keyscan()</p><p><b> {</b>&
82、lt;/p><p> if((s1==0)||(s2==0)) //判斷s1和s2中是否有按鍵被按下</p><p><b> {</b></p><p> delay1(5);</p><p> if((flag==0)||(flag==2)) //判斷是哪個鍵被按下</p><p>
83、;<b> {</b></p><p> if(s1==0) //“單路/循環(huán)”選擇鍵被按下</p><p><b> {</b></p><p> flag++; </p><p> while(!s1)</p><p><
84、b> {</b></p><p> display(); </p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(flag==2)&l
85、t;/p><p><b> {</b></p><p> if(s2==0) //“通道選擇”鍵被按下</p><p><b> {</b></p><p> ch++; //循環(huán)狀態(tài)時,通道數自加1</p><p> if(ch==8)
86、 //判斷8個通道是否都掃描了一次</p><p> ch=0; //8通道掃描完后,進行下一次掃描</p><p> while(!s2) //單通道時,選擇通道后,指定通道顯示測量值</p><p><b> {</b></p><p> display();</p>
87、<p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><
88、;p><b> /*主函數*/</b></p><p> void main()</p><p><b> {</b></p><p> init(); //調用初始化函數</p><p> while(1) //等待中斷</p&g
89、t;<p><b> { </b></p><p> keyscan(); //調用按鍵掃描函數</p><p> switch(ch) //通道選擇</p><p><b> {</b></p><p> case 0:cc=0;bb=0;aa=
90、0;break; //通道0-7</p><p> case 1:cc=0;bb=0;aa=1;break;</p><p> case 2:cc=0;bb=1;aa=0;break;</p><p> case 3:cc=0;bb=1;aa=1;break;</p><p> case 4:cc=4;bb=0;aa=
91、0;break;</p><p> case 5:cc=1;bb=0;aa=1;break;</p><p> case 6:cc=1;bb=1;aa=0;break;</p><p> case 7:cc=1;bb=1;aa=1;break;</p><p><b> }</b></p><
92、p> ad0809(); //調用ADC0809函數</p><p> display(); //調用顯示函數</p><p> if(flag==3)</p><p><b> { </b></p><p> TH0=0x4c; //重
93、裝初值</p><p><b> TL0=0x00;</b></p><p> count=0; //計數值清零</p><p> TR0=1; //啟動定時器T0</p><p> flag=0; //標志位清零</p>
94、<p><b> ch=0;</b></p><p><b> }</b></p><p> if(flag==1)</p><p><b> {</b></p><p> TR0=0; //關閉定時器T0</p>
95、<p><b> ch=0;</b></p><p> flag=2; //標志位置2</p><p><b> }</b></p><p><b> }</b></p><p><b> } </b>&l
96、t;/p><p> 附 錄B 系統(tǒng)仿真圖</p><p> 附 錄C 作品實物圖片</p><p><b> 正面實物圖:</b></p><p><b> 反面焊接圖:</b></p><p> 附 錄D 測試圖片</p><p> 通
97、道0電壓測量值測試</p><p> 其他通道測試圖(以通道4為例)</p><p><b> 參考文獻</b></p><p> [1] 張毅剛.單片機原理及應用(第二版)[M].北京:高等教育出版社,2010.</p><p> [2] 樓然苗,李光飛.單片機課程設計指導[M].北京:北京航空航天大學出版社,
98、2007.</p><p> [3] 譚浩強.C程序設計(第四版)[M].北京:清華大學出版社,2010. </p><p> [4] 周荷琴,吳秀清.微型計算機原理與接口技術(第四版)[M].合肥:中國科學技術大學出版社,2008. </p><p> [5] 李忠明.微機原理與接口技術[M].武漢:華中科技大學出版社,2011. </p>&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設計----單片機簡易數字電壓表
- 單片機課程設計--簡易數字電壓表的設計
- 單片機課程設計--簡易數字電壓表的設計
- 數字電壓表課程設計--基于單片機的簡易數字電壓表的設計
- 數字電壓表課程設計--基于單片機的簡易數字電壓表的設計
- 單片機課程設計---基于單片機的簡易數字電壓表設計
- 簡易數字電壓表單片機課程設計
- 簡易數字電壓表單片機課程設計
- 單片機課程設計-多通路簡易數字電壓表
- 單片機課程設計-數字電壓表
- 單片機課程設計---數字電壓表
- 單片機課程設計-數字電壓表
- 單片機(數字電壓表)課程設計
- 單片機課程設計----數字電壓表
- 單片機課程設計-數字電壓表
- 單片機課程設計--數字電壓表
- 單片機課程設計--數字電壓表
- 單片機課程設計---數字電壓表設計
- 單片機課程設計---數字電壓表設計
- 單片機課程設計---數字電壓表設計
評論
0/150
提交評論