陳磊萬年歷設計報告 (二)_第1頁
陳磊萬年歷設計報告 (二)_第2頁
陳磊萬年歷設計報告 (二)_第3頁
陳磊萬年歷設計報告 (二)_第4頁
陳磊萬年歷設計報告 (二)_第5頁
已閱讀5頁,還剩20頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

畢業實踐報告

專業班級自動化1004班

學生姓名____________________

學號____________________

實踐性質課程設計

實踐成績____________________

指導教師____________________

長江職業學院工學院

二。一。年十一月印制

基于51單片機的萬年歷設計

單片機經過兒十年的發展,已經廣泛應用于生活中的各個領域。單片機以其體

積小、功能全、性價比高等諸多優點,在許多行業都得到了廣泛應用。在工業控

制、家用電器、通信設備、信息處理、尖端武器等各種測控領域的應用中獨占鰲

頭,單片機開發技術已成為電子信息、電氣、通信、自動化、機電一體化等專業

技術人員必須掌握的技術。

基于單片機的萬年歷作為設計的課題,因為它有很好的開放性和可發揮性,對

作者的要求比較高,不僅考察了對單片機的掌握能力而且強調了對單片機擴展的

應用。另外液晶顯示的萬年歷已經越來越流行,特別適合在家庭居室、辦公室、

大廳、會議室、車站和廣場等地方使用,它具有顯示清晰直觀、走時準確、可以

進行夜視等功能,并且還可以擴展出其它多種功能。所以,電子萬年歷作為設計

課題很有價值。

現在對于電子萬年歷的設計大多運用51單片機。主要是因為51單片機種類齊

全、結構體系完整、指令系統功能完善、性能優越、具有較高可靠性和高性價比

等特點。

本篇論文主要介紹了運用單片機實現電子萬年歷的設計,萬年歷系統擬用

STC89c51單片機控制,以DS1302時鐘芯片計時、1602液晶屏顯示。系統主要由

單片機控制電路,顯示電路以及校正電路三個模塊組成。本文闡述了系統的硬件

工作原理,所應用的各個接口模塊的功能以及其工作過程,論證了設計方案理論

的可行性。

目錄

第一章緒論........................................1

1.1本課題主要的研究工作....................................1

第二章系統的硬件設計與實現.......................2

2.1電路設計框圖............................................2

2.2系統硬件概述............................................2

2.3主要單元電路的設計......................................2

2.3.1單片機主控制模塊的設計...............................2

2.3.2時鐘電路模塊的設計...................................3

2.3.3獨立式鍵盤設計.......................................5

2.3.4顯示模塊的設計......................................5

第三章系統的軟件設計..............................7

3.1程序流程圖...............................................7

3.1.1系統總流程圖.........................................7

3.1.2DS1302時鐘程序流程圖...............................8

3.1.3LCD顯示程序流程圖...............錯誤!未定義書簽。

3.2程序的設計..............................................9

3.2.1DS1302讀寫程序......................................9

3.2.2數碼管顯示程序...................錯誤!未定義書簽。

第四章仿真與調試.................................12

4.1KEIL軟件調試流程........................................12

4.2PROTEUS軟件運行流程.....................................12

4.3萬年歷的功能仿真.......................................12

致謝............................................13

參考文獻..........................................15

附錄:主程序....................................16

第一章緒論

1.1本課題主要的研究工作

本項目是一種基于AT89c51片機的萬年歷設計,本方案以AT89c51片機作為

主控核心,與時鐘芯片DS1302、按鍵、LCD1602液晶顯示器組成硬件系統。在硬

件系統中設有獨立按鍵和LCD1602顯示器,能顯示豐富的信息,根據使用者的需

要可以隨時對時間進行更改,讀取方便、顯示直觀。

當程序執行后,LCD顯示即時時間、年月日、星期。設置4個操作鍵:K1:選

擇鍵;K2:加鍵;K3:減鍵;K4:確定鍵。

1本設計的主要內容:

(1)熟悉萬年歷各模塊的工作原理;

(2)選擇適當的芯片和元器件,確定系統電路,繪制電路原理圖,尤其

是各接口電路;

(3)熟悉單片機使用方法和C語言,編寫出相應模塊的應用程序;

(4)分別在各自的模塊中調試出對應的功能,在Proteus軟件上進行仿

真,并實現各種功能。

2設計目標:萬年歷實現以下三個功能:

