單片機(jī)電子時(shí)鐘及報(bào)時(shí)設(shè)計(jì)_第1頁
單片機(jī)電子時(shí)鐘及報(bào)時(shí)設(shè)計(jì)_第2頁
單片機(jī)電子時(shí)鐘及報(bào)時(shí)設(shè)計(jì)_第3頁
單片機(jī)電子時(shí)鐘及報(bào)時(shí)設(shè)計(jì)_第4頁
單片機(jī)電子時(shí)鐘及報(bào)時(shí)設(shè)計(jì)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、電子時(shí)鐘的設(shè)計(jì)一、 設(shè)計(jì)要求1、準(zhǔn)確計(jì)時(shí),以數(shù)字、英語形式顯示年、月、日、時(shí)、分、秒、鬧鐘時(shí)間。2、小時(shí)以24小時(shí)計(jì)時(shí)形式,分秒計(jì)時(shí)為60進(jìn)位。 3、校正時(shí)間功能(即調(diào)整時(shí)間)、閏年補(bǔ)償、并且具有單片機(jī)斷電后時(shí)鐘持續(xù)走的功能。4、鬧鐘功能。5、整點(diǎn)報(bào)時(shí)、任意時(shí)間報(bào)時(shí)。 6、總結(jié)檢驗(yàn)電路設(shè)計(jì)結(jié)果 二、 設(shè)計(jì)方案和論證本次設(shè)計(jì)時(shí)鐘電路,使用了stc89c52單片機(jī)微控制器、1602液晶作為顯示器件。但考慮到如果用單片機(jī)的定時(shí)器來作時(shí)鐘,在單片機(jī)掉電時(shí)時(shí)鐘就會(huì)停止,并且每一次上電后都得從同一個(gè)時(shí)間開始變化,所以為了得到準(zhǔn)確的時(shí)間,每次上電后都得調(diào)整時(shí)間,為了刻服這一難點(diǎn),本次課程設(shè)計(jì)采用了ds130

2、2作為時(shí)鐘蕊片。并且ds1302還具有閏年補(bǔ)償功能,很好地滿足了以上的掉電保持以及閏年補(bǔ)償功能。以isd4004作為語音蕊片,使報(bào)時(shí)更加人性化。使用鍵盤鍵上的按鍵來調(diào)整時(shí)鐘的時(shí)、分、秒,同時(shí)使用c語言程序來控制整個(gè)時(shí)鐘顯示,使得編程變得更容易,這樣通過五個(gè)模塊:鍵盤、單片機(jī)、時(shí)鐘蕊片、語音蕊片、顯示屏即可滿足設(shè)計(jì)要求。 1、 總設(shè)計(jì)原理框圖如下圖所示:微型控制器stc89c52時(shí)鐘電路(ds1302)(語音報(bào)時(shí)(isd4004)校時(shí)輸入數(shù)據(jù)顯示(1602)2、元器件清單 名稱數(shù)量stc89c52單片機(jī)1isd4004_81ds13021l780513171咪頭1110592m晶振132768k

3、晶振210k排阻410k微調(diào)電阻610k電阻154.7k電阻2led發(fā)光二極管4四角按鍵4揚(yáng)聲器110uf電容830pf電容6104電容11103電容52200u電容1100u電容433p電容71602液晶顯示器140腳插座4銅板15cm*15cm1排針和排插若干3、各部分功能實(shí)現(xiàn)(1)單片機(jī)發(fā)送的信號(hào)通過程序控制最終在1602顯示出來。 (2) 通過ds1302作時(shí)鐘芯片。(3)通過isd40048mp來進(jìn)行語音存儲(chǔ),并驅(qū)動(dòng)揚(yáng)聲器來進(jìn)行報(bào)時(shí)。(4)單片機(jī)通過輸出各種電脈沖信號(hào)來驅(qū)動(dòng)控制各部分正常工作。(5)為使時(shí)鐘走時(shí)與標(biāo)準(zhǔn)時(shí)間一致,校時(shí)電路是必不可少的,鍵盤用來校正液晶顯示器上顯示的時(shí)間。

4、(6)單片機(jī)通過控制鬧鈴(isd4004)電路來完成定時(shí)鬧鐘的功能。4、ds1302介紹(1) ds1302的結(jié)構(gòu)及工作原理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)或ram數(shù)據(jù)。ds1302內(nèi)部有一個(gè)318的用于臨時(shí)性存放數(shù)據(jù)的ram寄存器。ds1302是ds1202的升級(jí)產(chǎn)品,與ds1202兼容,但增加了主電源/后背電源雙電源引腳,同時(shí)提供了對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力。 (2)

