畢業(yè)設(shè)計(論文)基于AT89C51單片機(jī)萬年歷的設(shè)計_第1頁
畢業(yè)設(shè)計(論文)基于AT89C51單片機(jī)萬年歷的設(shè)計_第2頁
畢業(yè)設(shè)計(論文)基于AT89C51單片機(jī)萬年歷的設(shè)計_第3頁
畢業(yè)設(shè)計(論文)基于AT89C51單片機(jī)萬年歷的設(shè)計_第4頁
畢業(yè)設(shè)計(論文)基于AT89C51單片機(jī)萬年歷的設(shè)計_第5頁
已閱讀5頁,還剩46頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、四川省高等教育自學(xué)考試電子工程專業(yè)畢業(yè)論文 論文題目_基于at89c51單片機(jī)萬年歷的設(shè)計專 業(yè)_電子工程_學(xué)生姓名_準(zhǔn)考證號_指導(dǎo)老師_ 2011年 08 月 23 日摘要自古人們就懂得了怎么樣算時間,打草結(jié)、掛麻絏、劃筆畫等?,F(xiàn)在社會的日益進(jìn)步時間變得更加的珍貴。傳統(tǒng)的鐘表誤差大、使用壽命不長、要經(jīng)常的更改時間。顯示不直觀,給人們帶來了許多的不便??萍嫉目焖侔l(fā)展,很好的解決的問題。而多功能電子萬年歷能很好的解決這些問題,萬年歷采用軟、硬件結(jié)合,誤差小、使用壽命長,采用直觀的數(shù)字顯示,簡捷明了。本文介紹了基于at89c52單片機(jī)的多功能電子萬年歷的硬件結(jié)構(gòu)和軟硬件設(shè)計方法。系統(tǒng)以at89c5

2、2單片機(jī)為控制器,以串行時鐘日歷芯片ds1302記錄日歷和時間,它可以對年、月、日、時、分、秒進(jìn)行計時,還具有閏年補(bǔ)償?shù)榷喾N功能。運(yùn)用單片機(jī)實現(xiàn)公歷農(nóng)歷之間的轉(zhuǎn)換,電子鬧鐘,計時器和對指定日期的查詢等功能。萬年歷采用液晶顯示lcd-12864顯示,可以同時顯示年、月、日、周幾、時、分、秒,農(nóng)歷。綜上所述此電子晚年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景關(guān)鍵字:at89c51;電子萬年歷;ds1302 ;公農(nóng)歷轉(zhuǎn)換;電子鬧鐘;計時器;日期查詢目 錄1 緒論51.1課題研究的背景.51.2課題的研究目的與意.51.3課題解決的

3、主要內(nèi)容.52 系統(tǒng)的總體設(shè)計.62.1系統(tǒng)方案的構(gòu)想與確定.62.2 器件的選用.72.2.1 單片機(jī)的選用.72.2.2 lcd 液晶顯示器12864 選用及工作原理.82.2.2.1 lcd液晶顯示概述.82.2.2.2 lcd模塊接口說明.92.2.2.3 lcd 模塊主要硬件構(gòu)成說明.92.2.2.4 lcd 指令說明.112.2.2.5 lcd 讀寫時序圖.112.2.2.6 lcd 軟件初始化.132.2.2.7 應(yīng)用舉例.152.2.3 公農(nóng)歷轉(zhuǎn)換.173 系統(tǒng)硬件的設(shè)計.203.1系統(tǒng)硬件電路設(shè)計.203.1.1系統(tǒng)硬件框圖.20 3.1.2 at89c51單片機(jī).2031.

4、3 at89c51單片機(jī)與mcs-51完全兼容.233.1.4 實時時鐘芯片 ds1302 .254 系統(tǒng)的軟件設(shè).294.1 程序流程圖.304.2 主程序.314.3 讀取日期和時間程序.324.4 顯示子程序.334.5鬧鐘子程序.345 proteus使用.345.1編程環(huán)境proteus.345.2用proteus isis對電子萬年歷的硬件電路設(shè)計.355.3用proteus isis進(jìn)行電子萬年歷的仿真測試.38結(jié)論.39致謝.40參考文獻(xiàn).41程序.42一 緒論1.1 課題研究的背景隨著科技的快速發(fā)展,時間的流逝,從觀太陽、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(chuàng)新紀(jì)錄。它可以對

5、年、月、日、時、分、秒進(jìn)行計時,還具有閏年補(bǔ)償?shù)榷喾N功能,而且ds1302的使用壽命長,誤差小。對于數(shù)字電子萬年歷采用直觀的數(shù)字顯示,可以同時顯示年、月、日、時、分、秒和溫度等信息,還具有時間校準(zhǔn)等功能。該電路采用at89c51單片機(jī)作為核心,功耗小,能在3v的低壓工作,電壓可選用35v電壓供電。此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景。1.2課題的研究目的與意義二十一世紀(jì)是數(shù)字化技術(shù)高速發(fā)展的時代,而單片機(jī)在數(shù)字化高速發(fā)展的時代扮演著極為重要的角色。電子萬年歷的開發(fā)與研究在信息化時代的今天亦是當(dāng)務(wù)之急,因為它應(yīng)用在

