多功能數(shù)字時(shí)鐘 單片機(jī)課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  課 程 設(shè) 計(jì)</b></p><p>  課程名稱_ 單片機(jī)原理與接口技術(shù) </p><p>  題目名稱 多功能數(shù)字時(shí)鐘 </p><p>  學(xué)生學(xué)院_ 材料與能源學(xué)院 </p><p>  專業(yè)班級(jí)_ 電子材料及元器

2、件方向</p><p>  學(xué) 號(hào)_ _ </p><p>  學(xué)生姓名_ ____________ </p><p>  指導(dǎo)教師_ </p><p>  2013 年 1 月 16 日</p><p><

3、;b>  一、課程設(shè)計(jì)的內(nèi)容</b></p><p>  用AT89C52單片機(jī)制作一個(gè)時(shí)鐘:</p><p>  1.設(shè)計(jì)并繪制硬件電路圖;</p><p>  2.布置元件并焊接好元器件;</p><p>  3.編寫程序并將調(diào)試好的程序固化到單片機(jī)中。</p><p>  4.增加溫度測(cè)試功能。

4、</p><p>  二、課程設(shè)計(jì)的要求與數(shù)據(jù)</p><p>  單片機(jī)采用STC89C52芯片,時(shí)鐘芯片采用DALLAS 公司的DS1302,即涓流充電時(shí)鐘芯片,它內(nèi)含有一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31 字節(jié)靜態(tài)RAM,通過(guò)簡(jiǎn)單的串行接口與單片機(jī)進(jìn)行通信實(shí)時(shí)時(shí)鐘/日歷電路提供秒分時(shí)日日期月年的信息,每月的天數(shù)和閏年的天數(shù)可自動(dòng)調(diào)整,時(shí)鐘操作可通過(guò)AM/PM 指示決定采用24 或12 小時(shí)格式,

5、DS1302 與單片機(jī)之間能簡(jiǎn)單地采用同步串行的方式進(jìn)行通信。同時(shí)用選DS18B20 傳感器將采集的室內(nèi)溫度顯示于LCD上。按此要求設(shè)計(jì)硬件和軟件以實(shí)現(xiàn)這些功能。</p><p>  三、課程設(shè)計(jì)應(yīng)完成的工作</p><p>  1. 完成下載線的制作,為程序下載到單片機(jī)芯片中做好準(zhǔn)備;</p><p>  2. 完成軟件、硬件的設(shè)計(jì),并進(jìn)行硬件的焊接制作,并將調(diào)試

6、成功的程序固化到單片機(jī)中,最后進(jìn)行硬件與軟件的調(diào)試;</p><p>  3.撰寫設(shè)計(jì)說(shuō)明書。</p><p>  四、課程設(shè)計(jì)進(jìn)程安排</p><p><b>  摘要</b></p><p>  隨著時(shí)代的進(jìn)步和發(fā)展,單片機(jī)技術(shù)已經(jīng)普及到我們生活,工作,科研,各個(gè)領(lǐng)域,已經(jīng)成為一種比較成熟的技術(shù),本文將介紹一種基于單

7、片機(jī)控制的液晶顯示溫度和時(shí)鐘設(shè)計(jì),時(shí)間可由鍵盤調(diào)整。主要用到的芯片有單片機(jī)STC89C52.液晶1602LCM模塊.時(shí)鐘芯片DS1302.溫度傳感器DS18B20等。</p><p>  關(guān)鍵詞:?jiǎn)纹瑱C(jī)STC89C52,1602LCM模塊,DS1302.,DS18B20</p><p><b>  目錄</b></p><p>  1 系統(tǒng)需求

8、分析1</p><p>  1.1 電子時(shí)鐘研究的背景和意義1</p><p>  1.2 系統(tǒng)實(shí)用功能分析1</p><p>  2 設(shè)計(jì)要求與方案2</p><p>  2.1 設(shè)計(jì)要求2</p><p>  2.1.1 基本要求2</p><p>  2.1.2發(fā)揮部分2&

9、lt;/p><p>  2.2 系統(tǒng)基本方案選擇2</p><p>  2.2.1 芯片的選擇2</p><p>  2.2.2 顯示模塊選擇方案2</p><p>  2.2.3 時(shí)鐘信號(hào)的選擇方案3</p><p>  2.3 電路設(shè)計(jì)最終方案決定3</p><p>  3 系統(tǒng)的硬件

10、設(shè)計(jì)與實(shí)現(xiàn)3</p><p>  3.1 數(shù)字鐘電路設(shè)計(jì)框圖3</p><p>  3.2 系統(tǒng)硬件概述4</p><p>  3.3 硬件電路結(jié)構(gòu)的設(shè)計(jì)4</p><p>  3.3.1 單片機(jī)主控制模塊的設(shè)計(jì)4</p><p>  3.3.2 顯示模塊的設(shè)計(jì)4</p><p> 

11、 3.3.3 LCD原理說(shuō)明5</p><p>  3.3.4 開(kāi)關(guān)模塊說(shuō)明6</p><p>  4 系統(tǒng)的軟件設(shè)計(jì)7</p><p>  4.1 程序流程框圖7</p><p>  4.2 LCD的初始化與及顯示程序7</p><p><b>  5 系統(tǒng)調(diào)試9</b><

12、/p><p><b>  5.1軟件調(diào)試9</b></p><p><b>  5.2硬件調(diào)試9</b></p><p><b>  參考文獻(xiàn)10</b></p><p><b>  附錄11</b></p><p><b

