




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、湖南文理學(xué)院課程設(shè)計(jì)報(bào)告課程名稱: 單片機(jī)課程設(shè)計(jì) 專業(yè)班級(jí): 自動(dòng)化10101班 37 學(xué)生姓名: 李建明 指導(dǎo)教師: 王南蘭 完成時(shí)間: 2013年 6 月 12 日 報(bào)告成績(jī): 評(píng)閱意見: 評(píng)閱教師 日期 2013.6.20 電 子 萬 年 歷 設(shè) 計(jì)電子萬年歷目 錄一、設(shè)計(jì)題目1二、設(shè)計(jì)要求1三、設(shè)計(jì)作用與目的2四、所用設(shè)備及軟件24.1 軟件24.2 硬件2五、系統(tǒng)設(shè)計(jì)方案35.1 系統(tǒng)總體設(shè)計(jì)35.2 系統(tǒng)硬件設(shè)計(jì)35.2.1 單片機(jī)最小系統(tǒng)電路35.2.2 按鍵輸入部分電路45.2.3 數(shù)碼管動(dòng)態(tài)顯示電路45.2.4 DS1302時(shí)鐘電路55.3 系統(tǒng)軟件設(shè)計(jì)65.3.1 接口說
2、明65.3.2 系統(tǒng)程序設(shè)計(jì)6六、實(shí)驗(yàn)調(diào)試結(jié)果8七、設(shè)計(jì)心得107.1 設(shè)計(jì)總結(jié)107.2 致謝10參考文獻(xiàn)11附錄1:系統(tǒng)總體結(jié)構(gòu)電路原理圖12附錄2:程序清單13一、設(shè)計(jì)題目隨著人們生活水平的提高和生活節(jié)奏的加快,對(duì)時(shí)間的要求越來越高,精準(zhǔn)數(shù)字計(jì)時(shí)的消費(fèi)需求也是越來越多。二十一世紀(jì)的今天,最具代表性的計(jì)時(shí)產(chǎn)品就是電子時(shí)鐘,它是近代世界鐘表業(yè)界的第三次革命。第一次是擺和擺輪游絲的發(fā)明,相對(duì)穩(wěn)定的機(jī)械振蕩頻率源使鐘表的走時(shí)差從分級(jí)縮小到秒級(jí)。第二次革命是石英晶體振蕩器的應(yīng)用,發(fā)明了走時(shí)精度更高的石英電子鐘表,使鐘表的走時(shí)月差從分級(jí)縮小到秒級(jí)。第三次革命就是單片機(jī)數(shù)碼計(jì)時(shí)技術(shù)的應(yīng)用,使計(jì)時(shí)產(chǎn)品的
3、走時(shí)日差從分級(jí)縮小到1/600萬秒,從原有傳統(tǒng)指針計(jì)時(shí)的方式發(fā)展為人們?nèi)粘8鼮槭煜さ囊构鈹?shù)字顯示方式,直觀明了,并增加了全自動(dòng)日期、星期的顯示功能,它更符合消費(fèi)者的生活需求!因此,電子時(shí)鐘的出現(xiàn)帶來了鐘表計(jì)時(shí)業(yè)界跨躍性的進(jìn)步。我國(guó)生產(chǎn)的電子時(shí)鐘有很多種,總體上來說以研究多功能電子時(shí)鐘為主,使萬年歷除了原有的顯示時(shí)間,日期等基本功能外,還具有鬧鈴,報(bào)警等功能。商家生產(chǎn)的電子萬年歷更從質(zhì)量,價(jià)格,實(shí)用上考慮,不斷的改進(jìn)電子時(shí)鐘的設(shè)計(jì),使其更加的具有市場(chǎng)以STC89C51RD+單片機(jī)作為主控核心,與時(shí)鐘芯片DS1302、按鍵、LED顯示等模塊組成硬件系統(tǒng)。在硬件系統(tǒng)中設(shè)有獨(dú)立按鍵和LED顯示器,能顯
4、示豐富的信息,根據(jù)使用者的需要可以隨時(shí)對(duì)時(shí)間進(jìn)行校準(zhǔn)、選擇時(shí)間等。綜上所述此電子時(shí)鐘具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景。二、設(shè)計(jì)要求本電子時(shí)鐘能動(dòng)態(tài)顯示年、月、日、小時(shí)、分鐘、秒,能夠隨時(shí)設(shè)置調(diào)整時(shí)間。整個(gè)系統(tǒng)整個(gè)系統(tǒng)由外部+5V直流電源供電。在控制模塊上設(shè)有5個(gè)獨(dú)立按鍵,時(shí)鐘模塊由DS1302實(shí)現(xiàn),顯示部分由八位七段數(shù)碼管動(dòng)態(tài)顯示。系統(tǒng)上電后數(shù)碼管將顯示“HELLO”。通過顯示切換鍵SB2、調(diào)整鍵SB3、加鍵SB4、減鍵SB5對(duì)年、月、日、小時(shí)、分鐘、秒進(jìn)行設(shè)置。通過設(shè)置切換鍵SB6確認(rèn)后寫入DS1302中。數(shù)碼管將
5、從設(shè)置的時(shí)間開始動(dòng)態(tài)顯示時(shí)間。通過SB6鍵可以隨時(shí)調(diào)整時(shí)間。三、設(shè)計(jì)作用與目的系統(tǒng)的設(shè)計(jì)主要利用STC89C51RD+單片機(jī)完成簡(jiǎn)易電子萬年歷的設(shè)計(jì)。通過對(duì)整個(gè)系統(tǒng)的分析與設(shè)計(jì),完成從理論知識(shí)到實(shí)踐應(yīng)用的過度,掌握基于單片機(jī)的產(chǎn)品設(shè)計(jì)與開發(fā)的相關(guān)理念,學(xué)會(huì)利用單片機(jī)完成簡(jiǎn)單的電子系統(tǒng)的設(shè)計(jì)與制作。學(xué)會(huì)C語言的編程應(yīng)用,培養(yǎng)良好的編程風(fēng)格,掌握相關(guān)的編程或仿真軟件的使用?;赟TC89C51RD+單片機(jī)的電子萬年歷的設(shè)計(jì),掌握簡(jiǎn)單的電子時(shí)鐘運(yùn)行原理,掌握51單片機(jī)最小系統(tǒng)的設(shè)計(jì)與常見人機(jī)接口電路的設(shè)計(jì),懂得簡(jiǎn)單電子電路的設(shè)計(jì),掌握51單片機(jī)內(nèi)部資源的使用,了解51單片機(jī)的外部結(jié)構(gòu)與內(nèi)部結(jié)構(gòu)之間的
6、關(guān)系,并能編程實(shí)現(xiàn)單片機(jī)的各部分相關(guān)功能。四、所用設(shè)備及軟件 基于STC89C51RD+單片機(jī)的,涉及到相關(guān)的軟件和硬件。4.1 軟件系統(tǒng)設(shè)計(jì)主要使用到的軟件有Keil C51、Protel 99SE等。Keil C51是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個(gè)集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。 Protel 99SE是ProklTechnology公司
7、開發(fā)的基于Windows環(huán)境下的電路板設(shè)計(jì)軟件。該軟件功能強(qiáng)大,人機(jī)界面友好,易學(xué)易用,仍然是大中專院校電學(xué)專業(yè)必學(xué)課程,同時(shí)也是業(yè)界人士首選的電路板設(shè)計(jì)工具。Protel 99SE 由兩大部分組成:電路原理圖設(shè)計(jì)(Advanced Schematic)和多層印刷電路板設(shè)計(jì)(Advanced PCB)。其中Advanced Schematic由兩部分組成:電路圖編輯器(Schematic)和元件庫(kù)編輯器(Schematic Library)。4.2 硬件硬件主要用到的是個(gè)人計(jì)算機(jī)及51單片機(jī)開發(fā)板完成。在有完善的理論分析與設(shè)計(jì)后,制作硬件實(shí)物則需要以下硬件支持。51單片機(jī)、DS1302芯片、電
8、阻、電容、發(fā)光二級(jí)管、晶振、按鍵、數(shù)碼管、萬能板、杜邦線、電烙鐵、焊錫等。五、系統(tǒng)設(shè)計(jì)方案5.1 系統(tǒng)總體設(shè)計(jì)整個(gè)設(shè)計(jì)分為四大模塊,STC89C51RD+單片機(jī)作為核心控制模塊,獨(dú)立鍵盤 ( 顯示切換鍵SB2、調(diào)整按鍵SB3、加按鍵SB4、減按鍵SB5、設(shè)置切換鍵SB6) 作為輸入模塊,DS1302作為時(shí)鐘模塊,八位數(shù)碼管及五個(gè)按鍵指示LED燈作為輸出模塊。系統(tǒng)結(jié)構(gòu)框圖圖1 電子萬年歷結(jié)構(gòu)框圖顯示切換鍵SB2調(diào)整按鍵SB3加按鍵SB4減按鍵SB5設(shè)置切換鍵SB6STC89C51RD+單片機(jī)數(shù)碼管顯示LED燈顯示DS1302如圖 1 所示。5.2 系統(tǒng)硬件設(shè)計(jì)圖2 單片機(jī)最小系統(tǒng)電路按照系統(tǒng)設(shè)計(jì)
9、功能的要求,系統(tǒng)由主控模塊、時(shí)控模塊、及顯示模塊和鍵盤接口模塊共4個(gè)模塊組成。主控芯片使用51系列STC89C51RD+單片機(jī),時(shí)鐘芯片使用美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘DS1302。顯示模塊采用普通的共陰極極八位LED數(shù)碼管。5.2.1 單片機(jī)最小系統(tǒng)電路單片機(jī)最小系統(tǒng)包括電源,復(fù)位電路,振蕩電路。單片機(jī)最小系統(tǒng)“最小”就是指一個(gè)單片機(jī)能開始獨(dú)立工作所需的最基本的外部電路。具體是指VCC腳接電源,GND接地,接好晶振,連上RC復(fù)位電路,另外值得注意的是在不需要擴(kuò)展外部存儲(chǔ)器的情況下EA腳接高電平,具體電路如圖2所示。圖中的MAX232芯片是轉(zhuǎn)串口芯片,下載程
10、序時(shí)用。單片機(jī)的RST腳是高電平復(fù)位,電路采用上電復(fù)位和手動(dòng)復(fù)位的兩種復(fù)位接法。晶振電路選擇晶振一般為12M,若用到單片機(jī)的串行口通信,則一般選擇11.0592M的晶振。主芯片是1系列STC89C51RD+單片機(jī)是宏晶科技推出的新一代高速、低功耗、超強(qiáng)抗干擾的單片機(jī),指令代碼完全兼容傳統(tǒng)的51單片機(jī)。圖3按鍵輸入部分電路5.2.2 按鍵輸入部分電路按鍵輸入部分采用五個(gè)獨(dú)立按鍵接到單片機(jī)的P1口。獨(dú)立按鍵又加查詢式按鍵。查詢式按鍵是各按鍵相互獨(dú)立,每個(gè)按鍵占用一根I/O口線,每根I/O口線上的按鍵工作狀態(tài)不會(huì)影響其他I/O口線上按鍵的工作狀態(tài)。查詢式按鍵電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單。實(shí)際制作過程中
11、,按鍵的位置可以任意放置,但是每個(gè)按鍵的接線端必須按照按鍵的功能連接要正確,不能錯(cuò)亂。在使用按鍵時(shí)需要對(duì)其消抖。具體電路如圖3所示。5.2.3 數(shù)碼管動(dòng)態(tài)顯示電路七段數(shù)碼管一般由八個(gè)發(fā)光二極管組成,其中由七個(gè)細(xì)長(zhǎng)的發(fā)光二極管組成數(shù)字顯示,另外一個(gè)圓形的發(fā)光二極管顯示小數(shù)點(diǎn)。當(dāng)發(fā)光二極管導(dǎo)通時(shí),相應(yīng)的點(diǎn)或一個(gè)筆畫發(fā)關(guān)??刂葡鄳?yīng)的二極管導(dǎo)通,就能顯示出各種字符,盡管顯示的字符形狀有些失真,能顯示的數(shù)符數(shù)量也有限,但其控制簡(jiǎn)單使用也方便。發(fā)光二極管的陽(yáng)極連接在一起的稱為共陽(yáng)極數(shù)碼管,陰極連接在一起的稱為共陰極數(shù)碼管。設(shè)計(jì)中采用共陰極的數(shù)碼管,段顯示由單片機(jī)的P0口控制,P0口做為輸出口需要接上拉電阻
12、。位選由單片機(jī)的P2口的前三位控制。P2口的前三位連接74LS138譯碼器實(shí)現(xiàn)對(duì)八位數(shù)碼管的位選控制。數(shù)碼管的顯示分為動(dòng)態(tài)顯示與靜態(tài)顯示。設(shè)計(jì)中采用數(shù)碼管的動(dòng)態(tài)顯示。動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)顯示筆劃“a,b,c,d,e,f,g,dp”的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是那個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會(huì)亮。通過分時(shí)輪流控制各個(gè)數(shù)碼管的的COM端,就使各
13、個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。在輪流顯示過程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為12ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。5.2.4 DS1302時(shí)鐘電路DS1302 是美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或
14、RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級(jí)產(chǎn)品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時(shí)提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力。圖4 DS1302時(shí)鐘電路圖DS1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間寄存器及其控制字。此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個(gè)RAM單元
15、,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0HFDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫)、FFH(讀)。DS1302與單片機(jī)的電路連接圖如圖4所示。DS1302與微處理器之間采用同步串行的方式進(jìn)行通信,有三個(gè)口線:RST復(fù)位、I/O數(shù)據(jù)線、SCLK串行時(shí)鐘。芯片中RAM的讀/寫數(shù)據(jù)以一個(gè)字節(jié)或多達(dá)31個(gè)字節(jié)的字符組方式通信。圖中的五個(gè)LED燈用于指示按鍵是否按下,當(dāng)按鍵按下時(shí)對(duì)應(yīng)的LED燈亮,松手時(shí)LED燈滅。5.3 系統(tǒng)軟件設(shè)計(jì)系統(tǒng)采用模塊化編程,各部分相互獨(dú)立又緊密聯(lián)系。許
16、多程序太長(zhǎng)或太復(fù)雜,很難寫在單一單元中。如果把代碼分為較小的功能單元,將大大簡(jiǎn)化編程過程。模塊化程序一般比單塊程序容易編寫、調(diào)試和修改。模塊化編程方法類似于包含大量電路的硬件設(shè)計(jì)。器件或程序在邏輯上被分為多個(gè)“黑箱子”,這些黑箱子都有指定的輸入和輸出。只要把各個(gè)單元之間的接口定義好,各個(gè)單元的詳細(xì)設(shè)計(jì)就可以獨(dú)立進(jìn)行了。5.3.1 接口說明系統(tǒng)接口定義如表1所示。表1 系統(tǒng)接口定義引腳名單片機(jī)引腳功能說明備注P0P0.0P0.7連接數(shù)碼管的段位控制段顯示P1_0P1.0顯示切換鍵輸入口P1_1P1.1調(diào)整鍵輸入口P1_2P1.2加按鍵輸入口P1_3P1.3減按鍵輸入口P1_4P1.4設(shè)置切換鍵輸
17、入口T_CLKP1.6DS1302時(shí)鐘線接口T_IOP3.5DS1302數(shù)據(jù)線接口T_RSTP1.7DS1302復(fù)位線接口LED1P1.5指示按鍵SB2接口LED2P3.2指示按鍵SB3接口LED3P3.3指示按鍵SB4接口LED4P3.4指示按鍵SB5接口LDE5P3.7指示按鍵SB6接口P2_0P2.074LS138 A口線接口P2_1P2.174LS138 B口線接口P2_2P2.274LS138 B口線接口圖5 主流程圖N程序開始按鍵掃描按鍵按下?按鍵處理子程序確認(rèn)鍵?DS1302子程序顯示當(dāng)前設(shè)置時(shí)間YYN5.3.2 系統(tǒng)程序設(shè)計(jì)基于STC89C51RD+單片機(jī)的電子萬年歷的主函數(shù)執(zhí)
18、行的是:函數(shù)初始化、掃描按鍵設(shè)置初始時(shí)間、將設(shè)置的時(shí)間寫入DS1302中、顯示時(shí)間。函數(shù)流程圖如圖5所示。任何程序開的開始都是從main函數(shù)開始執(zhí)行的,一個(gè)程序也只能有一個(gè)main函數(shù)。主程序如下:main() while(1) SET_time(); /設(shè)置時(shí)間 Write_1302(); Run_DS1302();/運(yùn)行1302并顯示 設(shè)計(jì),列出部分主要的子程序。其中主要包含的子程序有按鍵掃描子程序、數(shù)碼管顯示子程序、DS1302時(shí)鐘數(shù)據(jù)寫子程序、DS1302時(shí)鐘數(shù)據(jù)讀取子程序、延時(shí)子程序等等。2讀數(shù)據(jù)子程序。下面是寫DS1302流程圖與讀DS1302流程圖。程序開始寫命令字節(jié)一位復(fù)位端變
19、高啟動(dòng)一次數(shù)據(jù)傳送工作時(shí)鐘線發(fā)脈沖夠8次了?寫數(shù)據(jù)字節(jié)一位時(shí)鐘線發(fā)脈沖夠8次了?復(fù)位端變低中斷服務(wù)結(jié)束YYNN圖6 寫DS1302流程圖程序開始寫命令字節(jié)一位復(fù)位端變高啟動(dòng)一次數(shù)據(jù)傳送工作時(shí)鐘線發(fā)脈沖夠8次了?讀數(shù)據(jù)字節(jié)一位時(shí)鐘線發(fā)脈沖夠8次了?復(fù)位端變低中斷服務(wù)結(jié)束YYNN圖7 讀DS1302流程圖寫一個(gè)字節(jié)到DS1302子程序如下:/* 名稱 : v_W1302(uchar ucAddr, uchar ucDa)* 功能 : 往DS1302寫入數(shù)據(jù)* 輸入 : ucAddr: DS1302地址, ucDa: 要寫的數(shù)據(jù)* 返回值 : 無*/void v_W1302(uchar ucAddr
20、, uchar ucDa)T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(ucAddr); / 寫地址 _nop_();_nop_();v_RTInputByte(ucDa); / 寫1Byte數(shù)據(jù)T_CLK = 1;T_RST = 0;從DS1302中讀取一個(gè)字節(jié)數(shù)據(jù)程序如下:/* 名稱 : uc_R1302(uchar ucAddr)* 功能 : 讀取DS1302某地址的數(shù)據(jù)* 輸入 : ucAddr: DS1302地址* 返回值 : ucDa :讀取的數(shù)據(jù)*/uchar uc_R1302(uchar ucAddr)uchar ucDa;T_RST
21、= 0;T_CLK = 0;T_RST = 1;v_RTInputByte(ucAddr); /寫地址,命令_nop_();_nop_();ucDa = uc_RTOutputByte(); /讀1Byte數(shù)據(jù)T_CLK = 1;T_RST = 0;return(ucDa);六、實(shí)驗(yàn)調(diào)試結(jié)果圖8 復(fù)位后數(shù)碼管顯示通過前期的硬件電路的設(shè)計(jì)與軟件設(shè)計(jì)后。開始進(jìn)行程序編寫,并通過51開發(fā)板進(jìn)行調(diào)試。經(jīng)過不斷修改錯(cuò)誤,終于達(dá)到了預(yù)期目的。上電后的結(jié)果如圖8所示。單片機(jī)上電圖9 未手動(dòng)設(shè)置的時(shí)間后將顯示“HELLO”。接下來可以對(duì)DS1302的時(shí)間進(jìn)行設(shè)置。未手動(dòng)設(shè)置時(shí)的時(shí)間。如圖9所示。第一排表示年、
22、月、日。顯示當(dāng)前DS1302內(nèi)讀出的年、月、日(2013年6月8日)。通過按鍵SB2可切換到顯示時(shí)、分、秒。第二排顯示的是當(dāng)前DS1302內(nèi)讀出的時(shí)、分、秒(8時(shí)51分24秒)。通過按鍵SB2、SB3、SB4、SB5、SB6對(duì)DS1302內(nèi)的時(shí)間進(jìn)行設(shè)置圖10是設(shè)置后的時(shí)間。圖10 手動(dòng)設(shè)置的時(shí)間七、設(shè)計(jì)心得7.1 設(shè)計(jì)總結(jié)基于51單片機(jī)的電子萬年歷電路是單片機(jī)控制系統(tǒng)中單片微型機(jī)應(yīng)用與設(shè)計(jì)的重要組成部分。電子萬年歷的控制電路由按鍵輸入部分、單片機(jī)控制部分、顯示以及DS1302時(shí)鐘部分組成。按鍵輸入是通過五個(gè)獨(dú)立按鍵實(shí)現(xiàn),五個(gè)獨(dú)立按鍵用于對(duì)初始時(shí)間進(jìn)行設(shè)置。在按鍵輸入部分要注意對(duì)按鍵進(jìn)行消抖處
23、理。對(duì)于硬件電路的制作,還要考慮到數(shù)碼管的排放位置,要便于時(shí)間觀看。單片機(jī)控制部分要求合理使用單片機(jī)的內(nèi)部資源,控制邏輯清晰。在基于51單片機(jī)的電子萬年歷電路設(shè)計(jì)中,從總體上來看,整個(gè)設(shè)計(jì)能達(dá)到預(yù)期的設(shè)計(jì)要求,但是也有許多需要改進(jìn)的地方如。通過本次單片機(jī)課程的學(xué)習(xí)與基于51單片的電子萬年歷的設(shè)計(jì),把理論用到實(shí)踐中去,動(dòng)手動(dòng)腦解決學(xué)習(xí)過程中遇見的問題,鞏固與加強(qiáng)相關(guān)的知識(shí),學(xué)會(huì)做人做事,培養(yǎng)刻苦專研的精神,為未來的工作與生活打下堅(jiān)實(shí)的基礎(chǔ)。7.2 致謝經(jīng)過一段時(shí)間的單片機(jī)課程設(shè)計(jì)后,我成功的完成了電子萬年歷控制電路的設(shè)計(jì)。在設(shè)計(jì)過程中,雖然遇到很多麻煩,花了大量時(shí)間去調(diào)試,但是最終我還是完成了電
24、路的設(shè)計(jì)任務(wù)。由此我知道,做好每一件事,必須要有耐心、信心、決心,以及嚴(yán)謹(jǐn)?shù)膽B(tài)度。在這過程中有時(shí)候沒時(shí)間吃飯,沒時(shí)間睡覺,我還是堅(jiān)持下來了,因?yàn)樵诒澈笠恢庇泄膭?lì)我、支持我的家人。非常感謝父母給我生命,在這二十多年里,不辭勞苦的養(yǎng)育我,給我進(jìn)入大學(xué)學(xué)習(xí)的機(jī)會(huì),我將用我一輩子的收獲來回報(bào)父母的恩情。接下來的歲月里,我已經(jīng)長(zhǎng)大,我該用我的行動(dòng)來報(bào)答父母的恩情。這次設(shè)計(jì)能夠完成與湖南文理學(xué)院電氣與信息工程學(xué)院為我們提供了一個(gè)良好的學(xué)氛圍和學(xué)習(xí)條件是分不開的。感謝那些在為學(xué)生操勞的老師們,是你們讓我的大腦更加的充實(shí)。在此特別感謝我的指導(dǎo)老師王文虎老師。王老師不僅在專業(yè)知識(shí)上指導(dǎo)我如何去學(xué)習(xí),如何更有效的
25、掌握專業(yè)知識(shí)技能,同時(shí)也向我們傳遞著學(xué)習(xí)的精神-嚴(yán)謹(jǐn)認(rèn)真。他秉承著授之以魚不如授之以漁的教學(xué)理念指導(dǎo)我如何將理論知識(shí)上升到基本技能,如何將理論與實(shí)際應(yīng)用相結(jié)合,讓我感受到了不一樣的學(xué)習(xí)理念。在這次課程設(shè)計(jì)過程中還有一幫朋友給了我莫大的幫助。在此感謝肖京學(xué)姐教我如何做word的文檔,感謝言超學(xué)長(zhǎng)對(duì)我Protel99SE繪圖方面的指導(dǎo),感謝馬慶修長(zhǎng)在專業(yè)知識(shí)上的幫助。還有感謝肖葵、賀鐵梅和袁賢鑫等同學(xué)的鼓勵(lì)和支持。參考文獻(xiàn)1周麗娜.Protel99SE電路設(shè)計(jì)技術(shù)(基礎(chǔ)、案例篇)M.北京:中國(guó)鐵道出版社.2009.2焦寶文.課程設(shè)計(jì)指南M.北京:清華大學(xué)出版社.1983.3楊壘,于復(fù)生,郭梅靜.基
26、于AT89S52的定時(shí)器設(shè)計(jì)J.山東建筑大學(xué)學(xué)報(bào),2006(05)4林毅.基于AT89C51單片機(jī)構(gòu)成的鍵盤顯示電路J.現(xiàn)代電子技術(shù),2006(13)5坂本正文.步進(jìn)電機(jī)應(yīng)用技術(shù)M.北京:科學(xué)出版社,2010.6http:/ 7827附錄1:系統(tǒng)總體結(jié)構(gòu)電路原理圖附錄2:程序清單 #include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int/*獨(dú)立按鍵*/ sbit P1_0=P10; /顯示切換 sbit P1_1=P11;/調(diào)整 sbit P1_2=P
27、12;/加 sbit P1_3=P13;/減 sbit P1_4=P14;/確認(rèn)設(shè)置完成 sbit ACC0 = ACC0; sbit ACC7 = ACC7; sbit T_CLK = P16; /*實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 */ sbit T_IO = P35; /*實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳 */ sbit T_RST = P17; /*實(shí)時(shí)時(shí)鐘復(fù)位線引腳 */ sbit LED1=P15; /按鍵按下指示 sbit LED2=P32; sbit LED3=P33; sbit LED4=P34; sbit LED5=P37;/*初始時(shí)間設(shè)置*/uchar flag; /顯示切換標(biāo)志uint sec0=
28、44;/秒uint min0=50; /分uint hour0=8; /小時(shí)uint day0=8; /天uint month0=6; /月uint year0=13; /年uint yearh=20; /年uint cursor=0; /當(dāng)前光標(biāo)閃爍位uchar a=0xff; /LED顯示掩碼uchar sign;/更改完成標(biāo)志uchar sign1;/顯示切換標(biāo)志uchar code Seg=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/共陰極極數(shù)碼管uchar code table1=0xff,0xfe,0xfd,0xfc,0xf
29、b,0xfa,0xf9,0xf8 ; /譯碼器選擇顯示的位uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/共陰極極數(shù)碼管uint table26=0,0,0,0,0,0; /存儲(chǔ)改變的數(shù)據(jù)/* 名稱 : delay1()* 功能 : 延時(shí)。* 輸入 : 無* 輸出 : 無*/void delay1(uint t)/延時(shí) uint i; while(t-) for (i=0;i<125;i+);/* 名稱 : Kdelay()* 功能 : 按鍵消抖延時(shí)* 輸入 : 無* 輸出 : 無*/void Kde
30、lay() /按鍵消抖 uchar i,j; for(i=248;i>0;i-) for(j=248;j>0;j-);/* 名稱 : delay()* 功能 : 延時(shí),延時(shí)時(shí)間大概為140US。* 輸入 : 無* 輸出 : 無*/void delay()int i,j;for(i=0; i<=10; i+)for(j=0; j<=2; j+);/* 名稱 : Delay_1ms()* 功能 : 延時(shí)子程序,延時(shí)時(shí)間為 1ms * x* 輸入 : x (延時(shí)一毫秒的個(gè)數(shù))* 輸出 : 無*/void Delay_1ms(uint i)/1ms延時(shí)uchar x,j;for
31、(j=0;j<i;j+)for(x=0;x<=148;x+);/* 名稱 : v_RTInputByte()* 功能 : 往DS1302寫入1Byte數(shù)據(jù)* 輸入 : ucDa 寫入的數(shù)據(jù)* 輸出 : 無*/void v_RTInputByte(uchar ucDa)uchar i;ACC = ucDa;T_RST = 1;for(i=8; i>0; i-)T_IO = ACC0;T_CLK = 1;T_CLK = 0;ACC = ACC >> 1;/* 名稱 : uc_RTOutputByte()* 功能 : 從DS1302讀取1Byte數(shù)據(jù)* 輸入 :無* 返
32、回值: ACC*/uchar uc_RTOutputByte(void) uchar i;T_RST = 1;for(i=8; i>0; i-)ACC = ACC >>1;T_IO=1;ACC7 = T_IO;T_CLK = 1;T_CLK = 0;return(ACC);/* 名稱 : v_W1302(uchar ucAddr, uchar ucDa)* 功能 : 往DS1302寫入數(shù)據(jù)* 輸入 : ucAddr: DS1302地址, ucDa: 要寫的數(shù)據(jù)*/void v_W1302(uchar ucAddr, uchar ucDa)T_RST = 0;T_CLK = 0
33、;T_RST = 1;v_RTInputByte(ucAddr); / 寫地址 _nop_();_nop_();v_RTInputByte(ucDa); / 寫1Byte數(shù)據(jù)T_CLK = 1;T_RST = 0;/* 名稱 : uc_R1302(uchar ucAddr)* 功能 : 讀取DS1302某地址的數(shù)據(jù)* 輸入 : ucAddr: DS1302地址* 返回值 : ucDa :讀取的數(shù)據(jù)*/uchar uc_R1302(uchar ucAddr)uchar ucDa;T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(ucAddr); /寫地址,命
34、令_nop_();_nop_();ucDa = uc_RTOutputByte(); /讀1Byte數(shù)據(jù)T_CLK = 1;T_RST = 0;return(ucDa);/* 名稱 : v_BurstW1302T* 功能 : 往DS1302寫入時(shí)鐘數(shù)據(jù)(多字節(jié)方式)* 輸入 : pSecDa: 時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí) 日 月 星期 年 控制* 8Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B 1B* 返回值 : 無*/void v_BurstW1302T(uchar *pSecDa)uchar i;v_W1302(0x8e, 0x00); /控制命令,WP=0,寫
35、操作T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(0xbe); /0xbe:時(shí)鐘多字節(jié)寫命令for(i=8; i>0; i-) /8Byte = 7Byte 時(shí)鐘數(shù)據(jù) + 1Byte 控制v_RTInputByte(*pSecDa); /寫1Byte數(shù)據(jù)pSecDa+;T_CLK = 1;T_RST = 0;/* 名稱 : v_BurstR1302T(uchar *pSecDa)* 功能 : 讀取DS1302時(shí)鐘數(shù)據(jù)* 輸入 : pSecDa: 時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí) 日 月 星期 年* 7Byte (BCD碼) 1B 1B 1B 1
36、B 1B 1B 1B* 返回值 : ucDa :讀取的數(shù)據(jù)*/void v_BurstR1302T(uchar *pSecDa)uchar i;T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(0xbf); /0xbf:時(shí)鐘多字節(jié)讀命令for(i=8; i>0; i-)*pSecDa = uc_RTOutputByte(); /讀1Byte數(shù)據(jù)pSecDa+;T_CLK = 1;T_RST = 0;/* 名稱 : v_BurstW1302R(uchar *pReDa)* 功能 : 往DS1302寄存器數(shù)寫入數(shù)據(jù)(多字節(jié)方式)* 輸入 : pReDa:
37、 寄存器數(shù)據(jù)地址* 返回值 : 無*/void v_BurstW1302R(uchar *pReDa)uchar i;v_W1302(0x8e,0x00); /控制命令,WP=0,寫操作T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(0xfe); /0xbe:時(shí)鐘多字節(jié)寫命令for(i=31; i>0; i-) /31Byte 寄存器數(shù)據(jù)v_RTInputByte(*pReDa); /寫1Byte數(shù)據(jù)pReDa+;T_CLK = 1;T_RST = 0;/* 名稱 : v_BurstR1302R(uchar *pReDa)* 功能 : 讀取DS13
38、02寄存器數(shù)據(jù)* 輸入 : pReDa: 寄存器數(shù)據(jù)地址* 返回值 : 無*/void v_BurstR1302R(uchar *pReDa)uchar i;T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(0xff); /0xbf:時(shí)鐘多字節(jié)讀命令for(i=31; i>0; i-) /31Byte 寄存器數(shù)據(jù)*pReDa = uc_RTOutputByte(); /讀1Byte數(shù)據(jù)pReDa+;T_CLK = 1;T_RST = 0;/* 名稱 : v_Set1302(uchar *pSecDa)* 功能 : 設(shè)置初始時(shí)間* 輸入 : pSecD
39、a: 初始時(shí)間地址。初始時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B* 返回值: 無*/void v_Set1302(uchar *pSecDa)uchar i;uchar ucAddr = 0x80;v_W1302(0x8e, 0x00); /控制命令,WP=0,寫操作for(i=7; i>0; i-)v_W1302(ucAddr, *pSecDa); / 秒 分 時(shí) 日 月 星期 年pSecDa+;ucAddr += 2;v_W1302(0x8e, 0x80); /控制命令,WP=1,寫保護(hù)/* 名稱 : v_Get
40、1302(uchar ucCurtime)* 功能 : 讀取DS1302當(dāng)前時(shí)間* 輸入 : ucCurtime: 保存當(dāng)前時(shí)間地址。當(dāng)前時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B* 返回值 : 無*/void v_Get1302(uchar ucCurtime)uchar i;uchar ucAddr = 0x81;for(i=0; i<7; i+)ucCurtimei = uc_R1302(ucAddr); /格式為: 秒 分 時(shí) 日 月 星期 年ucAddr += 2;/* 名稱 : dectobcd(uchar
41、 dec)* 功能 : DEC碼轉(zhuǎn)換為BCD碼* 輸入 : dec碼* 輸出 : bcd碼*/uchar dectobcd(uchar dec)uchar bcd;bcd = 0;while(dec >= 10) dec -= 10; bcd+; bcd <<= 4;bcd |= dec;return bcd;/* 名稱 : bcdtodec(uchar bcd)* 功能 : BCD碼轉(zhuǎn)換為DEC碼* 輸入 : bcd碼* 輸出 : dec碼*/uchar bcdtodec(uchar bcd)uchar data1;data1 = bcd & 0x0f; /取BCD
42、低4位bcd = bcd & 0x70; /剔除BCD的最高位和低4位。data1 += bcd >> 1;data1 += bcd >> 3; /用位移代替乘法運(yùn)算return data1;/* 名稱 : 調(diào)整值進(jìn)行轉(zhuǎn)換* 功能 : * 輸入 : * 輸出 : */uint D_B(uint dec) uint b; b=(dec/10)<<4; b+=dec%10; return b;/* 名稱 : Run_DS1302(void)* 功能 : 讀出DS1302中的數(shù)據(jù)* 輸入 : 無* 輸出 : 無*/void Run_DS1302(void)uchar sec, min, hour, day, month, year;while(si
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療大數(shù)據(jù)與個(gè)性化醫(yī)療考核試卷
- 加油站現(xiàn)場(chǎng)安全管理考核試卷
- 工業(yè)控制計(jì)算機(jī)在智能建筑管理系統(tǒng)中的作用考核試卷
- D城市模型構(gòu)建與應(yīng)用考核試卷
- 機(jī)床功能部件在深海探測(cè)設(shè)備中的抗壓性能考核試卷
- 數(shù)字出版物的市場(chǎng)趨勢(shì)與用戶需求分析考核試卷
- 招標(biāo)投標(biāo)居間合同范本
- 業(yè)務(wù)提成附加合同范本
- 養(yǎng)殖合同魚塘養(yǎng)殖合同范本
- 垃圾分類綜合宣傳投標(biāo)方案(技術(shù)方案)
- 部編版《道德與法治》四年級(jí)下冊(cè)教材解讀與分析文檔
- 2024年保育員(初級(jí))考試題及答案
- 甘肅省白銀市2024年中考英語真題
- 胰腺囊性腫瘤
- 聯(lián)盟山東省菏澤一中2025屆高考全國(guó)統(tǒng)考預(yù)測(cè)密卷歷史試卷含解析
- 新學(xué)期開學(xué)第一課主題班會(huì)
- 2023八年級(jí)道德與法治下冊(cè) 第七課 尊重自由平等第1框 自由平等的真諦教案 新人教版
- 2024版離職技術(shù)人員保密協(xié)議
- 混凝土裂縫修補(bǔ)方案
- 潛水打撈合同范本
評(píng)論
0/150
提交評(píng)論