6、學(xué)校、機(jī)關(guān)、企業(yè)、部隊等單位禮堂、訓(xùn)練場地、教學(xué)室、公共場地等場合,可以說遍及人們生活的每一個角落。所以說電子萬年歷的開發(fā)是國家之所需,社會之所需,人民之所需。由于社會對信息交換不斷提高的要求及高新技術(shù)的逐步發(fā)展,促使電子萬年歷發(fā)展并且投入市場得到廣泛應(yīng)用。1.3課題解決的主要內(nèi)容本課題所研究的電子萬年歷是單片機(jī)控制技術(shù)的一個具體應(yīng)用,主要研究內(nèi)容包括以下幾個方面:(1)選用電子萬年歷芯片時,應(yīng)重點(diǎn)考慮功能實在、使用方便、單片存儲、低功耗、抗斷電的器件。(2)根據(jù)選用的電子萬年歷芯片設(shè)計外圍電路和單片機(jī)的接口電路。(3)在硬件設(shè)計時,結(jié)構(gòu)要盡量簡單實用易于實現(xiàn),使系統(tǒng)電路盡量簡單。(4)根據(jù)硬

7、件電路圖,在電路板上完成器件的焊接。(5)根據(jù)設(shè)計的硬件電路,編寫控制at89c51芯片的單片機(jī)程序。(6)通過編程、編譯、調(diào)試,把程序下載到單片機(jī)上運(yùn)行,并實現(xiàn)本設(shè)計的功能。(7)在硬件電路和軟件程序設(shè)計時,主要考慮提高人機(jī)界面的友好性,方便用戶操作等因素。(8)軟件設(shè)計時必須要有完善的思路,要做到程序簡單,調(diào)試方便。二系統(tǒng)的總體設(shè)計單片機(jī)電子萬年歷的制作有多種方法,可供選擇的器件和運(yùn)用的技術(shù)也有很多種。所以,系統(tǒng)的總體設(shè)計方案應(yīng)在滿足系統(tǒng)功能的前提下,充分考慮系統(tǒng)使用的環(huán)境,所選的結(jié)構(gòu)要簡單實用、易于實現(xiàn),器件的選用著眼于合適的參數(shù)、穩(wěn)定的性能、較低的功耗以及低廉的成本。2.1系統(tǒng)方案的構(gòu)

8、想與確定系統(tǒng)的功能往往決定了系統(tǒng)采用的結(jié)構(gòu),經(jīng)過成本,性能,功耗等多方面的考慮決定用液晶顯示12864顯示器顯示,5v直流電源對單片機(jī)at89c51進(jìn)行供電,時間芯片ds1302連接單片機(jī)at89c51。從而實現(xiàn)電子萬年歷的功能。2.2 器件的選用單片機(jī)at89c515v直流電源液晶顯示器fyd12864-0402b傳感器ds13022.2.1單片機(jī)的選擇單片機(jī)自70年代問世以來以微處理器(mpu)技術(shù)及超大規(guī)模集成電路技術(shù)的發(fā)展為先導(dǎo),用廣泛的應(yīng)用領(lǐng)域拉動得到蓬勃發(fā)展,單片機(jī)功能正日漸完善。單片機(jī)的應(yīng)用,使許多領(lǐng)域的技術(shù)水平和自動化程度大大提高,可以說當(dāng)今世界正在經(jīng)受一場以單片機(jī)技術(shù)為標(biāo)志的

9、新技術(shù)革命浪潮的沖擊。主要單片機(jī)類型如下:(1)mcs-51系列單片機(jī)mcs-51系列單片機(jī)主要是指intel公司生產(chǎn)的以51位內(nèi)核的單片機(jī)芯片,具有8位cpu、4k字節(jié)rom、128字節(jié)ram、可擴(kuò)展外部64k字節(jié)ram和rom、2個16位的定時器/計數(shù)器、4個8位并行i/o口、1個全雙工串行i/o口、21字節(jié)的專用寄存器、5個中斷源、片內(nèi)自帶振蕩器、片內(nèi)單總線等功能部件。(2)at89c51單片機(jī)at89c51單片機(jī)的主要特性如下:l 與mcs-51產(chǎn)品指令系統(tǒng)完全兼容l 4k字節(jié)的在線編程flash存儲器,1000次擦寫周期l 4.05.5v的工作電壓范圍l 全靜態(tài)工作模式:033mhz

10、l 三級程序存儲器鎖l 1288字節(jié)內(nèi)部ram l 32個可編程i/o口線l 2個16位定時/計數(shù)器l 6個中斷源l 全雙工串行uart通道l 低功耗空閑和掉電模式l 中斷可從空閑模式喚醒系統(tǒng)l 掉電標(biāo)識和快速編程特性l 具有掉電狀態(tài)下的中斷恢復(fù)功能l 靈活的在系統(tǒng)編程(isp字節(jié)或頁寫模式)由于at89c51單片機(jī)片內(nèi)有4k字節(jié)的在線編程flash存儲器,可以擦寫1000次,具有掉電模式,而且具有掉電狀態(tài)下的中斷恢復(fù)功能,對設(shè)計開發(fā)非常實用。所以選用at89c51單片機(jī)作為電子萬年歷芯片的控制單片機(jī)。2.2.2 lcd 液晶顯示器12864 選用及工作原理.1、概述fyd12864-0402

