




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
智能儀表綜合課程設計成績評定表學生姓名張麗班級學號1203060101專業通信工程課程設計題目基于單片機的數控開關電源設計評語組長簽字:成績日期20年月日課程設計任務書學院信息科學與工程專業通信工程學生姓名張麗班級學號1203060101課程設計題目基于單片機的數控開關電源設計實踐教學要求與任務:要求:分別對硬件系統的配置予以評估,使其能夠對轉速進行測量。對單片機定時器/計數器進行配置,設計和說明定時器/計數器在“M”法測量中的作用和使用方法,討論測量精度的問題。任務:1、設計電路圖。2、利用軟件畫原理圖3、熟悉軟件編程語言,編寫程序4、系統調試工作計劃與進度安排:1.查找資料。(2天)2.設計電路,畫電路圖。(2天)3.軟件編程與調試。(2天)4.系統調試。(2天)5.撰寫報告。(2天)指導教師:201年月日專業負責人:201年月日學院教學副院長:201年月日摘要智能儀器是含有微型計算機或者微型處理器的測量儀器,擁有對數據的存儲運算邏輯判斷及自動化操作等功能。傳感器拾取被測參量的信息并轉換成電信號,經濾波去除干擾后送入多路模擬開關;由單片機逐路選通模擬開關將各輸入通道的信號逐一送入程控增益放大器,放大后的信號經A/D轉換器轉換成相應的脈沖信號后送入單片機中;單片機根據儀器所設定的初值進行相應的數據運算和處理(如非線性校正等);運算的結果被轉換為相應的數據進行顯示和打印;同時單片機把運算結果與存儲于片內FlashROM(閃速存儲器)或E?2PROM(電可擦除存貯器)內的設定參數進行運算比較后,根據運算結果和控制要求,輸出相應的控制信號(如報警裝置觸發、繼電器觸點等)。此外,智能儀器還可以與PC機組成分布式測控系統,由單片機作為下位機采集各種測量信號與數據,通過串行通信將信息傳輸給上位機——PC機,由PC機進行全局管理。關鍵詞:數控開關電源;AMPIRE;AT89C52目錄TOC\o"1-3"\h\u175781摘要 5207712智能儀器儀表的簡介 725321 724442 835353系統設計簡介 10106643.1PWM波產生簡介 10268203.2設計要求 1176573.3設計方案論證 11265593.4硬件設計電路 14195464.系統硬件設計 167780 165666 16238184.3ADC0804A/D轉換器與單片機的接口電路 1722237 20130415設計語言及軟件介紹 21252125.1C語言介紹 21264215.2KEIL軟件介紹 21171356系統軟件設計 22179806.1概述 22154476.2系統程序設計模塊 2220401 225011 2229008 3012896 3674346.4調試及仿真 3723918結論 3815690參考文獻 381摘要儀器儀表(英文:instrumentation)儀器儀表是用以檢出、測量、觀察、計算各種物理量、物質成分、物性參數等的器具或設備。真空檢漏儀、壓力表、測長儀、顯微鏡、乘法器等均屬于儀器儀表。廣義來說,儀器儀表也可具有自動控制、報警、信號傳遞和數據處理等功能,例如用于工業生產過程自動控制中的氣動調節儀表,和電動調節儀表,以及集散型儀表控制系統也皆屬于儀器儀表。開關電源是一種采用開關方式控制的直流穩壓電源。它以小型、高效、輕量的特點被廣泛應用于各種電子設備中。開關電源控制部分絕大多數是按模擬信號來設計和工作的,其抗干擾能力不太好,信號有畸變。電源作為各種電子設備必不可少的重要組成部分,其性能優劣直接影響到整個電子系統的性能指標。隨著科技的發展,電子設備不斷更新換代,其種類越來越多,對電源的性能指標的要求越來越高,加之不同的電子設備對電源的要求又不盡相同,這樣,給電源的研究帶來了許多新的研究課題。在傳統功率電子技術中,DC/DC變換器控制部分是按模擬信號進行設計和工作的。在六、七十年代,功率電子技術完全建立在模擬電路的基礎上。但是近年來,隨著數字信號處理技術的日益完善、成熟,微處理器/微控制器和數字信號處理器的性價比不斷提高,數字控制在功率變換器中得到廣泛應用。它使得開關電源向數字化、智能化、多功能化方向發展。這無疑提高了開關電源的性能和可靠性。例如電機、不間斷電源(UPS)的控制電路都選用各種數字信號處理器或微處理器作為其核心控制部件。功率變換器已由模擬控制、模數混合控制,進入全數字化控制階段。相對于模擬控制,數字控制有許多優點[1]:
(1)數字控制可以實現各種復雜的控制策略,提高控制系統的性能。由于開關器件的存在,功率變換器是強非線性系統。傳統的模擬控制是在功率變換器近似線性模型的基礎上,利用線性系統的各種設計方法來設計補償網絡,這種方法設計簡單且容易實現。但隨著對電源性能指標的要求不斷提高,這種設計方法很難提高系統的控制性能。而數字控制可以實現各種非線性控制策略,使得控制系統的性能大大提高。
(2)數字控制系統具有很強的抗干擾能力。模擬元器件易受環境和溫度的變化影響,所以模擬控制器穩定性差。數字控制器較少受到器件老化、環境或參數變化的影響,比模擬控制器更穩定可靠,具有很強的抗干擾能力。
(3)數字控制系統靈活性高,數字化極大地簡化了變換器控制的硬件。采用數字控制技術可以設計統一的硬件平臺,適用不同的變換器系統,只通過軟件的改變就可以改變控制策略,無須硬件更改,同時,數字控制系統更容易實現過壓、過流保護、輸出電壓調節、故障監測及通訊等功能,使電源“智能化”。
總之,對功率變換器采用數字控制方法大大提高了變換器的控制性能、靈活性等,變換器的性能主要由軟件來決定,而不是在于大量離散元器件的參數,這就意味著成本和空間的節省以及實現復雜算法的能力。數字控制的這些優點大大提高了功率變換器的綜合性能,由模擬控制向數字控制的轉變是電力電子功率變換器的一大發展趨勢。2智能儀器儀表的簡介功能特點隨著微電子技術的不斷發展,集成了CPU、存儲器、定時器/計數器、并行和串行接口、看門狗、前置放大器甚至A/D、D/A轉換器等電路在一塊芯片上的超大規模集成電路芯片(即單片機)出現了。以單片機為主體,將計算機技術與測量控制技術結合在一起,又組成了所謂的“智能化測量控制系統”,也就是智能儀器。與傳統儀器儀表相比,智能儀器具有以下功能特點:①操作自動化。儀器的整個測量過程如鍵盤掃描、量程選擇、開關啟動閉合、數據的采集、傳輸與處理以及顯示打印等都用單片機或微控制器來控制操作,實現測量過程的全部自動化。②具有自測功能,包括自動調零、自動故障與狀態檢驗、自動校準、自診斷及量程自動轉換等。智能儀表能自動檢測出故障的部位甚至故障的原因。這種自測試可以在儀器啟動時運行,同時也可在儀器工作中運行,極大地方便了儀器的維護。③具有數據處理功能,這是智能儀器的主要優點之一。智能儀器由于采用了單片機或微控制器,使得許多原來用硬件邏輯難以解決或根本無法解決的問題,現在可以用軟件非常靈活地加以解決。例如,傳統的數字萬用表只能測量電阻、交直流電壓、電流等,而智能型的數字萬用表不僅能進行上述測量,而且還具有對測量結果進行諸如零點平移、取平均值、求極值、統計分析等復雜的數據處理功能,不僅使用戶從繁重的數據處理中解放出來,也有效地提高了儀器的測量精度。④具有友好的人機對話能力。智能儀器使用鍵盤代替傳統儀器中的切換開關,操作人員只需通過鍵盤輸入命令,就能實現某種測量功能。與此同時,智能儀器還通過顯示屏將儀器的運行情況、工作狀態以及對測量數據的處理結果及時告訴操作人員,使儀器的操作更加方便直觀。⑤具有可程控操作能力。一般智能儀器都配有GPIB、RS232C、RS485等標準的通信接口,可以很方便地與PC機和其他儀器一起組成用戶所需要的多種功能的自動測量系統,來完成更復雜的測試任務。2.2智能儀器儀表的作用微型化微型智能儀器指微電子技術、微機械技術、信息技術等綜合應用于儀器的生產中,從而使儀器成為體積小、功能齊全的智能儀器。它能夠完成信號的采集、線性化處理、數字信號處理,控制信號的輸出、放大、與其他儀器的接口、與人的交互等功能。微型智能儀器隨著微電子機械技術的不斷發展,其技術不斷成熟,價格不斷降低,因此其應用領域也將不斷擴大。它不但具有傳統儀器的功能,而且能在自動化技術、航天、軍事、生物技術、醫療領域起到獨特的作用。例如,目前要同時測量一個病人的幾個不同的參量,并進行某些參量的控制,通常病人的體內要插進幾個管子,這增加了病人感染的機會,微型智能儀器能同時測量多參數,而且體積小,可植入人體,使得這些問題得到解決。多功能多功能本身就是智能儀器儀表的一個特點。例如,為了設計速度較快和結構較復雜的數字系統,儀器生產廠家制造了具有脈沖發生器、頻率合成器和任意波形發生器等功能的函數發生器。這種多功能的綜合型產品不但在性能上(如準確度)比專用脈沖發生器和頻率合成器高,而且在各種測試功能上提供了較好的解決方案。人工智能化人工智能是計算機應用的一個嶄新領域,利用計算機模擬人的智能,用于機器人、醫療診斷、專家系統、推理證明等各方面。智能儀器的進一步發展將含有一定的人工智能,即代替人的一部分腦力勞動,從而在視覺(圖形及色彩辨讀)、聽覺(語音識別及語言領悟)、思維(推理、判斷、學習與聯想)等方面具有一定的能力。這樣,智能儀器可無需人的干預而自主地完成檢測或控制功能。顯然,人工智能在現代儀器儀表中的應用,使我們不僅可以解決用傳統方法很難解決的一類問題,而且可望解決用傳統方法根本不能解決的問題。網絡化融合ISP和EMIT技術,實現儀器儀表系統的Internet接入。伴隨著網絡技術的飛速發展,Internet技術正在逐漸向工業控制和智能儀器儀表系統設計領域滲透,實現智能儀器儀表系統基于Internet的通訊能力以及對設計好的智能儀器儀表系統進行遠程升級、功能重置和系統維護。在系統編程技術(In-SystemProgramming,簡稱ISP技術)是對軟件進行修改、組態或重組的一種最新技術。它是LATTICE半導體公司首先提出的一種使我們在產品設計、制造過程中的每個環節,甚至在產品賣給最終用戶以后,具有對其器件、電路板或整個電子系統的邏輯和功能隨時進行組態或重組能力的最新技術。ISP技術消除了傳統技術的某些限制和連接弊病,有利于在板設計、制造與編程。ISP硬件靈活且易于軟件修改,便于設計開發。由于ISP器件可以像任何其他器件一樣,在印刷電路板(PCB)上處理,因此編程ISP器件不需要專門編程器和較復雜的流程,只要通過PC機,嵌入式系統處理器甚至INTERNET遠程網進行編程。EMIT嵌入式微型因特網互聯技術是emWare公司創立ETI(eXtendtheInternet)擴展Internet聯盟時提出的,它是一種將單片機等嵌入式設備接入Internet的技術。利用該技術,能夠將8位和16位單片機系統接入Internet,實現基于Internet的遠程數據采集、智能控制、上傳/下載數據文件等功能。目前美國ConnectOne公司、emWare公司、TASKING公司和國內的P&S公司等均提供基于Internet的Device?Networking的軟件、固件(Firmware)和硬件產品。虛擬儀器是智能儀器發展的新階段測量儀器的主要功能都是由數據采集、數據分析和數據顯示等三大部分組成的。在虛擬現實系統中,數據分析和顯示完全用PC機的軟件來完成。因此,只要額外提供一定的數據采集硬件,就可以與PC機組成測量儀器。這種基于PC機的測量儀器稱為虛擬儀器。在虛擬儀器中,使用同一個硬件系統,只要應用不同的軟件編程,就可得到功能完全不同的測量儀器??梢?,軟件系統是虛擬儀器的核心,“軟件就是儀器”。傳統的智能儀器主要在儀器技術中用了某種計算機技術控制工程網版權所有,而虛擬儀器則強調在通用的計算機技術中吸收儀器技術。作為虛擬儀器核心的軟件系統具有通用性、通俗性、可視性、可擴展性和升級性,能為用戶帶來極大的利益,因此,具有傳統的智能儀器所無法比擬的應用前景和市場。3系統設計簡介3.1PWM波產生簡介PWM信號產生芯片采用KA3525,它是一個典型的性能優良的開關電源控制芯片。其內部包括誤差放大器、比較器、振蕩器、觸發器、輸出邏輯控制電路和輸出三極管等環節。KA3525的1和2腳是內部運算放大器的輸入端,系統中單片機的D/A轉換接口的一個引腳與KA3525的2腳連接,實現KA3525的數字控制與步進調整。11和14腳輸出交替的兩路控制信號,經驅動電路與功率開關管的門極相連接。本文采用的驅動電路如圖6所示。當11腳輸出高電平、14腳輸出低電平時,N1、P2導通,耦合變壓器原邊電流流向如圖6(a)所示。當14腳輸出高電平、11腳輸出低電平時,N2、P1導通,耦合變壓器原邊電流流向如圖6(b)所示。圖7為驅動電路耦合變壓器的輸出波形。圖1圖1圖2圖2表1表1經過計算KA3525的2腳所需要輸入的電壓并將其轉化成單片機所需要的10位數字量,最后SPCE061A單片機將10位數字量左移6位寫入P_DAC1單元的高10位,進行D/A轉換成相應的3525芯片2腳給定電壓,實現對開關電源的步進調整。采樣電壓經A./D轉換后送LCD顯示,顯示精度可達0.01V。經多次測試,本電源輸出電壓可以0V~40V連續調整,歩進值0.1V,
最大輸出電流可達I0MAX=2.5A,電壓調整率Su=0.1%,負載調整率SI=0.2%,效率η=90%,試驗結果表明本數控電源方案切實可行。3.2設計要求現今的可調式開關電源通常采用專用芯片,具有開發時間短、可控性強等優點;同時也具有功能受芯片限制等缺點。本文提出的可控式開關電源方案通過軟件控制改變數字電位器阻值來改變反激式開關電源反饋電壓從而改變輸出電壓的大小,使電源的輸出電壓范圍調整極其方便。本開關電源輸出電壓可通過按鍵、USB總線等控制,并且輸出電壓可斷電記憶,控制方式也很容易擴展(如擴展RS232總線控制方式等)。輸出電壓范圍15~30V,最大電流可達5A,最小調節值1V。3.3設計方案論證一.
DC-DC主回路拓撲的方案選擇
DC-DC變換有隔離和非隔離兩種。輸入輸出隔離的方式雖然安全,但是由于隔離變壓器的漏磁和損耗等會造成效率的降低,而本題沒有要求輸入輸出隔離,所以選擇非隔離方式,具體有以下幾種方案:
方案一:
buck電路形式。開關管V1受占空比為D的PWM波的控制,交替導通或截止,再經L和C濾波器在負載R上得到穩定直流輸出電壓Uo。只要電感電容選擇合理,能達到題目要求的3-9.9V,且輸出電壓Uo呈現連續平滑的特性。(見圖3)方案二:
boost電路形式。并聯開關電路原理與串聯開關電路類似,但此電路為升壓型電路,開關導通時電感儲能,截止時電感能量輸出。該電路屬于升壓型電路,達不到題目要求的3-9.9V的輸出電壓。(見圖4)
?方案三:串并聯開關電路形式。實際上此電路是在串聯開關電路后接入一個并聯開關電路(BUCK結合BOOST實現既可以升壓又可以降壓)。用電感的儲能特性來實現升降壓,電路控制復雜。(見圖5)
以上三種方案屬開關電源。采用純開關電源(AC-DC變換器)。開關穩壓電路控制功率晶體管或MOS-FET工作在開關狀態,截止時無電流,導通時飽和壓降很小,所以管耗也很低,大大提高了電源的效率,其效率可達70%~95%。但其紋波電壓較高,控制電路復雜,制作難度高、周期長。
方案四:使用純線性穩壓電源。這種電源的輸出以線性調整晶體管為基礎,利用晶體管的電流放大作用增大負載電流,在電路中引入深度電壓負反饋,是輸出電壓穩定。通過改變反饋網絡設定參數使輸出電壓可調,在次基礎上引入電流設定和電流反饋電路既可實現穩流功能。該方案結構簡單、技術成熟、調節方便,但調整管集電極始終消耗功率。特別是在負載電流較大且輸出電壓較低時,調整管自身的功耗很大、效率很低,既浪費能源,又使調整管產生很高的溫度。總之,線性電源調整管工作在放大狀態,發熱量較大,效率低(35%左右),需要加體積龐大的散熱片。
本題只需要降壓,考慮到效率問題,采用開關buck穩壓電路,同時為了減小紋波可引入線性穩壓方法,即采用開關型穩壓電路和線性穩壓電路相結合的方法。直流電源的前級采用降壓式開關電源(DC—DC變換器),提高其工作效率,后級采用線性穩壓電路以減小紋波電流、提高電路的穩定性,而且便于控制。這樣還可以減少設計制作難度。最終確定電路:圖73.4硬件設計電路硬件電路由主控單片機、數控開關電路、控制電路、顯示電路組成。其中主控單片機使用AT89c51,轉換電路使用ADC0809,顯示電路使用LCD液晶屏,其中包括一些簡單震蕩電路等,基本模電電路。如圖8圖84.系統硬件設計4.1主控制器選擇由于經常學習并解除AT89C52單片機,對其有一定了解。因此,主控器選擇AT89C52單片機。AT89C52是一個低電壓,高性能CMOS8位單片機,片內含8kbytes的可反復擦寫的Flash只讀程序存儲器和256bytes的隨機存取數據存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統,片內置通用8位中央處理器和Flash存儲單元,AT89C52單片機在電子行業中有著廣泛的應用。4.2顯示電路圖9顯示電路顯示電路基于AMPIRE128*64顯示器。液晶顯示器件(LCD)獨具的低壓、微功耗特性他在單片機系統中特得到了廣泛的應用,常用的液晶顯示模塊分為數顯液晶模塊、點陣字符液晶模塊和點陣圖形液晶模塊,其中圖形液晶模塊在我國應用較為廣泛,因為漢字不能像西文字符那樣用字符模塊即可顯示,要想顯示漢字必須用圖形模塊。本課設所選擇的LCD是AMPIRE128×64的漢字圖形型液晶顯示模塊,可顯示漢字及圖形,圖形液晶顯示顯示器接如圖8所示。4.3ADC0804A/D轉換器與單片機的接口電路ADC0804引腳圖如下:圖10ADC0804引腳圖圖10ADC0804引腳圖引腳功能及應用特性如下:
CS、RD、WR(引腳1、2、3):是數字控制輸入端,滿足標準TTL邏輯電
平。其中CS和WR用來控制A/D轉換的啟動信號。CS、RD用來讀A/D轉換的結
果,當它們同時為低電平時,輸出數據鎖存器DB0~DB7各端上出現8位并行二進制數
碼。
CLKI(引腳4)和CLKR(引腳19):ADC0801~0805片內有時鐘電路,只要在外
部“CLKI”和“CLKR”兩端外接一對電阻電容即可產生A/D轉換所要求的時鐘,其振蕩頻率為fCLK≈1/1.1RC。其典型應用參數為:R=10KΩ,C=150PF,fCLK≈640KHZ,
轉換速度為100μs。若采用外部時鐘,則外部fCLK可從CLKI端送入,此時不接R、C。
允許的時鐘頻率范圍為100KHZ~1460KHZ。
INTR(引腳5):INTR是轉換結束信號輸出端,輸出跳轉為低電平表示本次
轉換已經完成,可作為微處理器的中斷或查詢信號。如果將CS和WR端與INTR端
相連,則ADC0804就處于自動循環轉換狀態。CS=0時,允許進行A/D轉換。WR由低跳高時A/D轉換開始,8位逐次比較
需8×8=64個時鐘周期,再加上控制邏輯操作,一次轉換需要66~73個時鐘周期。
在典型應用fCLK=640KHZ時,轉換時間約為103μs~114μs。當fCLK超過640KHZ,轉
換精度下降,超過極限值1460KHZ時便不能正常工作。
VIN
(+)(引腳)和VIN
(-)(引腳7):被轉換的電壓信號從VIN
(+)和VIN
(-)輸
入,允許此信號是差動的或不共地的電壓信號。如果輸入電壓VIN的變化范圍從0V
到Vmax,則芯片的VIN
(-)端接地,輸入電壓加到VIN
(+)引腳。由于該芯片允許差動
輸入,在共模輸入電壓允許的情況下,輸入電壓范圍可以從非零伏開始,即Vmin至
Vmas。此時芯片的VIN
(-)端應該接入等于Vmin的恒值電碼墳上,而輸入電壓VIN仍然加到VIN
(+)引腳上。
AGND(引腳8)和DGND(引腳10):A/D轉換器一般都有這兩個引腳。模擬地
AGND和數字地DGND分別設置引入端,使數字電路的地電流不影響模擬信號回路,
以防止寄生耦合造成的干擾。
VREF/2(引腳9):參考電壓VREF/2可以由外部電路供給,從“VREF/2”端直接送
入,VREF/2端電壓值應是輸入電壓范圍的二分之一。所以輸入電壓的范圍可以通過
調整VREF/2引腳處的電壓加以改變,轉換器的零點無需調整。ADC0804轉換器的工作時序如圖10所示。圖11AD轉換器的設計接口電路圖:圖12A/D轉換電路圖12A/D轉換電路圖中,ADC0804數據輸出線與AT89C51的數據總線直接相連,AT89C51的RD、
WR和INT1直接連到ADC0804,由于用P1.0線來產生片選信號,故無需外加
地址譯碼器。當AT89C51向ADC0804發WR(啟動轉換)、RD(讀取結果)信號時,
只要虛擬一個系統不占用的數據存儲器地址即可。4.4系統總體電路圖圖13完整圖5設計語言及軟件介紹5.1C語言介紹C語言是1972年由美國的DennisRitchie設計發明的,并首次在UNIX操作系統的DECPDP-11計算機上使用。它由早期的編程語言BCPL(BasicCombinedProgrammingLanguage)發展演變而來,在1970年,AT&T貝爾實驗室的KenThompson根據BCPL語言設計出較先進的并取名為B的語言,最后導致了C語言的問世。而B語言之前還有A語言,取名自世界上第一位女程序員Ada(艾達)。5.2KEIL軟件介紹KeilC51是美國KeilSoftware公司出品的51系列兼容單片機C語言軟件開發系統,與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優勢,因而易學易用。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調試器等在內的完整開發方案,通過一個集成開發環境(uVision)將這些部分組合在一起。運行Keil軟件需要WIN98、NT、WIN2000、WINXP等操作系統。如果你使用C語言編程,那么Keil幾乎就是你的不二之選,即使不使用C語言而僅用匯編語言編程,其方便易用的集成環境、強大的軟件仿真調試工具也會令你事半功倍。6系統軟件設計6.1概述開關電源主要由開關管、反饋誤差放大器,PMW產生一,可以用單片機產生PWM波控制開關管的工作狀態,而開關管的開關頻率即單片機的PWM頻率來產生不同的輸出電壓,將輸出電壓反饋并進行誤差放大后再輸給單片機,單片機AD采樣,根據電壓大小相應改變輸出PWM頻率與占空比,從而改變開關管開關頻率產生對應電壓,實現對輸出電壓的實施監控與跟蹤。單片機的PWM主要可通過其定時器實現,設置相關定時器便可產生一定頻率與一定占空比的方波信號。6.2系統程序設計模塊6.2.1程序框圖6.2.2主程序//*************************************************************************************************//* *//* ******************************頭文件及宏定義************************** *//* *//*************************************************************************************************#include<reg52.h>#include"includes.h"#defineucharunsignedchar#defineuintunsignedint#defineSCANPORTP2 #defineTIME1H80#defineTIME1L80 //定時器1溢出時間//sbitwr=P3^1;sbitrd=P3^0;sbitP27=P2^7;unsignedlongintshuchu=500;//默認的開機電壓//uintzhuhuandata;unsignedlongintch=0;uchari=0;//按鍵標記//ucharuca_LineScan[3]={0xEF,0xDF,0xBF};voidchuli();//函數定義//uchargetkey();//函數定義////*************************************************************************************************//* *//* ********************************將鍵值累加并送顯示****************************** *//* *//*************************************************************************************************voidqiuhe(uchart){if(i==1){ch=t;vShowOneChar(6,89,uca[t]);}if(i==2){ch=ch*10+t;vShowOneChar(6,103,uca[t]);}if(i==3){ch=ch*10+t;vShowOneChar(6,111,uca[t]);}}//*************************************************************************************************//* *//* ********************************按鍵功能函數****************************** *//* *//*************************************************************************************************voidkey_chuli(ucharx){uchart;switch(x) { case42:t=0; i++;qiuhe(t); if(i==3) { vShowOneChin(2,49,uca_que); vShowOneChin(2,64,uca_ding); vShowOneChin(4,59,uca_wenhao);} break; //'0' case31:t=1; i++;qiuhe(t); if(i==3) { vShowOneChin(2,49,uca_que); vShowOneChin(2,64,uca_ding); vShowOneChin(4,59,uca_wenhao);} break; //'1' case32:t=2; i++;qiuhe(t); if(i==3) { vShowOneChin(2,49,uca_que); vShowOneChin(2,64,uca_ding); vShowOneChin(4,59,uca_wenhao);} break; //'2' case33:t=3; i++;qiuhe(t); if(i==3) { vShowOneChin(2,49,uca_que); vShowOneChin(2,64,uca_ding); vShowOneChin(4,59,uca_wenhao);} break; //'3' case21:t=4; i++;qiuhe(t); if(i==3) { vShowOneChin(2,49,uca_que); vShowOneChin(2,64,uca_ding); vShowOneChin(4,59,uca_wenhao);} break; //'4' case22:t=5; i++;qiuhe(t); if(i==3) { vShowOneChin(2,49,uca_que); vShowOneChin(2,64,uca_ding); vShowOneChin(4,59,uca_wenhao);} break; //'5' case23:t=6; i++;qiuhe(t); if(i==3) { vShowOneChin(2,49,uca_que); vShowOneChin(2,64,uca_ding); vShowOneChin(4,59,uca_wenhao);} break; //'6' case11:t=7; i++;qiuhe(t); if(i==3) { vShowOneChin(2,49,uca_que); vShowOneChin(2,64,uca_ding); vShowOneChin(4,59,uca_wenhao);} break; //'7' case12:t=8; i++;qiuhe(t); if(i==3) { vShowOneChin(2,49,uca_que); vShowOneChin(2,64,uca_ding); vShowOneChin(4,59,uca_wenhao);} break; //'8' case13:t=9; i++;qiuhe(t); if(i==3) { vShowOneChin(2,49,uca_que); vShowOneChin(2,64,uca_ding); vShowOneChin(4,59,uca_wenhao);} break; //'9' case41:if(i==3)//'ok' { ch=ch*256/512; shuchu=ch;ch=0;TH0=65200; TL0=65200; vShowOneChin(2,49,uca_0); vShowOneChin(2,64,uca_0); vShowOneChin(4,48,uca_SHU); vShowOneChin(4,64,uca_CHU); vShowOneChar(6,88,uca_HEN); vShowOneChar(6,104,uca_HEN); vShowOneChar(6,112,uca_HEN); } i=0; break; } }voidvTimer0(void)interrupt1using2{uchara,d; unsignedlongintc=0; uchardatatab[3]; a=(((zhuhuandata&0xf0)>>4)*100/16);d=((zhuhuandata&0x0f)*100/256);c=(a+d)*5.12;tab[0]=c%10;tab[1]=c/10%10;tab[2]=c/100%10; vShowOneChar(2,89,uca[tab[2]]); vShowOneChar(2,103,uca[tab[1]]); vShowOneChar(2,111,uca[tab[0]]);TH0=TIME1H; TL0=TIME1L; }voidmain(void){SCANPORT=0x8F; ClearLCD(0x00); vShowOneChar(2,89,uca[5]); vShowOneChar(2,96,uca_XIAOSHU); vShowOneChar(2,103,uca[0]); vShowOneChar(2,111,uca[0]); vShowOneChar(2,120,uca_V);vShowOneChin(0,0,uca_DANG); vShowOneChin(0,16,uca_QIAN); vShowOneChin(0,32,uca_GONG); vShowOneChin(0,48,uca_ZUO); vShowOneChin(0,64,uca_DIAN); vShowOneChin(0,80,uca_YA); vShowOneChin(0,96,uca_MAOHAO); vShowOneChin(4,0,uca_QING); vShowOneChin(4,16,uca_SHE); vShowOneChin(4,32,uca_ZHI); vShowOneChin(4,48,uca_SHU); vShowOneChin(4,64,uca_CHU); vShowOneChin(4,80,uca_DIAN); vShowOneChin(4,96,uca_YA); vShowOneChin(4,112,uca_MAOHAO); vShowOneChar(6,96,uca_XIAOSHU); vShowOneChar(6,88,uca_HEN); vShowOneChar(6,104,uca_HEN); vShowOneChar(6,113,uca_HEN); vShowOneChar(6,119,uca_V); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中斷0,用于開啟鍵盤掃描及鍵碼處理標志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> TMOD=0X01;TH0=TIME1H; TL0=TIME1L; ET0=1; //T/C0開中斷 TR0=1; //開定時器0中斷 IT0=1; //外中斷方式:下降沿。 EX0=1; //開啟外部中斷。EA=1;//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中斷0,用于開啟鍵盤掃描及鍵碼處理標志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>while(1){wr=0;wr=1;chuli(); if(zhuhuandata<=shuchu)P27=0; if(zhuhuandata>shuchu)P27=1;if(zhuhuandata<=shuchu)P27=0;}}voidchuli(){rd=0;zhuhuandata=P0;}//*************************************************************************************************//* *//* ********************************函數實現****************************** *//* *//*************************************************************************************************unsignedchargetkey(){ucharucTemp=0; //掃描狀態暫存。 ucharucRow=0,ucLine=0; //行號,列號。 for(ucLine=0;ucLine<3;ucLine++) //列掃描 { SCANPORT=uca_LineScan[ucLine]; //輸出掃描電位。 ucTemp=SCANPORT&0x8F; //輸入掃描電位,并屏蔽高4位。 if(ucTemp!=0x8F) { //判斷該列是否有按鍵按下。 switch(ucTemp) { case0x8E:ucRow=10;break; //如果有,則判斷行號。 case0x8D:ucRow=20;break; case0x8B:ucRow=30;break; case0x87:ucRow=40;break; default:P2=~P2;break; } break; } }//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢復鍵掃描處理前初始狀態>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SCANPORT=0x8F; //恢復P2口return(ucRow+ucLine+1);//返回按鍵編碼。格式為2位數,高位為行號,低位為列號。}//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢復鍵掃描處理前初始狀態>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>voidvINT0(void)interrupt0{EX0=0;key_chuli(getkey());while((SCANPORT&0x8F)!=0x8f)//等待按鍵松開//{};EX0=1;}6.2.2顯示數據刷新子程序//*************************************************************************************************//* *//* ******************************LCD12864驅動程序************************** *//* *//*************************************************************************************************//*************************************************************************************************//* *//* ******************************頭文件及宏定義************************** *//* *//*************************************************************************************************#include<reg52.h>#define LCDPORTP1sbit E=P3^7;sbit RW=P3^6;sbit DI=P3^5;sbit CS1=P3^3;sbit CS2=P3^4;sbitBUSYSTATUS=P1^7; //忙狀態位。//#defineDISONSTATUSP0_5 //顯示開關狀態位。//#defineRSTSTATUSP0_4 //復位狀態位。#defineLCDSTARTROW0xC0 //設置起始行指令。#defineLCDPAGE0xB8 //設置頁指令。#defineLCDLINE0x40 //設置列指令。//*************************************************************************************************//* *//* ********************************讀忙標志位********************************* *//* *//*************************************************************************************************bitbCheckBusy(){ LCDPORT=0x00; RW=1; DI=0; E=1; E=0; returnBUSYSTATUS;}//*************************************************************************************************//* *//* ********************************寫數據********************************* *//* *//*************************************************************************************************voidvWriteData(unsignedcharucData){ while(bCheckBusy()); LCDPORT=0x00; RW=0; DI=1; LCDPORT=ucData; E=1; E=0;}//*************************************************************************************************//* *//* ********************************寫指令********************************* *//* *//*************************************************************************************************voidvWriteCMD(unsignedcharucCMD){ while(bCheckBusy()); LCDPORT=0x00;RW=0; DI=0; LCDPORT=ucCMD; E=1; E=0;}//*************************************************************************************************//* *//* ********************************LCD初始化函數******************************* *//* *//*************************************************************************************************/*voidvLCDInitialize(){ CS1=1; CS2=1; vWriteCMD(0x38); //8位形式,兩行字符。 vWriteCMD(0x0F); //開顯示。 vWriteCMD(0x01); //清屏。 vWriteCMD(0x06); //畫面不動,光標右移。 vWriteCMD(LCDSTARTROW); //設置起始行。}*///*************************************************************************************************//* *//* ******************************顯示自定義行********************************* *//* *//*************************************************************************************************//在8×128的格子里顯示自定義長度的一行voidvShowCustomRow(unsignedcharucPage,unsignedcharucLine,unsignedcharucWidth,unsignedchar*ucaRow){ unsignedcharucCount; //取值范圍:ucPage:0~7;ucLine:0~127; if(ucLine<64) //ucWidth:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銀冶煉過程中的生產調度優化策略實施方法考核試卷
- 鉀肥制造與應用技術考核試卷
- 鐵路工程建筑光環境設計考核試卷
- 橡膠工業自動化與信息化技術考核試卷
- 金屬工藝品的產業升級路徑研究考核試卷
- 膠合板生產過程中的安全培訓與教育考核試卷
- 肺呼吸科學課件
- 兒童口腔健康保護指南
- 突發公共衛生事件應急響應體系
- 肺部感染臨床診療精要
- 《GPCR信號轉導》課件
- 醫院圍手術期管理制度
- 新能源汽車動力電池管理技術考核試題及答案
- 《全國醫藥市場》課件
- 天津市西青區楊柳青第二中學2024-2025學年八年級下學期4月期中數學試題(含部分答案)
- 2025春統編版小學道德與法治五年級下冊(全冊)教案、教學反思、教學計劃(附教材目錄P141)
- 2024年度江蘇省數據集團有限公司社會招聘筆試參考題庫附帶答案詳解
- 腰椎間盤突出癥手術的圍手術期護理
- 安全生產風險防控課件
- 2025年中國分布式光伏行業市場動態分析、發展方向及投資前景分析
- 2025年湖南株洲南方中學自主招生英語試卷真題(含答案詳解)
評論
0/150
提交評論