5、 引腳功能及結(jié)構(gòu)ds1302的引腳排列,其中vcc1為后備電源,vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。ds1302由vcc1或vcc2兩者中的較大者供電。當(dāng)vcc2大于vcc10.2v時(shí),vcc2給ds1302供電。當(dāng)vcc2小于vcc1時(shí),ds1302由vcc1供電。x1和x2是振蕩源,外接32.768khz晶振。rst是復(fù)位/片選線,通過把rst輸入驅(qū)動(dòng)置高電平來啟動(dòng)所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,rst提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)rst為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)d

6、s1302進(jìn)行操作。如果在傳送過程中rst置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,i/o引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在vcc2.0v之前,rst必須保持低電平。只有在sclk為低電平時(shí),才能將rst置為高電平。i/o為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說明。sclk為時(shí)鐘輸入端。 下圖為ds1302的引腳功能圖: ds1302封裝圖(3) ds1302的控制字節(jié)ds1302 的控制字如圖2所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入ds1302中,位6如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取ram數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表

7、示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出。 (4) 數(shù)據(jù)輸入輸出(i/o)在控制指令字輸入后的下一個(gè)sclk時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入ds1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)sclk脈沖的下降沿讀出ds1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。 (5) ds1302的寄存器ds1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為bcd碼形式,其日歷、時(shí)間寄存器及其控制字見表1。 此外,ds1302 還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與ram相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除

8、充電寄存器外的所有寄存器內(nèi)容。 ds1302與ram相關(guān)的寄存器分為兩類:一類是單個(gè)ram單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為c0hfdh,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的ram寄存器,此方式下可一次性讀寫所有的ram的31個(gè)字節(jié),命令控制字為feh(寫)、ffh(讀)。 5、isd4004介紹 isd4004語音芯片是由美國(guó)isd公司推出不久的新產(chǎn)品。關(guān)于該語音芯片的引腳說明以及內(nèi)部電路等,因?yàn)楹苋菀自趇sd公司提供的芯片資料中查到,筆者就不在本文作過多的描述。只簡(jiǎn)單對(duì)其特點(diǎn)做一介紹。 與普通的錄音/重放芯片相比,isd4004具有如下特點(diǎn):首先是

9、記錄聲音沒有段長(zhǎng)度限制,并且聲音記錄不需要a/d轉(zhuǎn)換和壓縮。其次,快速閃存作為存儲(chǔ)介質(zhì),無需電源可保存數(shù)據(jù)長(zhǎng)達(dá)100年,重復(fù)記錄10000次以上。此外,isd4004具有記錄時(shí)間長(zhǎng)(可達(dá)16分鐘,次課程設(shè)計(jì)采用的為8分鐘的isd4004語音芯片)的優(yōu)點(diǎn)。最后,isd4004開發(fā)應(yīng)用具有所需外圍電路簡(jiǎn)單的優(yōu)點(diǎn)6、stc89c52單片機(jī)介紹stc89c52單片機(jī)是由深圳宏晶公司代理銷售的一款mcu,是由美國(guó)設(shè)計(jì)生產(chǎn)的一種低電壓、高性能cmos 8位單片機(jī),片內(nèi)含8kbytes的可反復(fù)寫的flashrom和128bytes的ram,2個(gè)16位定時(shí)計(jì)數(shù)器5。 stc89c52單片機(jī)內(nèi)部主要包括累加器a