11、b 是一種具有 4 位/8 位并行、2 線或 3 線串行多種接口方式,內(nèi)部含有國標(biāo)一級、二級簡體中文字庫的點(diǎn)陣圖形液晶顯示模塊;其顯示分辨率為 12864, 內(nèi)置 8192 個 16*16 點(diǎn)漢字,和 128 個 16*8 點(diǎn) ascii 字符集.利用該模塊靈活的接口方式和簡單、方便的操作指令,可構(gòu)成全中文人機(jī)交互圖形界面??梢燥@示 84 行 1616 點(diǎn)陣的漢字. 也可完成圖形顯示.低電壓低功耗是其又一顯著特點(diǎn)。由該模塊構(gòu)成的液晶顯示方案與同類型的圖形點(diǎn)陣液晶顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡潔得多,且該模塊的價格也略低于相同點(diǎn)陣的圖形液晶模塊?;咎匦?1) 低電源電壓(vdd

12、:+3.0-+5.5v) 2)顯示分辨率:12864 點(diǎn)3) 內(nèi)置漢字字庫,提供 8192 個 1616 點(diǎn)陣漢字(簡繁體可選)4) 內(nèi)置 128 個 168 點(diǎn)陣字符5)2mhz 時鐘頻率6)顯示方式:stn、半透、正顯7)驅(qū)動方式:1/32duty,1/5bias8) 視角方向:6 點(diǎn)9) 背光方式:側(cè)部高亮白色 led,功耗僅為普通 led 的 1/51/1010) 通訊方式:串行、并口可選11) 內(nèi)置 dc-dc 轉(zhuǎn)換電路,無需外加負(fù)壓12)無需片選信號,簡化軟件設(shè)計13)工作溫度: 0 - +55 ,存儲溫度: -20 - +602 模塊接口說明2.1 并行接口2.2 串口接口管腳信

13、號3.模塊主要硬件構(gòu)成說明控制器接口信號說明:1、 1、rs,r/w 的配合選擇決定控制界面的 4 種模式:2、e 信號忙標(biāo)志:bfbf 標(biāo)志提供內(nèi)部工作情況.bf=1 表示模塊在進(jìn)行內(nèi)部操作,此時模塊不接受外部指令和數(shù)據(jù).bf=0 時,模塊為準(zhǔn)備狀態(tài),隨時可接受外部指令和數(shù)據(jù).利用 status rd 指令,可以將 bf 讀到 db7 總線,從而檢驗?zāi)K之工作狀態(tài).字型產(chǎn)生 rom(cgrom)字型產(chǎn)生ro(mcgrom)提供8192個此觸發(fā)器是用于模塊屏幕顯示開和關(guān)的控制。dff=1為開顯示(display on),ddram的內(nèi)容就顯示在屏幕上,dff=0 為關(guān)顯示(display of

14、f)。dff 的狀態(tài)是指令 display on/off 和 rst 信號控制的。顯示數(shù)據(jù) ram(ddram)模塊內(nèi)部顯示數(shù)據(jù) ram 提供 642 個位元組的空間,最多可控制 4 行 16 字(64 個字)的中文字型顯示,當(dāng)寫入顯示數(shù)據(jù) ram 時,可分別顯示 cgrom 與 cgram 的字型;此模塊可顯示三種字型,分別是半角英數(shù)字型(16*8)、cgram字型及 cgrom 的中文字型,三種字型的選擇,由在 ddram 中寫入的編碼選擇,在 0000h0006h 的編碼中(其代碼分別是 0000、0002、0004、0006 共 4 個)將選擇 cgram 的自定義字型,02h7fh

15、的編碼中將選擇半角英數(shù)字的字型,至于a1 以上的編碼將自動的結(jié)合下一個位元組,組成兩個位元組的編碼形成中文字型的編碼 big5(a140d75f),gb(a1a0-f7ffh)。字型產(chǎn)生 ram(cgram)字型產(chǎn)生 ram 提供圖象定義(造字)功能, 可以提供四組 1616 點(diǎn)的自定義圖象空間,使用者可以將內(nèi)部字型沒有提供的圖象字型自行定義到 cgram 中,便可和 cgrom 中的定義一樣地通過 ddram 顯示在屏幕中。地址計數(shù)器 ac地址計數(shù)器是用來貯存 ddram/cgram 之一的地址,它可由設(shè)定指令暫存器來改變,之后只要讀取或是寫入ddram/cgram 的值時,地址計數(shù)器的值就

16、會自動加一,當(dāng) rs 為“0”時而 r/w 為“1”時,地址計數(shù)器的值會被讀取到db6db0 中。 光標(biāo)/閃爍控制電路此模塊提供硬體光標(biāo)及閃爍控制電路,由地址計數(shù)器的值來指定 ddram 中的光標(biāo)或閃爍位置。4、指令說明模塊控制芯片提供兩套控制命令,基本指令和擴(kuò)充指令如下:指令表 :5、讀寫時序圖5.1 數(shù)據(jù)傳輸過程8 位和 4 位數(shù)據(jù)線的傳輸過程串口數(shù)據(jù)線模式數(shù)據(jù)傳輸過程5.2 時序圖mpu 寫資料到 st7920(8 位數(shù)據(jù)線模式)mpu 從 st7920 讀資料(8 位數(shù)據(jù)線模式)5.3 串口讀寫時序:6、軟件初始化7應(yīng)用舉例:1 )、使用前的準(zhǔn)備先給模塊加上工作電壓,再按照下圖的連接方