(1)具有年、月、日、星期、時、分、秒等功能;

(2)具備年、月、日、星期、時、分、秒校準功能,具備自動調節閏年

的功能;

(3)具有與即時時間同步的功能。

1

第二章系統的硬件設計與實現

2.1電路設計框圖

根據設計方案給出了系統總體的設計框圖,如圖1所示:

S主

T

C控

8

LCD液晶模塊9制

c模

5

1塊鍵盤模塊

DS13O2模塊

圖I

為使時鐘走時與標準時間一致,校時電路是必不可少的,鍵盤模塊用來校正

液晶上顯示的時間;STC89C51單片機通過輸出各種電脈沖信號來驅動控制各部分

正常工作;而系統的時間、等數據則最終通過液晶模塊顯示出來。

2.2系統硬件概述

本電路是以STC89C51單片機為控制核心,該芯片具有在線編程功能,功耗低,

能在3.3V的超低壓下工作;

時鐘芯片采用DS1302,它是一款高性能、低功耗、自帶RAM的實時時鐘芯片,

具有掉電自動保存功能。可自動對秒、分、時、日、周、月、年進行計數,具有

閏年補償功能,而且精度高位的RAM做為數據暫存區,工作電壓2.5V?5.5V范圍

內,2.5V時耗電小于300nA。

顯示模塊采用1602顯示屏,它內置192種字符,可顯示32個符號或數字,清

晰可見,而且功率消耗小壽命長抗干擾能力強。其工作電壓為5vo

2.3主要單元電路的設計

2.3.1單片機主控制模塊的設計

一個典型的單片機最小系統一般由時鐘電路、復位電路、電源指示燈和外部

擴展接口等部分組成。

2

單片機的最小系統如下圖所示,單片機的XTALO和XTAL1引腳用于連接晶振電

路。RESET為復位引腳,連接復位電路,用于初始化MCU。

C

U2

30pF19

I?XTAL1

I——IX1

CRYSTAL

18

XTAL2

SO30pF

2.3.2時鐘電路模塊的設計

DS1302內含有一個實時時鐘/日歷和31字節靜態RAM,通過簡單的串行接口

與單片機進行通信。圖中VCC1為后備電源,VCC2為主電源。DS1302由VCC1或VCC2

兩者中的較大者供電。所以在主電源關閉的情況下,也能保持時鐘的連續運行。

XI和X2是振蕩源,外接32.768KHz晶振用來為芯片提供計時脈沖。RST是復位/

片選線,通過把RST輸入驅動置高電平來啟動所有的數據傳送。DS1302

的硬件接線圖如圖2所示:

3

_Z

7P1.1

4P1.2

P1.3

5P1.4

7P1.5

P1.6

AP1.7

AT89C51

〈TEXT〉

co

0^6

、0U1

一00

>>DS1302

<TEXT>

ZL

XX

X2

□-

CRYSTAL

圖2

時鐘芯片DS1302的工作原理:

(1)DS1302的控制字節:DS1302控制字節的高有效位(位7)必須是邏輯1,

如果它為0,則不能把數據寫入DS1302中,位6如果為0,則表示存取日歷時鐘

數據,為1表示存取RAM數據;位5至位1指示操作單元的地址;最低有效位(位

0)如為0表示要進行寫操作,為1表示進行讀操作,控制字節總是從最低位開始

輸出

(2)數據輸入輸出(I/O):在控制指令字輸入后的下一個SCLK時鐘的上升沿

時,數據被寫入DS1302,數據輸入從低位即位0開始。同樣,在緊跟8位的控制

指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數據,讀出數據時從低位0

位到高位7。

(3)DS1302的寄存器:DS1302有12個寄存器,其中有7個寄存器與日歷、

時鐘相關,存放的數據位為BCD碼形式。“CH”是時鐘暫停標志位,當該位為1時,

時鐘振蕩器停止,DS1302處于低功耗狀態;當該位為0時,時鐘開始運行。“WP”

是寫保護位,在任何的對時鐘和RAM的寫操作之前,“WP”必須為0。當“WP”為

4

1時,寫保護位防止對任一寄存器的寫操作。

2.3.3獨立式鍵盤設計

獨立式鍵盤每個鍵單獨占用一根I/O口線。鍵盤的工作方式可分為編程控制

方式和中斷控制方式。CPU在一個工作周期內,利用完成其他任務的空余時間,調

用鍵盤掃描子程序,經程序查詢,若無鍵操作,則返回;若有鍵操作,則進而判

斷是哪個鍵,并執行相應的鍵處理程序。這種方式為編程掃描方式。由于單片機

在正常應用過程中,可能會經常進行鍵操作,因而編程控制方式使CPU經常處于

工作狀態,在進行本次設計中,只涉及到了選擇、力口、減、確定四個功能。因此

采用獨立式鍵盤。

2.3.4顯示模塊的設計

3-8譯碼器的輸入是3個腳,輸出時8個腳,用高低電平表示輸入和輸出。輸入是二進制。

Pl.O,Pl.l,P1.2分別表示三位二進制數。二進制最大數位111,輸出時十進制。8個輸出腳

剛好對應數碼管的八個選位。

點亮第。位,給Pl.2,P1.1,P1.0賦值000.寫程序P1=0x00

點亮第1位,給P1.2,Pl.l,PL0賦值001.寫程序Pl=0x01

點亮第2位,給PI.2,Pl.l,P1.0賦值002.寫程序P1=0x02

點亮第3位,給P1.2,Pl.l,P1.0賦值003.寫程序P1=0x03

點亮第4位,給PI.2,Pl.l,P1.0賦值004.寫程序Pl=0x04

點亮第5位,給P1.2,Pl.LPL0賦值005.寫程序Pl=0x05

點亮第6位,給PL2,Pl.l,P1.0賦值006.寫程序Pl=0x06

點亮第7位,給Pl.2,Pl.l,P1.0賦值007.寫程序P1=0x07

數碼管從左到右編號0~7,共八位,其八個選位分別接到3-8譯碼器的八個輸出上。數碼

管是共陰極的,高電平有效。。

5

PDDTADO

PQ.VAD1

PO^ADZ

poa-ADa

PO.4/A04

POLADS

PQJ&AD6

PD.7/AD7

P2OA2

P2.V>e

P22fA1D

P23fA11

P2.4/A12

P2SM3

P2J9A14

P2.7/A15

P3DTRXD

P3.1HXD

pa^nrrn

P33HTH

P3.4/TI]

P3ST1

P3J&UVI

P3.7/inr

0

P3.0/RXD1

P3.1fTXD2

P3.2/INT0"3

P3.3flNTT4

5

P3Mo

6

P3.5H-17

P3.6恒

±P37版36Z

AT89C51?暮1還U3

74HC138

<TEXT>

<(DOujUJUJ

n

6

第三章系統的軟件設計

3.1程序流程圖

3.1.1系統總流程圖

系統總流程圖分析:首先系統初始化,系統開始運行,當有設置鍵按下時進

入修改時間模式,無按鍵按下時讀取時間、溫度等數據送入液晶屏顯示;在修改

時間模式下設置時間完成后再送數據到液晶屏顯示,如圖4所示:

圖4

7

3.1.2DS1302時鐘程序流程圖

入液晶屏顯示。這時若有設置鍵按下時,進行時間修改,完成后將數據送入

時鐘芯片;若沒有按鍵按下,則直接存入EPROM,送入液晶屏顯示。時鐘程序S1302

開始計時時,首先進行初始化,當有中斷信號時,讀取時鐘芯片的數據,如圖5

所示:

開始

初始化

8

3.2程序的設計

3.2.1DS1302讀寫程序

DS1302是SPI總線驅動方式。它不僅要向寄存器寫入控制字,還需要讀取相

應寄存器的數據。要想與DS1302通信,首先要先了解DS1302的控制字。DS1302

的控制字如圖7:

76543210

RAMRD

1A4A3A2A1AO

UR

圖7

控制字總是從最低位開始輸出。在控制字指令輸入后的下一個SCLK時鐘的上

升沿時,數據被寫入DS1302,數據輸入從最低位(0位)開始。同樣,在緊跟8

位的控制字指令后的下一個SCLK脈沖的下降沿,讀出DS1302的數據,讀出的

數據也是從最低位到最高位。依據讀寫時序如圖8和圖9:

RSTJL

SCLK

1/0YR/W|A0|A1|A2IA3|A4|R/C|[)00-0~Q~0~0~00-

圖8單字節讀

RSTJI_

sc/^FWWWWHWWWL

I/O—〈R/耐AOIA1IA2IA31A4IR/c|1|D1|D2|D3|D4|D5|D6|D7)----------

圖9單字節寫

在進行任何數據傳輸時,RST必須被置高電平,每個SCLK為上升沿時數據被

輸入,下降沿時數據被輸出。先把RST置低,禁止數據傳輸,SCLK置低,清零時

鐘總線,RST再置高,允許數據傳輸。傳送完成后,RST置低,禁止字節的傳送。

部分源程序如下:

voidwrite_byte(uchardat)〃寫一個字節

(

ACC=dat;

RST=1;

9

for(a=8;a>0;a一)

IO=ACCO;

SCLK=0;

SCLK=1;

ACC=ACC?1;

)

)

ucharread_byte()〃讀一個字節

(

RST=1;

for(a=8;a>0;a一)

(

ACC7=IO;

SCLK=1;

SCLK=0;

ACC=ACC?1;

)

return(ACC);

)

voidwrite_1302(ucharadd,uchardat)//向1302芯片寫函數,指定寫入地址,

數據

(

RST=O;

SCLK=0;

RST=1;

write_byte(add);

write_byte(dat);

SCLK=1;

RST=O;

10

ucharread_1302(ucharadd)〃從1302讀數據函數,指定讀取數據來源

地址

(

uchartemp;

RST=O;

SCLK=O;

RST=1;

write_byte(add);

temp=read_byte();

SCLK=1;

RST=O;

return(temp);

}

11

第四章仿真與調試

4.1Keil軟件調試流程

建立新工程并保存,保存后會彈出一個設備選擇對話框,選擇MCU后點確定

返回主界面。新建文件并保存,以.C為后綴。接著選擇SourceGroup1,右擊鼠

標彈出快捷菜單,選擇"AddFiletoGroup'SourceGroupl'",出現一個對話

框,加入文件后點close返回主界面。再打開工程屬性設置對話框,主要設置工

作包括在Target選項卡中設置晶振頻率、在Debug選項卡中設置生成hex文件等。

然后編寫程序并調試。在模擬調試程序后,還須通過編程器將.hex目標文件寫入

單片機中才能觀察仿真的效果。

4.2Proteus軟件運行流程

運行Proteus程序后,進入軟件的主界面,過左側工具欄中的P(從庫中選擇

元件命令)命令,在PickDevices左側窗口中選擇所需元件的關鍵字,然后放置

元件并調整方向和位置以及參數設置,最后進行連線。按P在庫中查找元器件,

將所需要的元器件放置好后,繪制成原理圖。

4.3萬年歷的功能仿真

當電路搭建好之后,選中單片機STC89c51,左鍵點擊STC89c51,在出現的對

話框里點擊ProgramFile按鈕,找到剛才Keil軟件編譯得到的HEX文件,載入

然后點擊“0K”按鈕就可以模擬了。點擊模擬調試按鈕的運行按鈕,進人調試狀

態。按相應的按鍵可調節分,時,星期,日期,月份,年份,并且可以自動閏年

調整。按鍵功能自上而下依次為:選擇鍵、力口、減、確定。在Protues中仿真,

如圖10,圖11,圖12所示:

12

圖11鍵盤調節

致謝

至此,關于畢業設計的所有內容就介紹完了,系統的仿真電路和程序設計合

理。

在整個設計過程中,充分發揮了人的主觀能動性,自主學習,學到了許多沒

學到的知識。程序編寫中,由于思路不清晰,開始時遇到了很多的問題,經過靜

下心來思考查資料?,和同學討論,理清了思路,完成對程序的編寫。通過設計提

高了對單片機的認識,進一步熟悉和掌握單片機的結構及工作原理。通過實際程

序設計和調試,逐步掌握模塊化程序設計方法和調試技術,提高軟件設計、調試

能力;通過這次設計熟悉以單片機核心的應用系統開發的全過程,掌握硬件電路

設計的基本方法和技術,掌握相關電路參數的計算方法。最終較好的完成了設計,

達到了預期的目的,完了最初的設想。但是由于時間和個人暫時的能力的原因,

13

整個系統看起來還是顯得非常的簡單,只實現了一些最基本的功能,還有許多不

足和可以擴展的地方。

畢業綜合實踐的完成,為我的大學學習生活畫下了最后一筆。應該感謝的人

很多,首先感謝學院給我們提供了一個展現自己的舞臺,在長江職業學院這個良

好的學習環境中,我們得到了很多鍛煉的機會,使得我們的動手能力和專業技能

都有了很大的提高。其次要感謝教單片機的鄧柳老師的悉心教導和全程負責畢業

綜合實踐的陳卉老師,還有幫助我完成的學校電子競賽組的同學。是你們為我創

造了良好的學習和完成畢業設計的環境,你們的支持和鼓勵使我對這次的設計完

成有了信心和動力,使我能夠順利地完成課題的設計工作,在此向這些幫助我的

人致以誠摯的謝意。最后,還要特別感謝我的父母,養育之恩,無以回報,你們

永遠健康快樂是我最大的心愿。正是在爸媽身體和精神的養育下才讓我得以全身

心投入學習和研究中,順利完成學業。

即將踏上社會了,在人生的又一個十字路口上,我將帶著你們的期望和關懷,

在將來的工作崗位上勤奮實干,積極進取,用優異的成績來回報大家對我的關心

和幫助!

14

參考文獻

1.張迎新《單片微型計算機原理、應用及接口技術》國防工業出版

2.郭天祥《十天學會單片機》哈爾濱工程大學出版社

3.郭天祥《51單片機C語言教程》電子工業出版社

4.張福祥《C語言程序設計》遼寧大學出版社

15

附錄:主程序

//名稱:用DS1302與八位數碼管設計的可調式電子日歷與時鐘

//說明:本例會自動調節合法日期時間,對于星期的調節會在

//調整年月日時自動完成,閏年問題也會自動判斷。

//---------------------------------------------------------------------------------------------------

#include<reg52.h>

#include<intrins.h>

#defineuintunsignedint

#defineucharunsignedchar

sbitrst=PlA5;

sbitio=P1A4;

sbitsck=PlA3;

sbiten=P3A6;

sbitsl=PlAO;

sbits2=PlAl;

sbits3=P3A2;

sbits4=P3A3;

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};

ucharcodetable1[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};

uchartime_data[]={02,22,03,20,12,4,12,0xff};〃年,星期,月,日,時,分,秒

ucharcodewrite_addf]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};

ucharcoderead_add[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};

uchardis[8];

ucharcount,num,no,flag,s1num=0,s2num=0,x,y,m,n;

uchar1;

voiddelay(uint);

voidwrite_ds1302_byte(uchar);

voidwrite_ds1302(uchar,uchar);

ucharread_ds1302(uchar);

voidset_rtc();

voidpros();

voiddisplay();

voidtimer0init();

voidkeyscan();

16

voiddelay(uintz)

uintx,y;

for(x=z;x>0;x—)

for(y=l10;y>0;y—);

)

voidwrite_ds1302_byte(uchardat)

(

uchari;

for(i=0;i<8;i++)

(

sck=0;

io=dat&0x01;

dat?=1;

sck=l;

voidwrite_ds1302(ucharadd,uchardat)

(

rst=O;

_nop_();

sck=0;

_nop_();

rst=l;

_nop_();

write_ds1302_byte(add);

write_ds13O2_byte(dat);

rst=O;

_nop_();

sck=1;

io=l;

)

ucharread_ds1302(ucharadd)

{

ucharj,value;

rst=O;

17

_nop_();

sck=O;

_nop_();

rst=1;

_nop_();

write_ds1302_byte(add);

for(j=0;j<8;j++)

(

value?=l;

sck=O;

if(io)

value=valuelOx8O;

sck=l;

)

rst=l;

_nop_();

sck=O;

_nop_();

sck=1;

io=l;

returnvalue;

}

voidset_rtc()

(

uchark,j;

for(k=0;k<7;k++)

(

j=time_data[k]/l0;

time_data[k]=time_data[k]%10;

time_data[k]=time_data[k]+j*16;

)

write_ds1302(0x8e,0);

for(k=0;k<7;k++)

(

write_ds1302(write_add[k],time_data[k]);

)

write_ds1302(0x8e,0x80);

18

voidread_rtc()

ucharj;

for(j=0;j<7;j++)

(

time_data[j]=read_ds1302(read_add|j]);

)

)

voidpros1()

(

dis[0]=time_data[6]/16;

dis[1]=time_data[6J%16;

dis[2]=10;

dis[3]=time_data[4]/16;

dis[4]=time_data[4]%16;

dis[5]=10;

溫馨提示

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

評論

0/150

提交評論