10、cc(有時(shí)也簡(jiǎn)稱為a)、程序狀態(tài)字psw、地址指示器dptr、只讀存儲(chǔ)器rom、隨機(jī)存取存儲(chǔ)器ram、寄存器、并行i/o接口p0p3、定時(shí)器/計(jì)數(shù)器、串行i/o接口以及定時(shí)控制邏輯電路等。這些部件通過內(nèi)部總線聯(lián)接起來,構(gòu)成一個(gè)完整的微型計(jì)算機(jī)。其管腳圖如圖所示。stc89c52單片機(jī)管腳結(jié)構(gòu)圖7、1602液晶顯示器8、 引腳功能說明1602lcd采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表8-1所示:編號(hào)符號(hào)引腳說明編號(hào)符號(hào)引腳說明1vss電源地9d2數(shù)據(jù)2vdd電源正極10d3數(shù)據(jù)3vl液晶顯示偏壓11d4數(shù)據(jù)4rs數(shù)據(jù)/命令選擇12d5數(shù)據(jù)5r/w讀/寫選擇13d6

11、數(shù)據(jù)6e使能信號(hào)14d7數(shù)據(jù)7d0數(shù)據(jù)15bla背光源正極8d1數(shù)據(jù)16blk背光源負(fù)極表8-1:引腳接口說明表第1腳:vss為地電源。第2腳:vdd接5v正電源。第3腳:vl為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10k的電位器調(diào)整對(duì)比度。第4腳:rs為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。第5腳:r/w為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)rs和r/w共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)rs為低電平r/w為高電平時(shí)可以讀忙信號(hào),當(dāng)rs為高電平r/w為低電平時(shí)可以寫入數(shù)據(jù)。第

12、6腳:e端為使能端,當(dāng)e端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第714腳:d0d7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負(fù)極。9、單片機(jī)最小系統(tǒng)、ds1302、1602電路圖10、外接電源(單片機(jī)電源)電路11、isd4004以及功放電路12、isd4004電源電路圖13、程序流程圖(略)14、源程序#include/ds1302、1602控制程序;isd4004的模塊還沒有整合到主程序。#define uint unsigned int#define uchar unsigned charsbit rs=p26;/數(shù)據(jù)/命令選擇線sbit el=p27;/使能信號(hào)線s

13、bit gl=p13;sbit ja=p14;sbit jan=p15;sbit dgl=p16;sbit lao=p17;sbit laoto=p32;sbit ds1302_clk=p10;/脈沖線sbit ds1302_io=p11;/數(shù)據(jù)線sbit ds1302_rst=p12;/復(fù)位控制線uchar kk=0,1,2,3,4,5,6,7,8,9;uchar y1,y2,num,change;uchar table1=alarm:12:25 ;uchar table2= ;uchar on=on ;uchar off=off ;/-void delay1(uint z)/延時(shí)函數(shù)uin