17、法調(diào)節(jié) lcd 的對比度,使其顯示出黑色的底影。此過程亦可以初步檢測 lcd 有無缺段現(xiàn)象。2)、字符顯示fyd12864-0402b 每屏可顯示 4 行 8 列共 32 個 1616 點(diǎn)陣的漢字,每個顯示 ram 可顯示 1 個中文字符或 2 個 168 點(diǎn)陣全高 ascii 碼字符,即每屏最多可實現(xiàn) 32 個中文字符或 64 個 ascii 碼字符的顯示。fyd12864-0402b 內(nèi)部提供 1282 字節(jié)的字符顯示 ram 緩沖區(qū)(ddram)。字符顯示是通過將字符顯示編碼寫入該字符顯示 ram 實現(xiàn)的。根據(jù)寫入內(nèi)容的不同,可分別在液晶屏上顯示 cgrom(中文字庫)、hcgrom(a

18、scii 碼字庫)及 cgram(自定義字形)的內(nèi)容。三種不同字符/字型的選擇編碼范圍為:00000006h(其代碼分別是 0000、0002、0004、0006共 4 個)顯示自定義字型,02h7fh 顯示半寬 ascii 碼字符,a1a0hf7ffh 顯示 8192 種 gb2312 中文字庫字形。字符顯示 ram 在液晶模塊中的地址 80h9fh。字符顯示的 ram 的地址與 32 個字符顯示區(qū)域有著一一對應(yīng)的關(guān)系,其對應(yīng)關(guān)系如下表所示。3) 、圖形顯示先設(shè)垂直地址再設(shè)水平地址(連續(xù)寫入兩個字節(jié)的資料來完成垂直與水平的坐標(biāo)地址)垂直地址范圍 ac5.ac0水平地址范圍 ac3ac0繪圖

19、ram 的地址計數(shù)器(ac)只會對水平地址(x 軸)自動加一,當(dāng)水平地址=0fh 時會重新設(shè)為 00h 但并不會對垂直地址做進(jìn)位自動加一,故當(dāng)連續(xù)寫入多筆資料時,程序需自行判斷垂直地址是否需重新設(shè)定。gdram 的坐標(biāo)地址與資料排列順序如下圖:2.2.3公農(nóng)歷轉(zhuǎn)換1)概述、公歷是全世界通用的歷法以地球繞太陽的一周為一年,一年365 天,分為12 個月: 1 3 5 7 8 10 12 月為31 天, 2 月為28 天,其余月份為30 天。事實上地球繞太陽一周共365 天5 小時48 分46 秒,比公歷一年多出5 小時48分46 秒。為使年誤差不累積,公歷年用閏年法來消除年誤差 ,由于每年多出5

20、 小時48 分46 秒每4 年累計多出23小時15 分4 秒接近1 天,天文學(xué)家就規(guī)定每4 年有一個閏年,把2 月由28 天改為29 天,凡是公歷年代能被4 整除的那一年就是閏年,但是這樣一來每4 年又少了44 分56 秒,為了更準(zhǔn)確地計時,天文學(xué)家又規(guī)定凡能被100 整除的年份,只有能被400 整除才是閏年,即每400 年要減掉3 個閏年經(jīng)過這樣處理后實際上每400 年的誤差只有2 小時53 分20 秒已相當(dāng)準(zhǔn)確了。、農(nóng)歷與公歷不同農(nóng)歷把月亮繞地球一周作為一月,因為月亮繞地球一周不是一整天,所以農(nóng)歷把月分為大月和小月,大月30 天小月29 天,通過設(shè)置大小月使農(nóng)歷日始終與月亮與地球的位置相對

21、應(yīng),為了使農(nóng)歷的年份與公歷年相對應(yīng),農(nóng)歷通過設(shè)置閏月的辦法使它的平均年長度與公歷年相等,農(nóng)歷是中國傳統(tǒng)文化的代表之一并與農(nóng)業(yè)生產(chǎn)聯(lián)系密切,中國人民特別是廣大農(nóng)民十分熟悉并喜愛農(nóng)歷。、公歷與農(nóng)歷是我國目前并存的兩種歷法各有其固有的規(guī)律,農(nóng)歷與月球的運(yùn)行相對應(yīng)其影響因素多,它的大小月和閏月與天體運(yùn)行有關(guān),計算十分復(fù)雜且每年都不一致,因此要用單片機(jī)實現(xiàn)公歷與農(nóng)歷的轉(zhuǎn)換用查表法是最方便實用的辦法。、51 系列單片機(jī)因其在功能上能滿足大部份對速度要求不高的應(yīng)用場合,且價格低廉開發(fā)工具普及程度高,是目前應(yīng)用最多的單片機(jī)之一,本文介紹一種用51 單片機(jī)實現(xiàn)從1901 年到2099 年,199 年公歷日到農(nóng)歷

22、日及星期的轉(zhuǎn)換方法,并向讀者提供完整的51 匯編程序。2)基本原理、實現(xiàn)公歷與農(nóng)歷的轉(zhuǎn)換一般采用查表法,按日查表是速度最快的方法,但51 單片機(jī)尋址能力有限不可能采用按日查表的方法,除按日查外我們可以通過按月查表和按年查表的方法,再通過適當(dāng)?shù)挠嬎銇泶_定公歷日所對應(yīng)的農(nóng)歷日期,本文采用的是按年查表法最大限度地減少表格所占的程序空間。、對于農(nóng)歷月來說大月為30 天小月為29 天,這是固定不變的,這樣我們就可用1 個bit 位來表示大小月信息,農(nóng)歷一年如有閏月為13 個月,否則是12 個月,所以一年需要用13 個bit 。閏月在農(nóng)歷年中所在的月份并不固定大部分閏月分布在農(nóng)歷2 8 月但也有少量年份在

23、9 月以后,所以要表示閏月的信息至少要4 個bit。 在這里我們用4 個bit的值來表示閏月的月份值,為0 表示本年沒有閏月,有了以上信息還不足以判斷公歷日對應(yīng)的農(nóng)歷日,因為還需要一個參照日,我們選用農(nóng)歷正月初一所對應(yīng)的公歷日期作參照日,公歷日最大為31 日,需要5 個bit 來表示,而春節(jié)所在的月份不是1 月就是2 月,用1bit 就夠了考慮到表達(dá)方便我們用2bit 來表示春節(jié),月2bit 的值直接表示月份,這樣一年的農(nóng)歷信息只用3 個字節(jié)就全部包括了。、計算公歷日對應(yīng)的農(nóng)歷日期的方法,先計算出公歷日離當(dāng)年元旦的天數(shù),然后查表取得當(dāng)年的春節(jié)日期,計算出春節(jié)離元旦的天數(shù),二者相減即可算出公歷日

24、離春節(jié)的天數(shù)以后只要根據(jù)大小月和閏月信息減一月天數(shù),調(diào)整一月農(nóng)歷月份即可推算出公歷日所對應(yīng)的農(nóng)歷日期,如公歷日不到春節(jié)日期農(nóng)歷年要比公歷年小一年,農(nóng)歷大小月取前一年的信息,農(nóng)歷月從12 月向前推算。、公歷日是非常有規(guī)律的所以公歷日所對應(yīng)的星期天可以通過計算直接得到,理論上公元0 年1 月1 日為星期日,只要 求得公歷日離公元0 年1 月1 日的日子數(shù)除7 后的余數(shù)就是星期幾,為了簡化計算采用月校正法,根據(jù)公歷的年月日可直接計算出星期天,其算法是日期年份所過閏年數(shù),月校正數(shù)之和除7 的余數(shù)就是星期幾,但如果是在閏年又不到3 月份,上述之和要減一天再除7 ,其1 12 月的校正數(shù)據(jù)為6 2 2 5

25、 0 3 5 1 4 6 2 4 在本程序中采用1 個字節(jié)表示年份閏年數(shù)也只計算1900 年以后的閏年數(shù)所以實際校正數(shù)據(jù)也和上述數(shù)據(jù)不同。三 系統(tǒng)硬件的設(shè)計3.1系統(tǒng)硬件電路設(shè)計3.1.1系統(tǒng)硬件框圖如圖時鐘芯片ds1302串口at89c51p2口led顯示器驅(qū)動電路鍵盤輸入3.1.2 at89s51單片機(jī)本系統(tǒng)采用的是美國atmel公司生產(chǎn)的at89c51單片機(jī),首先我們來熟悉一下at89c51單片機(jī)的外部引腳和內(nèi)部結(jié)構(gòu)。1).單片機(jī)的引腳功能at89c51單片機(jī)有40個引腳。l vcc:電源電壓+5vl gnd:接地l p0口:p0口是一組8位漏極開路型雙向i/o口,也即地址/數(shù)據(jù)總線復(fù)用

26、口。作為輸出口用時,每位能驅(qū)動8個ttl邏輯門電路,對端口寫“1”可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線服用,在訪問期間激活內(nèi)部上拉電阻。在flash編程時,p0口接收指令字節(jié),而在程序校驗時,輸出指令字節(jié),校驗時要求外接上拉電阻。l p1口:p1口是一個帶內(nèi)部上拉電阻的8位雙向i/o,p1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個ttl邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流。 flash 編程和程序校驗期間,p1接收低

27、8位地址。l p2口:p2口是一個帶內(nèi)部上拉電阻的8位雙向i/o,p2的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個ttl邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流。在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器(例如執(zhí)行movxdptr指令)時,p2口送出高8位地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲器(movx ri指令)時,p2口線上的內(nèi)容(也即特殊功能寄存器(sfr)區(qū)中p2寄存器的內(nèi)容),在整個訪問期間不改變。flash 編程和程序校驗期間,p2亦接收低高位地址和其他控制信號。

28、l p3口:p3口是一組帶內(nèi)部上拉電阻的8位雙向i/o,p3的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個ttl邏輯門電路。對p3口寫入“1”時,它們被內(nèi)部的上拉電阻拉高并可作為輸入端口。作輸入端時,被外部拉低的p3口將用上拉電阻輸出電流。p3口除了作為一般的i/o口線外,更重要的用途是它的第二功能,見表3-1所示:p3口還接收一些用于flash閃速存儲器編程和程序校驗的控制信號。表3-1 p3口的第二功能圖端口引腳第二功能p3.0rxd(串行輸入口)p3.1txd(串行輸出口)p3.2int0(外中斷0)p3.3int1(外中斷1)p3.4t0(定時/計時器0外部輸入)p3.5t1(定時/計時器1

29、外部輸入)p3.6wr(外部數(shù)據(jù)存儲器寫選通)p3.7rd(外部數(shù)據(jù)存儲器讀選通)l rst:復(fù)位輸入。當(dāng)振蕩器工作時,rst引腳出現(xiàn)兩個機(jī)器周期以上高電平將使單片機(jī)復(fù)位。wdt溢出將使引腳輸出高電平,設(shè)置sfr auxr的disrt0(地址8eh)可打開或關(guān)閉該功能。disrt0位缺省為reset輸出高電平打開狀態(tài)。l ale/prog:當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時,ale(地址鎖存器允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲器,ale仍以時鐘振蕩頻率的1/6輸出固定的正脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時將跳過一個ale脈

30、沖。對flash存儲器編程期間,該引腳還用于輸入編程脈沖(prog)。如有必要,可通過多特殊功能寄存器(sfr)區(qū)中的8eh單元的d0位置,可禁止ale操作。該位置后,只有一條movx和movc指令ale才會被激活。另外,該引腳會被微弱拉高,單片機(jī)執(zhí)行外部程序時,應(yīng)設(shè)置ale無效。l psen:程序存儲允許(psen)輸出是外部程序存儲器的讀選通信號,當(dāng)at89c51由外部程序存儲器取指令(或數(shù)據(jù))時,每個機(jī)器周期兩次psen有效,即輸出兩個脈沖。當(dāng)訪問外部數(shù)據(jù)存儲器,沒有兩次有效的psen信號。l ea/vpp:外部訪問允許。欲使cpu僅訪問外部程序存儲器(地址為0000hffffh),ea

31、端必須保持低電平(接地)。需要注意的是:如果加密位lb1被編程,復(fù)位時內(nèi)部會鎖存ea端狀態(tài)。如ea端為高電平(接vcc端),cpu則執(zhí)行內(nèi)部程序存儲器中的指令。flash存儲器編程時,該引腳加上+12v的變成電壓vpp.l xtal1:振蕩器反相放大器及內(nèi)部時鐘發(fā)生器的輸入端。l xtal2:振蕩器反相放大器的輸出端。at89c51單片機(jī)內(nèi)部結(jié)構(gòu)31.3).at89c51單片機(jī)與mcs-51完全兼容 l 看門狗(wdt):wdt是一種需要軟件控制的復(fù)位方式。wdt 由13位計數(shù)器和特殊功能寄存器中的看門狗定時器復(fù)位存儲器(wdtrst)構(gòu)成。wdt 在默認(rèn)情況下無法工作;為了激活wdt,用戶必

32、須往wdtrst 寄存器(地址:0a6h)中依次寫入01eh 和0e1h。當(dāng)wdt激活后,晶振工作,wdt在每個機(jī)器周期都會增加。wdt計時周期依賴于外部時鐘頻率。除了復(fù)位(硬件復(fù)位或wdt溢出復(fù)位),沒有辦法停止wdt工作。當(dāng)wdt溢出,它將驅(qū)動rsr引腳輸出一個高電平。l 可編程串口(uart)在at89c51中,uart 的操作與at89c51 和at89c52 一樣。at89c51系列單片機(jī)的串行通信口可以工作于同步和異步通信方式。當(dāng)工作于異步方式時,它具有全雙工的操作功能,也就是說,它可以同時進(jìn)行數(shù)據(jù)的發(fā)送和接收。串行口內(nèi)的接收器采用的是雙緩沖結(jié)構(gòu),能夠在接收到的第一個字節(jié)從接收寄存

33、器讀走之前就開始接收第二個字節(jié)(當(dāng)然,如果第二個字節(jié)接收完畢,而第一個字節(jié)仍然沒有被讀走,那將會丟掉一個字節(jié))。串行口的發(fā)送和接收操作都是通過特殊功能寄存器中的數(shù)據(jù)緩沖寄存器sbuf進(jìn)行的,但在sbuf的內(nèi)部,接收寄存器和發(fā)送寄存器在物理結(jié)構(gòu)上是完全獨(dú)立的。如果將數(shù)據(jù)寫入sbuf,數(shù)據(jù)會被送入發(fā)送寄存器準(zhǔn)備發(fā)送。如果執(zhí)行sbuf指令,則讀出的數(shù)據(jù)一定來自接收緩存器。因此,cpu對sbuf的讀寫,實際上是分別訪問2個不同的寄存器。這2個寄存器的功能決不能混淆。l 振蕩電路:at89c51系列單片機(jī)的內(nèi)部振蕩器,由一個單極反相器組成。xtal1反相器的輸入,xtal2為反相器的輸出??梢岳盟鼉?nèi)部

34、的振蕩器產(chǎn)生時鐘,只要xtal1和xtal2引腳上一個晶體及電容組成的并聯(lián)諧振電路,便構(gòu)成一個完整的振蕩信號發(fā)生器,此方式稱為內(nèi)部方式。另一種方式由外部時鐘源提供一個時鐘信號到xtal1端輸入,而xtal2端浮空。在組成一個單片機(jī)應(yīng)用系統(tǒng)時,多數(shù)采用這種方式,這種方式結(jié)構(gòu)緊湊,成本低廉,可靠性高。在電路中,對電容c1和c2的值要求不是很嚴(yán)格,如果使用高質(zhì)的晶振,則不管頻率為多少,c1、c2通常都選擇30pf。l 定時/計數(shù)器:at89c51單片機(jī)內(nèi)含有2個16位的定時器/計數(shù)器。當(dāng)用于定時器方式時,定時器的輸入來自內(nèi)部時鐘發(fā)生電路,每過一個機(jī)器周期,定時器加1,而一個機(jī)器周期包含有12個振蕩周

35、期,所以,定時器的技術(shù)頻率為晶振頻率的1/12,而計數(shù)頻率最高為晶振頻率的1/24。為了實現(xiàn)定時和計數(shù)功能,定時器中含有3種基本的寄存器:控制寄存器、方式寄存器和定時器/計數(shù)器??刂萍拇嫫魇且粋€8位的寄存器,用于控制定時器的工作狀態(tài),方式寄存器是一個8位的寄存器,用于確定定時器的工作方式,定時器/計數(shù)器是16位的計數(shù)器,分為高字節(jié)和低字節(jié)兩部分。l ram:高于7fh內(nèi)部數(shù)據(jù)存儲器的地址是8位的,也就是說其地址空間只有256字節(jié),但內(nèi)部ram的尋址方式實際上可提供384字節(jié)。的直接地址訪問同一個存儲空間,高于7fh的間接地址訪問另一個存儲空間。這樣,雖然高128字節(jié)區(qū)分與專用寄器 ,即特殊功能

36、寄存器區(qū)的地址是重合的,但實際上它們是分開的。究竟訪問哪一區(qū),存是通過不同的尋址方式加以區(qū)分的。l sfr:sfr是具有特殊功能的所有寄存器的集合,共含有22個不同寄存器,它們的地址分配在80hffh中。雖然如此,不是所有的單元都被特殊功能寄存器占用,未被占用的單元,其內(nèi)容是不確定的。如對這些單元進(jìn)行讀操作,得到的是一些隨機(jī)數(shù),而寫入則無效,所以在編程時不應(yīng)該將數(shù)據(jù)寫入這些未確定的地址單元中,特殊功能寄存器主要有累加器acc、b寄存器、程序狀態(tài)字寄存器psw、堆棧指針sp、數(shù)據(jù)指針dptr、i/o端口、串行口數(shù)據(jù)緩沖器sbuf、定時器寄存器、捕捉寄存器、控制寄存器。l 中斷系統(tǒng):at89c51

37、單片機(jī)有6個中斷源,中斷系統(tǒng)主要由中斷允許寄存器ie、中斷優(yōu)先級寄存器ip、優(yōu)先級結(jié)構(gòu)和一些邏輯門組成。ie寄存器用于允許或禁止中斷;ip寄存器用于確定中斷源的優(yōu)先級別;優(yōu)先級結(jié)構(gòu)用于執(zhí)行中斷源的優(yōu)先排序;有關(guān)邏輯門用于輸入中斷請求信號。在整個中斷響應(yīng)過程中cpu所執(zhí)行的操作步驟如下:(1)完成當(dāng)前指令的操作(2)將pc內(nèi)容壓入堆棧(3)保存當(dāng)前的中斷狀態(tài)(4)阻止同級的中斷請求(5)將中斷程序入口地址送pc寄存器(6)執(zhí)行中斷服務(wù)程序(7)返回3.1.4 實時時鐘芯片 ds1302 現(xiàn)在流行的串行時鐘電路很多,如ds1302、 ds1307、pcf8485等。這些電路的接口簡單、價格低廉、使

38、用方便,被廣泛地采用。本文介紹的實時時鐘電路ds1302是dallas公司的一種具有涓細(xì)電流充電能力的電路,主要特點(diǎn)是采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能。采用普通32.768khz晶振。 ds1302 是美國dallas公司推出的一種高性能、低功耗、帶ram的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進(jìn)行計時,具有閏年補(bǔ)償功能,工作電壓為2.5v5.5v。采用三線接口與cpu進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或ram數(shù)據(jù)。ds1302內(nèi)部有一個318的用于臨時性存放數(shù)據(jù)的ram寄存器。ds1302是ds1202的升級產(chǎn)品,

39、與ds1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進(jìn)行涓細(xì)電流充電的能力。 ds1302的引腳排列,其中vcc1為后備電源,vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運(yùn)行。ds1302由vcc1或vcc2兩者中的較大者供電。當(dāng)vcc2大于vcc10.2v時,vcc2給ds1302供電。當(dāng)vcc2小于vcc1時,ds1302由vcc1供電。x1和x2是振蕩源,外接32.768khz晶振。rst是復(fù)位/片選線,通過把rst輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,rst提供

40、終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)rst為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對ds1302進(jìn)行操作。如果在傳送過程中rst置為低電平,則會終止此次數(shù)據(jù)傳送,i/o引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時,在vcc2.5v之前,rst必須保持低電平。只有在sclk為低電平時,才能將rst置為高電平。i/o為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說明。sclk始終是輸入端。ds1302有下列幾組寄存器: ds1302有關(guān)日歷、時間的寄存器共有12個,其中有7個寄存器(讀時81h8dh,寫時80h8ch),存放的數(shù)據(jù)格式為 bcd 碼形式,如圖所示。ds1302有關(guān)日歷、時間的寄存器小時寄存器(85h、84

41、h)的位7用于定義 ds1302是運(yùn)行于12小時模式還是24小時模式。當(dāng)為高時,選擇12小時模式。在12小時模式時,位5是 ,當(dāng)為1時,表示 pm。在24小時模式時,位5是第二個10小時位。秒寄存器(81h、80h)的位7定義為時鐘暫停標(biāo)志(ch)。當(dāng)該位置為1時,時鐘振蕩器停止,ds1302處于低功耗狀態(tài);當(dāng)該位置為0時,時鐘開始運(yùn)行。控制寄存器(8fh、8eh)的位7是寫保護(hù)位(wp),其它7位均置為0。在任何的對時鐘和 ram 的寫操作之前,wp 位必須為0。當(dāng)wp 位為1時,寫保護(hù)位防止對任一寄存器的寫操作。 ds1302有關(guān) ram 的地址ds1302中附加31字節(jié)靜態(tài) ram 的地

