




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、電子時鐘的設計一、 設計要求1、準確計時,以數(shù)字、英語形式顯示年、月、日、時、分、秒、鬧鐘時間。2、小時以24小時計時形式,分秒計時為60進位。 3、校正時間功能(即調(diào)整時間)、閏年補償、并且具有單片機斷電后時鐘持續(xù)走的功能。4、鬧鐘功能。5、整點報時、任意時間報時。 6、總結檢驗電路設計結果 二、 設計方案和論證本次設計時鐘電路,使用了stc89c52單片機微控制器、1602液晶作為顯示器件。但考慮到如果用單片機的定時器來作時鐘,在單片機掉電時時鐘就會停止,并且每一次上電后都得從同一個時間開始變化,所以為了得到準確的時間,每次上電后都得調(diào)整時間,為了刻服這一難點,本次課程設計采用了ds130
2、2作為時鐘蕊片。并且ds1302還具有閏年補償功能,很好地滿足了以上的掉電保持以及閏年補償功能。以isd4004作為語音蕊片,使報時更加人性化。使用鍵盤鍵上的按鍵來調(diào)整時鐘的時、分、秒,同時使用c語言程序來控制整個時鐘顯示,使得編程變得更容易,這樣通過五個模塊:鍵盤、單片機、時鐘蕊片、語音蕊片、顯示屏即可滿足設計要求。 1、 總設計原理框圖如下圖所示:微型控制器stc89c52時鐘電路(ds1302)(語音報時(isd4004)校時輸入數(shù)據(jù)顯示(1602)2、元器件清單 名稱數(shù)量stc89c52單片機1isd4004_81ds13021l780513171咪頭1110592m晶振132768k
3、晶振210k排阻410k微調(diào)電阻610k電阻154.7k電阻2led發(fā)光二極管4四角按鍵4揚聲器110uf電容830pf電容6104電容11103電容52200u電容1100u電容433p電容71602液晶顯示器140腳插座4銅板15cm*15cm1排針和排插若干3、各部分功能實現(xiàn)(1)單片機發(fā)送的信號通過程序控制最終在1602顯示出來。 (2) 通過ds1302作時鐘芯片。(3)通過isd40048mp來進行語音存儲,并驅(qū)動揚聲器來進行報時。(4)單片機通過輸出各種電脈沖信號來驅(qū)動控制各部分正常工作。(5)為使時鐘走時與標準時間一致,校時電路是必不可少的,鍵盤用來校正液晶顯示器上顯示的時間。
4、(6)單片機通過控制鬧鈴(isd4004)電路來完成定時鬧鐘的功能。4、ds1302介紹(1) ds1302的結構及工作原理ds1302 是美國dallas公司推出的一種高性能、低功耗、帶ram的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5v5.5v。采用三線接口與cpu進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)時鐘信號或ram數(shù)據(jù)。ds1302內(nèi)部有一個318的用于臨時性存放數(shù)據(jù)的ram寄存器。ds1302是ds1202的升級產(chǎn)品,與ds1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進行涓細電流充電的能力。 (2)
5、 引腳功能及結構ds1302的引腳排列,其中vcc1為后備電源,vcc2為主電源。在主電源關閉的情況下,也能保持時鐘的連續(xù)運行。ds1302由vcc1或vcc2兩者中的較大者供電。當vcc2大于vcc10.2v時,vcc2給ds1302供電。當vcc2小于vcc1時,ds1302由vcc1供電。x1和x2是振蕩源,外接32.768khz晶振。rst是復位/片選線,通過把rst輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,rst提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當rst為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對d
6、s1302進行操作。如果在傳送過程中rst置為低電平,則會終止此次數(shù)據(jù)傳送,i/o引腳變?yōu)楦咦钁B(tài)。上電運行時,在vcc2.0v之前,rst必須保持低電平。只有在sclk為低電平時,才能將rst置為高電平。i/o為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細說明。sclk為時鐘輸入端。 下圖為ds1302的引腳功能圖: ds1302封裝圖(3) ds1302的控制字節(jié)ds1302 的控制字如圖2所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入ds1302中,位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取ram數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表
7、示要進行寫操作,為1表示進行讀操作,控制字節(jié)總是從最低位開始輸出。 (4) 數(shù)據(jù)輸入輸出(i/o)在控制指令字輸入后的下一個sclk時鐘的上升沿時,數(shù)據(jù)被寫入ds1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個sclk脈沖的下降沿讀出ds1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。 (5) ds1302的寄存器ds1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數(shù)據(jù)位為bcd碼形式,其日歷、時間寄存器及其控制字見表1。 此外,ds1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與ram相關的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除
8、充電寄存器外的所有寄存器內(nèi)容。 ds1302與ram相關的寄存器分為兩類:一類是單個ram單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為c0hfdh,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的ram寄存器,此方式下可一次性讀寫所有的ram的31個字節(jié),命令控制字為feh(寫)、ffh(讀)。 5、isd4004介紹 isd4004語音芯片是由美國isd公司推出不久的新產(chǎn)品。關于該語音芯片的引腳說明以及內(nèi)部電路等,因為很容易在isd公司提供的芯片資料中查到,筆者就不在本文作過多的描述。只簡單對其特點做一介紹。 與普通的錄音/重放芯片相比,isd4004具有如下特點:首先是
9、記錄聲音沒有段長度限制,并且聲音記錄不需要a/d轉(zhuǎn)換和壓縮。其次,快速閃存作為存儲介質(zhì),無需電源可保存數(shù)據(jù)長達100年,重復記錄10000次以上。此外,isd4004具有記錄時間長(可達16分鐘,次課程設計采用的為8分鐘的isd4004語音芯片)的優(yōu)點。最后,isd4004開發(fā)應用具有所需外圍電路簡單的優(yōu)點6、stc89c52單片機介紹stc89c52單片機是由深圳宏晶公司代理銷售的一款mcu,是由美國設計生產(chǎn)的一種低電壓、高性能cmos 8位單片機,片內(nèi)含8kbytes的可反復寫的flashrom和128bytes的ram,2個16位定時計數(shù)器5。 stc89c52單片機內(nèi)部主要包括累加器a
10、cc(有時也簡稱為a)、程序狀態(tài)字psw、地址指示器dptr、只讀存儲器rom、隨機存取存儲器ram、寄存器、并行i/o接口p0p3、定時器/計數(shù)器、串行i/o接口以及定時控制邏輯電路等。這些部件通過內(nèi)部總線聯(lián)接起來,構成一個完整的微型計算機。其管腳圖如圖所示。stc89c52單片機管腳結構圖7、1602液晶顯示器8、 引腳功能說明1602lcd采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表8-1所示:編號符號引腳說明編號符號引腳說明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使能信號14d7數(shù)據(jù)7d0數(shù)據(jù)15bla背光源正極8d1數(shù)據(jù)16blk背光源負極表8-1:引腳接口說明表第1腳:vss為地電源。第2腳:vdd接5v正電源。第3腳:vl為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10k的電位器調(diào)整對比度。第4腳:rs為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:r/w為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當rs和r/w共同為低電平時可以寫入指令或者顯示地址,當rs為低電平r/w為高電平時可以讀忙信號,當rs為高電平r/w為低電平時可以寫入數(shù)據(jù)。第
12、6腳:e端為使能端,當e端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714腳:d0d7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負極。9、單片機最小系統(tǒng)、ds1302、1602電路圖10、外接電源(單片機電源)電路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;/使能信號線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;/復位控制線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ù)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進制轉(zhuǎn)換為16進制uchar a,b,c;if (u0&b10)y1=kk0;y2=kkb;elsey1=kkb/10;y2=kkb%10;/*-此函數(shù)在第一次用到ds1302時才用,初始化后,以后就不用初始化了,除非你想再一次設定ds1302才用,注意填寫10位與個位所放的位置,如我要設27號,應為:0010 011110位放在這 個位放在這而不是0x1b 0001 1011-*/void ds1302int(uchar year,moon,date,week,hour,mini,sen)/當ds1302第一次使用時要進行設置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);/設置年為08年ds1302_write_baye(0x88,moon);/設置月為3月ds1302_write_baye(0x86,date);/設置日為27號ds1302_write_baye(0x8b,week);/設置星期ds1302_write_baye(0x84,hour);/設置時9時ds1302_write_baye(0x82,mini);/設置分為
18、5分ds1302_write_baye(0x80,sen);/設置秒為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);/在第二行顯示時:分:秒cuanhuan(ds1302_read_baye(0x85);/讀出時indat_1602(y1);/顯示時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()/加時間 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;/時鐘下降沿發(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);/從當前位置錄音 int_4004=1;/要讀值先拉高 while(int_4004=1) ; /*-*/void audiout(unsigned
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 韓式護欄施工方案
- 第二單元 讓機器認識我第3節(jié)“認出”一個人 教學設計 2023-2024學年川教版(2019)初中信息技術八年級上冊
- 合同范本買賣合同
- 專職老師聘用合同范本
- 增強學生自主學習意識的方法計劃
- 班主任與學校管理層的溝通計劃
- 歌唱與律動小班音樂教育探討計劃
- 可持續(xù)發(fā)展在年度計劃中的應用
- 法務部合規(guī)管理工作回顧與展望計劃
- 九年級體育 教學實錄(素質(zhì)練習1) 人教新課標版
- (一模)長春市2025屆高三質(zhì)量監(jiān)測(一)生物試卷(含答案)
- 電子商務論文3篇(含目錄)
- 《現(xiàn)代家政導論》電子教案 1.1模塊一項目一家政與家政學認知
- 《人工智能通識教程》(第2版)教學大綱
- 2024年監(jiān)控攝像頭項目建議書
- 2025屆高三聽力技巧指導-預讀、預測
- DB14-T 2779-2023 營造林工程監(jiān)理規(guī)范
- 冀教版數(shù)學八年級下冊19.2.2 平面直角坐標系中點的坐標特征 教案
- 公安機關人民警察高級執(zhí)法資格考試試卷(附答案)
- 鐵路內(nèi)燃機車司機(高級工)理論考試題庫(濃縮600題)
- 自考03162《林學概論》歷年真題打包電子書
評論
0/150
提交評論