




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)原理實(shí)驗(yàn)考試報(bào)告題 目:基于DS1302數(shù)字鐘姓 名:學(xué) 號(hào):班 級(jí):專 業(yè):電子信息工程指導(dǎo)老師: 提交時(shí)間:基于DS1302數(shù)字鐘摘要:本設(shè)計(jì)選取串行接口時(shí)鐘芯片 DS1302 與單片機(jī)同步通信構(gòu)成數(shù)字時(shí)鐘電 路。其簡(jiǎn)單的三線接口能為單片機(jī)節(jié)省大量資源,DS1302 的后背電源及對(duì)后背 電源進(jìn)行涓細(xì)電流充電的能力保證電路斷電后仍能保存時(shí)間和數(shù)據(jù)信息等。 這些 優(yōu)點(diǎn)解決了目前常用的實(shí)時(shí)時(shí)鐘所無法解決的問題。 該時(shí)鐘電路強(qiáng)大的功能和優(yōu) 越的性能,在很多領(lǐng)域的應(yīng)用中,尤其是某些自動(dòng)化控制、長(zhǎng)時(shí)間無人看守的測(cè) 控系統(tǒng)等對(duì)時(shí)鐘精確性和可靠性有較高要求的場(chǎng)合,具有很高的使用價(jià)值。關(guān)鍵詞: AT8
2、9C52 LCD1602 DS1302 數(shù)字鐘1. 引言從古代的滴漏更鼓到近代的機(jī)械鐘,從電子表到目前的數(shù)字時(shí)鐘,為了準(zhǔn)確的測(cè)量和記錄時(shí)間,人們一直在努力改進(jìn)著計(jì)時(shí)工具。鐘表的數(shù)字化,大力推動(dòng)了計(jì)時(shí)的精確性和可靠性。在單片機(jī)構(gòu)成的裝置中,實(shí)時(shí)時(shí)鐘是必不可少的部件。目前常用的實(shí)時(shí)時(shí)鐘,很 多采用單片機(jī)的中斷服務(wù)來實(shí)現(xiàn),這種方式一方面需要采用計(jì)數(shù)器,占用硬件資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費(fèi)單片機(jī)的資源,而且某些測(cè)控系統(tǒng)可能不允許;有的則使用并行接口的時(shí)鐘芯片,如 MC146818、DS12887 等,它們雖然能滿足單片機(jī)系統(tǒng) 對(duì)實(shí)時(shí)時(shí)鐘的要求,但是這些芯片與單片機(jī)接口復(fù)雜,占用地址、數(shù)
3、據(jù)總線多,芯片體積大,占用空間多,給其它設(shè)計(jì)帶來諸多不便。本設(shè)計(jì)選取串行接口時(shí)鐘芯片DS1302與單片機(jī)同步通信構(gòu)成數(shù)字時(shí)鐘電路。其簡(jiǎn)單的三線接口能為單片機(jī)節(jié)省大量資源,DS1302 的 后背電源及對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力保證電路斷電后仍能保存時(shí)間和數(shù)據(jù)信息等。這些優(yōu)點(diǎn)解決了目前常用的實(shí)時(shí)時(shí)鐘所無法解決的問題。該時(shí)鐘電路強(qiáng)大的功能和優(yōu)越的性能,在很多領(lǐng)域的應(yīng)用中,尤其是某些自動(dòng)化控制、長(zhǎng)時(shí)間無人看守的測(cè)控系統(tǒng)等對(duì)時(shí)鐘精確性和可靠性有較高要求的場(chǎng)合,具有很高的使用價(jià)值。2. 原理2.1 DS1302DS1302的引腳功能如圖所示:DS1302控制字:控制字節(jié)最高有效位(位7)必須是邏輯1
4、,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6如果為0,則表示存取日歷時(shí)釧婁據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出。DS1302的復(fù)位引腳:通過把RST輸入驅(qū)動(dòng)置高電平來啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供了終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302進(jìn)行操作。如果在傳送過程中置RST為低電平,則會(huì)終止此次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦哧帒B(tài)。上電運(yùn)
5、行時(shí),在Vcc2.5V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。DS1302的數(shù)據(jù)輸入與輸出:在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí)數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0至高位7,數(shù)據(jù)讀寫時(shí)序如下圖:DS1302寄存器:DS1302共有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)為BCD碼形式。此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。2.2 LCD1602接口信號(hào)說明
6、:基本操作時(shí)序:讀狀態(tài):輸入:RS=L,RW=H,E=H 輸出:D0D7=狀態(tài)字寫指令:輸入:RS=L,RW=L,D0D7=指令碼,E=高脈沖 輸出:無讀數(shù)據(jù):輸入:RS=H,RW=H,E=H 輸出:D0D7=數(shù)據(jù)寫數(shù)據(jù):輸入:RS=H,RW=L,D0D7=數(shù)據(jù),E=高脈沖 輸出:無讀操作時(shí)序:寫操作時(shí)序:2.3 AT89C52功能特性概述:AT89C52提供以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash閃速 存儲(chǔ)器,256字節(jié)內(nèi)部RAM,32個(gè)I/O口線,3個(gè)16位定時(shí)/計(jì)數(shù)器,一個(gè)6向量?jī)杉?jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)振蕩器及時(shí)鐘電路。同時(shí),AT89C52可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟
7、件可選的節(jié)電工作模式。空閑方式停止CPU的工作,但通話RAM,定時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個(gè)硬件復(fù)位。引腳功能說明:Vcc:電源電壓 GND:地P0口:P0口是一組8位漏極開中型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能吸收電流的方式驅(qū)動(dòng)8個(gè)TTL邏輯門電路,對(duì)端口P0寫“1”時(shí),可作為高阻抗輸入端用。P1口、P2口、P3口:是一組帶內(nèi)部上拉電阻的8位雙向I/O口,其輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平, 此時(shí)可作輸
8、入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流。2.4 設(shè)計(jì)方案以AT89C52為主控芯片,串行時(shí)鐘芯片DS1302為核心計(jì)時(shí)芯片,LCD1602為主要顯示器件,組成數(shù)字時(shí)鐘電路。將AT89C52的P0口分別與LCD1602的D0D7相連,P2.0接DS1302的SCKL引腳,P2.1接DS1302的RST引腳,P2.2接DS1302的I/O引腳,P2.4接LCD1602的使能端E,P2.5接LCD1602的RS引腳,P2.6接LCD1602的RW引腳。此方案中,由于仿真看不出效果,未在DS1302的備用電源VCC2端接入備用電源。3. 電路4. 程序#inc
9、ludesbit mode = P10;/功能鍵sbit add = P11;/加鍵sbit sub = P12;/減鍵sbit SCLK = P20; sbit DAT = P22;sbit RST = P21;sbit lcden = P24;sbit rs = P25;sbit rw = P26;#define ds1302_second_write 0x80 #define ds1302_second_read 0x81#define ds1302_minute_write 0x82#define ds1302_minute_read 0x83#define ds1302_hour_w
10、rite 0x84#define ds1302_hour_read 0x85#define ds1302_date_write 0x86#define ds1302_date_read 0x87#define ds1302_month_write 0x88#define ds1302_month_read 0x89#define ds1302_week_write 0x8a#define ds1302_week_read 0x8b#define ds1302_year_write 0x8c#define ds1302_year_read 0x8d#define lcd1602_year 3#d
11、efine lcd1602_month 6#define lcd1602_date 9#define lcd1602_week 12#define lcd1602_hour 0x40+4#define lcd1602_minute 0x40+7#define lcd1602_second 0x40+10unsigned int nian;unsigned char tt,nummode,flag=0;char hour,minute,second,year,month,date,week; unsigned char code table1= 20 - - ;unsigned char cod
12、e table2= : :;unsigned char code table_week3=MON,TUE,WED,THU,FRI,SAT,SUN;unsigned char days=31,29,31,30,31,30,31,31,30,31,30,31;/每月天數(shù)void ds1302_init();/函數(shù)聲明void delayus(unsigned char temp);void delayms(unsigned char temp);void ds1302_write_byte(unsigned char dat);unsigned char ds1302_read_byte( );v
13、oid ds1302_write(unsigned char address,unsigned char dat);unsigned char ds1302_read(unsigned char address);unsigned char ds1302_read_data(unsigned char address);void lcd1602_write_data(unsigned char date);void lcd1602_write_com(unsigned char com);void lcd1602_init();void lcd1602_write(unsigned char
14、address,char date);void lcd1602_display();void init();void keyscan();void runnian();void main() /主函數(shù)init(); while(1)runnian();keyscan();void init() /整體初始化TMOD=0x01;TL0=(65536-20000)%256;TH0=(65536-20000)/256;EA=1;ET0=1;TR0=1;ds1302_init();lcd1602_init();void ds1302_init() /初始化DS1302ds1302_write(0x8e
15、,0x00);/關(guān)閉寫保護(hù)ds1302_write(ds1302_second_write,0x00); /初始化時(shí)間ds1302_write(ds1302_minute_write,0x23);ds1302_write(ds1302_hour_write,0x21);ds1302_write(ds1302_date_write,0x04);ds1302_write(ds1302_month_write,0x06);ds1302_write(ds1302_week_write,0x01);ds1302_write(ds1302_year_write,0x12);void lcd1602_ini
16、t()/初始化lcd1602 unsigned char n=0;lcden=0;lcd1602_write_com(0x38);lcd1602_write_com(0x0c);lcd1602_write_com(0x06);lcd1602_write_com(0x01);/清屏lcd1602_write_com(0x80);delayms(10);for(n=0;n10;n+) /初始化顯示格式lcd1602_write_data(table1n);delayus(5);lcd1602_write_com(0xc0);for(n=0;n0;temp-);void delayms(unsign
17、ed char temp) /延時(shí)毫秒 unsigned char i,j;for(i=0;itemp;i+) for(j=0;j120;j+);void ds1302_write_byte(unsigned char dat) /向ds1302寫一個(gè)字節(jié)unsigned char n;delayus(2);for(n=0;n=1;unsigned char ds1302_read_byte( ) /從ds1302讀一個(gè)字節(jié)unsigned char n,dat=0;SCLK=1;delayus(2);for(n=0;n=1; /從低位開始SCLK=0;/產(chǎn)生下降沿delayus(2);if(
18、DAT=1)dat|=0x80;SCLK=1;delayus(2);return dat;void ds1302_write(unsigned char address,unsigned char dat) /向ds1302指定地址寄存器寫入數(shù)據(jù)RST=0;SCLK=0;RST=1;ds1302_write_byte(address);ds1302_write_byte(dat);RST=0;unsigned char ds1302_read(unsigned char address) /從ds1302指定地址寄存器讀出數(shù)據(jù)unsigned char dat;RST=0;SCLK=0;RST
19、=1;ds1302_write_byte(address);dat=ds1302_read_byte( );RST=0;return dat;unsigned char ds1302_read_data(unsigned char address) /將二進(jìn)制BCD碼轉(zhuǎn)成十進(jìn)制unsigned char dat,x;dat=ds1302_read(address);x=(dat&0xf0)4)*10+(dat&0x0f); return x;void lcd1602_write_data(unsigned char date) /向lcd1602寫數(shù)據(jù)rs=1;rw=0;P0=date;lcd
20、en=1;delayus(5);lcden=0;void lcd1602_write_com(unsigned char com) /向lcd1602寫指令rs=0;rw=0;P0=com;lcden=1;delayus(5);lcden=0;void lcd1602_write(unsigned char address,char date) /在lcd1602指定位置寫數(shù)據(jù)char shiwei,gewei;lcd1602_write_com(0x80+address);shiwei=date/10;gewei=date%10;lcd1602_write_data(0x30+shiwei)
21、;lcd1602_write_data(0x30+gewei);lcd1602_write_com(0x80+address);void lcd1602_write_week(char week) /lcd1602顯示星期unsigned char n;lcd1602_write_com(0x80+lcd1602_week);for(n=0;n3;n+) lcd1602_write_data(table_weekweek-1n);void lcd1602_display() /lcd1602刷新數(shù)據(jù)hour=ds1302_read_data(ds1302_hour_read);minute=d
22、s1302_read_data(ds1302_minute_read);second=ds1302_read_data(ds1302_second_read);week=ds1302_read_data(ds1302_week_read);year=ds1302_read_data(ds1302_year_read);date=ds1302_read_data(ds1302_date_read);month=ds1302_read_data(ds1302_month_read);lcd1602_write(lcd1602_year,year);lcd1602_write(lcd1602_mon
23、th,month);lcd1602_write(lcd1602_date,date);lcd1602_write_week(week);lcd1602_write(lcd1602_hour,hour);lcd1602_write(lcd1602_minute,minute);lcd1602_write(lcd1602_second,second);void runnian() /處理閏年二月天數(shù)nian=2000+year;if(nian%4=0)&(nian%100!=0)|(nian%100=0)&(nian/100%4=0)days1=29; else days1=28;void tim
24、er0() interrupt 1 /定時(shí)器0中斷函數(shù)TL0=(65536-20000)%256;TH0=(65536-20000)/256;if(nummode=0) lcd1602_display();void keyscan() /按鍵掃描if(mode=0)delayms(10); /消抖if(mode=0)while(mode=0); /等待按鍵松開nummode+;if(nummode=8)ds1302_write(ds1302_second_write,(second/10)4)|(second%10); /取消DS1302暫停,進(jìn)入正常工作nummode=0;switch(nu
25、mmode)case 0: lcd1602_write_com(0x0c); break;/不顯示光標(biāo)case 1: ds1302_write(ds1302_second_write,(second/10)4)|(second%10)|0x80); lcd1602_write_com(0x80+lcd1602_year-2); /定位到年 lcd1602_write_com(0x0f); break;case 2: ds1302_write(ds1302_second_write,(second/10)4)|(second%10)|0x80); lcd1602_write_com(0x80+l
26、cd1602_month); /定位到月 lcd1602_write_com(0x0f); break; case 3: ds1302_write(ds1302_second_write,(second/10)4)|(second%10)|0x80); lcd1602_write_com(0x80+lcd1602_date); /定位到日 lcd1602_write_com(0x0f); break; case 4: ds1302_write(ds1302_second_write,(second/10)4)|(second%10)|0x80); lcd1602_write_com(0x80+
27、lcd1602_week); /定位到星期 lcd1602_write_com(0x0f); break; case 5: ds1302_write(ds1302_second_write,(second/10)4)|(second%10)|0x80); lcd1602_write_com(0x80+lcd1602_hour); /定位到時(shí) lcd1602_write_com(0x0f); break; case 6: ds1302_write(ds1302_second_write,(second/10)4)|(second%10)|0x80); lcd1602_write_com(0x80
28、+lcd1602_minute); /定位到分 lcd1602_write_com(0x0f); break; case 7: ds1302_write(ds1302_second_write,(second/10)4)|(second%10)|0x80); lcd1602_write_com(0x80+lcd1602_second); /定位到秒 lcd1602_write_com(0x0f); break;if(nummode&add=0)delayms(10);if(add=0)while(add=0);switch(nummode)case 1:year+; if(year=99)ye
29、ar=0; lcd1602_write(lcd1602_year,year); ds1302_write(ds1302_year_write,(year/10)4)|(year%10); break;case 2:month+; if(month=13)month=1; lcd1602_write(lcd1602_month,month); ds1302_write(ds1302_month_write,(month/10)daysmonth-1)date=1; lcd1602_write(lcd1602_date,date); ds1302_write(ds1302_date_write,(
30、date/10)4)|(date%10); break;case 4:week+; if(week=8)week=1; lcd1602_write_week(week); ds1302_write(ds1302_week_write,week); break;case 5:hour+; if(hour=24)hour=0; lcd1602_write(lcd1602_hour,hour); ds1302_write(ds1302_hour_write,(hour/10)4)|(hour%10); break;case 6:minute+; if(minute=60)minute=0; lcd1
31、602_write(lcd1602_minute,minute); ds1302_write(ds1302_minute_write,(minute/10)4)|(minute%10); break;case 7:second+; if(second=60)second=0; lcd1602_write(lcd1602_second,second); ds1302_write(ds1302_second_write,(second/10)4)|(second%10)|0x80); break;if(nummode&sub=0)delayms(10);if(sub=0)while(sub=0);switch(nummode)case 1:year-; if(year=0)year=99; lcd1602_write(lcd1602_year,year); ds1302_write(ds1302_year_write,(year/10)4)|(year%10); break;case 2:month-; if(month=0)month=12; lcd1602_write(lcd1602_month,month); ds1302_write(ds1302_month_wri
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電競(jìng)教練崗位面試問題及答案
- 創(chuàng)業(yè)培訓(xùn)師崗位面試問題及答案
- 沖壓件銷售員崗位面試問題及答案
- 在線教育班主任崗位面試問題及答案
- 河北省巨鹿縣第二中學(xué)2025年高二化學(xué)第二學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)模擬試題含解析
- 江西省贛州市寧都縣第三中學(xué)2025屆高二下化學(xué)期末綜合測(cè)試試題含解析
- 2025屆遼寧省葫蘆島市協(xié)作校高二化學(xué)第二學(xué)期期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 公共投資項(xiàng)目管理辦法
- 民間捐贈(zèng)資金管理辦法
- 2026屆高三復(fù)習(xí)之閱讀理解-議論文(復(fù)習(xí)講義)(帶解析)
- 鋼結(jié)構(gòu)房屋拆除施工方案
- 皮膚科病人的藥物不良反應(yīng)護(hù)理與預(yù)防
- 擊劍俱樂部項(xiàng)目融資計(jì)劃書
- 郴電國(guó)際變電站一線值班員筆試
- 科研項(xiàng)目管理及科技成果申報(bào)
- 個(gè)人借條電子版模板
- 醫(yī)藥阿片類藥物依賴診斷治療指導(dǎo)原則
- 業(yè)主驗(yàn)房發(fā)現(xiàn)問題記錄單
- 2023年醫(yī)技類-康復(fù)醫(yī)學(xué)(副高)考試上岸題庫(歷年真題)答案
- 工程公司簡(jiǎn)介(50個(gè)范本)
- GC/T 1401-2022國(guó)家物資儲(chǔ)備標(biāo)志及使用規(guī)范
評(píng)論
0/150
提交評(píng)論