42、址如圖所示。 ds1302的工作模式寄存器所謂突發(fā)模式是指一次傳送多個字節(jié)的時鐘信號和 ram 數(shù)據(jù)。突發(fā)模式寄存器如圖所示。此外,ds1302還有充電寄存器等。2 讀寫時序說明ds1302是 spi 總線驅(qū)動方式。它不僅要向寄存器寫入控制字,還需要讀取相應(yīng)寄存器的數(shù)據(jù)。要想與 ds1302通信,首先要先了解 ds1302的控制字。ds1302的控制字如圖。控制字(即地址及命令字節(jié))控制字的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到 ds1302中。位6:如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取 ram 數(shù)據(jù);位5至位1(a4a0):指示操作單元的地址;位0(最低有效

43、位):如為0,表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作。控制字總是從最低位開始輸出。在控制字指令輸入后的下一個sclk 時鐘的上升沿時,數(shù)據(jù)被寫入 ds1302,數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令后的下一個 sclk 脈沖的下降沿讀出 ds1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。數(shù)據(jù)讀寫時序如圖數(shù)據(jù)讀寫時序3 電路原理圖:電路原理圖如圖8,ds1302與單片機(jī)的連接也僅需要3條線:ce 引腳、sclk 串行時鐘引腳、i/o 串?dāng)?shù)據(jù)引腳,vcc2為備用電源,外接32.768khz 晶振,為芯片提供計時脈沖。四 系統(tǒng)的軟件設(shè)計電子萬年歷的功能是在程序控制下實現(xiàn)的。該系統(tǒng)

44、的軟件設(shè)計方法與硬件設(shè)計相對應(yīng),按整體功能分成多個不同的程序模塊,分別進(jìn)行設(shè)計、編程和調(diào)試,最后通過主程序?qū)⒏鞒绦蚰K連接起來。這樣有利于程序修改和調(diào)試,增強(qiáng)了程序的可移植性。4.1 主程序2)主程序流程圖如圖4-1所示:12864初始化1302初始化鬧鐘計數(shù)器開始從1302讀取數(shù)據(jù)鍵盤掃描2)從1302中取數(shù)據(jù)讀取1302時間、日期開始系統(tǒng)初始化是否時間調(diào)整調(diào)整時間、日期4.2主程序void main()/初始化year=11;month=8;day=15;hour=22;minute=47;second=55;fgf=-;data1=0; init(); /1602初始化調(diào)用 init_1

45、302(); /1302初始化調(diào)用 while(1) display1(); /從1302中取數(shù)據(jù) display2(); /12864顯示 key1(); /鍵盤掃描 key2(); aclock();/鬧鐘refer();/查詢 counter(); /計數(shù)器 4.3 讀取日期和時間程序/1302取數(shù) void display1(void) uchar read; read=readset1302(0x81); second=(read&0x70)4)*10+(read&0x0f); read=readset1302(0x83); minute=(read&0x70)4)*10+(read

46、&0x0f); read=readset1302(0x85); hour=(read&0x70)4)*10+(read&0x0f); read=readset1302(0x87); day=(read&0x70)4)*10+(read&0x0f); read=readset1302(0x89); month=(read&0x70)4)*10+(read&0x0f); read=readset1302(0x8d); year=(read&0xf0)4)*10+(read&0x0f); 4.4 顯示子程序.void display2(void)/年月日 year=(2000+year); lcd_

47、writecom(0x80);delay(1); lcd_writedate(table3year/1000);delay(1);lcd_writedate(table3(year%1000)/100);delay(1);lcd_writedate(table3(year%1000)%100)/10);delay(1); lcd_writedate(table3year%10);delay(1);lcd_writedate(fgf);delay(1); lcd_writedate(table3month/10);delay(1); lcd_writedate(table3month%10);d

48、elay(1); lcd_writedate(fgf);delay(1); lcd_writedate(table3day/10);delay(1);lcd_writedate(table3day%10 ); /時分秒 lcd_writecom(0x80+0x40);delay(1); lcd_writedate(table3hour/10);delay(1); lcd_writedate(table3hour%10);delay(1);lcd_writedate(fgf);delay(1); lcd_writedate(table3minute/10);delay(1); lcd_write

49、date(table3minute%10);delay(1); lcd_writedate(fgf);delay(1); lcd_writedate(table3second/10);delay(1);lcd_writedate(table3second%10);4.5 鬧鐘子程序if(year1=year)if(month1=month)if(day1=day)if(hour1=hour)if(minute1=minute)if(second1=second)voice(); else五 proteus使用5.1編程環(huán)境proteusproteus軟件是由英國labcenter electr

50、onics 公司開發(fā)的eda工具軟件,由isis和ares兩個軟件構(gòu)成,其中isis是一款便捷的電子系統(tǒng)仿真平臺軟件,ares是一款高級的布線編輯軟件,它集成了高級原理布線圖、混合模式spice電路仿真、pcb設(shè)計以及自動布線來實現(xiàn)一個完整的電子設(shè)計。5.2用proteus isis對電子萬年歷的硬件電路設(shè)計通過proteus isis軟件的vsm(虛擬仿真技術(shù)),用戶可以對模擬電路、數(shù)字電路、模數(shù)混合電路,以及基于微控制器的系統(tǒng)連同所有外圍接口電子元器件一起仿真。用proteus isis設(shè)計硬件電路的過程: 選擇設(shè)計圖紙的到小根據(jù)設(shè)計所使用到元器件的多少,選擇合適大小的設(shè)計圖紙,操作是單擊菜單欄上的systemset sheet size ,然后彈出如圖5-1所示的對話框,從中選擇合適大小的圖紙,也可以選擇user進(jìn)行圖紙的自定義設(shè)置。在設(shè)計過程中也可以通過此方法調(diào)整圖紙的大小。圖 5-1 選取仿真所需的元器件 選取元器件的方式是,單擊如圖5-2所示的按鈕“p”。會彈出如圖5-3所示從此窗口的左上角的“keywords”中輸入電子萬年歷設(shè)計用到的器件,如輸入“at89c51

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論