13、>  1 系統(tǒng)需求分析</b></p><p>  1.1 電子時(shí)鐘研究的背景和意義</p><p>  20實(shí)際末,電子技術(shù)獲得了飛速的發(fā)展。再起推動(dòng)下現(xiàn)代電子產(chǎn)品幾乎滲透到了社會(huì)的哥哥領(lǐng)域,有力的推動(dòng)和提高的社會(huì)生產(chǎn)力的發(fā)展與信息化程度,同時(shí)也是現(xiàn)代電子產(chǎn)品性能進(jìn)一步提升,產(chǎn)品的更新?lián)Q代節(jié)奏譜也越來(lái)越快。時(shí)間對(duì)人們來(lái)說(shuō)是那么的寶貴,工作的忙碌性和繁雜容易使人們忘記當(dāng)

14、前的時(shí)間。然而遇到重大事情的時(shí)候,一旦忘記時(shí)間,就會(huì)給自己或者是他人造成很大的麻煩。平時(shí)我們要求上班準(zhǔn)時(shí),約會(huì)或者召開(kāi)會(huì)議必然要提及時(shí)間、火車要準(zhǔn)點(diǎn)到達(dá),航班要準(zhǔn)時(shí)起飛,工業(yè)生產(chǎn)中,很多環(huán)節(jié)都需要時(shí)間來(lái)確定工序替換時(shí)刻。所以說(shuō)能隨時(shí)準(zhǔn)確的指導(dǎo)時(shí)間并利用時(shí)間,是我們生活中必不可少的。</p><p>  想知道時(shí)間,手表當(dāng)然是很好的選擇,但是在忙碌當(dāng)中,我們還需要一個(gè)“助理”時(shí)不時(shí)的給我們體形式將,所以,計(jì)時(shí)器最好

15、能夠用有一個(gè)定時(shí)系統(tǒng),隨時(shí)提醒容易忘記時(shí)間的人。最早能夠定時(shí)、寶石的時(shí)鐘屬于機(jī)械式鐘表,但這種時(shí)鐘受到機(jī)械結(jié)構(gòu)、動(dòng)力合體技的限制,在功能性能以及在造價(jià)上都沒(méi)有辦法與電子時(shí)鐘相比。</p><p>  電子時(shí)鐘是采用電子電路實(shí)現(xiàn)對(duì)時(shí)、分、秒進(jìn)行數(shù)字顯示的即使裝置,廣泛應(yīng)用月個(gè)人家庭、車站、碼頭辦公室等公共場(chǎng)所,成為人們?nèi)粘I罨顒?dòng)中不可少的必須品。由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛使用,是的數(shù)字時(shí)鐘的精度

16、遠(yuǎn)遠(yuǎn)查過(guò)老師鐘表,鐘表的數(shù)字化跟人們生產(chǎn)生活帶來(lái)了極大的方便,而且大大的擴(kuò)展了鐘表原先的時(shí)鐘功能。諸如整點(diǎn)提示、定時(shí)報(bào)警、定時(shí)廣播、自動(dòng)啟閉路燈,定時(shí)開(kāi)關(guān)烘箱、同多動(dòng)力設(shè)備、甚至各種定時(shí)電氣的自動(dòng)啟動(dòng)等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此研究數(shù)字鐘及擴(kuò)大其應(yīng)用,有著非?,F(xiàn)實(shí)的意義。</p><p>  1.2 系統(tǒng)實(shí)用功能分析</p><p>  單片機(jī)模塊中最常見(jiàn)的是數(shù)字時(shí)鐘,數(shù)字

17、時(shí)鐘是一種用單片機(jī)原理實(shí)現(xiàn)時(shí)、分、秒計(jì)時(shí)的裝置,與機(jī)械式時(shí)鐘相比具有更高的準(zhǔn)確性和直觀性,且無(wú)機(jī)械裝置,具有更更長(zhǎng)的使用壽命,因此得到了廣泛的使用。</p><p>  數(shù)字時(shí)鐘是采用單片機(jī)原理實(shí)現(xiàn)對(duì).年、月、日、周、時(shí)、分、秒,數(shù)字顯示及到時(shí)提醒的計(jì)時(shí)裝置,廣泛用于個(gè)人家庭,車站, 碼頭辦公室等公共場(chǎng)所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超

18、過(guò)老式鐘表, 鐘表的數(shù)字化給人們生產(chǎn)生活帶來(lái)了極大的方便,而且大大地?cái)U(kuò)展了鐘表原先的報(bào)時(shí)功能。諸如定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、自動(dòng)起閉路燈、定時(shí)開(kāi)關(guān)烘箱、通斷動(dòng)力設(shè)備、甚至各種定時(shí)電氣的自動(dòng)啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字時(shí)鐘及擴(kuò)大其應(yīng)用,有著非?,F(xiàn)實(shí)的意義。</p><p><b>  2 設(shè)計(jì)要求與方案</b></p>

19、<p><b>  2.1 設(shè)計(jì)要求</b></p><p>  2.1.1 基本要求</p><p>  1 設(shè)計(jì)能支持年月日星期時(shí)分秒的時(shí)鐘,時(shí)鐘要具有時(shí)間調(diào)整功能。</p><p><b>  2.1.2發(fā)揮部分</b></p><p>  1 鬧鐘時(shí)間精度。</p>

20、<p>  2 時(shí)鐘功耗小于0.5MA/5V。</p><p>  2.2 系統(tǒng)基本方案選擇</p><p>  本時(shí)鐘的設(shè)計(jì)具體有兩種方法。一是通過(guò)單純的數(shù)字電路來(lái)實(shí)現(xiàn);二是使用單片機(jī)來(lái)控制實(shí)現(xiàn)。本次設(shè)計(jì)選取了較為簡(jiǎn)單的單片機(jī)控制;而選擇這一方法后還要進(jìn)行各個(gè)芯片的選擇。以下是我在這次設(shè)計(jì)中所用的方案。</p><p>  2.2.1 芯片的選擇&

21、lt;/p><p>  采用AT89C52芯片,其為高性能CMOS 8位單片機(jī),該芯片內(nèi)含有4k bytes的可反復(fù)擦寫的只讀程序存儲(chǔ)器(PEROM)、128 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM)、 32位可編程I/O口線、2個(gè)16位定時(shí)/計(jì)數(shù)器、6個(gè)中斷源、可編程串行UART通道及低功耗空閑和掉電模式,其最大的優(yōu)勢(shì)就是AT89C52提供了8K字節(jié)可擦寫Flash閃速存儲(chǔ)器空間、8個(gè)中斷源、及256*8字節(jié)內(nèi)部存

22、儲(chǔ)器(RAM),解決了我們對(duì)可反復(fù)擦寫的Flash閃速存儲(chǔ)器空間大小與中斷源的不夠問(wèn)題的擔(dān)心。</p><p>  2.2.2 顯示模塊選擇方案</p><p>  方案一:采用LED數(shù)碼管顯示,顯示較為清楚,但是由于設(shè)計(jì)要求時(shí)鐘功能比較重要,因此用如用LED進(jìn)行顯示會(huì)使得硬件電路較為復(fù)雜,且在軟件實(shí)現(xiàn)上也較難,為實(shí)現(xiàn)功能帶來(lái)了一定的困難。</p><p>  方案

23、二:采用LCD,電路比較簡(jiǎn)單,且在軟件設(shè)計(jì)上也相對(duì)簡(jiǎn)單,具有低功耗功能,能夠滿足設(shè)計(jì)最優(yōu)的要求。因此,在設(shè)計(jì)中我采用的顯示模塊是LCD顯示。</p><p>  2.2.3 時(shí)鐘信號(hào)的選擇方案</p><p>  方案一:直接采用單片機(jī)定時(shí)計(jì)數(shù)器提供的秒信號(hào),使用程序?qū)崿F(xiàn)年、月、日、周、時(shí)、分、秒計(jì)數(shù)。采用此種方案可減少芯片的使用,節(jié)約成本,實(shí)現(xiàn)的時(shí)間誤差較小,但程序設(shè)計(jì)較為復(fù)雜。<

24、/p><p>  方案二:采用DS1302時(shí)鐘芯片實(shí)現(xiàn)時(shí)鐘, DS1302芯片是一種高性能的時(shí)鐘芯片,可自動(dòng)對(duì)秒、分、時(shí)、日、周、月、年以及閏年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù),而且精度高,256位的RAM作為數(shù)據(jù)暫存區(qū),工作電壓2.5V~5.5V范圍內(nèi),2.5V時(shí)耗電小于300nA。且硬件電路連接較為簡(jiǎn)單,程序設(shè)計(jì)容易實(shí)現(xiàn)。</p><p>  2.3 電路設(shè)計(jì)最終方案決定</p><p

25、>  綜上各方案所述,對(duì)此次數(shù)字時(shí)鐘的方案選定為: 采用AT89C52作為主控制系統(tǒng); 并由其定時(shí)計(jì)數(shù)器提供時(shí)鐘; LCD作為顯示電路,來(lái)實(shí)現(xiàn)功能。</p><p>  3 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)</p><p>  3.1 數(shù)字鐘電路設(shè)計(jì)框圖</p><p>  圖3-1電路設(shè)計(jì)框圖</p><p>  3.2 系統(tǒng)硬件概述</p

26、><p>  該電路是由AT89C52單片機(jī)為控制核心,具有在線編程功能,低功耗,能在3V超低壓工作;時(shí)鐘電路也由AT89C52單片機(jī)提供,減少芯片的使用,節(jié)約成本,它可以對(duì)年、月、日、周、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能。時(shí)間顯示部份采用液晶LM016L(LCD)。</p><p>  3.3 硬件電路結(jié)構(gòu)的設(shè)計(jì)</p><p>  3.3.1 單片機(jī)主控制模

27、塊的設(shè)計(jì)</p><p>  此次單片機(jī)數(shù)字時(shí)鐘的設(shè)計(jì)采用AT89C52為主控制芯片,并由其定時(shí)器提供時(shí)鐘,利用LCD進(jìn)行時(shí)間按顯示。下圖為用Proteus軟件畫的原理圖:</p><p><b>  圖3-2仿真電路圖</b></p><p>  3.3.2 顯示模塊的設(shè)計(jì)</p><p>  如圖(3-4)所示,該設(shè)

28、計(jì)采用液晶顯示裝置即把時(shí)鐘信號(hào)以及溫度信號(hào)同時(shí)顯示在液晶顯示器上,不僅結(jié)構(gòu)簡(jiǎn)單清新可見(jiàn),而且省電也容易控制。數(shù)據(jù)的傳輸采用P0口進(jìn)行控制, 其引腳VSS接地,VEE接VCC,RS和RW、E是顯示器的控制端分別由單片機(jī)的引腳P1.0、P1.1、P1.3進(jìn)行控制。而VDD是作為液晶顯示器的灰度調(diào)節(jié)引腳,接一變阻器來(lái)改變其顯示的清晰度。</p><p>  圖3-3 LM016L液晶顯示器</p><

29、;p>  3.3.3 LCD原理說(shuō)明</p><p>  在實(shí)際應(yīng)用中,用戶很少直接設(shè)計(jì)LCD顯示器驅(qū)動(dòng)接口,一般是直接使用專用的LCD顯示驅(qū)動(dòng)器和LCD顯示模塊。其中,LCD顯示模塊LCM(Liquid Crystal Display Module)是把LCD顯示器、背景光源、線路板和驅(qū)動(dòng)集成電路等部件構(gòu)成一個(gè)整體,作為一個(gè)獨(dú)立的部件使用,具有功能較強(qiáng)、易于控制、接口簡(jiǎn)單等

30、優(yōu)點(diǎn),在單片機(jī)系統(tǒng)中應(yīng)用較多。其內(nèi)部結(jié)構(gòu)如圖2-8所示。LCD顯示模塊只留一個(gè)接口與外部通信。顯示模塊通過(guò)這個(gè)接口接收顯示命令和數(shù)據(jù),并按指令和數(shù)據(jù)的要求進(jìn)行顯示。外部電路通過(guò)這個(gè)接口讀出顯示模塊的工作狀態(tài)和顯示數(shù)據(jù)。LCD顯示模塊一般帶有內(nèi)部顯示RAM和字符發(fā)生器,只要輸入ASCII碼就可以進(jìn)行顯示。LCD顯示模塊按功能顯示可分為:LCD段式顯示模塊、LCD字符型顯示模塊、LCD圖形顯示塊三類。液晶顯示器因其功耗低、重量輕而成為便攜式

31、應(yīng)用中的主流顯示技術(shù)。這里所用的字符型液晶模塊是一種用5x7點(diǎn)陣圖形來(lái)顯示字符的液晶顯示器,根據(jù)顯示的容量可以分為1行16個(gè)字、2行16個(gè)字、2行20個(gè)字等等。液晶顯示有點(diǎn)振式和字符式兩種,在這里采用字符式液晶顯示器1602來(lái)實(shí)現(xiàn)顯示電路的</p><p>  圖3-4 LCD顯示電路</p><p>  由于1602液晶顯示器是本身帶有驅(qū)動(dòng)模塊的液晶屏,它只有并口線和一些控制線,與單片機(jī)

32、的連接有兩種不同的方法,直接訪問(wèn)方式和間接訪問(wèn)方式。直接訪問(wèn)方式就是微處理器把液晶顯示模塊當(dāng)作存儲(chǔ)器或I/O設(shè)備直接掛在總線上,模塊8位數(shù)據(jù)總線與微處理器的數(shù)據(jù)總線相連,用讀操作 或?qū)懖僮?#160;信號(hào)與地址信號(hào)共同產(chǎn)生控制信號(hào)。</p><p>  3.3.4 開(kāi)關(guān)模塊說(shuō)明</p><p>  校時(shí)電路主要靠鍵盤來(lái)控制。鍵盤是一組按鍵的集合。共有四個(gè)按鍵,分別是:改變時(shí)間、

33、增加、減少、清零。它是嵌入式計(jì)算機(jī)系統(tǒng)中不可缺少的外圍電路。是實(shí)現(xiàn)人機(jī)對(duì)話的紐帶,借助鍵盤可以向計(jì)算機(jī)輸入程序、置數(shù)、邏輯操作以及寫入程序和程序檢測(cè)等。</p><p><b>  4 系統(tǒng)的軟件設(shè)計(jì)</b></p><p>  4.1 程序流程框圖</p><p>  圖4-1 主程序流程</p><p>  4.2

34、LCD的初始化與及顯示程序</p><p>  1 LCD的初始化</p><p>  void ini()/*LCD的初始化函數(shù)</p><p><b>  {</b></p><p><b>  rw=0;</b></p><p><b>  en=0;<

35、;/b></p><p><b>  P1=0xff;</b></p><p>  writeCG();</p><p>  write_order(0x38);/*端口寫入</p><p>  write_order(0x0c); /*端口寫入</p><p>  write_order(

36、0x06); /*端口寫入</p><p>  write_order(0x01); /*端口寫入</p><p><b>  }</b></p><p>  2 LCD的顯示程序</p><p>  void open()/*定義一個(gè)LCD顯示函數(shù)</p><p><b>  {&l

37、t;/b></p><p>  uchar num; /*定義一個(gè)無(wú)符號(hào)的字符變量num</p><p>  write_order(0x80+0x10); /*調(diào)用write_order函數(shù) </p><p>  for(num=0;opens[num]!='\0';num++)/*循環(huán)打開(kāi)</p><p><b

38、>  {</b></p><p>  write_date(opens[num]);</p><p>  delay(20);</p><p><b>  }</b></p><p>  for(num=0;num<16;num++)/*對(duì)端口0x1c寫入</p><p>

39、<b>  {</b></p><p>  write_order(0x1c);</p><p>  delay(200);</p><p><b>  }</b></p><p>  for(num=0;num<5;num++)/*對(duì)端口0x18寫入{</p><p&g

40、t;  write_order(0x18);</p><p>  delay(200);</p><p><b>  }</b></p><p>  for(num=0;num<4;num++)/*對(duì)端口0x18寫入</p><p><b>  {</b></p><p&g

41、t;  write_order(0x1c);</p><p>  delay(200);</p><p><b>  }</b></p><p>  for(num=0;num<3;num++)/*對(duì)端口0x18寫入</p><p><b>  {</b></p><p&g

42、t;  write_order(0x18);</p><p>  delay(200);</p><p><b>  }</b></p><p>  for(num=0;num<2;num++)/*對(duì)端口0x1c寫入</p><p><b>  {</b></p><p&g

43、t;  write_order(0x1c);</p><p>  delay(200);</p><p><b>  }</b></p><p>  for(num=0;num<1;num++)/*對(duì)端口0x18寫入</p><p><b>  {</b></p><p&g

44、t;  write_order(0x18);</p><p>  delay(100);</p><p><b>  }</b></p><p>  write_order(0x80+0x53);</p><p>  for(num=0;opens1[num]!='\0';num++)/*循環(huán)延時(shí)寫入數(shù)據(jù)

45、</p><p>  { write_date(opens1[num]); </p><p>  delay(500);}</p><p><b>  5 系統(tǒng)調(diào)試</b></p><p><b>  5.1軟件調(diào)試</b></p><p>  打開(kāi)程序調(diào)試軟件keil u

46、Vision2,在里面新建一個(gè)工程,命名為:數(shù)字時(shí)鐘.Uv2。接著新建文件,編寫相應(yīng)程序。編寫好的各個(gè)程序進(jìn)行編譯與連接。但若是在該過(guò)程中,看見(jiàn)我們編好的程序有錯(cuò)誤,那么就根據(jù)他相應(yīng)的提示來(lái)修改錯(cuò)誤,直到該程序能夠正確編譯為止。</p><p>  能夠正常編譯的程序說(shuō)明沒(méi)有什么問(wèn)題了,此時(shí)我們?cè)邳c(diǎn)擊相關(guān)欄目,讓它生成我們?cè)谟布抡鏁r(shí)所需要的.HEX文件。到此步,我們的軟件調(diào)試就完成了。</p>&

47、lt;p><b>  5.2硬件調(diào)試</b></p><p>  打開(kāi)Proteus 7 Professional軟件,按照方案所選的電路元件來(lái)設(shè)計(jì)整體電路,線把個(gè)芯片按一定的位置放好,然后對(duì)相應(yīng)的對(duì)象進(jìn)行連接,連接時(shí)需仔細(xì),以免調(diào)試時(shí)發(fā)生錯(cuò)誤。做好之后把編程所生成的。HEX文件加載到AT89C52中,運(yùn)行仿真軟件,查看運(yùn)行效果。如果運(yùn)行出錯(cuò)那么就根據(jù)他相應(yīng)的提示來(lái)修改錯(cuò)誤,直到仿真成

48、功為止。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 邊春遠(yuǎn)、王志強(qiáng),MCS-51單片機(jī)應(yīng)用開(kāi)發(fā)實(shí)用子程序[M],人民郵電出版社.</p><p>  [2] 馬忠梅主編,單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì)[M],北京航空航天大學(xué)出版社.</p><p>  [3] 李朝青主編,單片機(jī)原理及接口技術(shù)

49、(第3版)[M], 北京航空航天大學(xué)出版社.</p><p>  [4] 譚浩強(qiáng),C語(yǔ)言程序設(shè)計(jì)(第四版)[M], 清華大學(xué)出版.</p><p>  [5] 馬忠梅、張凱,單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì)[M],北京航空航天大學(xué)出版社.</p><p>  [6] 廖先蕓,電子技術(shù)實(shí)踐與實(shí)訓(xùn)[M],高等教育出版社.</p><p><b&g

50、t;  附錄</b></p><p><b>  主程序:</b></p><p>  #include<reg52.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p>&l

51、t;p>  sbit lcdrs=P3^5;</p><p>  sbit lcden=P3^4;</p><p>  sbit dula=P2^6;</p><p>  sbit wela=P2^7;</p><p>  sbit s0 =P1^0;</p><p>  sbit s1 =P1^1;<

52、/p><p>  sbit s2 =P1^2;</p><p>  sbit s3 =P1^3;</p><p>  uchar code table1[]="2008-08-28 Wen";</p><p>  uchar code table2[]="21:31:30";</p>&l

53、t;p>  uchar num,t0;</p><p>  char sec,minute,hour,day,week,month;</p><p>  uint year;</p><p>  void delay(uchar z)</p><p><b>  {</b></p><p>

54、  uchar x,y;</p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--); </p><p><b>  }</b></p><p><b>  //寫入指令子函數(shù)</b></p><p>  voi

55、d write_order(uchar order)</p><p><b>  {</b></p><p><b>  lcdrs=0;</b></p><p><b>  P0=order;</b></p><p><b>  delay(2);</b>

56、;</p><p><b>  lcden=1;</b></p><p><b>  delay(2);</b></p><p><b>  lcden=0;</b></p><p><b>  }</b></p><p><

57、b>  //寫入數(shù)據(jù)子函數(shù)</b></p><p>  void write_data(uchar data1)</p><p><b>  {</b></p><p><b>  lcdrs=1;</b></p><p><b>  P0=data1;</b>

58、;</p><p><b>  delay(2);</b></p><p><b>  lcden=1;</b></p><p><b>  delay(2);</b></p><p><b>  lcden=0;</b></p><p

59、><b>  }</b></p><p><b>  //初始化子函數(shù)</b></p><p>  void init()</p><p><b>  {</b></p><p><b>  sec=0;</b></p><p&g

60、t;<b>  minute=0;</b></p><p><b>  hour=0;</b></p><p><b>  week=0;</b></p><p><b>  day=1;</b></p><p><b>  month=1;&l

61、t;/b></p><p>  year=2008;</p><p>  TMOD=0x01;</p><p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)%256;</p><p><b>  EA=1;</b></p>

62、;<p><b>  ET0=1;</b></p><p><b>  TR0=1;</b></p><p><b>  wela=0;</b></p><p><b>  dula=0;</b></p><p><b>  lcd

63、en=0;</b></p><p>  write_order(0x38); //設(shè)置顯示模式</p><p>  write_order(0x0c); //開(kāi)顯示開(kāi)光標(biāo),光標(biāo)閃爍</p><p>  write_order(0x01); //顯示清屏</p><p>  wr

64、ite_order(0x06); //光標(biāo)顯示效果</p><p>  write_order(0x80); //定義第一行寫入數(shù)據(jù)的地址 </p><p>  for(num=0;num<14;num++)</p><p><b>  { </b></p><p>  w

65、rite_data(table1[num]);</p><p><b>  delay(2);</b></p><p><b>  }</b></p><p>  write_order(0x80+0x43); //定義第一行寫入數(shù)據(jù)的地址 </p><p>  for(num=0;n

66、um<8;num++)</p><p><b>  { </b></p><p>  write_data(table2[num]);</p><p><b>  delay(2);</b></p><p><b>  }</b></p><

67、p><b>  }</b></p><p>  void change(uchar addr,uchar data1) //改變 時(shí) 分 秒 天 月 的子函數(shù) </p><p><b>  {</b></p><p>  uchar x,y;</p><p>  x=data1/10;<

68、/p><p>  y=data1%10;</p><p>  write_order(0x80+addr);</p><p><b>  delay(1);</b></p><p>  write_data(0x30+x);</p><p><b>  delay(1);</b>

69、</p><p>  write_data(0x30+y);</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p>  void yearchange(uchar addr,uint year) //改變年的子函數(shù)</p>&l

70、t;p><b>  {</b></p><p>  uchar x,y,z,w;</p><p>  x=year/1000;</p><p>  y=year%1000/100;</p><p>  z=year%100/10;</p><p>  w=year%10;</p>

71、<p>  write_order(0x80+addr);</p><p><b>  delay(1);</b></p><p>  write_data(0x30+x);</p><p><b>  delay(1);</b></p><p>  write_data(0x30+y

72、);</p><p><b>  delay(1);</b></p><p>  write_data(0x30+z);</p><p><b>  delay(1);</b></p><p>  write_data(0x30+w);</p><p><b>  

73、delay(1);</b></p><p><b>  }</b></p><p>  void weekchange(uchar z) //改變周數(shù)的子函數(shù)</p><p><b>  {</b></p><p><b>  switch(z)</b

74、></p><p><b>  {</b></p><p><b>  case 0:</b></p><p><b>  {</b></p><p>  write_order(0x80+0x0b);</p><p><b>  del

75、ay(1);</b></p><p>  write_data('M');</p><p><b>  delay(1);</b></p><p>  write_data('o');</p><p><b>  delay(1);</b></p&g

76、t;<p>  write_data('n');</p><p>  delay(1); </p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 1:</b></p&

77、gt;<p><b>  {</b></p><p>  write_order(0x80+0x0b);</p><p><b>  delay(1);</b></p><p>  write_data('T');</p><p><b>  delay(1)

78、;</b></p><p>  write_data('u');</p><p><b>  delay(1);</b></p><p>  write_data('e');</p><p>  delay(1); </p><p><b>

79、  }</b></p><p><b>  break;</b></p><p><b>  case 2:</b></p><p><b>  {</b></p><p>  write_order(0x80+0x0b);</p><p>

80、<b>  delay(1);</b></p><p>  write_data('W');</p><p><b>  delay(1);</b></p><p>  write_data('e');</p><p><b>  delay(1);<

81、/b></p><p>  write_data('n');</p><p>  delay(1); </p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 3:<

82、;/b></p><p><b>  {</b></p><p>  write_order(0x80+0x0b);</p><p><b>  delay(1);</b></p><p>  write_data('T');</p><p><b

83、>  delay(1);</b></p><p>  write_data('h');</p><p><b>  delay(1);</b></p><p>  write_data('u');</p><p>  delay(1); </p><

84、p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 4:</b></p><p><b>  {</b></p><p>  write_order(0x80+0x0b);</p&

85、gt;<p><b>  delay(1);</b></p><p>  write_data('F');</p><p><b>  delay(1);</b></p><p>  write_data('r');</p><p><b> 

86、 delay(1);</b></p><p>  write_data('i');</p><p>  delay(1); </p><p><b>  }</b></p><p><b>  break;</b></p><p><b&g

87、t;  case 5:</b></p><p><b>  {</b></p><p>  write_order(0x80+0x0b);</p><p><b>  delay(1);</b></p><p>  write_data('S');</p>

88、<p><b>  delay(1);</b></p><p>  write_data('a');</p><p><b>  delay(1);</b></p><p>  write_data('t');</p><p>  delay(1); &l

89、t;/p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 6:</b></p><p><b>  {</b></p><p>  write_order(0x80

90、+0x0b);</p><p><b>  delay(1);</b></p><p>  write_data('S');</p><p><b>  delay(1);</b></p><p>  write_data('u');</p><p

91、><b>  delay(1);</b></p><p>  write_data('n');</p><p>  delay(1); </p><p><b>  }</b></p><p><b>  break;</b></p>&l

92、t;p>  default:break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void display()</p><p><b>  {</b></p><p>  if(t0==2

93、0) </p><p><b>  {</b></p><p><b>  t0=0;</b></p><p><b>  sec++;</b></p><p>  if(sec==60)</p><p><b>  {</b>&l

94、t;/p><p><b>  sec=0;</b></p><p><b>  minute++;</b></p><p>  if(minute==60)</p><p><b>  {</b></p><p><b>  minute=0;&l

95、t;/b></p><p><b>  hour++;</b></p><p>  if(hour==24)</p><p><b>  { </b></p><p><b>  hour=0;</b></p><p><b>  d

96、ay++;</b></p><p><b>  week++;</b></p><p>  if(week==7)</p><p>  { </p><p>  week=0;

97、 </p><p><b>  }</b></p><p>  if(day==31)</p><p><b>  {</b></p><p><b&g

98、t;  day=1;</b></p><p><b>  month++;</b></p><p>  if(month==13)</p><p><b>  {</b></p><p><b>  month=1;</b></p><p>

99、<b>  year++;</b></p><p>  yearchange(0,year);</p><p><b>  }</b></p><p>  change(0x05,month);</p><p><b>  }</b></p><p> 

100、 change(0x08,day);</p><p>  weekchange(week);</p><p><b>  }</b></p><p>  change(0x43,hour);</p><p><b>  }</b></p><p>  change(0x46,

101、minute);</p><p><b>  }</b></p><p>  change(0x49,sec); </p><p><b>  } </b></p><p><b>  }</b></p><p>  //鍵盤掃描的子函數(shù),修改時(shí)間<

102、;/p><p>  void keyscan()</p><p><b>  {</b></p><p>  uchar snum;</p><p><b>  if(s0==0)</b></p><p><b>  {</b></p><

103、;p><b>  delay(5);</b></p><p><b>  if(s0==0)</b></p><p><b>  {</b></p><p>  while(!s0);//松手檢測(cè)</p><p><b>  snum++;</b>&

104、lt;/p><p><b>  }</b></p><p>  if(snum==1) //選定 秒</p><p><b>  {</b></p><p><b>  TR0=0;</b></p><p>  write_order(0x80+0

105、x40+9);</p><p>  write_order(0x0f); </p><p><b>  }</b></p><p>  if(snum==2) //選定 分</p><p><b>  {</b></p><p>  write_order(0x80+

106、0x40+6);</p><p>  write_order(0x0f); </p><p><b>  }</b></p><p>  if(snum==3) //選定 時(shí)</p><p><b>  {</b></p><p>  write_order(0x

107、80+0x40+3);</p><p>  write_order(0x0f); </p><p><b>  }</b></p><p>  if(snum==4) //選定 星期</p><p><b>  {</b></p><p>  write_orde

108、r(0x80+0x0b);</p><p>  write_order(0x0f); </p><p><b>  }</b></p><p>  if(snum==5) //選定 天</p><p><b>  {</b></p><p>  write_ord

109、er(0x80+0x08);</p><p>  write_order(0x0f); </p><p><b>  }</b></p><p>  if(snum==6) //選定 月</p><p><b>  {</b></p><p>  write_or

110、der(0x80+0x05);</p><p>  write_order(0x0f); </p><p><b>  }</b></p><p>  if(snum==7) //選定 年</p><p><b>  {</b></p><p>  write_or

111、der(0x80);</p><p>  write_order(0x0f); </p><p><b>  }</b></p><p>  if(snum==8) //恢復(fù) 計(jì)時(shí)</p><p><b>  {</b></p><p><b>  TR

112、0=1;</b></p><p>  write_order(0x0c);</p><p><b>  snum=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(snum

113、!=0) //增加 時(shí) 分 秒 天 月 年</p><p><b>  {</b></p><p><b>  if(s1==0)</b></p><p><b>  {</b></p><p><b>  delay(5);</b></

114、p><p><b>  if(s1==0)</b></p><p><b>  {</b></p><p>  while(!s1);</p><p>  if(snum==1)</p><p><b>  {</b></p><p>

115、;<b>  sec++;</b></p><p>  if(sec==60)</p><p><b>  sec=0;</b></p><p>  change(0x49,sec);</p><p>  write_order(0x80+0x40+9); </p><p>

116、<b>  }</b></p><p>  if(snum==2)</p><p><b>  {</b></p><p><b>  minute++;</b></p><p>  if(minute==60)</p><p><b>  m

117、inute=0;</b></p><p>  change(0x46,minute);</p><p>  write_order(0x80+0x40+6);</p><p><b>  }</b></p><p>  if(snum==3)</p><p><b>  {&

118、lt;/b></p><p><b>  hour++;</b></p><p>  if(hour==24)</p><p><b>  hour=0;</b></p><p>  change(0x43,hour);</p><p>  write_order(0x

119、80+0x40+3);</p><p><b>  }</b></p><p>  if(snum==4)</p><p><b>  {</b></p><p><b>  week++;</b></p><p>  if(week==7)</p

120、><p><b>  week=0;</b></p><p>  weekchange(week);</p><p>  write_order(0x80+0x0b);</p><p><b>  }</b></p><p>  if(snum==5)</p>&l

121、t;p><b>  {</b></p><p><b>  day++;</b></p><p>  if(day==31)</p><p><b>  day=1;</b></p><p>  change(0x08,day);</p><p>

122、  write_order(0x80+0x08);</p><p><b>  }</b></p><p>  if(snum==6)</p><p><b>  {</b></p><p><b>  month++;</b></p><p>  if

123、(month==13)</p><p><b>  month=1;</b></p><p>  change(0x05,month);</p><p>  write_order(0x80+0x05);</p><p><b>  }</b></p><p>  if(sn

124、um==7)</p><p><b>  {</b></p><p><b>  year++;</b></p><p>  yearchange(0,year);</p><p>  write_order(0x80);</p><p><b>  }</b

125、></p><p><b>  }</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  if(snum!=0) //減少 時(shí) 分 秒 天 月 年</p><p><b>

126、;  {</b></p><p><b>  if(s2==0)</b></p><p><b>  {</b></p><p><b>  delay(5);</b></p><p><b>  if(s2==0)</b></p>

127、<p><b>  {</b></p><p>  while(!s2);</p><p>  if(snum==1)</p><p><b>  {</b></p><p><b>  sec--;</b></p><p>  if(se

128、c==-1)</p><p><b>  sec=59;</b></p><p>  change(0x49,sec);</p><p>  write_order(0x80+0x40+9); </p><p><b>  }</b></p><p>  if(snum==2

129、)</p><p><b>  {</b></p><p><b>  minute--;</b></p><p>  if(minute==-1)</p><p>  minute=59;</p><p>  change(0x46,minute);</p>

130、<p>  write_order(0x80+0x40+6);</p><p><b>  }</b></p><p>  if(snum==3)</p><p><b>  {</b></p><p><b>  hour--;</b></p><

131、;p>  if(hour==-1)</p><p><b>  hour=23;</b></p><p>  change(0x43,hour);</p><p>  write_order(0x80+0x40+3);</p><p><b>  }</b></p><p&

132、gt;  if(snum==4)</p><p><b>  {</b></p><p><b>  week--;</b></p><p>  if(week==-1)</p><p><b>  week=6;</b></p><p>  weekc

133、hange(week);</p><p>  write_order(0x80+0x0b);</p><p><b>  }</b></p><p>  if(snum==5)</p><p><b>  {</b></p><p><b>  day--;<

134、/b></p><p>  if(day==0)</p><p><b>  day=30;</b></p><p>  change(0x08,day);</p><p>  write_order(0x80+0x08);</p><p><b>  }</b><

135、;/p><p>  if(snum==6)</p><p><b>  {</b></p><p><b>  month--;</b></p><p>  if(month==0)</p><p><b>  month=12;</b></p>

136、<p>  change(0x05,month);</p><p>  write_order(0x80+0x05);</p><p><b>  }</b></p><p>  if(snum==7)</p><p><b>  {</b></p><p>&

137、lt;b>  year--;</b></p><p>  yearchange(0,year);</p><p>  write_order(0x80);</p><p><b>  }</b></p><p><b>  }</b></p><p><

138、;b>  } </b></p><p><b>  }</b></p><p><b>  if(s3==0)</b></p><p><b>  {</b></p><p><b>  delay(5);</b></p>

139、<p><b>  if(s3==0)</b></p><p><b>  {</b></p><p>  while(!s3);</p><p><b>  sec=0;</b></p><p><b>  minute=0;</b></

140、p><p><b>  hour=0;</b></p><p><b>  week=0;</b></p><p><b>  day=1;</b></p><p><b>  month=1;</b></p><p>  year=2

141、008;</p><p>  change(0x49,sec);</p><p>  change(0x46,minute);</p><p>  change(0x43,hour);</p><p>  weekchange(week);</p><p>  change(0x08,day);</p>

142、<p>  change(0x05,month);</p><p>  yearchange(0,year);</p><p>  write_order(0x0c);</p><p><b>  }</b></p><p><b>  }</b></p><p>

143、<b>  } </b></p><p>  void main()</p><p><b>  {</b></p><p><b>  init();</b></p><p><b>  while(1)</b></p><p>

144、<b>  {</b></p><p>  keyscan(); </p><p>  display();</p><p><b>  } </b></p><p><b>  } </b></p><p><b>  //定時(shí)器0<

145、/b></p><p>  void time0() interrupt 1</p><p><b>  {</b></p><p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)%256;</p><p><b>  t0

146、++;</b></p><p><b>  } </b></p><p><b>  心得體會(huì):</b></p><p>  這次單片機(jī)綜合設(shè)計(jì)與實(shí)踐,讓我們都認(rèn)識(shí)到單片機(jī)與C語(yǔ)言的深度。當(dāng)我們拿到設(shè)計(jì)任務(wù)書時(shí),覺(jué)得用幾個(gè)按鍵來(lái)控制電子鐘的時(shí)、分是一個(gè)十分簡(jiǎn)單的設(shè)計(jì),但在我們著手設(shè)計(jì)時(shí)發(fā)現(xiàn)并不是那么容易的。在硬

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論