摘 要
基于單片機(jī)的定時(shí)和控制裝置在許多行業(yè)有著廣泛的應(yīng)用,而數(shù)字鐘是其中最基本的,也是最具有代表性的一個(gè)例子。
在基于單片機(jī)系統(tǒng)的數(shù)字鐘電路中,除了基本的單片機(jī)系統(tǒng)和外圍電路外,還需要外部的控制和顯示裝置。本電路主要以單片機(jī)AT89S52為核心而設(shè)計(jì)的,通過(guò)單片機(jī)對(duì)信息的分析與處理,控制外圍設(shè)備。系統(tǒng)由復(fù)位模塊、時(shí)鐘模塊、溫度模塊、音樂(lè)模塊、光識(shí)模塊及顯示模塊共六個(gè)模塊組成,后來(lái)在時(shí)鐘模塊的基礎(chǔ)上又加載了日歷、星期的模塊。
本設(shè)計(jì)以單片機(jī)AT89S52為切入點(diǎn),通過(guò)使用AT89S52的內(nèi)部的可編程定時(shí)器/計(jì)數(shù)器,結(jié)合對(duì)外接晶振的調(diào)節(jié)來(lái)確定一個(gè)合適的振蕩周期,從而確定出內(nèi)部的機(jī)器周期。再通過(guò)對(duì)內(nèi)部中斷程序的設(shè)置來(lái)設(shè)計(jì)出時(shí)鐘程序,即設(shè)計(jì)出了電子時(shí)鐘的核心。然后在核心電路的基礎(chǔ)上設(shè)計(jì)出了相應(yīng)的擴(kuò)展電路,使本設(shè)計(jì)更加實(shí)用。
關(guān)鍵詞:?jiǎn)纹瑱C(jī);數(shù)碼顯示;溫度傳感器
ABSTRACT
The timer equipment using micro controller unit is applied in many trades, the digital clock is the most fundamental example among them, and it is also a most typical example.
In digital clock circuit based micro controller unit system, there are the external controlling and display device besides the fundamental monolithic machine system and the outer-ring circuit. The key of the circuit in this design is AT89S52, using the micro control system to process information to control the outer-ring circuit. The system is made up of circuit, clock circuit, music circuit, temperature circuit, and shine circuit. Date and week modul is the external part.
This design focuses on monolithic integrated circuit AT89S52. Using AT89S52, which has the interior programmable timer/counter, the union foreign meets the crystal oscillator the adjustment to determine an appropriate duration of oscillation, thus determines theinterior the cycle of the system. And designing the internal interrupt procedure establishment to design the clock procedure, namely designed the core of electronic clock. Then design the expanded electric circuit to let this design more practical.
Key Words:Micro control unit; LED shows; Sensor of temperature
目 錄
1. 引言 1
2. 關(guān)于單片機(jī) 2
2.1單片機(jī)的發(fā)展 2
2.2 單片機(jī)的開(kāi)發(fā)背景 4
2.2 單片機(jī)的開(kāi)發(fā)背景 5
2.3 AT89S52單片機(jī) 6
2.3.1 AT89S52單片機(jī)引腳功能 7
2.3.2 AT89S52單片機(jī)硬件結(jié)構(gòu)的特點(diǎn) 8
2.3.3 AT89S52單片機(jī)的硬件原理 10
3. 方案設(shè)計(jì)與論證 12
4. 系統(tǒng)總體結(jié)構(gòu)框圖 13
5. 系統(tǒng)的硬件設(shè)計(jì) 14
5.1 顯示部分電路的設(shè)計(jì) 14
5.1.1 LED數(shù)碼顯示管的基本原理 14
5.1.2 數(shù)碼管顯示模塊分析 14
5.1.3 LED顯示電路 15
5.2 控制部分電路的設(shè)計(jì) 15
5.2.1 時(shí)鐘模塊 15
5.2.2 溫度模塊 16
5.2.3 音樂(lè)模塊 16
5.2.4 復(fù)位模塊 16
5.2.5 光識(shí)模塊 17
6. 系統(tǒng)的軟件設(shè)計(jì) 18
6.1 各模塊的程序設(shè)計(jì) 18
6.1.1 計(jì)時(shí)程序 18
6.1.2 定時(shí)鬧鐘程序 18
6.1.3 溫度程序 18
6.2 系統(tǒng)程序設(shè)計(jì)的總體框圖 19
7. 系統(tǒng)電路的制作與調(diào)試 20
7.1 電路硬件焊接制作 20
7.2 調(diào)試的主要方法 20
7.3 系統(tǒng)調(diào)試 20
7.3.1 硬件調(diào)試 20
7.3.2 軟件調(diào)試 20
7.3.3 聯(lián)機(jī)調(diào)試 21
7.3.4調(diào)試中遇到的問(wèn)題及解決方法 21
結(jié)論 23
參考文獻(xiàn) 24
附錄1 數(shù)字鐘電路圖 26
附錄2 程序清單 27
附錄3 英文資料 59
附錄4 英文資料翻譯 69
致謝 77
20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動(dòng)下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會(huì)的各個(gè)領(lǐng)域,有力地推動(dòng)了社會(huì)生產(chǎn)力的發(fā)展和社會(huì)信息化程度的提高,同時(shí)也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來(lái)越快。
時(shí)間對(duì)人們來(lái)說(shuō)總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時(shí)間。忘記了要做的事情,當(dāng)事情不是很重要的時(shí)候,這種遺忘無(wú)傷大雅。但是,一旦重要事情,一時(shí)的耽誤可能釀成大禍。例如,許多火災(zāi)都是由于人們一時(shí)忘記了關(guān)閉煤氣或是忘記充電時(shí)間。尤其在醫(yī)院,每次護(hù)士都會(huì)給病人作皮試,測(cè)試病人是否對(duì)藥物過(guò)敏。注射后,一般等待5分鐘,一旦超時(shí),所作的皮試試驗(yàn)就會(huì)無(wú)效。手表當(dāng)然是一個(gè)好的選擇,但是,隨著接受皮試的人數(shù)增加,到底是哪個(gè)人的皮試到時(shí)間卻難以判斷。所以,要制作一個(gè)定時(shí)系統(tǒng)。隨時(shí)提醒這些容易忘記時(shí)間的人。
鐘表的數(shù)字化給人們生產(chǎn)生活帶來(lái)了極大的方便,而且大大地?cái)U(kuò)展了鐘表原先的報(bào)時(shí)功能。諸如定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、定時(shí)啟閉電路、定時(shí)開(kāi)關(guān)烘箱、通斷動(dòng)力設(shè)備,甚至各種定時(shí)電氣的自動(dòng)啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘及擴(kuò)大其應(yīng)用,有著非,F(xiàn)實(shí)的意義。
基于單片機(jī)的定時(shí)和控制裝置在許多行業(yè)有著廣泛的應(yīng)用,數(shù)字鐘作為其中最基本的一個(gè)應(yīng)用實(shí)例,具有結(jié)構(gòu)簡(jiǎn)單應(yīng)用廣泛的特點(diǎn)。數(shù)字鐘中使用了單片機(jī)中最為常用的輸入輸出設(shè)備按鍵開(kāi)關(guān)和數(shù)碼管;數(shù)字鐘程序主要應(yīng)用單片機(jī)的定時(shí)器和中斷實(shí)現(xiàn)計(jì)時(shí)和顯示功能。當(dāng)今數(shù)字種作為一個(gè)單元電路被廣泛應(yīng)用于電子表、電子萬(wàn)年歷等產(chǎn)品中,帶來(lái)廣泛的經(jīng)濟(jì)效益。
目前的單片機(jī)產(chǎn)品普遍要求體積小、重量輕,這就要求單片機(jī)除了功能強(qiáng)和功耗低外,還要求其體積要小,F(xiàn)在雖然單片機(jī)的品種繁多,各具特色,但仍以80C51為核心的單片機(jī)占主流,兼容其結(jié)構(gòu)和指令系統(tǒng)的有PHILIPS公司的產(chǎn)品,ATMEL公司的產(chǎn)品和Winbond系列單片機(jī)。所以C8051為核心的單片機(jī)占據(jù)了半壁江山。而Microchip公司的PIC精簡(jiǎn)指令集(RISC)也有著強(qiáng)勁的發(fā)展勢(shì)頭,HOLTEK公司近年的單片機(jī)產(chǎn)量與日俱增,與其低價(jià)質(zhì)優(yōu)的優(yōu)勢(shì),占據(jù)一定的市場(chǎng)分額。此外還有MOTOROLA公司的產(chǎn)品,日本幾大公司的專用單片機(jī)。在一定的時(shí)期內(nèi),這種情形將得以延續(xù),將不存在某個(gè)單片機(jī)一統(tǒng)天下的壟斷局面,走的是依存互補(bǔ),相輔相成、共同發(fā)展的道路。單片機(jī)的可靠性及應(yīng)用水平越來(lái)越高和互聯(lián)網(wǎng)連接已是一種明顯的走向。單片機(jī)從功能上講可以說(shuō)是萬(wàn)用機(jī)。目前,單片機(jī)正朝著高性能和多品種方向發(fā)展,趨勢(shì)將是進(jìn)一步向著CMOS化、低功耗、小體積、大容量、高性能、低價(jià)格和外圍電路內(nèi)裝化等幾個(gè)方面發(fā)展。當(dāng)今,單片機(jī)廣泛地用于各種儀器儀表,使儀器儀表智能化,并可以提高測(cè)量的自動(dòng)化程度和精度,簡(jiǎn)化儀器儀表的硬件結(jié)構(gòu),提高其性能價(jià)格比。單片機(jī)也廣泛地用于各種實(shí)時(shí)控制系統(tǒng)中。例如,在工業(yè)測(cè)控、航空航天、尖端武器、機(jī)器人等各種實(shí)時(shí)控制系統(tǒng)中,都可以用單片機(jī)作為控制器。單片機(jī)的實(shí)時(shí)數(shù)據(jù)處理能力和控制功能,可使系統(tǒng)保持在最佳工作狀態(tài),提高系統(tǒng)的工作效率和產(chǎn)品質(zhì)量。自從單片機(jī)誕生以后,它就步入了人類生活,如洗衣機(jī)、電冰箱、電子玩具、收錄機(jī)等家用電器配上單片機(jī)后,提高了智能化程度,增加了功能,倍受人們喜愛(ài)。單片機(jī)將使人類生活更加方便、舒適、豐富多彩。單片機(jī)已成為計(jì)算機(jī)發(fā)展和應(yīng)用的一個(gè)重要方面。單片機(jī)應(yīng)用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法。從前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)的大部分功能,現(xiàn)在已能用單片機(jī)通過(guò)軟件方法來(lái)實(shí)現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱為微控制技術(shù),是傳統(tǒng)控制技術(shù)的一次革命。隨著半導(dǎo)體工藝技術(shù)的發(fā)展及系統(tǒng)設(shè)計(jì)水平的提高,單片機(jī)還會(huì)不斷產(chǎn)生新的變化和進(jìn)步。在不久的將來(lái),最終單片機(jī)與微機(jī)系統(tǒng)之間的距離越來(lái)越小,甚至難以辨認(rèn)。
單片機(jī)自問(wèn)世以來(lái),性能不斷提高和完善,其資源又能滿足很多應(yīng)用場(chǎng)合的需要,加之單片機(jī)具有集成度高、功能強(qiáng)、速度快、體積小、功耗低、使用方便、價(jià)格低廉等特點(diǎn),因此,在工業(yè)控制、智能儀器儀表、數(shù)據(jù)采集和處理、通信系統(tǒng)、高級(jí)計(jì)算器、家用電器等領(lǐng)域的應(yīng)用日益廣泛,并且正在逐步取代現(xiàn)有的多片微機(jī)應(yīng)用系統(tǒng)。單片機(jī)的潛力越來(lái)越被人們所重視。特別是當(dāng)前用CMOS工藝制成的各種單片機(jī),由于功耗低,使用的溫度范圍大,抗干擾能力強(qiáng)、能滿足一些特殊要求的應(yīng)用場(chǎng)合,更加擴(kuò)大了單片機(jī)的應(yīng)用范圍,也進(jìn)一步促使單片機(jī)性能的發(fā)展。而現(xiàn)在單片機(jī)在液晶顯示上也有了很多的應(yīng)用。
隨著科技不斷進(jìn)步,各種顯示技術(shù)如雨后春筍般誕生,由于液晶顯示器(LCD)具有輕薄短小、低耗電量、無(wú)輻射危險(xiǎn),平面直角顯示以及影像穩(wěn)定不閃爍等優(yōu)勢(shì),在近年來(lái)價(jià)格不斷下跌的吸引下,逐漸取代CRT之主流地位,顯示器明日之星架勢(shì)十足。液晶顯示器件從初期的實(shí)驗(yàn)室到現(xiàn)在的生產(chǎn)廠家,已形成較大規(guī)模的生產(chǎn)能力,使液晶顯示形成了獨(dú)立的產(chǎn)業(yè)部門(mén)。而今,液晶顯示已經(jīng)應(yīng)用于人們生產(chǎn)、生活中的各個(gè)領(lǐng)域,人們時(shí)時(shí)處處都要與這一神奇而又普通的產(chǎn)品打交道。液晶顯示技術(shù)以它跨越多學(xué)科的工作原理,高技術(shù)、專業(yè)化的制造工藝使它披上了一層神秘的面紗,而它輕巧薄形的體態(tài),獨(dú)特而理想的性能以及廣泛的應(yīng)用價(jià)值,又使它充滿魅力,深深地吸引著人們。
在單片機(jī)技術(shù)日趨成熟的今天,其靈活的硬件電路的設(shè)計(jì)和軟件的設(shè)計(jì),讓單片機(jī)得到了廣泛的應(yīng)用,幾乎是從小的電子產(chǎn)品,到大的工業(yè)控制,單片機(jī)都起到了舉足輕重的作用。單片機(jī)小的系統(tǒng)結(jié)構(gòu)幾乎是所有具有可編程硬件的一個(gè)縮影,可謂是“麻雀雖小,肝膽俱全”,單片機(jī)的學(xué)習(xí)和研究是對(duì)微機(jī)系統(tǒng)學(xué)習(xí)和研究的簡(jiǎn)捷途徑。
在目前,用戶對(duì)單片機(jī)的需要越來(lái)越多,但是,要求也越來(lái)越高,因此,單片機(jī)也在不斷的發(fā)展和進(jìn)步。單片機(jī)的技術(shù)進(jìn)步主要反映在內(nèi)部結(jié)構(gòu)、功率消耗、外部電壓等級(jí)以及制造工藝上。在這幾方面,較為典型地說(shuō)明了數(shù)字單片機(jī)的水平。下面分別就這三個(gè)方面說(shuō)明單片機(jī)的技術(shù)進(jìn)步狀況。
(1)內(nèi)部結(jié)構(gòu)的進(jìn)步
單片機(jī)在內(nèi)部已集成了越來(lái)越多的部件,這些部件包括一般常用的電路,例如:定時(shí)器,比較器,A/轉(zhuǎn)換器,D /A轉(zhuǎn)換器,串行通信接口,Watchdog電路,LCD控制器等。
有的單片機(jī)為了構(gòu)成控制網(wǎng)絡(luò)或形成局部網(wǎng),內(nèi)部含有局部網(wǎng)絡(luò)控制模塊CAN。例如,Infineon公司的C 505C,C515C,C167CR,C167CS-32FM,81C90;Motorola公司的68HC08AZ 系列等。特別是在單片機(jī)C167CS-32FM中,內(nèi)部還含有2個(gè)CAN。因此,這類單片機(jī)十分容易構(gòu)成網(wǎng)絡(luò)。特別是在控制,系統(tǒng)較為復(fù)雜時(shí),構(gòu)成一個(gè)控制網(wǎng)絡(luò)十分有用。
為了能在變頻控制中方便使用單片機(jī),形成最具經(jīng)濟(jì)效益的嵌入式控制系統(tǒng)。有的單片機(jī)內(nèi)部設(shè)置了專門(mén)用于變頻控制的脈寬調(diào)制控制電路,這些單片機(jī)有Fujitsu公司的MB89850系列、MB89860系列;Motorola 公司的MC68HC08MR16、MR24等。在這些單片機(jī)中,脈寬調(diào)制電路有6個(gè)通道輸出,可產(chǎn)生三相脈寬調(diào)制交流電壓,并內(nèi)部含死區(qū)控制等功能。
(2)功耗、封裝及電源電壓的進(jìn)步
現(xiàn)在新的單片機(jī)的功耗越來(lái)越小,特別是很多單片機(jī)都設(shè)置了多種工作方式,這些工作方式包括等待,暫停,睡眠,空閑,節(jié)電等工作方式。Philips公司的單片機(jī)P87LPC762是一個(gè)很典型的例子,在空閑時(shí),其功耗為1.5 mA,而在節(jié)電方式中,其功耗只有0.5mA。而在功耗上最令人驚嘆的是TI公司的單片機(jī)MSP430系列,它是一個(gè) 16位的系列,有超低功耗工作方式。它的低功耗方式有LPM1、LPM3、LPM4三種。當(dāng)電源為3V時(shí),如果工作于 LMP1方式,即使外圍電路處于活動(dòng),由于CPU不活動(dòng),振蕩器處于1~4MHz,這時(shí)功耗只有50?A。在LPM3 時(shí),振蕩器處于32kHz,這時(shí)功耗只有1.3?A。在LPM4時(shí),CPU、外圍及振蕩器32kHz都不活動(dòng),則功耗只有0.1?A。
現(xiàn)在單片機(jī)的封裝水平已大大提高,隨著貼片工藝的出現(xiàn),單片機(jī)也大量采用了各種合符貼片工藝的封裝方式出現(xiàn),以大量減少體積。在這種形勢(shì)中,Microchip公司推出的8引腳的單片機(jī)特別引人注目。這是PIC12CXXX系列。它含有0.5~2K程序存儲(chǔ)器,25~128字節(jié)數(shù)據(jù)存儲(chǔ)器,6個(gè)I/O端口以及一個(gè)定時(shí)器,有的還含4道A/D ,完全可以滿足一些低檔系統(tǒng)的應(yīng)用。擴(kuò)大電源電壓范圍以及在較低電壓下仍然能工作是今天單片機(jī)發(fā)展的目標(biāo)之一。目前,一般單片機(jī)都可以在3.3~5.5V的條件下工作。而一些廠家,則生產(chǎn)出可以在2.2~6V的條件下工作的單片機(jī)。這些單片機(jī)有Fujitsu公司的MB89191~89195,MB89121~125A,MB89130系列等,應(yīng)該說(shuō)該公司的F2MC-8L系列單片機(jī)絕大多數(shù)都滿足2.2~6V的工作電壓條件。而TI公司的MSP430X11X系列的工作電壓也是低達(dá)2.2V的。
(3)工藝上的進(jìn)步
現(xiàn)在的單片機(jī)基本上采用CMOS技術(shù),但已經(jīng)大多數(shù)采用了0.6?m以上的光刻工藝,有個(gè)別的公司,如Motorola公司則已采用0.35?m甚至是0.25?m技術(shù)。這些技術(shù)的進(jìn)步大大地提高了單片機(jī)的內(nèi)部密度和可靠性。
單片機(jī)在目前的發(fā)展形勢(shì)下,可靠性及應(yīng)用越來(lái)越高的水平和互聯(lián)網(wǎng)連接已是一種明顯的走向。所集成的部件越來(lái)越多;NS(美國(guó)國(guó)家半導(dǎo)體)公司的單片機(jī)已把語(yǔ)音、圖象部件也集成到單片機(jī)中,也就是說(shuō),單片機(jī)的意義只是在于單片集成電路,而不在于其功能了;如果從功能上講它可以講是萬(wàn)用機(jī)。原因是其內(nèi)部已集成上各種應(yīng)用電路。 功耗越來(lái)越低和模擬電路結(jié)合越來(lái)越多也將會(huì)成為單片機(jī)的一個(gè)發(fā)展的方向。隨著半導(dǎo)體工藝技術(shù)的發(fā)展及系統(tǒng)設(shè)計(jì)水平的提高,單片機(jī)還會(huì)不斷產(chǎn)生新的變化和進(jìn)步,最終人們可能發(fā)現(xiàn):?jiǎn)纹瑱C(jī)與微機(jī)系統(tǒng)之間的距離越來(lái)越小,甚至難以辨認(rèn)。
現(xiàn)代工業(yè)控制和一些智能化儀器儀表中,越來(lái)越多的場(chǎng)所需要用點(diǎn)陣圖形顯示器顯示漢字。液晶顯示器是人與機(jī)器溝通的重要界面,而且液晶顯示器也有如下特點(diǎn),開(kāi)發(fā)出來(lái)會(huì)有很大的應(yīng)用空間。液晶顯示器目前發(fā)展最快,也已經(jīng)成為電子信息產(chǎn)業(yè)的支柱性產(chǎn)業(yè)之一,受到普遍關(guān)注與重視。那么液晶顯示器與傳統(tǒng)的顯示器相比,到底有什么新的特點(diǎn)呢?
⑴ 質(zhì)量高 由于液晶顯示器每一個(gè)點(diǎn)在收到信號(hào)后就一直保持那種色彩和亮度,恒定發(fā)光,而不像陰極射線管顯示器(CRT)那樣需要不斷刷新亮點(diǎn)。因此,液晶顯示器畫(huà)質(zhì)高而且絕對(duì)不會(huì)閃爍,把眼睛疲勞降到最低。
⑵ 沒(méi)有電磁輻射 傳統(tǒng)顯示器的顯示材料是熒光粉,通過(guò)電子束撞擊熒光粉而顯示,電子束在打到熒光粉上的一剎那間會(huì)產(chǎn)生強(qiáng)大的電磁輻射,盡管目前有許多顯示器產(chǎn)品在處理輻射問(wèn)題上進(jìn)行了比較有效的處理,盡可能地把輻射量降到最低,但要徹底消除是困難的。相對(duì)來(lái)說(shuō),液晶顯示器在防止輻射方面具有先天的優(yōu)勢(shì),因?yàn)樗揪筒淮嬖谳椛洹?/p>
⑶ 可視面積大 對(duì)于相同尺寸的顯示器來(lái)說(shuō),液晶顯示器的可視面積要更大一些。液晶顯示器的可視面積跟它的對(duì)角線尺寸相同。陰極射線管顯示器顯像管前面板四周有一英寸左右的邊框不能用于顯示。
⑷ 應(yīng)用范圍廣 最初的液晶顯示器由于無(wú)法顯示細(xì)膩的字符,通常應(yīng)用在電子表、計(jì)算器上。而隨后出現(xiàn)的DSTN和TFT則被廣泛制作成電腦中的液晶顯示設(shè)備,DSTN液晶顯示屏用于早期的筆記本電腦;TFT則既應(yīng)用在筆記本電腦上(現(xiàn)在大多數(shù)筆記本電腦都使用TFT顯示屏),又用于主流臺(tái)式顯示器上。
⑸ 畫(huà)面效果好 與傳統(tǒng)顯示器相比,液晶顯示器一開(kāi)始就使用純平面的玻璃板,其顯示效果是平面直角的,讓人有一種耳目一新的感覺(jué)。而且液晶顯示器更容易在小面積屏幕上實(shí)現(xiàn)高分辨率。
⑹ 數(shù)字式接口 液晶顯示器都是數(shù)字式的,不像陰極射線管彩顯采用模擬接口。也就是說(shuō),使用液晶顯示器,顯卡再也不需要像往常那樣把數(shù)字信號(hào)轉(zhuǎn)化成模擬信號(hào)再行輸出了。理論上,這會(huì)使色彩和定位都更加準(zhǔn)確完美。
⑺ 體積小 傳統(tǒng)的陰極射線管顯示器,后面總是拖著一個(gè)笨重的射線管。液晶顯示器突破了這一限制,給人一種全新的感覺(jué)。傳統(tǒng)顯示器是通過(guò)電子槍發(fā)射電子束到屏幕,因而顯像管的管頸不能做得很短,當(dāng)屏幕增加時(shí)也必然增大整個(gè)顯示器的體積。而液晶顯示器通過(guò)顯示屏上的電極控制液晶分子狀態(tài)來(lái)達(dá)到顯示目的,即使屏幕加大,它的體積也不會(huì)成正比的增加,而且在重量上比相同顯示面積的傳統(tǒng)顯示器要輕得多。
⑻ 功率消耗小 傳統(tǒng)的顯示器內(nèi)部由許多電路組成,這些電路驅(qū)動(dòng)著陰極射線顯像管工作時(shí),需要消耗很大的功率,而且隨著體積的不斷增大,其內(nèi)部電路消耗的功率肯定也會(huì)隨之增大。相比而言,液晶顯示器的功耗主要消耗在其內(nèi)部的電極和驅(qū)動(dòng)IC上,因而耗電量比傳統(tǒng)顯示器也要小得多。
現(xiàn)代工業(yè)控制和一些智能化儀器儀表中,越來(lái)越多的場(chǎng)所需要用點(diǎn)陣圖形顯示器顯示漢字。液晶顯示器是人與機(jī)器溝通的重要界面,而且液晶顯示器也有如下特點(diǎn),開(kāi)發(fā)出來(lái)會(huì)有很大的應(yīng)用空間。液晶顯示器目前發(fā)展最快,也已經(jīng)成為電子信息產(chǎn)業(yè)的支柱性產(chǎn)業(yè)之一,受到普遍關(guān)注與重視。那么液晶顯示器與傳統(tǒng)的顯示器相比,到底有什么新的特點(diǎn)呢?
⑴ 質(zhì)量高 由于液晶顯示器每一個(gè)點(diǎn)在收到信號(hào)后就一直保持那種色彩和亮度,恒定發(fā)光,而不像陰極射線管顯示器(CRT)那樣需要不斷刷新亮點(diǎn)。因此,液晶顯示器畫(huà)質(zhì)高而且絕對(duì)不會(huì)閃爍,把眼睛疲勞降到最低。
⑵ 沒(méi)有電磁輻射 傳統(tǒng)顯示器的顯示材料是熒光粉,通過(guò)電子束撞擊熒光粉而顯示,電子束在打到熒光粉上的一剎那間會(huì)產(chǎn)生強(qiáng)大的電磁輻射,盡管目前有許多顯示器產(chǎn)品在處理輻射問(wèn)題上進(jìn)行了比較有效的處理,盡可能地把輻射量降到最低,但要徹底消除是困難的。相對(duì)來(lái)說(shuō),液晶顯示器在防止輻射方面具有先天的優(yōu)勢(shì),因?yàn)樗揪筒淮嬖谳椛洹?/p>
⑶ 可視面積大 對(duì)于相同尺寸的顯示器來(lái)說(shuō),液晶顯示器的可視面積要更大一些。液晶顯示器的可視面積跟它的對(duì)角線尺寸相同。陰極射線管顯示器顯像管前面板四周有一英寸左右的邊框不能用于顯示。
⑷ 應(yīng)用范圍廣 最初的液晶顯示器由于無(wú)法顯示細(xì)膩的字符,通常應(yīng)用在電子表、計(jì)算器上。而隨后出現(xiàn)的DSTN和TFT則被廣泛制作成電腦中的液晶顯示設(shè)備,DSTN液晶顯示屏用于早期的筆記本電腦;TFT則既應(yīng)用在筆記本電腦上(現(xiàn)在大多數(shù)筆記本電腦都使用TFT顯示屏),又用于主流臺(tái)式顯示器上。
⑸ 畫(huà)面效果好 與傳統(tǒng)顯示器相比,液晶顯示器一開(kāi)始就使用純平面的玻璃板,其顯示效果是平面直角的,讓人有一種耳目一新的感覺(jué)。而且液晶顯示器更容易在小面積屏幕上實(shí)現(xiàn)高分辨率。
⑹ 數(shù)字式接口 液晶顯示器都是數(shù)字式的,不像陰極射線管彩顯采用模擬接口。也就是說(shuō),使用液晶顯示器,顯卡再也不需要像往常那樣把數(shù)字信號(hào)轉(zhuǎn)化成模擬信號(hào)再行輸出了。理論上,這會(huì)使色彩和定位都更加準(zhǔn)確完美。
⑺ 體積小 傳統(tǒng)的陰極射線管顯示器,后面總是拖著一個(gè)笨重的射線管。液晶顯示器突破了這一限制,給人一種全新的感覺(jué)。傳統(tǒng)顯示器是通過(guò)電子槍發(fā)射電子束到屏幕,因而顯像管的管頸不能做得很短,當(dāng)屏幕增加時(shí)也必然增大整個(gè)顯示器的體積。而液晶顯示器通過(guò)顯示屏上的電極控制液晶分子狀態(tài)來(lái)達(dá)到顯示目的,即使屏幕加大,它的體積也不會(huì)成正比的增加,而且在重量上比相同顯示面積的傳統(tǒng)顯示器要輕得多。
⑻ 功率消耗小 傳統(tǒng)的顯示器內(nèi)部由許多電路組成,這些電路驅(qū)動(dòng)著陰極射線顯像管工作時(shí),需要消耗很大的功率,而且隨著體積的不斷增大,其內(nèi)部電路消耗的功率肯定也會(huì)隨之增大。相比而言,液晶顯示器的功耗主要消耗在其內(nèi)部的電極和驅(qū)動(dòng)IC上,因而耗電量比傳統(tǒng)顯示器也要小得多。
AT89S52 是一種低功耗、高性能CMOS8 位微控制器,具有8K 在系統(tǒng)可編程存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash 允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash ,使得AT89S52 為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。AT89S52 具有以下標(biāo)準(zhǔn)功能:8k 字節(jié)Flash,256 字節(jié)RAM,32 位I/O 口線,看門(mén)狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè)16 位定時(shí)器/計(jì)數(shù)器,一個(gè)6 向量2 級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52 可降至0Hz 靜態(tài)邏輯操作,支持2 種軟件可選擇節(jié)電模式?臻e模式下,CPU停止工作,允許RAM 、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM 內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。
圖2-1AT89S52的引腳
P0 口:P0 口是一個(gè)8 位漏極開(kāi)路的雙向I/O 口。作為輸出口,每位能驅(qū)動(dòng)8 個(gè)TTL 邏輯電平。對(duì)P0 端口寫(xiě)“1”時(shí),引腳用作高阻抗輸入。當(dāng)訪問(wèn)外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0 口也被作為低8 位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0 具有內(nèi)部上拉電阻。
P1 口:P1 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,P1 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TTL 邏輯電平。對(duì)P1 端口寫(xiě)“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此外,P1.0 和P1.2 分別作定時(shí)器/計(jì)數(shù)器2 的外部計(jì)數(shù)輸入(P1.0/T2)和時(shí)器/計(jì)數(shù)器2的觸發(fā)輸入(P1.1/T2EX),具體如下表所示。在flash 編程和校驗(yàn)時(shí),P1 口接收低8 位地址字節(jié)。
P2 口:P2 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TTL 邏輯電平。對(duì)P2 端口寫(xiě)“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問(wèn)外部程序存儲(chǔ)器或用16 位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX @DPTR)時(shí),P2 口送出高八位地址。在這種應(yīng)用中,P2 口使用很強(qiáng)的內(nèi)部上拉發(fā)送1。在使用8 位地址(如MOVX @RI )訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),P2 口輸出P2 鎖存器的內(nèi)容。
P3 口:P3 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,p2 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TTL 邏輯電平。對(duì)P3 端口寫(xiě)“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。
RST: 復(fù)位輸入。晶振工作時(shí),RST 腳持續(xù)2 個(gè)機(jī)器周期高電平將使單片機(jī)復(fù)位。看門(mén)狗計(jì)時(shí)完成后,RST 腳輸出96 個(gè)晶振周期的高電平。特殊寄存器AUXR( 地址8EH) 上的DISRTO 位可以使此功能無(wú)效。DISRTO 默認(rèn)狀態(tài)下,復(fù)位高電平有效。
ALE/PROG:地址鎖存控制信號(hào)(ALE)是訪問(wèn)外部程序存儲(chǔ)器時(shí),鎖存低8 位地址的輸出脈沖。在flash 編程時(shí),此引腳(PROG )也用作編程輸入脈沖。在一般情況下,ALE 以晶振六分之一的固定頻率輸出脈沖,可用來(lái)作為外部定時(shí)器或時(shí)鐘使用。然而,特別強(qiáng)調(diào),在每次訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),ALE 脈沖將會(huì)跳過(guò)。如果需要,通過(guò)將地址為8EH 的SFR 的第0 位置“1”,ALE 操作將無(wú)效。這一位置“1”,ALE 僅在執(zhí)行MOVX 或MOVC 指令時(shí)有效。
PSEN: 外部程序存儲(chǔ)器選通信號(hào)(PSEN)是外部程序存儲(chǔ)器選通信號(hào)。當(dāng)AT89S52 從外部程序存儲(chǔ)器執(zhí)行外部代碼時(shí),PSEN 在每個(gè)機(jī)器周期被激活兩次,而在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),PSEN 將不被激活。
EA/VPP: 訪問(wèn)外部程序存儲(chǔ)器控制信號(hào)。為使能從0000H 到FFFFH 的外部程序存儲(chǔ)器讀取指令,EA 必須接GND。為了執(zhí)行內(nèi)部程序指令,EA 應(yīng)該接VCC。
在flash 編程期間,EA 也接收12 伏VPP 電壓。
MCS-51單片機(jī)硬件結(jié)構(gòu)有如下一些主要特點(diǎn):
① 內(nèi)部程序存儲(chǔ)器(ROM)和內(nèi)部數(shù)據(jù)存儲(chǔ)器(RAM)容量
MCS-51單片機(jī)的內(nèi)部ROM和內(nèi)部RAM的容量如表-1所示:
表-1 MCS-51單片機(jī)存儲(chǔ)器容量
存儲(chǔ)器類型 單片機(jī)類型 | 掩模ROM | EPROM | RAM | ||
MCS-51 | 51子系列 | 8031 | / | / | 128B |
8051 | 4KB | / | 128B | ||
8751 | / | 4KB | 128B | ||
52子系列 | 8032 | / | / | 256B | |
8052 | 8KB | / | 256B |
② 輸入/輸出(I/O)口
MCS-51單片機(jī)內(nèi)的I/O口的數(shù)量和種類較多且齊全,尤其是它有一個(gè)全雙工的串行口。該串口是利用兩根I/O口線構(gòu)成的,有四種工作方式,可通過(guò)編程選定,MCS-51有32根I/O口線,而MCS-48只有27根。
③ 外部程序存儲(chǔ)器和外部數(shù)據(jù)存儲(chǔ)器尋址空間
MCS-51可對(duì)64KB的外部數(shù)據(jù)存儲(chǔ)器尋址且不受該系列中各種芯片型號(hào)的影響,而對(duì)程序存儲(chǔ)器是內(nèi)外總空間為64KB,故根據(jù)表-1不同的芯片型號(hào),MCS-51外部程序存儲(chǔ)器最大尋址范圍為64KB。
④ 中斷與堆棧
MCS-51有5個(gè)中斷源(對(duì)8032/8052為6個(gè)),分為2個(gè)優(yōu)先級(jí),每個(gè)中斷源的優(yōu)先級(jí)是可編程的。它的堆棧位置也是可編程的,堆棧深度可達(dá)128字節(jié)。而MCS-48只有不分優(yōu)先級(jí)的2個(gè)中斷源,且堆棧設(shè)置在片內(nèi)RAM的16個(gè)字節(jié)的固定單元內(nèi)。
⑤ 定時(shí)/計(jì)數(shù)器與寄存器區(qū)
MCS-51子系列有2個(gè)16位定時(shí)/計(jì)數(shù)器,通過(guò)編程可以實(shí)現(xiàn)四種工作模式。MCS-52子系列則有3個(gè)16位定時(shí)/計(jì)數(shù)器。而MCS-48只有一個(gè)8位定時(shí)/計(jì)數(shù)器。MCS-51在內(nèi)部RAM中開(kāi)設(shè)了四個(gè)通用工作寄存器區(qū),共32個(gè)通用寄存器,以適應(yīng)多種中斷或子程序嵌套的要求。而MCS-48的內(nèi)部RAM中只有兩個(gè)通用工作寄存器區(qū),每個(gè)寄存器區(qū)包含8個(gè)8位寄存器。
⑴ 如圖所示,圖為單片機(jī)的基本外圍電路。20管腳接地,40管腳接+5V電源,為單片機(jī)工作提供電源。18及19管腳接晶振,為單片機(jī)提供時(shí)鐘信號(hào),晶振為12MHz。晶振的振蕩頻率越高,系統(tǒng)的時(shí)鐘頻率越高,單片機(jī)工作的速度也越高。對(duì)于液晶顯示電路的設(shè)計(jì),需要單片機(jī)有較高的工作效率,所以選擇比較高頻率的晶振,從而提高液晶屏幕的刷新速率,獲得更加連貫、流暢的圖像顯示。根據(jù)需要還可以加上復(fù)位電路,復(fù)位是單片機(jī)的初始化操作;蛘弋(dāng)單片機(jī)程序運(yùn)行出錯(cuò)導(dǎo)致死鎖狀態(tài)的時(shí)候,為擺脫困境,也需要按復(fù)位鍵以重新啟動(dòng)。
圖2-2 AT89S52單片機(jī)基本外圍電路
⑵ 如圖2-3所示,左邊為單片機(jī)模塊,右邊為液晶模塊。單片機(jī)的P0口與液晶模塊的8個(gè)數(shù)據(jù)端口相連,作為數(shù)據(jù)傳送端口。 P2.4、5、7、8與液晶模塊的片選CS1、CS2和R/W、D/I相連,作為控制字的寫(xiě)入。液晶模塊的E端為使能端,由單片機(jī)的P2.3和P3.7、8三個(gè)口送信號(hào)至與非門(mén)驅(qū)動(dòng)液晶模塊,同時(shí)給使能端提供高低電平,控制液晶模塊工作。液晶模塊的VSS接地,VCC和V0接滑動(dòng)變阻器,VCC接正5V電源,通過(guò)滑動(dòng)變阻器分壓,從而為液晶模塊更好的工作提供電源,也作為液晶顯示屏的亮度控制端。此圖即為單片機(jī)控制液晶顯示的基本電路。其中的與非門(mén)組合可以用74LS00芯片,74LS00可以提供3個(gè)與非門(mén)。本設(shè)計(jì)電路成本低,元件比較普通,市場(chǎng)上可以輕易買(mǎi)到,為整個(gè)設(shè)計(jì)提供方便。電路簡(jiǎn)單易于焊接,調(diào)試中也能減少很多麻煩。
按照系統(tǒng)設(shè)計(jì)功能的要求,初步確定設(shè)計(jì)系統(tǒng)由復(fù)位模塊、時(shí)鐘模塊、音樂(lè)模塊、光識(shí)模塊及顯示模塊共五個(gè)模塊組成,后來(lái)在時(shí)鐘模塊的基礎(chǔ)上又加載了日歷、星期的模塊,為了使本設(shè)計(jì)中的數(shù)字鐘的功能更加完善和強(qiáng)大,最后又將溫度顯示加入了設(shè)計(jì)方案中。
首先以單片機(jī)AT89S52為入手點(diǎn),通過(guò)使用AT89S52的內(nèi)部的可編程定時(shí)器/計(jì)數(shù)器,結(jié)合對(duì)外接晶振的調(diào)節(jié)來(lái)確定一個(gè)合適的振蕩周期,從而確定出內(nèi)部的機(jī)器周期。再通過(guò)對(duì)內(nèi)部中斷程序的設(shè)置來(lái)設(shè)計(jì)出時(shí)鐘程序,即設(shè)計(jì)出了電子時(shí)鐘的核心。
根據(jù)題目的要求,我設(shè)計(jì)了以下方案:
設(shè)計(jì)中加載了年、月、日的設(shè)計(jì),剛開(kāi)始時(shí)打算用18個(gè)共陽(yáng)數(shù)碼管,考慮到數(shù)碼管太多是畢會(huì)給硬件電路帶來(lái)麻煩,經(jīng)過(guò)考慮后,決定把年、月、日與時(shí)間設(shè)置到一組數(shù)碼管上來(lái),即六個(gè)數(shù)碼管即能顯示時(shí)間又能顯示年、月、日,這樣一來(lái)就方便了硬件電路。
主控芯片使用51系列AT89S52單片機(jī),溫度模塊設(shè)計(jì)中,溫度元件采用AD590,利用AD590以及接口電路把溫度轉(zhuǎn)換成模擬電壓,經(jīng)由ADC0804轉(zhuǎn)換成數(shù)字信號(hào),然后經(jīng)AT89S52處理顯示溫度。但由于AD590價(jià)錢(qián)比較貴,且只能轉(zhuǎn)換成模擬電壓,這樣一來(lái)硬件就要增加更多的器件且又不經(jīng)濟(jì),經(jīng)查找發(fā)現(xiàn)18B20溫度傳感器價(jià)錢(qián)便宜且可以直接把溫度轉(zhuǎn)換成數(shù)字量測(cè)溫范圍為-55—125度,最大分辨率可達(dá)0.0625度,采用3線制與單片機(jī)相連,減少了外部的硬件電路,具有低成本和易使用的特點(diǎn),所以我選擇了18B20溫度傳感器。
在音樂(lè)模塊的設(shè)計(jì)中,我決定采用音樂(lè)芯片,這樣可以避免對(duì)鈴聲音樂(lè)的編程,即節(jié)省了時(shí)間,又減少了在程序中發(fā)生錯(cuò)誤的可能性。
圖4-1
在本設(shè)計(jì)中,以按鍵開(kāi)關(guān)作為輸入裝置,LED七段數(shù)碼顯示管作為顯示裝置,因此,各按鍵開(kāi)關(guān)的功能為:
S1鍵:P1.0口 時(shí)間調(diào)整
S2鍵:P1.1口 日期調(diào)整
S3健; p1.2口 鬧鈴設(shè)置
S4健: p1.3口 鬧鈴開(kāi)關(guān)
電路是由控制部分和顯示部分兩大部分組成。利用單片機(jī)程序進(jìn)行控制,并通過(guò)數(shù)碼管進(jìn)行顯示。
用單片機(jī)驅(qū)動(dòng)LED數(shù)碼管有很多方法,按顯示方式分,有靜態(tài)顯示和動(dòng)態(tài)顯示,按譯碼方式可分為硬件譯碼和軟件譯碼。
靜態(tài)顯示是顯示驅(qū)動(dòng)電路具有輸出鎖存功能,單片機(jī)將要顯示的數(shù)據(jù)送出后不再控制LED,直到下次顯示時(shí)再傳送一次新的顯示數(shù)據(jù)。靜態(tài)顯示的數(shù)據(jù)穩(wěn)定,占用CPU時(shí)間少。
動(dòng)態(tài)顯示要CPU時(shí)刻對(duì)顯示器件進(jìn)行刷新,顯示數(shù)據(jù)有閃爍感,占用CPU時(shí)間多。
這兩種顯示方式各有利弊:靜態(tài)顯示雖然數(shù)據(jù)顯示穩(wěn)定,占用很少的CPU時(shí)間,但每個(gè)顯示單元都需要單獨(dú)的顯示驅(qū)動(dòng)電路,使用的電路硬件較多;動(dòng)態(tài)顯示雖然有閃爍感,占用的CPU時(shí)間多,但使用的硬件少,能節(jié)省線路板空間。
動(dòng)態(tài)掃描顯示接口是單片機(jī)中應(yīng)用最廣泛的一種顯示方式。其接口電路是把所有LED顯示器的8個(gè)筆劃段A~D、DP的同名端連在一起,而每一個(gè)數(shù)碼管的公共端COM是各自獨(dú)立地受I/O線控制。CPU向字段輸出口送出字形碼時(shí),所有顯示器接受到相同的字形碼,但究竟是哪個(gè)顯示器亮,則取決于COM端,而這一端是由I/O控制的,可以自行決定何時(shí)顯示哪一位了。而所謂動(dòng)態(tài)掃描就是指我們采用分時(shí)的方法,輪流控制各個(gè)顯示器的COM端,是各個(gè)顯示器輪流點(diǎn)亮。
在輪流點(diǎn)亮掃描過(guò)程中,每位顯示器的點(diǎn)亮?xí)r間是極為短暫的,約1ms左右,但由于人的視覺(jué)暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位顯示器并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感。
從上述的論述中,可以看出動(dòng)態(tài)顯示方案具備一定的實(shí)用性,也是目前單片機(jī)數(shù)碼管顯示中較為常用的一種顯示方法。所以,本設(shè)計(jì)也采用動(dòng)態(tài)顯示方案。
電路先通過(guò)電源電路送出+5V電壓,單片機(jī)AT89S52通過(guò)74LS47和CD4515(4—16譯碼器)驅(qū)動(dòng)數(shù)碼管顯示數(shù)值, 顯示部分采用普通共陽(yáng)極數(shù)碼管顯示,采用動(dòng)態(tài)掃描,以減少硬件電路。考慮到一次掃描12位數(shù)碼管顯示時(shí)會(huì)出現(xiàn)閃爍情況,設(shè)計(jì)時(shí)分兩排顯示,一排顯示時(shí)間和年月日,一排顯示星期和溫度, 共陽(yáng)極數(shù)碼管中8個(gè)發(fā)光
二極管的陽(yáng)極(二極管正端)連在一起。通常,公共陽(yáng)極接高電平(一般接電源),其它管腳接段驅(qū)動(dòng)電路輸出端。當(dāng)某段驅(qū)動(dòng)電路的輸入端為低電平時(shí),該端所連接的字段導(dǎo)通并點(diǎn)亮。根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時(shí),要求段驅(qū)動(dòng)電路能吸收額定的段導(dǎo)通電流,還需根據(jù)外接電源及額定段導(dǎo)通電流來(lái)確定相應(yīng)的限流電阻。采用動(dòng)態(tài)顯示方式,比較節(jié)省I/O口,硬件電路也較靜態(tài)顯示簡(jiǎn)單,但其亮度不如靜態(tài)顯示方式,而且在顯示位數(shù)較多時(shí),CPU要依次掃描,占用CPU較多時(shí)間。
為了提供共陽(yáng)LED數(shù)碼管的驅(qū)動(dòng)電壓,用三極管9012作電源驅(qū)動(dòng)輸出。采用12MHz晶振,有利于提高秒計(jì)時(shí)的精確性。;
圖5-1
利用芯片內(nèi)部的振蕩器,然后在引腳XTAL1和引腳 XTAL2兩端接晶體諧振器,就構(gòu)成了穩(wěn)定的自激振蕩器,其發(fā)出的脈沖直接送入內(nèi)部的時(shí)鐘電路,如圖外接晶振時(shí),C1和C2的值通常選擇30pF; C1、C2對(duì)頻率有微調(diào)作用,晶體諧振器的頻率12MHz。為了減少寄生電容,更好地保證振蕩器穩(wěn)定、可靠地工作,振蕩器和電容應(yīng)盡可能安裝得與單片機(jī)芯片靠近。設(shè)置了12—24兩種顯示狀態(tài),調(diào)整計(jì)時(shí)的按鍵、設(shè)置定時(shí)的按鍵且定時(shí)設(shè)置了3次定時(shí)、還另加載了星期、年、月、日的調(diào)整及閏年的自動(dòng)調(diào)整。
主要由18B20通過(guò)單片機(jī)AT89S52中的溫度程序不斷的檢測(cè)溫度來(lái)顯示溫度。
18B20溫度傳感器工作原理:DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9—12位的數(shù)字值讀數(shù)方式,DS18B20的性能特點(diǎn)如下:
1、獨(dú)特的單線接口僅需要一個(gè)引腳進(jìn)行通信;
2、多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;
3、無(wú)須外部器件;
4、可通過(guò)數(shù)據(jù)線供電,電壓范圍為3.0---5.5V;
5、零待機(jī)功耗;
6、溫度以9或12位數(shù)字量讀出;
7、用戶可定義的非易失性溫度報(bào)警設(shè)置;
8、報(bào)警搜索命令識(shí)別并標(biāo)志超過(guò)程序限定溫度(溫度報(bào)警條件)的器件;
9、負(fù)電壓特性,電源極性接反是,溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作。
通過(guò)LM386N-1給揚(yáng)聲器信號(hào)來(lái)發(fā)出音樂(lè),這個(gè)模塊主要是為時(shí)鐘定時(shí)到時(shí)發(fā)出音樂(lè)鬧鈴,而在軟件部分設(shè)置了可以一次設(shè)置3次定時(shí),每次定時(shí)到時(shí),音樂(lè)程序中編了6種音樂(lè),它可以自動(dòng)選擇6種音樂(lè)中的任一音樂(lè)響1分鐘,如果中間不想讓鬧鈴響可以按一按鍵,鬧鈴就立刻停止。
單片機(jī)復(fù)位電路是使CPU和系統(tǒng)中的其他功能部件都處在一個(gè)確定的初始狀態(tài),并從該狀態(tài)開(kāi)始工作,例如復(fù)位后PC=0000H,使單片機(jī)從第一個(gè)單元取指令。無(wú)論是在單片機(jī)剛接上電源時(shí),還是斷電后或者發(fā)生故障后都要復(fù)位。
電路圖為:
圖5-2
同樣也是為定時(shí)服務(wù)的,只要定時(shí)到,組成心字的18只發(fā)光二極管就會(huì)按程序全亮全滅20次,如此循環(huán)。
電路圖為:
圖5-3
計(jì)時(shí)程序是實(shí)現(xiàn)電子時(shí)鐘的核心內(nèi)容,本程序用中斷time0來(lái)控制,計(jì)時(shí)顯示的單元從50h開(kāi)始,50h=秒的個(gè)位,51h=秒的十位,52h=分的個(gè)位,53h=分的十位,54h=時(shí)的個(gè)位,55h=時(shí)的十位
org 000bh
jmp time0
mov tmod,#00010001b
mov ie,#10001010b
mov ip,#00000010b
mov th0,#(65536-2000)/256
mov tl0,#low(65536-2000)
mov 4fh,#02;兩個(gè)中斷250次為1秒
作用是判斷時(shí)間是否與設(shè)置的鬧鐘時(shí)間相等,如相等則開(kāi)啟鬧鐘。
片機(jī)內(nèi)定時(shí)振鈴開(kāi)關(guān)使用軟件開(kāi)關(guān),即用標(biāo)志寄存器,且程序設(shè)置了3次定時(shí),可見(jiàn)要使電子時(shí)鐘定時(shí)打鈴,必須同時(shí)具備兩個(gè)條件,第一:定時(shí)振鈴開(kāi);第二:當(dāng)前定時(shí)項(xiàng)數(shù)不為0項(xiàng)。 因?yàn)橐闺娮訒r(shí)鐘定時(shí)打鈴,必須同時(shí)具備上述的兩個(gè)條件,所以在單片機(jī)執(zhí)行查詢定時(shí)各項(xiàng)的程序之前,主程序會(huì)首先查詢這兩個(gè)條件是否同時(shí)滿足,如果滿足的話,則進(jìn)行一輪查詢,所謂一輪查詢定時(shí),即將當(dāng)前時(shí)間與定時(shí)各項(xiàng)一一比較,看是否相符,如果查到某項(xiàng)相符,則調(diào)用音樂(lè)程序。每查完一項(xiàng),寄存器中的值會(huì)自動(dòng)減1(即為定時(shí)時(shí)間的項(xiàng)數(shù))。當(dāng)定時(shí)時(shí)間的項(xiàng)數(shù)值自動(dòng)減為0時(shí),則表示這一輪查詢定時(shí)時(shí)間完畢,只要條件允許(定時(shí)音樂(lè)開(kāi)且定時(shí)項(xiàng)數(shù)不為0),有可以進(jìn)行一輪新的查詢定時(shí)時(shí)間。
定時(shí)1:33h=分,34h=時(shí),定時(shí)2:35h=分,36h=時(shí),定時(shí)3:37h=分,38h=時(shí),定時(shí)狀態(tài)=39h;定時(shí)顯示的單元從60h開(kāi)始,60h=定時(shí)狀態(tài),61h=此時(shí);定時(shí)狀態(tài)的音樂(lè)種類,62h=分的個(gè)位,63h=分的十位;64h=時(shí)的個(gè)位,65h=時(shí)的十位
57h=溫度的十位,58h=溫度的個(gè)位,
圖6-1
電路硬件焊接是設(shè)計(jì)的重要內(nèi)容之一,其焊接工藝的好壞直接關(guān)系到系統(tǒng)的整體性能。本設(shè)計(jì)的樣品制作采用手工焊接,在焊接制作中應(yīng)遵守手工焊接的工藝流程和技術(shù)要求。
⑴ 測(cè)試單片機(jī)軟件功能的完善性。這是針對(duì)整個(gè)單片機(jī)系統(tǒng)功能的測(cè)試,測(cè)試軟件是否寫(xiě)的正確完整。單片機(jī)是否能正常工作。
⑵ 上電、掉電測(cè)試。在使用中用戶必然會(huì)遇到上電和掉電的情況,可以進(jìn)行多次開(kāi)關(guān)電源,測(cè)試單片機(jī)系統(tǒng)的可靠性。
⑶ 老化測(cè)試。測(cè)試長(zhǎng)時(shí)間工作情況下,單片機(jī)系統(tǒng)的可靠性。必要的話可以放置在高溫,高壓以及強(qiáng)電磁干擾的環(huán)境下測(cè)試。
⑷ D和EFT等測(cè)試?梢允褂酶鞣N干擾模擬器來(lái)測(cè)試單片機(jī)系統(tǒng)的可靠性。例如使用靜電模擬器測(cè)試單片機(jī)系統(tǒng)的抗靜電ESD能力;使用突波雜訊模擬器進(jìn)行快速脈沖抗干擾EFT測(cè)試等等。
⑸ 整個(gè)顯示系統(tǒng)的測(cè)試。這是針對(duì)整個(gè)單片機(jī)顯示系統(tǒng)功能的測(cè)試,單片機(jī)正常工作后,加上負(fù)載液晶整個(gè)系統(tǒng)共同測(cè)試。
⑹ 整個(gè)顯示系統(tǒng)的調(diào)試。編寫(xiě)不同的程序?qū)懭雴纹瑱C(jī),用單片機(jī)控制液晶顯示不同的畫(huà)面,如字符、圖形。
靜態(tài)測(cè)試。在電路板制作好以后,先不要急著加電,首先進(jìn)行靜態(tài)測(cè)試。
檢查線路:通過(guò)目測(cè)和使用萬(wàn)用表,檢查線路連接的正確性,有無(wú)斷路和短路,無(wú)虛焊的存在等。
核對(duì)元件:檢查元件是否安裝正確,有無(wú)損壞等。
本程序采用單片機(jī)匯編語(yǔ)言編寫(xiě),用wave 6000編譯器編程模擬調(diào)試。
在硬件無(wú)故障和軟件模塊調(diào)試完成的情況下,還要對(duì)系統(tǒng)進(jìn)行聯(lián)機(jī)調(diào)試。在系統(tǒng)調(diào)試時(shí),應(yīng)將全部硬件電路都接上,應(yīng)用程序模塊也都組合好,進(jìn)行全系統(tǒng)軟硬件調(diào)試。系統(tǒng)調(diào)試的任務(wù)是排除軟硬件中的殘留錯(cuò)誤。使整個(gè)系統(tǒng)能夠完成預(yù)定的工作任務(wù),達(dá)到要求的技術(shù)性能指標(biāo)。
系統(tǒng)聯(lián)機(jī)調(diào)試到能正確顯示時(shí)間、日期、12小時(shí)和24小時(shí)的轉(zhuǎn)換,并且鬧鈴功能正常,即鈴聲響起的同時(shí),擺成心型的18個(gè)二極管閃爍。
⑴ 調(diào)試中反復(fù)檢查,仍沒(méi)有錯(cuò)誤,這時(shí)候看是否要排除元器件失效了。造成這類錯(cuò)誤的原因有兩個(gè):一個(gè)是元器件買(mǎi)來(lái)時(shí)就已壞了;另一個(gè)是由于安裝錯(cuò)誤,造成器件燒壞?梢圆扇z查元器件與設(shè)計(jì)要求的型號(hào)、規(guī)格和安裝是否一致。在保證安裝無(wú)誤后,用替換方法排除錯(cuò)誤。
⑵ 還有可能是電源故障,所以排除電源故障這項(xiàng)必不可少。在通電前,一定要檢查電源電壓的幅值和極性,否則很容易造成集成塊損壞。加電后檢查各插件上引腳的電位,一般先檢查VCC與GND之間電位,若在5V~4.8V之間屬正常。若有高壓,聯(lián)機(jī)仿真器調(diào)試時(shí),將會(huì)損壞仿真器等,有時(shí)會(huì)使應(yīng)用系統(tǒng)中的集成塊發(fā)熱損壞。
⑶ 當(dāng)判斷單片機(jī)不工作時(shí)候,需要進(jìn)行聯(lián)機(jī)仿真調(diào)試。聯(lián)機(jī)仿真必須借助仿真開(kāi)發(fā)裝置、示波器、萬(wàn)用表等工具。這些工具是單片機(jī)開(kāi)發(fā)的最基本工具。
信號(hào)線是聯(lián)絡(luò)單片機(jī)和外部器件的紐帶,信號(hào)線連結(jié)錯(cuò)誤或時(shí)序不對(duì),都會(huì)造成對(duì)外圍電路讀寫(xiě)錯(cuò)誤。單片機(jī)的信號(hào)線大體分為讀、寫(xiě)信號(hào)線、片選信號(hào)線、時(shí)鐘信號(hào)線、外部程序存貯器讀選通信號(hào)(PSEN)、地址鎖存信號(hào)(ALE)、復(fù)位信號(hào)等幾類。這些信號(hào)大多屬于脈沖信號(hào),對(duì)于脈沖信號(hào)借助示波器(這里指通用示波器)用常規(guī)方法很難觀測(cè)到,必須采取一定措施才能觀測(cè)到。應(yīng)該利用軟件編程的方法來(lái)實(shí)現(xiàn)。例如對(duì)片選信號(hào),運(yùn)行下面的小程序就可以檢測(cè)出譯碼片選信號(hào)是否正常。
MAIN:MOVDPTR,#DPTR ;將地址送入DPTR
MOVXA,@DPTR ;將譯碼地址外RAM中的內(nèi)容送入
ACC NOP ;適當(dāng)延時(shí)
SJMP MAIN ;循環(huán)
執(zhí)行程序后,就可以利用示波器觀察芯片的片選信號(hào)引出腳(用示波器掃描時(shí)間為1μs/每格檔),這時(shí)應(yīng)看到周期為數(shù)微秒的負(fù)脈沖波形,若看不到則說(shuō)明譯碼信號(hào)有錯(cuò)誤。對(duì)于電平類信號(hào),觀測(cè)起來(lái)就比較容易。例如對(duì)復(fù)位信號(hào)觀測(cè)就可以直接利用示波器,當(dāng)按下復(fù)位鍵時(shí),可以看到單片機(jī)的復(fù)位引腳將變?yōu)楦唠娖;一旦松開(kāi),電平將變低。
總而言之,對(duì)于脈沖觸發(fā)類的信號(hào)我們要用軟件來(lái)配合,并要把程序編為死循環(huán),再利用示波器觀察;對(duì)于電平類觸發(fā)信號(hào),可以直接用示波器觀察。
經(jīng)過(guò)調(diào)試,和多次改進(jìn),本設(shè)計(jì)達(dá)到了預(yù)期的效果。數(shù)字鐘可以正常顯示時(shí)間和日期,并且對(duì)每個(gè)月份的天數(shù)進(jìn)行了處理,特別是2月這個(gè)特殊月份,本設(shè)計(jì)可以自動(dòng)從2月28日直接過(guò)度到3月1日。而且,在本設(shè)計(jì)中,閏年和平年的2月,其天數(shù)可以被正常區(qū)分,從而達(dá)到了實(shí)用和人性化的效果。對(duì)溫度的顯示也比較正常,能夠正常反映出室溫情況。當(dāng)然,還可以根據(jù)需要,增加整點(diǎn)報(bào)時(shí)的功能,以使本設(shè)計(jì)更加完善。
總之,本設(shè)計(jì)提供了一套行之有效的數(shù)字鐘的設(shè)計(jì)方案,并且成本較低,具有較高的實(shí)用性。
[1] 盧坤,奚大順電子設(shè)計(jì)技術(shù)[M].成都電子科技大學(xué)出版社,1997.P103-210
[2] 唐競(jìng)新.數(shù)字電子電路[M].第1版.北京:清華大學(xué)出版社,2003.P99-120
[3] 康華光.電子技術(shù)基礎(chǔ)[M].數(shù)字部分.第4版.北京:高等教育出版社,1998.
P47-79
[4] 電子工程手冊(cè)編委會(huì)等中外集成電路簡(jiǎn)明速查手冊(cè)[M]---TTL,CMOS.北京:電子工業(yè)出版社,1991.P245-340
[5] 楊長(zhǎng)春.論數(shù)字技術(shù)[J].《電子報(bào)》合訂本.第0113期.成都:四川科學(xué)技術(shù)出版社,2002.12.P13-30
[6] 彭國(guó)賢.數(shù)碼顯示 [M].北京:電子工業(yè)出版社,1993.P21-50
[7] 康華光主編,鄒壽彬副主編《電子技術(shù)基礎(chǔ)(數(shù)字技術(shù))》高等教育出版,2004.P129-180
[8] 康華光主編,陳大欽副主編《電子技術(shù)基礎(chǔ)(模擬技術(shù))》高等教育出版社,2003.P269-307
[9] 袁俊泉,孫敏琪,曹瑞編著 《數(shù)字系統(tǒng)設(shè)計(jì)及其應(yīng)用》[J].《數(shù)字電子》第9908期. 西安電子科技大學(xué)出版社,2002.P13-26
[10] 李光飛、樓然苗等 《單片機(jī)課程設(shè)計(jì)實(shí)例指導(dǎo)》北京航空航天大學(xué)出版社,2004.P5-37
[11] 余永權(quán).《ATMEL 系列Flash單片機(jī)原理及應(yīng)用》北京:電子工業(yè)出版社,1997年第一版,P88~121
[12] 沙占友. 《智能化集成溫度傳感器原理與應(yīng)用》北京:機(jī)械工業(yè)出版社,2002年第一版,P84~106
[13] 李廣弟,朱月秀,王秀山.《單片機(jī)基礎(chǔ)修訂版》北京:北京航空航天大學(xué)出版社,2001年第二版,P11~77
[14] 蔡明生.《電子設(shè)計(jì)》北京:高等教育出版社,2004年第一版,P48~101
[15] 孫安青.《AT89S51單片機(jī)實(shí)驗(yàn)及實(shí)踐教程》www.supermcu.com.P179~186
[16] 劉云,成后發(fā),尹波.《溫度無(wú)線傳輸技術(shù)的研究》電腦與信息技術(shù),2004年第 4期,P47~50
[17] 陳躍東.《DS18B20集成溫度傳感器原理及其應(yīng)用》 安徽機(jī)電學(xué)院學(xué)報(bào),2002年第4期,P34~38
[18] 劉楚浩. 《用單片機(jī)實(shí)現(xiàn)溫度遠(yuǎn)程顯示》單片機(jī)與嵌入式系統(tǒng)應(yīng)用.2002年第9期
[19] William Stallings.《Data and Computer Communications》.北京:高等教育出版社,2001年第一版
[20] CHEE-YEE CHONG,SRIKANTA PKUMAR. 《Sensor Networks:Evolution》,Opportunities and Challenges[A]. PROCEEDINGS OF THE IEEE[C]. 2003,91(8):1247-1256.
[21] Altera Corporation.2002. 《 Altera Digital Library.Altera》.P99-101
[22] Xilinx Inc.2001.Data Book 2001.Xilinx.P31-54
附錄2 程序清單
org 0000h
jmp start
org 000bh
jmp time
org 30h
start: mov sp,#5fh ;// 小時(shí) 分鐘 秒
mov r1,#0 ;// r2 r1 r5 r0 r3 r4
mov r2,#0
mov r7,#0
mov r0,#0
mov r6,#0
mov r5,#0
mov 20h,#31 ;//20h 日地址 日 月 年個(gè)位 年十位 年百位 年千位
mov 21h,#10 ;//21h 月地址 20h 21h 22h 23h 24h 25h
mov 22h,#6 ;//年個(gè)位
mov 23h,#0 ;//年十位
mov 24h,#0 ;//年百位
mov 25h,#2 ;/年千位
mov 34h,#0 ;//鬧鈴1 秒個(gè)位 時(shí)十位 時(shí)個(gè)位 分十位 分個(gè)位 秒十位 秒個(gè)位
mov 35h,#0 ;//鬧鈴1 秒十位
mov 36h,#1 ;//鬧鈴1 分個(gè)位 39h 38h 37h 36h 35h 34h
mov 37h,#0 ;//鬧鈴1 分十位
mov 38h,#0 ;//鬧鈴1 時(shí)個(gè)位
mov 39h,#0 ;//鬧鈴1 時(shí)十位 時(shí)十位 時(shí)個(gè)位 分十位 分個(gè)位 秒十位 秒個(gè)位
mov 49h,#1 ;//鬧鈴2 分個(gè)位 4ch 4bh 4ah 49h 48h 47h
mov 4ah,#0 ;//鬧鈴2 分十位
mov 4bh,#0 ;//鬧鈴2 時(shí)個(gè)位
mov 4ch,#0 ;//鬧鈴2 時(shí)十位
setb p1.5
mov TMOD,#00000001b
mov TH0,#3ch ;//定時(shí)器初值
mov TL0,#0b0h
setb EA ;//開(kāi)總中斷
setb ET0 ;//開(kāi)定時(shí)器一的中斷
mov p1,#0ffh
setb TR0 ;//定時(shí)器開(kāi)始工作
k: mov 12h,r0
mov 13h,r1
mov 14h,r2 ; // 小時(shí) 分鐘 秒
; // r2 r1 r5 r0 r3 r4
mov 15h,r5
; // 14h 13h 15h 12h
loop: mov r5,15h
mov r2,14h
mov r1,13h ;//地址中不是BCD碼而是要顯示的數(shù)字
mov r0,12h
mov a,r6 ; //R6中是秒脈沖個(gè)數(shù)
mov b,#10
div ab
mov dptr,#tab1 ; //商存在a中
movc a,@a+dptr
mov r3,a
mov a,b
movc a,@a+dptr ;//余數(shù)在b中
mov r4,a
mov dptr,#tab1
mov a,r0
movc a,@a+dptr ; //分 個(gè)位
mov r0,a
mov a,r5
movc a,@a+dptr ;//分 十位
mov r5,a; // 小時(shí) 分鐘 秒
; // r2 r1 r5 r0 r3 r4
mov a,r1 ;
movc a,@a+dptr ;//時(shí) 個(gè)位 // 14h 13h 15h 12h
mov r1,a
; // 18h 17h 19h 16h
mov a,r2 ;//時(shí) 十位
movc a,@a+dptr; //此時(shí)地址中是要顯示數(shù)字的BCD碼
mov r2,a
mov 19h,r5
mov 18h,r2
mov 17h,r1
mov 16h,r0
mov 46h,r6
dsp:
mov p2,r4
mov p0,#70h ;//p0的高位接74LS138
lcall delay
mov p2,r3
mov p0,#60h
lcall delay
mov p2,r0 ;// 小時(shí) 分鐘 秒
mov p0,#40h
lcall delay ; // r2 r1 r5 r0 r3 r4
;
mov p2,r5
mov p0,#30h
lcall delay
mov p2,r1
mov p0,#10h
lcall delay
mov p2,r2
mov p0,#00h
lcall delay
mov p0,#50h ;//在分與秒之間加 "一"
mov p2,#3fh
lcall delay
mov p0,#20h ;//在分與秒之間加 "一"
mov p2,#3fh
lcall delay
jnb p1.1,return1 ;//p1.1是年月日調(diào)整
jnb p1.0,jie ;//p1.0是時(shí)間調(diào)整
jnb p1.2,goto5 ;//p1.2進(jìn)入鬧鈴
mov p3,#0ffh
call cheak2
call cheak3
call zcheak; //2ah.0為0跳轉(zhuǎn),不去整點(diǎn)報(bào)時(shí)
jb p1.5,out3
call cheak
out3: jb p1.6,out2
call cheak1
out2: jmp loop
goto6: mov p3,#150
ljmp notice
goto5: lcall delay1 ;// 跳往鬧鈴的按鍵防抖程序
jnb p1.2,goto6
ljmp loop
return5:mov P3,#190
ljmp showdate
return1:lcall delay1 ;/;/ 跳往日期調(diào)整的按鍵防抖程序
jnb p1.1,return5
ljmp loop
return8:mov p3,#230
ljmp dsp1
jie: lcall delay1 ;// 跳往時(shí)間調(diào)整的按鍵防抖程序
jnb p1.0,return8
ljmp loop
;//*************鬧鈴校對(duì)程序************************************************8
cheak: mov a,46h
cjne a,#0,out
mov a,36h ;//鬧鈴1比對(duì),若成立就給P3口傳入#00h
cjne a,12h,out
; 時(shí)十位 時(shí)個(gè)位 分十位 分個(gè)位 秒十位 秒個(gè)位
mov a,37h ;;39h 38h 37h 36h 35h 34h
cjne a,15h,out
mov a,38h
cjne a,13h,out
mov a,39h
cjne a,14h,out
mov a,36h ;4dh存鬧鈴1后一分的 分個(gè)位
inc a
mov 4dh,a
clr p1.7
clr p0.0
out: ret
cheak1: mov a,46h
cjne a,#0,out22
mov a,49h ;//鬧鈴1比對(duì),若成立就給P3口傳入#00h
cjne a,12h,out22
; 時(shí)十位 時(shí)個(gè)位 分十位 分個(gè)位 秒十位 秒個(gè)位
mov a,4ah ;;39h 38h 37h 36h 35h 34h
cjne a,15h,out22 ; 4ch 4bh 4ah 49h 48h 47h
mov a,4bh
cjne a,13h,out22
mov a,4ch
cjne a,14h,out22
mov a,49h
inc a
mov 4eh,a
clr p1.7
clr p0.0
out22: ret
;***************關(guān)鬧鈴報(bào)警******************************************************
;關(guān)鬧鈴一
cheak2: mov a,46h
cjne a,#0,out33
mov a,4dh ;//鬧鈴1比對(duì),若成立就給P3口傳入#00h
cjne a,12h,out33
; 時(shí)十位 時(shí)個(gè)位 分十位 分個(gè)位 秒十位 秒個(gè)位
mov a,37h ;;39h 38h 37h 36h 35h 34h
cjne a,15h,out33 ; 4ch 4bh 4ah 49h 48h 47h
mov a,38h
cjne a,13h,out33
mov a,39h
cjne a,14h,out33
setb p1.7
setb p0.0
out33: ret
;關(guān)鬧鈴二
cheak3: mov a,46h
cjne a,#0,out44
mov a,4eh ;//鬧鈴1比對(duì),若成立就給P3口傳入#00h
cjne a,12h,out44
; 時(shí)十位 時(shí)個(gè)位 分十位 分個(gè)位 秒十位 秒個(gè)位
mov a,4ah ;;39h 38h 37h 36h 35h 34h
cjne a,15h,out44 ; 4ch 4bh 4ah 49h 48h 47h
mov a,4bh
cjne a,13h,out44
mov a,4ch
cjne a,14h,out44
setb p1.7
setb p1.6
out44: ret
;********整點(diǎn)報(bào)時(shí)校對(duì)程序******************************************************************
; 小時(shí) 分鐘
zcheak: mov a,46h
cjne a,#0,out
mov a,12h ; 14h 13h 15h 12h
cjne a,#0,out
mov a,15h
cjne a,#0,out
mov a,14h ;將原來(lái)存在13h,14h的小時(shí)轉(zhuǎn)為一個(gè)值存在a中
mov b,#10
mul ab
add a,13h
cjne a,#1,play1
mov p3,#0
jmp out1
play1: cjne a,#2,play2
mov p3,#10
jmp out1
play2: cjne a,#3,play3
mov p3,#20
jmp out1
play3: cjne a,#4,play4
mov p3,#30
jmp out1
play4: cjne a,#5,play5
mov p3,#40
jmp out1
play5: cjne a,#6,play6
mov p3,#50
jmp out1
play6: cjne a,#7,play7
mov p3,#60
jmp out1
play7: cjne a,#8,play8
mov p3,#70
jmp out1
play8: cjne a,#9,play9
mov p3,#80
jmp out1
play9: cjne a,#10,play10
mov p3,#90
jmp out1
play10: cjne a,#11,play11
mov p3,#100
jmp out1
play11: cjne a,#12,play12
mov p3,#110
jmp out1
play12: cjne a,#13,play13
mov p3,#120
jmp out1
play13: cjne a,#14,play14
mov p3,#130
jmp out1
play14: cjne a,#15,play15
mov p3,#140
jmp out1
play15: cjne a,#16,play16
mov p3,#150
jmp out1
play16: cjne a,#17,play17
mov p3,#160
jmp out1
play17: cjne a,#18,play18
mov p3,#170
jmp out1
play18: cjne a,#19,play19
mov p3,#180
jmp out1
play19: cjne a,#20,play20
mov p3,#190
jmp out1
play20: cjne a,#21,play21
mov p3,#200
jmp out1
play21: cjne a,#22,play22
mov p3,#210
jmp out1
play22: cjne a,#23,play23
mov p3,#220
jmp out1
play23: cjne a,#24,out1
mov p3,#230
out1: ret
;鬧鈴調(diào)整
notice: mov dptr,#tab1
mov a,34h
movc a,@a+dptr ; 時(shí)十位 時(shí)個(gè)位 分十位 分個(gè)位 秒十位 秒個(gè)位
mov 45h,a
; 39h 38h 37h 36h 35h 34h
;BCD碼 40h 41h 42h 43h 44h 45h
mov a,35h
movc a,@a+dptr ; 14h 13h 15h 12h
mov 44h,a
mov a,36h
movc a,@a+dptr
mov 43h,a
mov a,37h
movc a,@a+dptr
mov 42h,a
mov a,38h
movc a,@a+dptr
mov 41h,a
mov a,39h
movc a,@a+dptr
mov 40h,a
mov p2,45h
mov p0,#70h ;顯示時(shí)間
lcall delay
mov p2,44h
mov p0,#60h
lcall delay
mov p2,43h
mov p0,#40h
lcall delay
mov p2,42h
mov p0,#30h
lcall delay ; 40h 41h 42h 43h 44h 45h
mov p2,41h
mov p0,#10h
lcall delay
mov p2,40h
mov p0,#00h
lcall delay
mov p0,#50h
mov p2,#3fh
lcall delay
mov p0,#20h
mov p2,#3fh
lcall delay
jnb p1.2,goto7 ; p1.2跳回
jnb p1.1,addfen ;p1.1分調(diào)整
jnb p1.0,addshi ;時(shí)調(diào)整
jnb p1.3,light ;開(kāi)啟或關(guān)閉鬧鈴
mov p3,#0ffh
jmp notice
goto8: mov p3,#170
jmp notice1
goto7: lcall delay1
jnb p1.2,goto8
ljmp notice
light: lcall delay1
lcall delay1
cpl p1.5
ljmp notice
addfen: call delay1
lcall delay1
mov r5,37h ; 39h 38h 37h 36h 35h 34h
mov r2,39h
mov r1,38h
mov r0,36h
inc r0 ; 小時(shí) 分鐘 秒
cjne r0,#10,to ; r2 r1 r5 r0 r3 r4
mov r0,#0
inc r5 ; 14h 13h 15h 12h
cjne r5,#6,to
mov r5,#0
inc r1
cjne r1,#10,tiao
mov r1,#0
inc r2
tiao: cjne r2,#2,to
cjne r1,#4,to
mov r2,#0
mov r1,#0
to: mov 36h,r0
mov 38h,r1
mov 39h,r2
mov 37h,r5
ljmp notice
addshi: call delay1
lcall delay1
mov r5,37h ; 39h 38h 37h 36h 35h 34h
mov r2,39h
mov r1,38h
mov r0,36h
inc r1
cjne r1,#10,tiao1
mov r1,#0
inc r2
tiao1: cjne r2,#2,to1
cjne r1,#4,to1
mov r2,#0
mov r1,#0
to1: mov 36h,r0
mov 38h,r1
mov 39h,r2
mov 37h,r5
ljmp notice
;鬧鈴二設(shè)定
notice1:mov dptr,#tab1
mov a,34h
movc a,@a+dptr ; 時(shí)十位 時(shí)個(gè)位 分十位 分個(gè)位 秒十位 秒個(gè)位
mov 45h,a
; 39h 38h 37h 36h 35h 34h
; 4ch 4bh 4ah 49h 48h 47h
;BCD碼 40h 41h 42h 43h 44h 45h
mov a,35h
movc a,@a+dptr ; 14h 13h 15h 12h
mov 44h,a
mov a,49h
movc a,@a+dptr
mov 43h,a
mov a,4ah
movc a,@a+dptr
mov 42h,a
mov a,4bh
movc a,@a+dptr
mov 41h,a
mov a,4ch
movc a,@a+dptr
mov 40h,a
mov p2,45h
mov p0,#70h ;顯示時(shí)間
lcall delay
mov p2,44h
mov p0,#60h
lcall delay
mov p2,43h
mov p0,#40h
lcall delay
mov p2,42h
mov p0,#30h
lcall delay ; 40h 41h 42h 43h 44h 45h
mov p2,41h
mov p0,#10h
lcall delay
mov p2,40h
mov p0,#00h
lcall delay
mov p0,#50h
mov p2,#3fh
lcall delay
mov p0,#20h
mov p2,#3fh
lcall delay
jnb p1.2,goto9 ; p1.2跳回
jnb p1.1,addfen1 ;p1.1分調(diào)整
jnb p1.0,addshi1 ;時(shí)調(diào)整
jnb p1.3,light1
mov p3,#0ffh
jmp notice1
goto10: mov p3,#240
jmp loop
goto9: lcall delay1
jnb p1.2,goto10
ljmp notice1
light1: lcall delay1
lcall delay1
cpl p1.6
jmp notice1
addfen1:call delay1
lcall delay1
mov r5,4ah ; 39h 38h 37h 36h 35h 34h
mov r2,4ch ; 4ch 4bh 4ah 49h 48h 47h
mov r1,4bh
mov r0,49h
inc r0 ; 小時(shí) 分鐘 秒
cjne r0,#10,to3 ; r2 r1 r5 r0 r3 r4
mov r0,#0
inc r5 ; 14h 13h 15h 12h
cjne r5,#6,to3
mov r5,#0
inc r1
cjne r1,#10,tiao3
mov r1,#0
inc r2
tiao3: cjne r2,#2,to3
cjne r1,#4,to3
mov r2,#0
mov r1,#0
to3: mov 49h,r0
mov 4bh,r1
mov 4ch,r2
mov 4ah,r5
ljmp notice1
addshi1:call delay1
lcall delay1
mov r5,4ah ; 39h 38h 37h 36h 35h 34h
mov r2,4ch ; 4ch 4bh 4ah 49h 48h 47h
mov r1,4bh
mov r0,49h
inc r1
cjne r1,#10,tiao4
mov r1,#0
inc r2
tiao4: cjne r2,#2,to4
cjne r1,#4,to4
mov r2,#0
mov r1,#0
to4: mov 49h,r0
mov 4bh,r1
mov 4ch,r2
mov 4ah,r5
ljmp notice1
dsp1:
mov r5,15h ; 小時(shí) 分鐘 秒
mov r2,14h ; 14h 13h 15h 12h
mov r1,13h
mov r0,12h
;/* mov a,r6 ;
; mov b,#10
; div ab
; mov dptr,#tab1 ; r2 r1 r5 r0 r3 r4
; movc a,@a+dptr
; mov r3,a
;
; mov a,b
; movc a,@a+dptr
; mov r4,a
; */
mov dptr,#tab1
mov a,r0
movc a,@a+dptr ;計(jì)算BCD碼
mov r0,a
mov a,r5
movc a,@a+dptr
mov r5,a
mov a,r1
movc a,@a+dptr
mov r1,a
mov a,r2
movc a,@a+dptr
mov r2,a
mov p2,r4
mov p0,#70h ;顯示時(shí)間
lcall delay
mov p2,r3
mov p0,#60h
lcall delay
mov p2,r0
mov p0,#40h
lcall delay
mov p2,r5
mov p0,#30h
lcall delay
mov p2,r1
mov p0,#10h
lcall delay
mov p2,r2
mov p0,#00h
lcall delay
mov p0,#50h
mov p2,#3fh
lcall delay
mov p0,#20h
mov p2,#3fh
lcall delay
lcall delay
lcall delay
lcall delay
lcall delay
jnb p1.0,return2 ; p1.0跳回
jnb p1.1,fen ;p1.1分調(diào)整
jnb p1.2,shi
jnb p1.3,mon
mov p3,#0ffh
ljmp dsp1
return9:mov p3,#240;
jmp loop
return2:lcall delay1
jnb p1.0,return9
jmp dsp1
mon: mov p3,#222
call delay1
jmp dsp1
fen: call delay1
lcall delay1
mov r5,15h
mov r2,14h
mov r1,13h
mov r0,12h
inc r0 ; 小時(shí) 分鐘 秒
cjne r0,#10,q ; r2 r1 r5 r0 r3 r4
mov r0,#0
inc r5
cjne r5,#6,q
mov r5,#0
inc r1
cjne r1,#10,next2
mov r1,#0
inc r2
next2: cjne r2,#2,q
cjne r1,#4,q
mov r2,#0
mov r1,#0
q: mov 12h,r0
mov 13h,r1
mov 14h,r2
mov 15h,r5
ljmp dsp1
shi: call delay1
lcall delay1
mov r5,15h
mov r2,14h ; 小時(shí) 分鐘 秒
mov r1,13h ; r2 r1 r5 r0 r3 r4
mov r0,12h
inc r1
cjne r1,#10,next3
mov r1,#0
inc r2
next3: cjne r2,#2,pq
cjne r1,#4,pq
mov r2,#0
mov r1,#0
pq: mov 12h,r0
mov 13h,r1
mov 14h,r2
mov 15h,r5
ljmp dsp1
showdate:mov a,20h ; 日 月 年個(gè)位 年十位 年百位 年千位
mov b,#10 ; 20h 21h 22h 23h 24h 25h
div ab
mov dptr,#tab1
movc a,@a+dptr
mov 26h,a ;轉(zhuǎn)化出來(lái)的BCD碼
mov a,b ; 日個(gè)位 日十位
movc a,@a+dptr ; 27h 26h
mov 27h,a
mov a,21h
mov b,#10
div ab ; 月個(gè)位 月十位
movc a,@a+dptr
mov 28h,a ; 29h 28h
mov a,b
movc a,@a+dptr
mov 29h,a
mov a,22h
movc a,@a+dptr ; 年個(gè)位 年十位 年百位 年千位
mov 30h,a ; 22h 23h 24h 25h
;BCD碼 30h 31h 32h 33h
mov a,23h
movc a,@a+dptr
mov 31h,a
mov a,24h
movc a,@a+dptr
mov 32h,a
mov a,25h
movc a,@a+dptr
mov 33h,a
jnb p1.1,goto2
jnb p1.2,goto4
mov p3,#0ffh
dsp5: mov p2,27h
mov p0,#70h ;年月日的BCD碼
lcall delay ;日個(gè)位 日十位 月個(gè)位 月十位 年個(gè)位 年十位 年百位 年千位
;27h 26h 29h 28h 30h 31h 32h 33h
mov p2,26h
mov p0,#60h
lcall delay
mov p2,28h
mov p0,#40h
lcall delay
mov p2,30h
mov p0,#30h
lcall delay
mov p2,32h
mov p0,#10h
lcall delay
mov p2,33h
mov p0,#00h
lcall delay
mov p0,#50h
mov p2,29h
lcall delay
mov p0,#20h
mov p2,31h
lcall delay
jmp showdate
goto3: mov p3,#200
jmp date ;跳轉(zhuǎn)到日期設(shè)置中
goto2: lcall delay1
jnb p1.1,goto3
ljmp showdate
goto4: lcall delay1
jmp loop
date: mov a,20h ; 日 月 年個(gè)位 年十位 年百位 年千位
mov b,#10 ; 20h 21h 22h 23h 24h 25h
div ab
mov dptr,#tab1
movc a,@a+dptr
mov 26h,a ;轉(zhuǎn)化出來(lái)的BCD碼
mov a,b ; 日個(gè)位 日十位
movc a,@a+dptr ; 27h 26h
mov 27h,a
mov a,21h
mov b,#10
div ab ; 月個(gè)位 月十位
movc a,@a+dptr
mov 28h,a ; 29h 28h
mov a,b
movc a,@a+dptr
mov 29h,a
mov a,22h
movc a,@a+dptr ; 年個(gè)位 年十位 年百位 年千位
mov 30h,a ; 22h 23h 24h 25h
;BCD碼 30h 31h 32h 33h
mov a,23h
movc a,@a+dptr
mov 31h,a
mov a,24h
movc a,@a+dptr
mov 32h,a
mov a,25h
movc a,@a+dptr
mov 33h,a
jnb p1.1,return
jnb p1.0,adddate
jnb p1.2,decdate
mov p3,#0ffh
dsp2: mov p2,27h
mov p0,#70h ;年月日的BCD碼
lcall delay ;日個(gè)位 日十位 月個(gè)位 月十位 年個(gè)位 年十位 年百位 年千位
;27h 26h 29h 28h 30h 31h 32h 33h
mov p2,26h
mov p0,#60h
lcall delay
mov p2,28h
mov p0,#40h
lcall delay
mov p2,30h
mov p0,#30h
lcall delay
mov p2,32h
mov p0,#10h
lcall delay
mov p2,33h
mov p0,#00h
lcall delay
mov p0,#50h
mov p2,29h
lcall delay
mov p0,#20h
mov p2,31h
lcall delay
jmp date
adddate:lcall delay1
lcall delay1 ;日加一
inc 20h
mov a,20h
cjne a,#32,over
mov 20h,#0
over: ljmp date
decdate:lcall delay1 ;日減一
lcall delay1
dec 20h
mov a,20h
cjne a,#-1,over
mov 20h,#31
jmp over
return6:mov p3,#210
jmp r ;跳轉(zhuǎn)到日
return: lcall delay1
mov p3,#230
jnb p1.1,return6
ljmp date
r: mov a,20h
mov b,#10 ;日 月 年個(gè)位 年十位 年百位 年千位
div ab ;20h 21h 22h 23h 24h 25h
mov dptr,#tab1
movc a,@a+dptr
mov 26h,a
mov a,b
movc a,@a+dptr
mov 27h,a
mov a,21h
mov b,#10
div ab
movc a,@a+dptr
mov 28h,a
mov a,b
movc a,@a+dptr
mov 29h,a
mov a,22h
movc a,@a+dptr
mov 30h,a
mov a,23h
movc a,@a+dptr
mov 31h,a
mov a,24h
movc a,@a+dptr
mov 32h,a
mov a,25h
movc a,@a+dptr
mov 33h,a
jnb p1.1,back1
jnb p1.0,addri
jnb p1.2,decri
mov p3,#0ffh
dsp3: mov p2,27h
mov p0,#70h
lcall delay
mov p2,26h
mov p0,#60h
lcall delay
mov p2,28h
mov p0,#40h
lcall delay
mov p2,30h
mov p0,#30h
lcall delay
mov p2,32h
mov p0,#10h
lcall delay
mov p2,33h
mov p0,#00h
lcall delay
mov p0,#50h
mov p2,29h
lcall delay
mov p0,#20h
mov p2,31h
lcall delay
jmp r
addri: lcall delay1
lcall delay1
inc 21h
mov a,21h
cjne a,#13,over1
mov 21h,#1
over1: ljmp r
decri: lcall delay1
lcall delay1
dec 21h
mov a,21h
cjne a,#0,over1
mov 21h,#12
jmp over1
back: mov P3,#220 ;跳轉(zhuǎn)年調(diào)整,此倆個(gè)back 為按鍵防抖
jmp nian
back1: lcall delay1
jnb p1.1,back
ljmp dsp3
nian: mov a,20h ; 日 月 年個(gè)位 年十位 年百位 年千位
mov b,#10 ; 20h 21h 22h 23h 24h 25h
div ab
mov dptr,#tab1
movc a,@a+dptr
mov 26h,a ;轉(zhuǎn)化出來(lái)的BCD碼
mov a,b ; 日個(gè)位 日十位
movc a,@a+dptr ; 27h 26h
mov 27h,a
mov a,21h
mov b,#10
div ab ; 月個(gè)位 月十位
movc a,@a+dptr
mov 28h,a ; 29h 28h
mov a,b
movc a,@a+dptr
mov 29h,a
mov a,22h
movc a,@a+dptr ; 年個(gè)位 年十位 年百位 年千位
mov 30h,a ; 22h 23h 24h 25h
;BCD碼 30h 31h 32h 33h
mov a,23h
movc a,@a+dptr
mov 31h,a
mov a,24h
movc a,@a+dptr
mov 32h,a
mov a,25h
movc a,@a+dptr
mov 33h,a
dsp4: mov p2,27h
mov p0,#70h ;年月日的BCD碼
lcall delay ;日個(gè)位 日十位 月個(gè)位 月十位 年個(gè)位 年十位 年百位 年千位
;27h 26h 29h 28h 30h 31h 32h 33h
mov p2,26h
mov p0,#60h
lcall delay
mov p2,28h
mov p0,#40h
lcall delay
mov p2,30h
mov p0,#30h
lcall delay
mov p2,32h
mov p0,#10h
lcall delay
mov p2,33h
mov p0,#00h
lcall delay
mov p0,#50h
mov p2,29h
lcall delay
mov p0,#20h
mov p2,31h
lcall delay
jnb p1.1,goto
jnb p1.0,addnian
jnb p1.2,decnian
mov p3,0ffh
jmp nian
addnian:lcall delay1
lcall delay1 ;年個(gè)位 年十位 年百位 年千位
inc 22h ;22h 23h 24h 25h
mov a,22h
cjne a,#10,over4
mov 22h,#0
inc 23h
mov a,23h
cjne a,#10,over4
mov 23h,#0
inc 24h
mov a,24h
cjne a,#10,over4
mov 24h,#0
inc 25h
mov a,25h
cjne a,#10,over4
mov 25h,#0
over4: jmp nian
decnian:lcall delay1
lcall delay1 ;年個(gè)位 年十位 年百位 年千位
dec 22h ;22h 23h 24h 25h
mov a,22h
cjne a,#-1,over4
mov 22h,#0
dec 23h
mov a,23h
cjne a,#-1,over4
mov 23h,#0
dec 24h
mov a,24h
cjne a,#-1,over4
mov 24h,#0
dec 25h
mov a,25h
cjne a,#-1,over4
mov 25h,#0
jmp over4
goto1: mov p3,#240
jmp loop ;跳轉(zhuǎn)到日
goto: lcall delay1
jnb p1.1,goto1
ljmp nian
time: mov r5,15h
mov r2,14h ;秒脈沖得到后,軟件計(jì)算時(shí)間
mov r1,13h
mov r0,12h
inc r7
mov a,r7
cjne a,#20,T_ret
inc r6
cjne r6,#60,t
mov r6,#0
inc r0
cjne r0,#10,t
mov r0,#0
inc r5
cjne r5,#6,t
mov r5,#0
inc r1
cjne r1,#10,next1
mov r1,#0
inc r2
next1: cjne r2,#2,t
cjne r1,#4,t
mov r2,#0
mov r1,#0
inc 20h
mov p3,#222
call delay1
mov a ,20h
cjne a,#32,t
mov 20h,#1
inc 21h
mov a,21h
cjne a,#13,t
mov 21h,#1
inc 22h
;/* cjne r1,#24,ask
; mov r1,#0
;ask: mov dptr,#tab1
; mov a,r1
; mov b,#10
; div ab
; movc a,@a+dptr
; add a,r2
; mov r2,a
; mov a,b
; movc a,@a+dptr
; add a,r1
; mov r1,a */
t: mov r7,#0
T_ret: mov TH0,#03ch
mov TL0,#0b0h
mov 12h,r0
mov 13h,r1
;將算出來(lái)的時(shí)間賦回地址中
mov 14h,r2 ; 小時(shí) 分鐘 秒
; r2 r1 r5 r0 r3 r4
mov 15h,r5
reti
delay: mov 10h,#4
d3: mov 11h,#5
d4: djnz 11h,d4
djnz 10h,d3
ret
delay1: mov 10h,#0bfh
d1: mov 11h,#0ffh
d2: djnz 11h,d2
djnz 10h,d1
ret
tab1: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,00h,90h
end
(3)控制附機(jī)的的程序
#include"reg52.h"
sbit warmer=P2^4;
sbit led_run=P2^0;
sbit k_power=P2^5;
sbit P3_0=P3^0 ;
sbit P3_2=P3^2 ;
sbit P3_3=P3^3 ;
sbit P3_4=P3^4 ;
sbit P3_5=P3^5 ;
sbit day=P2^7 ;
sbit ge=P3^7;
sbit shi=P3^6;
sbit DQ =P3^1; //定義通信端口
int play() //語(yǔ)音芯片控制位
{
P3_0=1;
P3_2=0;
P3_3=0;
P3_4=0;
P3_5=0;
P3_3=1;
}
//延時(shí)函數(shù)
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
//0, 1, 2 3 4 5 6 7 8 9
void delay(unsigned int i)
{
while(i--);
}
//初始化函數(shù)
Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ復(fù)位
delay(8); //稍做延時(shí)
DQ = 0; //單片機(jī)將DQ拉低
delay(80); //精確延時(shí) 大于 480us
DQ = 1; //拉高總線
delay(14);
x=DQ; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗
delay(20);
}
//讀一個(gè)字節(jié)
ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 給脈沖信號(hào)
dat>>=1;
DQ = 1; // 給脈沖信號(hào)
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}
//寫(xiě)一個(gè)字節(jié)
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay(5);
DQ = 1;
dat>>=1;
}
delay(4);
}
//讀取溫度
ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned char t=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作
WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
Init_DS18B20();
WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度
a=ReadOneChar(); //讀取溫度值低位
b=ReadOneChar(); //讀取溫度值高位
a=a>>4; //低位右移4位,舍棄小數(shù)部分
t=b<<4; //高位左移4位,舍棄符號(hào)位
t=t|a;
return(t);
}
void display_tempmain(unsigned char i) //主程序溫度顯示函數(shù)
{
P2=tab[i/10];
shi=0;
ge=1;
day=1;
delay(500);
P2=tab[i%10];
shi=1;
ge=0;
day=1;
delay(500);
}
void main(void)
{unsigned int temp;
int play();
unsigned int i,j=2;
while(1) //主循環(huán)
{ temp=ReadTemperature();
display_tempmain(temp);
P2=tab[j];
shi=1;
ge=1;
day=0;
if(P0==222){
j++;
if(j==8){
j=1;
}
for(i=40000;i>0;i--);
}
if(P0==0x00){
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
//語(yǔ)音地址 0 10 20 30 40 50 60 70 80 90 (十進(jìn)制)
P1=0x00;
play();
//語(yǔ)音地址 100 110 120 130 140 150 160 170 180 190 200 210 220 230
}
if(P0==10){ //跳出 現(xiàn)在時(shí)刻
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
// 240 250
P1=10;
play();
}
if(P0==20){
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
P1=20;
play();
}
if(P0==30){
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
P1=30 ;
play();
}
if(P0==40){
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
P1=40;
play();
}
if(P0==50){
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
P1=50;
play();
}
if(P0==60){
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
P1=60 ;
play();
}
if(P0==70){
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
P1=70 ;
play();
}
if(P0==80){
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
P1=80;
play();
}
if(P0==90){
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
P1=90 ;
play();
}
if(P0==100){
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
P1=100;
play();
}
if(P0==110){
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
P1=110;
play();
}
if(P0==120){
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
P1=120;
play();
}
if(P0==130){
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
P1=130;
play();
}
if(P0==140){
P1=250;
play();
for(i=60000;i>0;i--);
for(i=60000;i>0;i--);
P1=140 ;
play();
}
if(P0==150){
P1=150;
play();
}
if(P0==170){
P1=170 ;
play();
}
if(P0==190){
P1=190 ;
play();
}
if(P0==200){
P1=200;
play();
}
if(P0==210){
P1=210;
play();
}
if(P0==220){
P1=220;
play();
}
if(P0==230){
P1=230;
play();
}
if(P0==240){
P1=240;
play();
}
Power Management Techniques and Calculation
Relevant Devices
This application note applies to the following devices: C8051F000, C8051F001, C8051F002, C8051F005, C8051F006, C8051F010, C8051F011, C8051F012, C8051F012, C8051F015, C8051F016, and C8051F017.
Introduction
This application note discusses power management techniques and methods of calculating power in a Cygnet C8051F00x and C8051F01x Sock. Many applications will have strict power requirements, and there are several methods of lowering the rate of power consumption without sacrificing performance. Calculating the predicted power use is important to characterize the system’s power supply requirements.
Key Points
• Supply voltage and system clock frequency strongly affect power consumption.
• Cygnet’s Sock’s feature power management modes: IDLE and STOP.
• Power use can be calculated as a function of system clock frequency, supply voltage, and enabled peripherals.
Power Saving Methods
CMOS digital logic device power consumption is affected by supply voltage and system clock (SYSCLK) frequency. These parameters can be adjusted to realize power savings, and are readily controlled by the designer. This section discusses these parameters and how they affect power usage.
Reducing System Clock Frequency
In CMOS digital logic devices, power consumption is directly proportional to system clock (SYSCLK) frequency: power=CV2ƒ, where C is CMOS load capacitance, V is supply voltage, and ƒ is SYSCLK frequency.
Equation 1.CMOS Power Equation
The system clock on the C8051Fxxx family of devices can be derived from an internal oscillator or an external source. External sources may be a CMOS clock, RC circuit, capacitor, or crystal oscillator. For information on configuring oscillators, see application note: “AN02 - Configuring the Internal and External Oscillators.” The internal oscillator can provide four SYSCLK frequencies: 2, 4, 8, and16 MHz. Many different frequencies can be achieved using the external oscillator.
To conserve power, a designer must decide what the fastest needed SYSCLK frequency and required accuracy is for a given application. A design may require a constant SYSCLK frequency during all device operations. In this case, the designer will choose the lowest possible frequency required, and use the oscillator configuration that consumes the least power. Typical applications include serial communications, and periodic sampling with an ADC that must be performed.
Some operations may require high speed operation, but only in short, intermittent intervals. This is sometimes referred to as “burst” operation. In the C8051Fxxx, the SYSCLK frequency can be changed at anytime. Thus, the device can operate at low frequency until a condition occurs that requires high frequency operation.
Two examples of alternating between SYSCLK sources are (1) an internal oscillator/external crystal configuration, and (2) an external crystal/RC oscillator configuration. If the device is used for occasional high speed data conversion, and a real-time clock is used for time-stamping the data, a combination internal oscillator and external crystal would be ideal. During sampling operations, the high speed internal oscillator would be used. When sampling is complete, the device could then use an external 32 kHz crystal to maintain the real-time clock. Once high speed operations are required again, the device switches to the internal oscillator as necessary (see Figure 1below). An example of this procedure is illustrated in application note “AN008 Implementing a Real-Time Clock”.
The crystal oscillator and internal oscillator may be operated simultaneously and each selected as the SYSCLK source in software as desired. To reduce supply current, the crystal may also be shutdown when using the internal oscillator. In this case, when switching from the internal to external oscillator the designer must consider the start-up delay when switching the SYSCLK source. The C8051F0xx devices have a flag that is set when the external clock signal is valid (XTLVLD bit in the OSCXCN register) to indicate the oscillator is running and stable. This flag is polled before switching to the external oscillator. Note that other operations can continue using the internal oscillator during the crystal start-up time.
Some applications require intermittent high speed and accuracy (e.g., ADC sampling and data processing), but have lower frequency and accuracy requirements at other times (e.g., waiting for sampling interval), a combination of an external oscillator and RC circuit can be useful. In this case, the external RC oscillator is used to derive the lower frequency SYSCLK source, and the crystal is used for high frequency operations. The RC circuit requires a connection to VDD (voltage source) to operate.
Because this connection could load the crystal oscillator circuit while the crystal is in operation, we connect the RC circuit to a general purpose port pin (see Figure 2 below). When the RC circuit is in use, the port pin connection is driven high (to VDD) by selecting its output mode to “push-pull” and writing a ‘1’ to the port latch. When the crystal oscillator is being used, the port pin is placed in a ‘hi- Z’ condition by configuring the output mode of the port to “open-drain” and writing a ‘1’ to the port latch. Note the RC circuit may take advantage of the existing capacitors used for the crystal oscillator.
The start-up of the RC-circuit oscillator is nearly instantaneous. However, there is a notable start-up time for the crystal. Therefore, switching from the RC oscillator to the external crystal oscillator using the following procedure:
1. Switch to the internal oscillator.
2. Configure the port pin used for the RC circuit voltage supply as open-drain and write a ‘1’ to the port pin (Hi-Z condition).
3. Start the crystal (Set the XFCN bits).
4. Wait for 1 ms.
5. Poll for the External Crystal Valid Bit (XTLVLD --> ‘1’).
6. Switch to the external oscillator.
Switch from the external crystal oscillator to the RC oscillator as follows:
1. Switch to the internal oscillator.
2. Shutdown the crystal (clear the XFCN bits).
3. Drive the voltage supply port pin high (to VDD) by putting the port pin in “push pull” mode and writing a ‘1’ to its port latch.
4. Switch back to the external oscillator.
Supply Voltage
The amount of current used in CMOS logic is directly proportional to the voltage of the power supply. The power consumed by CMOS logic is proportional the power supply voltage squared (See Equation 1). Thus, power consumption may be reduced by lowering the supply voltage to the device. The C8051Fxxx families of devices require a supply voltage of 2.7-3.6 Volts. Thus, to save power, it is recommended to use a 3.0 volt regulator instead of a 3.3 volt regulator for power savings.
CIP-51 Processor Power Management Modes
The C8051 processor has two modes which can be used for power management. These modes are IDLE and STOP.
IDLE Mode
In IDLE Mode, the CPU and FLASH memory are taken off-line. All peripherals external to the CPU remain active, including the internal clocks. The CPU exits IDLE Mode when an enabled interrupt or reset occurs. The CPU is placed in IDLE Mode by setting the Idle Mode Select Bit (PCON.0) to ‘1’.
When the IDLE Mode Select Bit is set to ‘1’, the CPU enters IDLE Mode once the instruction that sets the bit has executed. An asserted interrupt will clear the IDLE Mode Select Bit and the CPU will vector to service the interrupt. After a return from interrupt (RETI), the CPU will return to the next instruction following the one that had set the IDLE Mode Select Bit. If a reset occurs while in IDLE Mode, the normal reset sequence will occur and the CPU will begin executing code at memory location 0x0000.
As an example, the CPU can be placed in IDLE while waiting for a Timer 2 overflow to
Initiate a sample/conversion in the ADC. Once the conversion and sample processing is complete, the ADC end-of-conversion interrupt wakes the CPU from IDLE Mode and processes the sample. After the sample processing is complete, the CPU is placed back into IDLE Mode to save power while waiting for the next interrupt.
As another example, the CPU may wait in IDLE Mode to save power until an external
Interrupt signal is used to “wake up” the CPU as needed. Upon receiving an external interrupt, the CPU will exit IDLE Mode and vector to the corresponding interrupt vector (e.g., / INT0 or /INT1).
STOP Mode
The C8051 STOP Mode is used to shut down the CPU and oscillators. This will effectively shut down all digital peripherals as well. All analog peripherals must be shutdown by software prior to entering STOP Mode. The processor exits STOP Mode only by an internal or external reset. Thus, STOP Mode saves power by reducing the SYSCLK frequency to zero.
Note that the Missing Clock Detector will cause an internal reset (if enabled) that will terminate STOP Mode. Thus, the Missing Clock Detector should be disabled prior to entering STOP Mode if the CPU is to be in STOP Mode longer than the Missing Clock Detector timeout (100 μs).
The C8051 processor is placed in STOP Mode by setting the STOP Mode Select Bit (PCON.1) to ‘1’. Upon reset, the CPU performs the normal reset sequence and begins executing code at 0x0000. Any valid RESET source will exit STOP Mode. Sources of reset to exit STOP Mode are External Reset (/RST), Missing Clock Detector, Comparator 0, and the External ADC Convert Start (/CNVSTR).
As an example, the CPU may be placed in STOP Mode for a period to save power when no device operation is required. When the device is needed, Comparator 0 reset could be used to “wake up” the device.
Generally, a power conscious design will use the lowest voltage supply, lowest SYSCLK frequency, and will use Power Management Modes when possible to maximize power savings. Most of these can be implemented or controlled in software.
Calculating Power Consumption
There are two components of power consumption in Cygnet’s C8051F00x and C8051F01x family of devices: analog and digital. The analog component of power consumption is nearly constant for all SYSCLK frequencies. The digital component of power consumption changes considerably with SYSCLK frequency. The digital and analog components are added to determine the total power consumption.
The current use calculations presented in this application note apply to the C8051F00x and C8051F01x (‘F000, 01, 02, 03, 05, 06, 10, 11, 12, 15, and 16) family of Cygnet devices.
The data sheet section, “Global DC Electrical Characteristics” contains various supply current values for different device conditions. The current values are separated into digital (at three example frequencies) and analog components. The analog numbers presented are values with all analog peripherals active. Supply current values for each analog peripheral can be found in the data sheet section for the peripheral.
For convenience, the Global DC Electrical Characteristics for the C8051F00x and C8051F01x family of devices are presented in the table below.
Internal vs. External Oscillator
Besides using lower SYSCLK frequencies, the designer can realize power savings by making smart SYSCLK source choices. The internal oscillator will typically consume 200μA of current supplied from the digital power supply. The current used to drive an external oscillator can vary. The drive current (supplied from the analog power supply) for an external source, such as a crystal, is set in software by configuring the XFCN bits in the External Oscillator Control Register (OSCXCN). Thus, at higher drive currents the user may save power by using the internal oscillator. However, at the lowest XFCN setting the external oscillator will use less than 1μA which is less current than used by the internal oscillator. Some typical measured current values are listed below. These measurements may vary from device to device. This drive level is kept as low as possible
To minimize power consumption, but must be high enough to start the external oscillator. The following table lists the current vs. External Oscillator Frequency Control Bit settings.
Digital Peripherals
For rough calculations, a good rule of thumb is to assume a 1mA/MHz of operating current (digital) + 1mA if the analog components (ADC, comparators, DAC, VREF, etc.) are enabled. This rule of thumb assumes a 3.6 V supply voltage. A lower supply voltage will reduce power consumption. At 2.7 V, the rule of thumb is 0.5mA/MHz (in NORMAL mode). The rules of thumb for rough calculations are presented in the table below:
Analog Peripherals
The individual supply current values for each analog peripheral are posted in the data sheet section for that component (typically near the end of the section). It is recommended to disable all peripherals not in use to save power. For convenience, the C8051F00x and C8051F10x analog peripherals supply current values are listed below:
Calculating Total Current
When the required SYSCLK frequency, supply voltage, and peripherals have been determined, the total supply current can be estimated. To calculate the total supply current, the analog peripheral current use (found by adding the currents of each of the enabled analog peripherals) is added to the digital current use (calculated for a given frequency, power mode, and supply voltage). If all of the analog peripherals are enabled, analog current use is about 1mA.
Example Calculations
The following are examples of supply current calculations. Each application may use different power modes, SYSCLK frequencies, and peripherals at different times. Thus, power management specifications may require several different supply current calculations. The digital component and analog components of current use are found separately, and then added together for the total.
Example 1
The C8051F000 device is being used in a system with VDD=3.6 V. An ADC is sampling parameters and processing the sample for an output to one DAC. Because of the sampling and processing requirements of the application, SYSCLK frequency is 16 MHz using the internal oscillator.
Analog Components
Peripheral Supply Current (μ A)
ADC 450
VREF (internal) 50
Internal Oscan. 200
One DAC 110
VDD monitor 15
Total Analog 825
Digital Component
In NORMAL Mode @ 16 MHz;
1mA/M Hz * 16 MHz = 16mA
Total
825μA (analog) + 16mA (digital)= 16.8mA
Example 2
Assume we are still estimating the supply current in the same application in Example 1. If the sample processing is a burst operation (i.e., intermittent need for sampling and conversions), we may choose to place the CIP-51 in IDLE Mode to allow a Timer to wake-up the CIP-51 after a specified interval. In this case, the average supply current can be calculated in order to estimate power requirements. The device will switch between NORMAL Mode (for sampling and data conversion) and IDLE Mode (between sample processing operations). The switch between IDLE and NORMAL Modes (and supply current values) will happen in a cycle with a period equal to the sampling rate. (See Figure 3 below). This will allow us to calculate average supply current, after we calculate the supply current in IDLE Mode.
Analog Component
Analog peripherals are disabled during the IDLE Mode period between sample processing and output. Thus, analog current consumption is just:
VDD monitor = 15μA.
Digital Component
In IDLE Mode @ 16 MHz;
0.65mA/MHz * 16 MHz = 10.4mA
Total
The analog component would be considered negligible in most applications, thus, the total is just the digital component:
50μA (analog) + 10.4mA (digital) = 10.4mA
Now that we have calculated IDLE Mode supply current and NORMAL Mode supply current (in Example 1), we must calculate the time we spend in each mode to find the average current the device will use.
Assuming the ADC is in low-power tracking mode and at the maximum SAR conversion
Clock of 2 MHz (ADC set for SAR clock = SYSCLK/8), and we desire a 10 kHz sampling rate. The period of the power cycle in Figure 3 is 1/10,000 (sample rate) = 100μs.
The time in NORMAL Mode will be the ADC tracking/conversion time, and the time to store the value in memory. In low-power tracking mode, it will take 3 SAR clocks for tracking, and 16 SAR clocks for conversion. 19 SAR clocks at 2 MHz will take 9.5μs. To store the number will take to system clock cycles, or 0.125μs. To enter NORMAL Mode, a move instruction is executed, taking 3 SYSCLK cycles which takes 0.188μs. Thus, the total time in NORMAL Mode is 9.5 μs+0.125 μs+0.188μs = 9.8μs.
Because the ADC sample period is 100μs, the time we may be in IDLE Mode during the power cycle is 100μs - 9.8μs (time in NORMAL Mode) = 90.2μs. By integrating the area under the curve in Figure 3 for one period (100μs), and dividing that number by the period, the average supply current is 11mA.
Example 3
If the oscillator frequency were lowered while in IDLE Mode (in Example 2) to 32 kHz using an external crystal for additional power savings, the current use would be:
The external oscillator control bits will be set to XFCN = 000. This uses 0.6μA of analog current. (0.65mA *.032 MHz) + 0.6μA = 21μA
This is a dramatic difference from Example 2’s IDLE Mode at 16 MHz, by simply reducing oscillator frequency.
Continuing with the average supply current calculation in Example 2 (with 6 extra SYSCLK cycles in NORMAL Mode to lower the frequency), the average supply current would be 1.7mA!
Example 4
In this application, the C8051F000 is being used to sample a parameter using the ADC and store samples in memory, with high accuracy timing of samples required. For more accurate timing, the SYSCLK is derived from an external 18.432 MHz crystal oscillator. To save power, the designer has decided to use a supply voltage of 3.0 V. Timer 2 is used to time the ADC sampling intervals.
Digital Component
In NORMAL Mode @ 18.432 MHz;
0.8mA/MHz * 18.432 MHz = 14.7mA
Total Current Use
3.4mA (analog)+14.7mA (digital)= 18.1mA
Example 4 in IDLE Mode
Placing the application in IDLE Mode with the ADC disabled during intervals that sampling is not required (no CIP-51 operations are needed; digital peripherals continue to operate) will save power if the sampling operation is a burst operation. In IDLE Mode, the digital current consumption is only 0.6mA/MHz, with no ADC, thus the current consumption at 18.432 MHz =11.1 miscalculating the average supply current for one sample period (similarly to Example 2, assuming a 10 kHz sampling rate and low-power tracking mode), the average current is estimated to be 11.9mA
電源管理技術(shù)及計(jì)算
本設(shè)計(jì)應(yīng)用于下列器件
C8051F000、C8051F001、C8051F002、C8051F005、C8051F006、C8051F010、C8051F011、C8051F012、C8051F015、C8051F016、C8051F017
1 引言
本應(yīng)用筆記討論電源管理技術(shù)及計(jì)算C8051F00x和C8051F01x Sock中的功率消耗的方法。很多應(yīng)用系統(tǒng)對(duì)功耗有嚴(yán)格的要求,也存在幾種不以犧牲性能為代價(jià)的降低功耗的方法,計(jì)算預(yù)計(jì)功耗對(duì)于說(shuō)明系統(tǒng)的供電要求是很重要的 。
2 關(guān)鍵點(diǎn)
供電電壓和系統(tǒng)時(shí)鐘頻率對(duì)功率消耗有很大影響 。
Cygnet的Sock有兩種電源管理方式等待和停止。
功率消耗可以作為系統(tǒng)時(shí)鐘電源電壓和被允許的外設(shè)的函數(shù)來(lái)計(jì)算。
3 降低功耗的方法
CMOS數(shù)字邏輯器件的功耗受供電電壓和系統(tǒng)時(shí)鐘(SYSCLK)頻率的影響。可以通過(guò)調(diào)整這些參數(shù)來(lái)降低功耗,設(shè)計(jì)者也很容易控制這些參數(shù)。本節(jié)討論這些參數(shù)及它們對(duì)功率消耗的影響 。
4 降低系統(tǒng)時(shí)鐘頻率
在CMOS數(shù)字邏輯器件中,功耗與系統(tǒng)時(shí)鐘(SYSCLK)頻率成正比:
功耗 = CV2f
其中C是CMOS的負(fù)載電容,V是電源電壓,f是SYSCLK的頻率 。
C8051Fxxx系列器件的系統(tǒng)時(shí)鐘可以來(lái)自內(nèi)部振蕩器或一個(gè)外部時(shí)鐘源。外部源可以是一個(gè)CMOS時(shí)鐘、RC電路、電容或晶體振蕩器。有關(guān)振蕩器配置方面的信息見(jiàn)應(yīng)用筆記–“ 配置內(nèi)部和外部振蕩器”。內(nèi)部振蕩器可提供四個(gè)時(shí)鐘頻率2、4、8 和16 MHz。很多不同的頻率可以通過(guò)使用外部振蕩器得到,為了節(jié)省功耗設(shè)計(jì)者必須知道給定應(yīng)用所需要的最高SYSCLK頻率和精度。一個(gè)設(shè)計(jì)可能需要一個(gè)在器件全部工作時(shí)間內(nèi)保持不變的SYSCLK頻率。在這種情況下,設(shè)計(jì)者將選擇滿足要求的最低頻率,采用消耗最低功率的振蕩器配置。典型的應(yīng)用包括串行通信和必須用ADC完成的周期性采樣。
某些操作可能要求高速度,但只是在很短的、斷續(xù)的時(shí)間間隔內(nèi)。這種情況在某些時(shí)候被稱為“猝發(fā)”操作。在C8051Fxxx中,SYSCLK頻率可在任何時(shí)刻改變,因此器件平時(shí)可工作在較低的頻率,直到某個(gè)需要高速操作的條件發(fā)生。
切換系統(tǒng)時(shí)鐘源的兩個(gè)例子是(1)內(nèi)部振蕩器/外部晶體配置,(2)外部晶體/RC振蕩器配置。如果器件偶爾進(jìn)行高速數(shù)據(jù)轉(zhuǎn)換,并使用一個(gè)實(shí)時(shí)時(shí)鐘為數(shù)據(jù)提供時(shí)間戳,則一個(gè)內(nèi)部振蕩器和外部晶體的組合將是最理想的。在采樣操作期間應(yīng)使用高速內(nèi)部振蕩器。采樣結(jié)束后,使用一個(gè)外部32kHz晶體以維持實(shí)時(shí)時(shí)鐘。一旦重新需要高速操作,器件將切換到內(nèi)部振蕩器(見(jiàn)圖1)。在應(yīng)用筆記“ 實(shí)現(xiàn)一個(gè)實(shí)時(shí)時(shí)鐘”中給出了這種操作過(guò)程的一個(gè)例子。
圖1. 內(nèi)部振蕩器和外部晶體源配置
晶體振蕩器和內(nèi)部振蕩器可以同時(shí)工作,每一個(gè)都可以根據(jù)需要被選為系統(tǒng)時(shí)鐘源。為了減小電源電流,在使用內(nèi)部振蕩器時(shí)可停止晶體振蕩器。在這種情況下,當(dāng)從內(nèi)部切換到外部振蕩器時(shí),設(shè)計(jì)者必須考慮切換系統(tǒng)時(shí)鐘源時(shí)的起動(dòng)延遲。C8051F0xx器件有一個(gè)指示外部時(shí)鐘信號(hào)有效的標(biāo)志位(OSCXCN寄存器中的XTLVLD位),該標(biāo)志在外部振蕩器穩(wěn)定運(yùn)行時(shí)置位。在切換到外部振蕩器之前應(yīng)查詢?cè)摌?biāo)志。注意:在外部晶體起動(dòng)期間,其它操作可繼續(xù)使用內(nèi)部振蕩器。
某些應(yīng)用需要間歇的高速度和高精度(例如ADC采樣和數(shù)據(jù)處理),但在其它時(shí)間可允許低速度和低精度(例如等待采樣時(shí)),這時(shí)可以用到外部振蕩器和RC電路的組合。在這種情況下,外部RC振蕩器用于產(chǎn)生低頻SYSCLK源,而晶體用于高頻率操作。RC電路需要接到VDD(電壓源)才能工作。由于在晶體處于工作狀態(tài)時(shí),這種連接可能加載晶體振蕩器電路,我們將RC電路接到一個(gè)通用端口引腳(見(jiàn)圖2),當(dāng)使用RC電路時(shí),與之連接的端口引腳被驅(qū)動(dòng)到高電平(到VDD),這可以通過(guò)選擇端口為“推挽”輸出方式并向端口鎖存器寫(xiě)“1”來(lái)實(shí)現(xiàn)。當(dāng)使用晶體振蕩器時(shí),端口引腳被置于“高阻”狀態(tài),這是通過(guò)設(shè)置端口為“漏極開(kāi)路”輸出方式,并向端口鎖存器寫(xiě)“1”來(lái)實(shí)現(xiàn)的。注意:RC電路可以利用晶體振蕩器電路中已有的電容 。
RC電路振蕩器的起動(dòng)幾乎是瞬間完成的,然而晶體振蕩器的起動(dòng)時(shí)間是比較可觀的。因此從RC振蕩器切換到外部晶體振蕩器時(shí)要經(jīng)過(guò)下列過(guò)程 :
a. 切換到內(nèi)部振蕩器 。
b. 將作為RC電路電源的端口引腳設(shè)置為漏極開(kāi)路并向該端口引腳寫(xiě)“1”(高阻狀態(tài))。
c. 起動(dòng)晶體(設(shè)置XFCN位)。
d. 等待1ms 。
e. 查詢外部晶體有效位(XTLVLD --> ‘1’ )。
f. 切換到外部振蕩器。
從外部晶體振蕩器切換到RC振蕩器的步驟如下
a. 切換到內(nèi)部振蕩器。
b. 關(guān)閉晶體振蕩器(清除XFCN位)。
c. 驅(qū)動(dòng)電源端口引腳到高電平(到VDD),通過(guò)選擇端口為“推挽”輸出方式并向端口鎖存器寫(xiě)“1”來(lái)實(shí)現(xiàn) 。
d. 切換到外部振蕩器。
圖2. 外部RC和晶體振蕩器配置
5 電源電壓
CMOS邏輯電路中的電流與電源電壓成正比。CMOS邏輯電路的功耗與電源電壓的平方成正比(見(jiàn)方程1)。因此降低器件的供電電壓可以減小功耗,C8051Fxxx系列器件所要求的電源電壓為2.7-3.6V。為了減小功耗,建議使用3.0V的穩(wěn)壓器而不采用3.3V的穩(wěn)壓器 。
CIP51處理器電源管理方式
C8051處理器有兩種電源管理方式。這兩種方式為等待方式和停機(jī)方式 。
6 等待方式
在等待方式下,CPU和FLASH存儲(chǔ)器停止工作。所有外設(shè)都處于工作狀態(tài),包括內(nèi)部時(shí)鐘。在有中斷(被允許的中斷)產(chǎn)生或發(fā)生系統(tǒng)復(fù)位時(shí)CPU退出等待方式?赏ㄟ^(guò)將等待方式選擇位(PCON.0)設(shè)置為‘1’使CPU進(jìn)入等待狀態(tài) 。
當(dāng)?shù)却绞竭x擇位被置‘1’時(shí),一旦設(shè)置該位的那條指令執(zhí)行完,CPU立即進(jìn)入等待狀態(tài)。有中斷發(fā)生后,等待方式選擇位將被清除,CPU將轉(zhuǎn)入中斷服務(wù)程序。從中斷返回后(RETI),CPU將進(jìn)入設(shè)置等待方式選擇位那條指令的下一條指令。如果在等待方式下有復(fù)位條件產(chǎn)生,將產(chǎn)生正常的復(fù)位過(guò)程,CPU將從存儲(chǔ)器地址0x0000開(kāi)始執(zhí)行程序 。
例如,CPU被置于等待方式,等待定時(shí)器2溢出后啟動(dòng)一次A/D轉(zhuǎn)換。一旦轉(zhuǎn)換過(guò)程結(jié)束,ADC轉(zhuǎn)換結(jié)束中斷將CPU從等待狀態(tài)喚醒,開(kāi)始處理采樣值。在樣本處理過(guò)程結(jié)束后,CPU又重新被置于等待方式以節(jié)省功耗,同時(shí)等待下一次中斷 。
另一個(gè)例子,CPU平時(shí)處于等待方式以節(jié)省功耗,在需要時(shí)用一個(gè)外部中斷信號(hào)將其“喚醒”。在收到外部中斷時(shí),CPU將退出等待方式并轉(zhuǎn)到相應(yīng)的中斷服務(wù)向量(例如/INT0或/INT1)。
7 停機(jī)方式
C8051的停機(jī)方式用于停止CPU和振蕩器。這將使所有數(shù)字外設(shè)都停止工作。在進(jìn)入停機(jī)方式前必須用軟件將所有的模擬外設(shè)關(guān)閉,只有內(nèi)部或外部復(fù)位可以使處理器退出停機(jī)方式。實(shí)際上停機(jī)方式節(jié)省功耗是靠將SYSCLK頻率降低到0 。
注意:時(shí)鐘丟失檢測(cè)器會(huì)產(chǎn)生一個(gè)內(nèi)部復(fù)位(如果被允許),這個(gè)內(nèi)部復(fù)位將結(jié)束停機(jī)方式。因此如果要使CPU處于停機(jī)狀態(tài)的時(shí)間大于時(shí)鐘丟失檢測(cè)器的超時(shí)時(shí)間(100 μs),則在進(jìn)入停機(jī)方式之前應(yīng)禁止時(shí)鐘丟失檢測(cè)器。
通過(guò)將停機(jī)方式選擇位置‘1’使C8051處理器處于停機(jī)方式。在復(fù)位時(shí),CPU完成正常的復(fù)位過(guò)程并從0x0000地址開(kāi)始執(zhí)行程序,任何有效的復(fù)位源都可以使CPU退出停機(jī)方式。能使CPU退出停機(jī)方式的復(fù)位源是:外部復(fù)位(/RST)、時(shí)鐘丟失檢測(cè)器、比較器0、外部ADC轉(zhuǎn)換啟動(dòng)信號(hào)(/CNVSTR)。
例如,CPU在不需要工作的一段時(shí)間內(nèi)可以被置于停機(jī)方式以節(jié)省功耗,在需要工作時(shí)用用比較器0復(fù)位信號(hào)將其“喚醒”。
一般來(lái)說(shuō),一個(gè)低功耗的設(shè)計(jì)應(yīng)采用最低的電源電壓、最低的SYSCLK頻率,并盡可能地使用電源管理方式,以最大限度地節(jié)省功耗。這些條件中的大多數(shù)都可以用軟件實(shí)現(xiàn)或控制 。
8 功耗計(jì)算
在Cygnet 的C8051F00x和C8051F01x系列器件中消耗功率的兩大部件是:模擬部件和數(shù)字部件。模擬部件的功耗對(duì)于所有的SYSCLK頻率來(lái)說(shuō)幾乎是不變的;數(shù)字部件的功耗隨著SYSCLK頻率的不同而有較大的變化。模擬部件和數(shù)字部件的功耗加在一起構(gòu)成器件的總功耗 。
本應(yīng)用筆記中所介紹的器件消耗電流的計(jì)算方法適用于C8051F00x和C8051F01x(F000、01、02、05、06、10、11、12、15和16系列器件 )。
數(shù)據(jù)手冊(cè)中“總體直流電氣特性”一節(jié)中給出了不同條件下器件的供電電流值。電流值被分為數(shù)字部件(在三種示例頻率下)和模擬部件兩部分。所給出的模擬電流值是所有模擬外設(shè)都工作時(shí)的數(shù)值。每個(gè)模擬外設(shè)的供電電流可以在數(shù)據(jù)手冊(cè)中與外設(shè)相關(guān)的章節(jié)中查到 。
9 內(nèi)部和外部振蕩器比較
除了使用較低的SYSCLK頻率之外,設(shè)計(jì)者還可以通過(guò)合理地選擇時(shí)鐘源達(dá)到減小功耗的目的。內(nèi)部振蕩器消耗數(shù)字電源電流的典型值為200 μA,用于驅(qū)動(dòng)外部振蕩器的電流是變化的。對(duì)于一個(gè)外部振蕩源(例如一個(gè)晶體),驅(qū)動(dòng)電流(由模擬電源提供)用軟件通過(guò)配置外部振蕩器控制寄存器(OSCXCN)的XFCN位來(lái)設(shè)置。在驅(qū)動(dòng)電流較大時(shí),用戶可以使用內(nèi)部振蕩器以節(jié)省功耗,但是在最低的XFCN設(shè)置下,外部振蕩器使用不到1μA的電流,小于內(nèi)部振蕩器所使用的電流。下面列出了幾個(gè)典型測(cè)量電流值。這些測(cè)量值對(duì)于不同的器件可能不一樣。驅(qū)動(dòng)電平應(yīng)保持最低以節(jié)省功耗,但又應(yīng)足夠高以使外部振蕩器能夠起振。下表列出了電流與外部振蕩器頻率控制位設(shè)置的關(guān)系。
10 數(shù)字外設(shè)
對(duì)于粗略的計(jì)算,一個(gè)經(jīng)驗(yàn)公式是假設(shè)1mA/MHz的工作電流+1mA,如果模擬部件(ADC、比較器、DAC、VREF等被允許)。這個(gè)經(jīng)驗(yàn)公式假定使用3.6V的電源電壓。較低的電源電壓將使功耗降低。在2.7V經(jīng)驗(yàn)公式為 0.5mA/MHz(在正常方式)。下表列出了用于估算電源電流的經(jīng)驗(yàn)數(shù)據(jù) 。
數(shù)字電流消耗典型值
電源方式 | VDD=2.7V | VDD=3.6V |
正常 | 0.5mA/MHz | 1.0mA/MHz |
等待 | 0.33mA/MHz | 0.65mA/MHz |
注意:數(shù)字電源電流與使用多少個(gè)數(shù)字外設(shè)無(wú)關(guān) ,電源電流與SYSCLK的頻率及電源 電壓成正比。
11 模擬外設(shè)
每個(gè)模擬外設(shè)的供電電流值都在數(shù)據(jù)表中關(guān)于這個(gè)外設(shè)的部分給出(通常在該部分的最后)。建議禁止所有不用的外設(shè)部件以降低功耗。為方便起見(jiàn),將C8051F00x和C8051F01x模擬外設(shè)的供電電流值列于下表:
C8051F0xx模擬外設(shè)供電電流
模擬外設(shè) | 典型電流值μA |
VDD監(jiān)視器 總處于允許狀態(tài) | 8VDD=2.7V 15VDD=3.6V |
ADC | 450 |
VREF內(nèi)部 | 50帶隙基準(zhǔn)和驅(qū)動(dòng)器 |
溫度傳感器 | 10 |
比較器 | 1.5每個(gè) |
DAC | 110每個(gè) |
內(nèi)部振蕩器 使用數(shù)字電源 | 200 |
注意:模擬功耗與SYSCLK頻率相對(duì)無(wú)關(guān)。
12 總電流計(jì)算
當(dāng)所需要的SYSCLK頻率、電源電壓及外設(shè)部件都已經(jīng)確定后,可以估算總的電源電流。所使用的模擬外設(shè)電流(將每個(gè)被允許的模擬外設(shè)的電流加在一起)加上所使用的數(shù)字電流(在給定頻率、電源方式和電源電壓下計(jì)算)就得到總的電源電流。如果所有的模擬外設(shè)都被允許,則所用模擬電流大約為1mA 。
13 計(jì)算舉例
下面是電源電流計(jì)算的幾個(gè)例子。每個(gè)應(yīng)用在不同的時(shí)間,可以使用不同的電源方式、SYSCLK頻率和外設(shè)部件。因此,功率管理指標(biāo)需要幾種不同的電源電流計(jì)算。數(shù)字部件和模擬部件所使用的電流分別計(jì)算然后加到一起得到總電流 。
例1
在一個(gè)VDD=3.6V的系統(tǒng)中使用C8051F000器件。ADC對(duì)一個(gè)參數(shù)采樣,將樣本處理后經(jīng)DAC輸出。由于在該應(yīng)用中需要進(jìn)行采樣和處理,選擇內(nèi)部振蕩器提供16MHz的SYSCLK頻率 。
模擬部件:
外設(shè) | 供電電流μA |
ADC | 450 |
VREF內(nèi)部 | 50 |
內(nèi)部振蕩器 | 200 |
一個(gè)DAC | 110 |
VDD監(jiān)視器 | 15 |
總模擬電流 | 825 |
|
|
數(shù)字部件:在正常方式工作頻率為16 MHz;1mA/MHz * 16 MHz = 16mA
總電流:825μA(模擬)+ 16mA(數(shù)字)= 16.8mA
例2
假設(shè)我們?nèi)匀还浪憷?中同一個(gè)應(yīng)用的電源電流。如果采樣處理是一個(gè)猝發(fā)操作(即間歇性地需要采樣和轉(zhuǎn)換),我們可以選擇平時(shí)將CIP-51置于等待方式,經(jīng)過(guò)一個(gè)規(guī)定的時(shí)間間隔后,再用一個(gè)定時(shí)器將其“喚醒”。在這種情況下,可以通過(guò)計(jì)算平均電流來(lái)估算功率需求。器件將在正常方式(用于采樣和數(shù)據(jù)轉(zhuǎn)換)和等待方式(在兩個(gè)采樣處理操作之間)之間切換。在正常方式和等待方式之間切換的周期等于采樣速率。這就允許我們?cè)谟?jì)算了等待方式的電源電流之后計(jì)算平均電源電流。
模擬部件:
在兩次采樣處理和輸出之間,器件處于等待方式,模擬外設(shè)被禁止。這種情況下模擬電流消耗為 :
VDD監(jiān)視器 = 15μA
數(shù)字部件:
在等待方式,工作頻率為16 MHz
0.65mA/MHz * 16 MHz = 10.4mA
總電流
在大多數(shù)應(yīng)用中,模擬部件的功耗可以被忽略,這樣一來(lái)總電流就是數(shù)字部件的電流 :
50 μA(模擬)+ 10.4mA(數(shù)字)= 10.4mA
注意,我們已經(jīng)計(jì)算了等待方式下的電源電流和正常方式下的電源電流(在例1中)。我們還必須計(jì)算在每種方式下所消耗的時(shí)間,以計(jì)算所用器件的平均電流 。
假設(shè)ADC工作在低功耗跟蹤方式,使用最大的2MHz SAR轉(zhuǎn)換時(shí)鐘(ADC設(shè)置為:SAR時(shí)鐘 = SYSCLK/8),我們需要10kHz的采樣速率。圖3中的電源周期為 1/10,000(采樣速率)= 100 μs 。
處在正常方式下的時(shí)間是ADC跟蹤/轉(zhuǎn)換時(shí)間和將樣本保存到存儲(chǔ)器的時(shí)間。在低功耗跟蹤方式,需要3個(gè)SAR時(shí)鐘用于跟蹤和16個(gè)SAR時(shí)鐘用于轉(zhuǎn)換。這19個(gè)SAR時(shí)鐘在頻率為2MHz時(shí)需要9.5 μs。存儲(chǔ)采樣值需要兩個(gè)系統(tǒng)時(shí)鐘周期即0.125 μs。為了進(jìn)入正常方式,要執(zhí)行一條mov指令,需三個(gè)SYSCLK周期,即0.188μs。這樣在正常方式下的總時(shí)間為 9.5 μs + 0.125 μs+ 0.188 μs = 9.8 μs 。
因?yàn)锳DC的采樣周期是100 μs,所以在電源周期中等待方式所占的時(shí)間為 100 μs – 9.8 μs(正常方式下的時(shí)間)= 90.2 μs。對(duì)圖3曲線下方的區(qū)域在一個(gè)周期(100 μs)內(nèi)積分,然后除以周期值,得到平均電源電流為 11 mA 。16.8mA\10.4mA等待方式采樣周期時(shí)間數(shù)據(jù)采樣和轉(zhuǎn)換正常方式電流。
例3
如果在器件處于等待方式(在例2中)時(shí)使用一個(gè)外部振蕩器,使振蕩器的頻率降低到32kHz,可以進(jìn)一步降低功耗。這時(shí)所用的電流是:
將外部振蕩器控制位設(shè)置為XFCN = 000。這樣將使用0.6 μA的模擬電流 。
(0.65mA * 0.032MHz) + 0.6 μA = 21 μA
這與例2中16MHz下的等待方式有驚人的差別,只是通過(guò)簡(jiǎn)單地降低振蕩器頻率。
繼續(xù)進(jìn)行列2中(在正常方式有6個(gè)附加的SYSCLK周期用于降低振蕩器頻率)的平均電流計(jì)算得到的平均電流為1.7mA 。
例4
在這個(gè)應(yīng)用中,用C8051F000的ADC對(duì)一個(gè)參數(shù)采樣并將采樣值保存到存儲(chǔ)器中,需要對(duì)采樣精確定時(shí)。為了滿足更精確的定時(shí)要求,SYSCLK由一個(gè)外部18.432 MHz晶體振蕩器提供。為了節(jié)省功耗,設(shè)計(jì)者決定使用3.0V的電源電壓。定時(shí)器2用于對(duì)ADC采樣間隔定時(shí) 。
模擬部件:
外設(shè) | 供電電流μA |
ADC | 450 |
外部振蕩器驅(qū)動(dòng)器 XFCN=111 | 2900 |
VDD監(jiān)視器 | 15 |
總模擬電流 | 3361 |
數(shù)字部件:
在正常方式,工作頻率為18.432MHz;0.8mA/MHz * 18.432 MHz = 14.7mA
總電流:3.4mA模擬+ 14.7mA數(shù)字= 18.1mA
例4 在等待方式時(shí)的電流
如果采樣操作是猝發(fā)式的在不需要采樣的時(shí)間段內(nèi)將器件置于等待方式并禁止ADC不需CIP-51操作數(shù)字外設(shè)繼續(xù)工作將節(jié)省功耗在等待方式所消耗的數(shù)字電流僅為0.6mA/MHz如果沒(méi)有ADC轉(zhuǎn)換在18.432 MHz下電流消耗= 11.1mA
計(jì)算一個(gè)采樣周期內(nèi)的平均電源電流與例2類似假設(shè)10 kHz的采樣頻率和低功耗跟蹤方式平均電流的估算值為 11.9mA.
設(shè)計(jì)是我們的大學(xué)學(xué)習(xí)生活的最后一項(xiàng)學(xué)習(xí)任務(wù),是對(duì)我們大學(xué)四年學(xué)習(xí)的綜合考核。為期兩個(gè)多月的設(shè)計(jì)過(guò)程中,我不僅較為系統(tǒng)的復(fù)習(xí)了以前學(xué)的知識(shí),而且又學(xué)習(xí)了許多新知識(shí),使我的知識(shí)更加系統(tǒng)化,更加完善。同時(shí),也提高了獨(dú)立分析問(wèn)題、解決問(wèn)題的能力。相信設(shè)計(jì)一定會(huì)為我們?cè)诓痪玫膶?lái)踏上工作崗位打下了良好的實(shí)踐基礎(chǔ)。
本次設(shè)計(jì)能夠順利地完成,首先要感謝我的指導(dǎo)老師王錦教授。王教授嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,深厚的學(xué)術(shù)造詣以及忘我的工作精神給我留下了深刻的印象。王教授的嚴(yán)格要求和孜孜不倦的教導(dǎo)是我完成這次設(shè)計(jì)的重要保證,她給予了我很大的幫助和支持,在課題研究期間,王教授提供了很多指導(dǎo)性的意見(jiàn),對(duì)存在的問(wèn)題給予細(xì)心的分析并提出許多寶貴的意見(jiàn),使我受益匪淺;同時(shí)為我們提供了良好的設(shè)計(jì)場(chǎng)所和試驗(yàn)條件。在此謹(jǐn)向?qū)煴硎局孕牡母兄x!當(dāng)然,我也要感謝給予我?guī)椭椭С值呐笥褌儯兄x在編程和電路調(diào)試過(guò)程中給我提供幫助的王博同學(xué),感謝電子工程系的老師為我們做設(shè)計(jì)提供的各方面的幫助!
同時(shí),我要感謝我的母!旖蚬こ處煼秾W(xué)院。大學(xué)四年,這里留下了我們?cè)S多美好的回憶。特別是在我即將踏上工作崗位的同時(shí),給了我這樣一個(gè)鍛煉、學(xué)習(xí)的機(jī)會(huì),使我加深了對(duì)以前知識(shí)的理解,拓寬了知識(shí)面,也提高了我對(duì)所學(xué)知識(shí)的綜合的應(yīng)用能力。我忠心地祝愿母校的未來(lái)更美好!
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |