單片機(jī)仿真課程設(shè)計(jì)——基于51單片機(jī)的實(shí)時(shí)時(shí)鐘_第1頁
單片機(jī)仿真課程設(shè)計(jì)——基于51單片機(jī)的實(shí)時(shí)時(shí)鐘_第2頁
單片機(jī)仿真課程設(shè)計(jì)——基于51單片機(jī)的實(shí)時(shí)時(shí)鐘_第3頁
單片機(jī)仿真課程設(shè)計(jì)——基于51單片機(jī)的實(shí)時(shí)時(shí)鐘_第4頁
單片機(jī)仿真課程設(shè)計(jì)——基于51單片機(jī)的實(shí)時(shí)時(shí)鐘_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精品文檔基于51系列單片機(jī)及DS1302時(shí)鐘芯片的實(shí)時(shí)時(shí)鐘仿真設(shè)計(jì)一、課程設(shè)計(jì)目的意義通過本次課程設(shè)計(jì)可以靈活運(yùn)用單片機(jī)的基礎(chǔ)知識(shí),依據(jù)課程設(shè)計(jì)內(nèi)容,能夠完成從硬件電路圖設(shè)計(jì),到軟件編程及系統(tǒng)調(diào)試實(shí)現(xiàn)系統(tǒng)功能,完成課程設(shè)計(jì),加深對單片機(jī)基礎(chǔ)知識(shí)的理解并靈活運(yùn)用。二、實(shí)現(xiàn)目標(biāo)本設(shè)計(jì)主要為實(shí)現(xiàn)一款可正常顯示時(shí)鐘/日歷的實(shí)時(shí)電子時(shí)鐘。對當(dāng)前電子鐘開發(fā)手段進(jìn)行了比較和分析,最終確定了采用單片機(jī)技術(shù)實(shí)現(xiàn)電子時(shí)鐘。本設(shè)計(jì)應(yīng)用AT89C52芯片作為核心,LCD顯示屏,使用DS1302實(shí)時(shí)時(shí)鐘日歷芯片完成時(shí)鐘 /日歷的基本功能。這種實(shí) 現(xiàn)方法的優(yōu)點(diǎn)是電路簡單,性能可靠,實(shí)時(shí)性好,時(shí)間精確,操作簡單,編程容易。

2、 三、硬件設(shè)計(jì)本設(shè)計(jì)采用具有 32根I/O引腳的AT89C52單片機(jī)。AT89C52單片機(jī)是一款低功耗,低 電壓,高性能 CMO密位單片機(jī),片內(nèi)含 4KB (可經(jīng)受1000次擦寫周期)的FLASH可編程可 反復(fù)擦寫的只讀程序存儲(chǔ)器(EPROM,器件采用CMOS:藝和ATMEI公司的高密度、非易失性存儲(chǔ)器(NURAM技術(shù)制造,其輸出引腳和指令系統(tǒng)都與MCS-52兼容。片內(nèi)的FLASHY儲(chǔ)器允許在系統(tǒng)內(nèi)可改編程序或用常規(guī)的非易失性存儲(chǔ)器編程器來編程。因此,AT89C52是一種功能強(qiáng),靈活性高且價(jià)格合理的單片機(jī),可方便的應(yīng)用在各個(gè)控制領(lǐng)域。AT89C52具有以下主要性能:1. 4KB可改編程序Fla

3、sh存儲(chǔ)器;2. 全靜態(tài)工作:024Hz;3. 128X8字節(jié)內(nèi)部RAM4. 32個(gè)外部雙向輸入/輸出(I/O) 口;5. 6個(gè)中斷優(yōu)先級(jí);2個(gè)16位可編程定時(shí)計(jì)數(shù)器;6. 可編程串行通道;7. 片內(nèi)時(shí)鐘振蕩器。DS1302是美國DALLAS公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘日歷芯片,附加 31 字節(jié)靜態(tài)RAM采用SPI三線接口與CPUS行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字 節(jié)的時(shí)鐘信號(hào)和 RAM數(shù)據(jù)。實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、星期、月和年,一個(gè)月小于31天時(shí)可以自動(dòng)調(diào)整,且具有閏年補(bǔ)償功能。工作電壓寬達(dá)2.55.5V。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,

4、提供了對后備電源進(jìn)行涓細(xì)電流充電的能力。有主電源和備份電源雙引腳,而且備份電源可由大容量電容( 1F)來替代。需要強(qiáng)調(diào)的是,DS1302需要使用32.768KHz的晶振。pSJ3C二V0C1V0C2XI5C1K:2IOONDR3T四、原理圖so J2歡迎下載RP133LB 2辦一戶之3 2鵬ny&嚙 吆Mj F2中也可 困的總 迎程除AF3 JIKT1P 三:4E帕包1年朝正 的軍商Fra用出此理國揶閥電PQ 404 凹 同中?!碑嘡j OMC-ra :JTW1| -13 1-, FIP13P-1?Fl OnFl 1(T3KP11F”五、程序源代碼#include #include LCD16

5、02.h#include DS1302.hvoid Delay1ms(unsigned int count) unsigned int i,j;for(i=0;icount;i+) for(j=0;j0; i-)DS1302_IO = ACC0;DS1302_CLK = 1;DS1302_CLK = 0;ACC = ACC 1;unsigned char DS1302OutputByte(void)unsigned char i;for(i=8; i0; i-)ACC = ACC 1;ACC7 = DS1302_IO;DS1302_CLK = 1;DS1302_CLK = 0;/用于計(jì)算 DS

6、1302_RAM地址的宏/ 實(shí)時(shí)時(shí)鐘寫入一字節(jié)( 內(nèi)部函數(shù) )/ 相當(dāng)于匯編中的 RRC/ 實(shí)時(shí)時(shí)鐘讀取一字節(jié)( 內(nèi)部函數(shù) )/ 相當(dāng)于匯編中的 RRCreturn(ACC);/ucAddr:DS1302地void Write1302(unsigned char ucAddr, unsigned char ucDa) 址 , ucData:要寫的數(shù)據(jù)DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr); /地址,命令DS1302InputByte(ucDa);/ 寫 1Byte 數(shù)據(jù)DS1302_CLK = 1

7、;DS1302_RST = 0;unsigned char Read1302(unsigned char ucAddr)讀取 DS1302某地址的數(shù)據(jù)unsigned char ucData;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr|0x01);/地址,命令ucData = DS1302OutputByte();/讀 1Byte 數(shù)據(jù)DS1302_CLK = 1;DS1302_RST = 0;return(ucData);void DS1302_SetProtect(bit flag) /是否寫保護(hù)i

8、f(flag)Write1302(0x8E,0x10); elseWrite1302(0x8E,0x00);設(shè)置void DS1302_SetTime(unsigned char Address, unsigned char Value) / 時(shí)間函數(shù)DS1302_SetProtect(0);Write1302(Address, (Value/10)Second = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MINUTE);Time-Minute = (ReadValue&0x70)4)*10 +

9、(ReadValue&0x0F);ReadValue = Read1302(DS1302_HOUR);Time-Hour = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_DAY);Time-Day = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time-Week = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1

10、302_MONTH);Time-Month = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time-Year = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);void DateToStr(SYSTEMTIME *Time)Time-DateString0 = Time-Year/10 + 0;Time-DateString1 = Time-Year%10 + 0;Time-DateString2 = -;Time-DateString3 = Time

11、-Month/10 + 0;Time-DateString4 = Time-Month%10 + 0;Time-DateString5 = -;Time-DateString6 = Time-Day/10 + 0;Time-DateString7 = Time-Day%10 + 0;Time-DateString8 = 0;void TimeToStr(SYSTEMTIME *Time)Time-TimeString0 = Time-Hour/10 + 0;Time-TimeString1 = Time-Hour%10 + 0;Time-TimeString2 = :;Time-TimeStr

12、ing3 = Time-Minute/10 + 0;Time-TimeString4 = Time-Minute%10 + 0;Time-TimeString5 = :;Time-TimeString6 = Time-Second/10 + 0;Time-TimeString7 = Time-Second%10 + 0;Time-DateString8 = 0;void Initial_DS1302(void)unsigned char Second=Read1302(DS1302_SECOND);if(Second&0x80)DS1302_SetTime(DS1302_SECOND,0);#

13、endif#ifndef LCD_CHAR_1602#define LCD_CHAR_1602#include /Port Definitionssbit LcdRs= P2A0;sbit LcdRw= P2A1;sbit LcdEn=P2A2;/P0=0x80,P1=0x90,P2=0xA0,P3=0xB0. 數(shù)據(jù)端口sfr DBPort= 0x80;/ 內(nèi)部等待函數(shù)unsigned char LCD_Wait(void) LcdRw=1;_nop_();LcdEn=1;_nop_();/while(DBPort&0x80);/LcdRs=0;在用 Proteus 仿真時(shí),注意用屏蔽此語句,

14、在調(diào)用 GotoXY()時(shí),會(huì)進(jìn)入死循環(huán),/ 可能在寫該控制字時(shí),該模塊沒有返回寫入完備命令,即DBPort&0x80=0x80/ 實(shí)際硬件時(shí)打開此語句LcdEn=0;return DBPort;/向LCD寫入命令或數(shù)據(jù)0/ Command1/ Data0x01/清屏0x02/光標(biāo)返回原點(diǎn)#define LCD_COMMAND#define LCD_DATA#define LCD_CLEAR_SCREEN#define LCDHOMING void LCD_Write(bit style, unsigned char input) LcdEn=0;LcdRs=style;LcdRw=0;_no

15、p_();DBPort=input;_nop_();/注意順序LcdEn=1;_nop_();/注意順序LcdEn=0;_nop_();LCD_Wait();/ 設(shè)置顯示模式#define LCD_SHOW0x04/顯示開#define LCD_HIDE0x00/日二顯示關(guān)#define LCD_CURSOR0x02/ 顯示光標(biāo)#define LCD_NO_CURSOR0x00/無光標(biāo)#define LCD_FLASH0x01/光標(biāo)閃動(dòng)#define LCDNO_FLASH0x00/光標(biāo)不閃動(dòng)void LCD_SetDisplay(unsigned char DisplayMode)LCD_W

16、rite(LCD_COMMAND, 0x08|DisplayMode);/ 設(shè)置輸入模式#define LCDAC_UP0x02#define LCDAC_DOWN0x00/ default#define LCDMOVE0x01/ 畫面可平移#define LCDNOMOVE0x00/defaultvoid LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode);/ 初始化 LCDvoid LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38); /8 位數(shù)

17、據(jù)端口 ,2 行顯示 ,5*7 點(diǎn)陣LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); / 開啟顯示 , 無光標(biāo)LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); 清屏/LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC 遞增 , 畫面不動(dòng) void GotoXY(unsigned char x, unsigned char y)if(y=0)LCD_Write(LCD_COMMAND,0x80|x);8歡迎下載 。精品文檔if(y=1)LCD_Write(LCD_COMMAND,0x80|(x-0x40);void Print(unsigned char *str)while(*str!=0)LCD_Write(LCD_DATA,*str);str+;#endif六、

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論