14、t x,y;for (x=z;x0;x-) for(y=0;y0;x-)for(y=110;y0;y-);uchar ds1302_read()/讀出數(shù)據(jù)uchar i,b=0;ds1302_clk=0;for(i=0;i8;i+)if(ds1302_io=1)b=b|0x80;/先讀低位elseb=b|0x00;ds1302_clk=1;ds1302_clk=0; if (i1; return(b);void ds1302_write(uchar com)uchar i,a;a=com;ds1302_clk=0;for(i=0;i1; uchar ds1302_read_baye(uchar

15、 adrr)uchar aa;ds1302_rst=0;ds1302_clk=0;ds1302_rst=1;ds1302_write(adrr);/寫入地址ds1302_io=0;aa=ds1302_read();ds1302_clk=1;ds1302_rst=0;return (aa);uchar ds1302_write_baye(uchar adrr,dat)ds1302_rst=0;ds1302_clk=0;ds1302_rst=1;ds1302_write(adrr);/寫入地址ds1302_write(dat);ds1302_clk=1;ds1302_rst=0;uchar go1

16、0to16(uchar u)/10進(jìn)制轉(zhuǎn)換為16進(jìn)制uchar a,b,c;if (u0&b10)y1=kk0;y2=kkb;elsey1=kkb/10;y2=kkb%10;/*-此函數(shù)在第一次用到ds1302時(shí)才用,初始化后,以后就不用初始化了,除非你想再一次設(shè)定ds1302才用,注意填寫10位與個(gè)位所放的位置,如我要設(shè)27號(hào),應(yīng)為:0010 011110位放在這 個(gè)位放在這而不是0x1b 0001 1011-*/void ds1302int(uchar year,moon,date,week,hour,mini,sen)/當(dāng)ds1302第一次使用時(shí)要進(jìn)行設(shè)置ds1302_rst=0;ds1

17、302_clk=0;ds1302_rst=1;ds1302_write(0x8e);ds1302_write(0x00);ds1302_rst=0;ds1302_clk=1;ds1302_write_baye(0x8c,year);/設(shè)置年為08年ds1302_write_baye(0x88,moon);/設(shè)置月為3月ds1302_write_baye(0x86,date);/設(shè)置日為27號(hào)ds1302_write_baye(0x8b,week);/設(shè)置星期ds1302_write_baye(0x84,hour);/設(shè)置時(shí)9時(shí)ds1302_write_baye(0x82,mini);/設(shè)置分為

18、5分ds1302_write_baye(0x80,sen);/設(shè)置秒為00秒ds1302_rst=0;ds1302_clk=0;ds1302_rst=1;ds1302_write(0x8e);ds1302_write(0x80); void ds1302change(uchar addr,date)/修改ds1302_rst=0;ds1302_clk=0;ds1302_rst=1;ds1302_write(0x8e);ds1302_write(0x00);ds1302_rst=0;ds1302_clk=1;ds1302_write_baye(addr,date);ds1302_rst=0;ds

19、1302_clk=0;ds1302_rst=1;ds1302_write(0x8e);ds1302_write(0x80); void xs() comand_1602(0x80); /清除第一行if(lao=0)print(table1); if(laoto=0) print(on); if(laoto=1) print(off); if(lao=1)comand_1602(0x80);print(date:);comand_1602(0x85);/在址00開始顯示,第一行顯示年-月-日cuanhuan(ds1302_read_baye(0x8d);indat_1602(y1);/顯示年in

20、dat_1602(y2);indat_1602(-);cuanhuan(ds1302_read_baye(0x89);/讀出月份indat_1602(y1);/顯示月indat_1602(y2);indat_1602(-);cuanhuan(ds1302_read_baye(0x87);/讀出日indat_1602(y1);/顯示日indat_1602(y2);indat_1602( );indat_1602( );/擦除鬧鐘數(shù)據(jù)cuanhuan(ds1302_read_baye(0x8b);/讀出星期/indat_1602(y1);comand_1602(0x80+15);indat_160

21、2(y2);/顯示星期comand_1602(0x80+0x45);/在第二行顯示時(shí):分:秒cuanhuan(ds1302_read_baye(0x85);/讀出時(shí)indat_1602(y1);/顯示時(shí)indat_1602(y2);indat_1602(:);cuanhuan(ds1302_read_baye(0x83);/讀出分indat_1602(y1);/顯示分indat_1602(y2);indat_1602(:);cuanhuan(ds1302_read_baye(0x81);/讀出秒indat_1602(y1);/顯示秒indat_1602(y2); void key1()/ if

22、(gl=0) delay(5); if(gl=0) num+;while(!gl);if(num=1)comand_1602(0xc0+6); comand_1602(0x0f); if(num=2)comand_1602(0xc0+9); comand_1602(0x0f); if(num=3)comand_1602(0xc0+12); comand_1602(0x0f); if(num=4)comand_1602(0xc0+15); comand_1602(0x0f); if(num=5)num=0; comand_1602(0x0c); /comand_1602(0x01);/清屏voi

23、d keytime_add()/加時(shí)間 if(num!=0)&(ja=0)&(dgl=0) if(ja=0)&(dgl=0) delay(5); if(ja=0)&(dgl=0) while(!ja); if(num=1) change=ds1302_read_baye(0x85); change+; ds1302change(0x84,change); if(num=2) change=ds1302_read_baye(0x83); change+; ds1302change(0x82,change); if(num=3) change=ds1302_read_baye(0x81); cha

24、nge+; ds1302change(0x80,change); xs(); void keydate_add()/加日期 if(num!=0)&(ja=0)&(dgl=1) if(ja=0)&(dgl=1) delay(10); while(!ja); if(ja=0)&(dgl=1) if(num=1) change=ds1302_read_baye(0x8d); change+; ds1302change(0x8c,change); if(num=2) change=ds1302_read_baye(0x89); change+; ds1302change(0x88,change); i

25、f(num=3) change=ds1302_read_baye(0x87); change+; ds1302change(0x86,change); if(num=4) change=ds1302_read_baye(0x8b); change+; ds1302change(0x8a,change); xs(); void keytime_reduce()/減 if(num!=0)&(jan=0)&(dgl=0) if(jan=0)&(dgl=0) delay(5); while(!jan); if(jan=0)&(dgl=0) while(!jan); if(num=1) change=d

26、s1302_read_baye(0x85); change-; ds1302change(0x84,change); if(num=2) change=ds1302_read_baye(0x83); change-; ds1302change(0x82,change); if(num=3) change=ds1302_read_baye(0x81); change-; ds1302change(0x80,change); xs(); void keydate_reduce()/減日期 if(num!=0)&(jan=0)&(dgl=1) if(jan=0)&(dgl=1) delay(5);

27、while(!jan); if(jan=0)&(dgl=1) if(num=1) change=ds1302_read_baye(0x8d); change-; ds1302change(0x8c,change); if(num=2) change=ds1302_read_baye(0x89); change-; ds1302change(0x88,change); if(num=3) change=ds1302_read_baye(0x87); change-; ds1302change(0x86,change); if(num=4) change=ds1302_read_baye(0x8b

28、); change-; ds1302change(0x8a,change); xs(); void key() keytime_add(); keydate_add(); keytime_reduce(); keydate_reduce(); void main()delay1(20);innit_1602();/1602初始化ds1302int(10,12,20,1,9,0x27,6);/ds1302初始化comand_1602(0x80);print(date:);comand_1602(0xc0);print(time:);/p3=0x00;/if(dgl=0)/p3=0x00;whil

29、e(1) if(num=0) xs(); key1(); key();/delay1(300);/*-isd4004-*/#include#includesbit sclk_4004=p25;sbit int_4004=p24;sbit rac_4004=p23;sbit cs_4004=p22;sbit mosi_4004=p21;sbit miso_4004=p20;sbit led=p31;sbit dgl=p17;/*sbit cs_4004=p20; /low is activelysbit mosi_4004=p21;sbit miso_4004=p22;sbit sclk_400

30、4=p23;*/unsigned char t;/void delay(unsigned int i) while(i-); void delay1ms(unsigned int t) unsigned int i; for (;t0;t-)for (i=0;i120;i+);void send8( unsigned char isdx8 )/spi數(shù)據(jù)傳送unsigned char i; cs_4004= 0;/選中isd4004delay(3);sclk_4004 = 0; delay(3);for(i=0;i= 1; /右移一位 sclk_4004 = 0;/時(shí)鐘下降沿發(fā)送delay(3

31、);sclk_4004 = 1; delay(3); cs_4004=1; delay(3);void stopmode()/停止send8(0x30); void powerdown()/下電 send8(0x10); void powerup()/上電 send8(0x20); void record(unsigned int address)/ 從指定位置錄音 unsigned char i; unsigned int datasout=0; powerup(); delay1ms(50); powerup(); delay1ms(100); sclk_4004=0; delay(3); cs_4004=0; delay(3); for(i=0;i16;i+) address=_iror_(address,1); datasout=address1; mosi_4004=cy; sclk_4004=0; delay(3); sclk_4004=1; delay(3); send8(0xa0);/從指定位置錄音 send8(0xb0);/從當(dāng)前位置錄音 int_4004=1;/要讀值先拉高 while(int_4004=1) ; /*-*/void audiout(unsigned

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論