版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 數(shù)字開發(fā)與實(shí)踐</b></p><p><b> 課</b></p><p><b> 程</b></p><p><b> 設(shè)</b></p><p><b> 計(jì)</b></p>
2、<p> 題目: 用DS1302與LCD1602 </p><p> 設(shè)計(jì)可調(diào)式電子日歷時鐘 </p><p> 班級: </p><p> 姓名: </p>
3、;<p> 學(xué)號: </p><p> 學(xué)院: </p><p> 二O一二年 六 月 五 日</p><p> 用DS1302與LCD1602設(shè)計(jì)</p><p>
4、的可調(diào)式電子日歷時鐘</p><p><b> 一、總體設(shè)計(jì)</b></p><p><b> 1.1、設(shè)計(jì)目的</b></p><p> 為鞏固所學(xué)的單片機(jī)知識,把所學(xué)理論運(yùn)用到實(shí)踐中,用LCD1602與DS1302 設(shè)計(jì)可調(diào)式電子日歷時鐘。 </p><p><b> 1.2、
5、設(shè)計(jì)要求</b></p><p> ?。?)顯示:年、月、日、時、分、秒和星期;</p><p> ?。?)設(shè)置年、月、日、時、分、秒和星期的初始狀態(tài);</p><p> (3)能夠用4個按鍵調(diào)整日歷時鐘的年、月、日、時、分、秒和星期 ;
6、 </p><p> 完成可調(diào)式電子日歷時鐘的硬件和軟件的設(shè)計(jì),包括單片機(jī)的相關(guān)內(nèi)容;日歷時鐘模塊的設(shè)計(jì),液晶顯示模塊的設(shè)計(jì),按鍵模塊的設(shè)計(jì)??刂瞥绦虻木帉懙?。</p><p> 備注:本程序另外添加了每到上午8:10和下午2:10的鬧鐘提醒功能。</p><p> 1.3、 系統(tǒng)基本方案選擇和論證</p><
7、;p> 1.3.1、單片機(jī)芯片的選擇方案</p><p><b> 方案一: </b></p><p> 采用89C51芯片作為硬件核心,采用Flash ROM,內(nèi)部具有4KB ROM 存儲空間,能于3V的超低壓工作,而且與MCS-51系列單片機(jī)完全兼容。</p><p><b> 方案二:</b></
8、p><p> 采用STC12C5A60S2系列單片機(jī)是宏晶科技生產(chǎn)的單時鐘/機(jī)器周期(1T)的單片機(jī),是高速/低功耗/超強(qiáng)抗干擾的新一代8051單片機(jī),指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換(250K/S),針對電機(jī)控制,強(qiáng)干擾場合。但造價較高。</p><p> 1.3.2 、顯示模塊選擇方案和論證:<
9、;/p><p><b> 方案一:</b></p><p> 采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比較適合,如采用顯示數(shù)字顯得太浪費(fèi),且價格也相對較高。所以不用此種作為顯示。</p><p><b> 方案二:</b></p><p> 采用LED數(shù)碼管動
10、態(tài)掃描,雖然LED數(shù)碼管價格適中,但要顯示多個數(shù)字所需要的個數(shù)偏多,功耗較大,顯示出來的只是拼音,而不是漢字。所以也不用此種作為顯示。</p><p><b> 方案三:</b></p><p> 采用LCD液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)大,可顯示大量字符,且視覺效果較好,外形美觀。LCD1602可實(shí)現(xiàn)顯示2行十六個字符。</p><p&g
11、t; 1.3.3、時鐘芯片的選擇方案和論證:</p><p><b> 方案一:</b></p><p> 直接采用單片機(jī)定時計(jì)數(shù)器提供秒信號,使用程序?qū)崿F(xiàn)年、月、日、星期、時、分、秒計(jì)數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實(shí)現(xiàn)的時間誤差較大。所以不采用此方案。</p><p><b> 方案二:</b&g
12、t;</p><p> 采用DS1302時鐘芯片實(shí)現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、星期、月、年以及閏年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù),而且精度高,31*8位的RAM做為數(shù)據(jù)暫存區(qū),工作電壓范圍為2.5V~5.5V,2.5V時耗電小于300nA。</p><p> 1.3.4、 電路設(shè)計(jì)最終方案決定</p><p> 綜上各方案所述,對
13、此次作品的方案選定:采用80C51作為主控制系統(tǒng); DS1302提供時鐘;LCD1602液晶帶漢字庫顯示屏作為顯示部分。</p><p><b> 二、硬件設(shè)計(jì)</b></p><p> 2.1、電路設(shè)計(jì)模塊圖如圖2-1所示</p><p><b> 圖 2-1</b></p><p> 2
14、.2、系統(tǒng)總體設(shè)計(jì)原理圖</p><p> 2.3、 要求用proteus仿真軟件仿真并抓圖。</p><p><b> 三、軟件設(shè)計(jì)</b></p><p> 3.1、畫出各個函數(shù)流程圖。</p><p> 3.1.1、DS1302實(shí)時控制芯片的流程圖如圖3-1</p><p><
15、b> 圖3-1</b></p><p> 3.1.2、LCD1602液晶顯示控制流程圖如圖3-2</p><p><b> 圖 3-2</b></p><p> 3.1.3、鬧鐘提醒控制流程如圖3-3</p><p><b> 如圖3-3 </b></p>
16、<p> 3.1.4、調(diào)時函數(shù)控制流程如圖3-4</p><p><b> 圖3-3</b></p><p> 3.2、寫出程序代碼。</p><p> /**************DS1302及1602時鐘設(shè)計(jì) **********/</p><p> #include <reg52.h&g
17、t;</p><p> #include<intrins.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> #define SECOND 0x81</p><p> #def
18、ine MINUTE 0x83</p><p> #define HOUR 0x85</p><p> sbit rs=P2^0;</p><p> sbit rw=P2^1;</p><p> sbit ep=P2^2;</p><p> sbit DS1302_IO= P1^0; </p&g
19、t;<p> sbit DS1302_SCLK = P1^1; </p><p> sbit DS1302_RST = P1^2; </p><p> sbit M=P3^1; //選擇</p><p> sbit U=P3^2; // 加</p><p> sbit D=P3^3;
20、// 減</p><p> sbit W=P3^4;//確定</p><p> sbit SPK=P3^7; //蜂鳴器</p><p> uchar sel=0;</p><p> uchar code DIS1[]={"10 ji ying "};</p><p> uch
21、ar code DIS2[]={"ke cheng she ji"};</p><p> /////////////////////////延時////////////////////////////////</p><p> void delay(uint ms)</p><p><b> {</b></p&g
22、t;<p> unsigned int a,b;</p><p> for(a=0;a<ms;a++)</p><p> for(b=0;b<124;b++); </p><p><b> } </b></p><p> //////////////////////
23、//////////////////////////////////////</p><p> /***************DS1302驅(qū)動************************/ </p><p> //////////////////////////////////////////////////////////// </p>
24、<p> void DS1302_Write(uchar D)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> for(i=0;i<8;i++)</p><p><b> {</b>&
25、lt;/p><p> DS1302_IO =D&0x01;</p><p> DS1302_SCLK=1;</p><p> DS1302_SCLK=0;</p><p> D=D>>1;</p><p><b> }</b></p><p&
26、gt;<b> }</b></p><p> uchar DS1302_Read()</p><p><b> {</b></p><p> uchar TempDat=0,i;</p><p> for(i=0;i<8;i++)</p><p> {Te
27、mpDat>>=1; </p><p> if(DS1302_IO) TempDat=TempDat|0x80;</p><p> DS1302_SCLK=1;</p><p> DS1302_SCLK=0;</p><p><b> }</b></p><p> ret
28、urn TempDat;</p><p><b> }</b></p><p> void WDS1302(uchar ucAddr, uchar ucDat)</p><p><b> {</b></p><p> DS1302_RST = 0;</p><p>
29、 DS1302_SCLK = 0;</p><p> DS1302_RST = 1;</p><p> DS1302_Write(ucAddr); </p><p> DS1302_Write(ucDat); </p><p> DS1302_SCLK = 1;</p><p> DS13
30、02_RST = 0;</p><p><b> } </b></p><p> uchar RDS1302(uchar ucAddr)</p><p><b> {</b></p><p> uchar ucDat;</p><p> DS1302_RST = 0
31、;</p><p> DS1302_SCLK = 0;</p><p> DS1302_RST = 1;</p><p> DS1302_Write(ucAddr); </p><p> ucDat=DS1302_Read(); </p><p> DS1302_SCLK = 1;&l
32、t;/p><p> DS1302_RST = 0;</p><p> return ucDat;</p><p><b> }</b></p><p> /////////////////DS1302的初始狀態(tài)的時間設(shè)定/////////////////////</p><p> void
33、init_1302() </p><p><b> { </b></p><p> WDS1302(0x8e,0x00);//開保護(hù)寄存器 </p><p> WDS1302(0x80,0x50);//秒 </p><p> WDS1302(0x82,0x01);//分 </p><p>
34、 WDS1302(0x84,0x14);//時 </p><p> WDS1302(0x8A,0x03);//星期 </p><p> WDS1302(0x86,0x06);//日 </p><p> WDS1302(0x88,0x06);//月 </p><p> WDS1302(0x8C,0x12);//年 </p>
35、<p> WDS1302(0x90,0xab);//卷電流充電 </p><p> WDS1302(0x8e,0x80);//關(guān)保護(hù)寄存器 </p><p><b> } </b></p><p> /************************1602驅(qū)動************************/<
36、/p><p> bit lcd_bz()</p><p><b> { </b></p><p> bit result; </p><p><b> rs = 0; </b></p><p><b> rw = 1; </b></p>
37、<p><b> ep = 1; </b></p><p><b> _nop_(); </b></p><p><b> _nop_(); </b></p><p><b> _nop_(); </b></p><p><b&
38、gt; _nop_(); </b></p><p> result = (bit)(P0 & 0x80); </p><p><b> ep = 0; </b></p><p> return result; </p><p><b> } </b></p>
39、<p> //////////////////////////////////////////////////////// </p><p> void lcd_wcmd(uchar cmd) </p><p><b> { </b></p><p> while(lcd_bz()); </p><p&
40、gt;<b> rs = 0; </b></p><p><b> rw = 0; </b></p><p><b> ep = 0; </b></p><p><b> _nop_(); </b></p><p><b> _nop_
41、(); </b></p><p> P0 = cmd; </p><p><b> _nop_(); </b></p><p><b> _nop_(); </b></p><p><b> _nop_(); </b></p><p>
42、;<b> _nop_(); </b></p><p><b> ep = 1; </b></p><p><b> _nop_(); </b></p><p><b> _nop_(); </b></p><p><b> _nop_
43、(); </b></p><p><b> _nop_(); </b></p><p><b> ep= 0; </b></p><p><b> } </b></p><p> ///////////////////////////////////////
44、//////////////////</p><p> void lcd_pos(unsigned char pos) </p><p><b> { </b></p><p> lcd_wcmd(pos | 0x80); </p><p><b> } </b></p>&l
45、t;p> /////////////////////////////////////////////////////////</p><p> void lcd_wdat(unsigned char dat) </p><p><b> { </b></p><p> while(lcd_bz()); </p>&l
46、t;p><b> rs = 1; </b></p><p><b> rw = 0; </b></p><p><b> ep = 0; </b></p><p> P0 = dat; </p><p><b> _nop_(); </b>
47、</p><p><b> _nop_(); </b></p><p><b> _nop_(); </b></p><p><b> _nop_(); </b></p><p><b> ep = 1; </b></p><p
48、><b> _nop_(); </b></p><p><b> _nop_(); </b></p><p><b> _nop_(); </b></p><p><b> _nop_(); </b></p><p><b> e
49、p = 0; </b></p><p><b> } </b></p><p> //////////////////////////////////////////////////////////</p><p> void lcd_init() </p><p><b> { &l
50、t;/b></p><p> lcd_wcmd(0x38); </p><p> delay(1); </p><p> lcd_wcmd(0x0c); </p><p> delay(1); </p><p> lcd_wcmd(0x06); </p><p> delay(
51、1); </p><p> lcd_wcmd(0x01); </p><p> delay(1); </p><p><b> }</b></p><p> /////////////////////////////////////////////////////////</p><p>
52、; /*********************調(diào)時函數(shù)*************************/</p><p> ///////////////////////////////////////////////////////// </p><p> void set_time()</p><p><b> { </b>&l
53、t;/p><p> signed char address,item;</p><p> signed char max,mini;</p><p><b> if(M==0)</b></p><p><b> {</b></p><p><b> sel+
54、+; </b></p><p> delay(300);</p><p> //if(sel==7) sel=0;</p><p> if(sel==2) {address=0x82; max=59;mini=0; } //分</p><p> if(sel==1) {address=0x84; max=23;m
55、ini=0; } //時</p><p> if(sel==6) {address=0x8c; max=99;mini=9;} //年</p><p> if(sel==4) {address=0x88; max=12;mini=1; } //月</p><p> if(sel==5) {address=0x86; max=31;mini=1;
56、 } //日</p><p> if(sel==3) {address=0x8A; max=07;mini=1;} //星期</p><p><b> M=1; </b></p><p><b> }</b></p><p> item=((RDS1302(address+
57、1))/16)*10 + (RDS1302(address+1))%16;</p><p> if(U == 0)</p><p><b> {</b></p><p> delay(200);</p><p><b> U=1;</b></p><p><b&
58、gt; item++; </b></p><p><b> }</b></p><p> if(D == 0)</p><p><b> {</b></p><p> delay(200);</p><p><b> D=1;</b&
59、gt;</p><p><b> item--; </b></p><p><b> }</b></p><p> if(W == 0)</p><p><b> {</b></p><p> delay(200);</p>&l
60、t;p><b> sel=0;</b></p><p><b> W=1;</b></p><p><b> }</b></p><p> if(item>max) item=mini;</p><p> if(item<mini) item=max
61、; </p><p> WDS1302(0x8e,0x00);//允許寫操作</p><p> WDS1302(address,(item/10)*16+item%10); //寫入DS1302 //轉(zhuǎn)成BCD碼</p><p> WDS1302(0x8e,0x80);//寫保護(hù),禁止寫操作 </p><p><
62、;b> }</b></p><p> /////////////////////////////////////////////////////////</p><p> /*********************顯示子函數(shù)************************/</p><p> ///////////////////////
63、//////////////////////////////////</p><p> void lcdshow_u(uchar i,uchar y)</p><p><b> {</b></p><p> lcd_wcmd(0x80+i);</p><p> lcd_wdat(y);</p>&l
64、t;p><b> }</b></p><p> void lcdshow_d(uchar i,uchar y)</p><p><b> {</b></p><p> lcd_wcmd(0xC0+i);</p><p> lcd_wdat(y);</p><p&g
65、t;<b> }</b></p><p> /*******************顯示函數(shù)****************************/</p><p> void display(void)</p><p><b> {</b></p><p> uchar x,y;&l
66、t;/p><p> x=RDS1302(HOUR);//時</p><p><b> y=x;</b></p><p> x=x>>4; lcdshow_u(6,0x30+x);</p><p> y=y&0x0f;lcdshow_u(7,0x30+y);</p><p&
67、gt; lcdshow_u(8,':');</p><p> x=RDS1302(MINUTE);//分</p><p><b> y=x;</b></p><p> x=x>>4; lcdshow_u(9,0x30+x);</p><p> y=y&0x0f;lcds
68、how_u(0x0a,0x30+y);</p><p> lcdshow_u(0x0b,':');</p><p> x=RDS1302(SECOND);//秒</p><p><b> y=x;</b></p><p> x=x>>4; lcdshow_u(0x0c,0x30+x
69、);</p><p> y=y&0x0f;lcdshow_u(0x0d,0x30+y);</p><p> x=RDS1302(0x8b);</p><p><b> y=x;</b></p><p> x=x>>4; lcdshow_u(0x0e,0x30+x);</p>
70、;<p> y=y&0x0f; lcdshow_u(0x0f,0x30+y);</p><p> x=RDS1302(0x8d);</p><p><b> y=x;</b></p><p> x=x>>4; lcdshow_d(8,0x30+x);</p><p>
71、y=y&0x0f;lcdshow_d(9,0x30+y);</p><p> lcdshow_d(0x0a,'-');</p><p> x=RDS1302(0x89);</p><p><b> y=x;</b></p><p> x=x>>4; lcdshow_d(0
72、x0b,0x30+x);</p><p> y=y&0x0f;lcdshow_d(0x0c,0x30+y);</p><p> lcdshow_d(0x0d,'-');</p><p> x=RDS1302(0x87);</p><p><b> y=x;</b></p>
73、<p> x=x>>4; lcdshow_d(0x0e,0x30+x);</p><p> y=y&0x0f;lcdshow_d(0x0f,0x30+y);</p><p> /////////////////////下面的if實(shí)現(xiàn)每到8:10和14:10的提醒功能/////////////////////////////////</p>
74、;<p> if((RDS1302(HOUR)==0x14 & RDS1302(MINUTE)==0x10)| ( RDS1302(HOUR)==0x08 & RDS1302(MINUTE)==0x10))</p><p><b> {</b></p><p><b> SPK = 0;</b></p&g
75、t;<p> delay(200);</p><p><b> SPK = 1;</b></p><p><b> }</b></p><p> for(x=45;x>0;x--)</p><p><b> {</b></p><
76、;p> set_time();</p><p> delay(10);</p><p><b> }</b></p><p><b> }</b></p><p> /**************************主函數(shù)***************************
77、***/</p><p> void main()</p><p><b> {</b></p><p><b> uchar i;</b></p><p> lcd_init();</p><p> delay(10); </p><p>
78、 lcd_pos(0x03);</p><p><b> i = 0; </b></p><p> while(DIS1[i] != '\0') </p><p><b> { </b></p><p> lcd_wdat(DIS1[i]); </p><
79、;p><b> i++;</b></p><p> delay(200); </p><p><b> } </b></p><p> lcd_pos(0x41); </p><p><b> i = 0; </b></p><p>
80、while(DIS2[i] != '\0') </p><p><b> { </b></p><p> lcd_wdat(DIS2[i]);</p><p> delay(200);</p><p><b> i++; </b></p><p>&l
81、t;b> } </b></p><p> init_1302();</p><p> delay(1000);</p><p> for(i=0;i<17;i++)</p><p><b> {</b></p><p> lcdshow_u(i,'>
82、;');</p><p> delay(150);</p><p><b> }</b></p><p> for(i=0;i<17;i++)</p><p><b> {</b></p><p> lcdshow_d(i,'<'
83、;);</p><p> delay(150);</p><p><b> }</b></p><p> lcd_init();</p><p> delay(10);</p><p> lcdshow_u(0,'T');</p><p> l
84、cdshow_u(1,'i');</p><p> lcdshow_u(2,'m');</p><p> lcdshow_u(3,'e');</p><p> lcdshow_u(14,' ');</p><p> lcdshow_d(0,'D');<
85、;/p><p> lcdshow_d(1,'a');</p><p> lcdshow_d(2,'t');</p><p> lcdshow_d(3,'a');</p><p> lcdshow_d(6,'2');</p><p> lcdshow_
86、d(7,'0'); //LCD框架描繪</p><p><b> while(1)</b></p><p><b> { </b></p><p> set_time();</p><p> if(sel==2){lcdshow_u(0X09,' ');lc
87、dshow_u(0x0a,' ');delay(500); } </p><p> if(sel==1){lcdshow_u(0X06, ' ');lcdshow_u(0X07,' ');delay(500); }</p><p> if(sel==3) {lcdshow_u(0X0E,' ');lcd
88、show_u(0X0F,' ');delay(500); }</p><p> if(sel==4){lcdshow_d(0x0b,' ');lcdshow_d(0x0c,' ');delay(500); }</p><p> if(sel==5){lcdshow_d(0x0e,' ');lcdshow_d(0x0f,
89、' ');delay(500); } </p><p> if(sel==6) {lcdshow_d(0x08,' ');lcdshow_d(0x09,' ');delay(500); } </p><p> if(sel==8) display(); </p><p> //調(diào)時LCD閃爍顯示 </p&
90、gt;<p> display();</p><p><b> }</b></p><p><b> }</b></p><p><b> 四、專業(yè)實(shí)習(xí)要求</b></p><p> 1、掌握常用設(shè)備的使用;</p><p>
91、2、掌握keil 編譯環(huán)境的使用,熟悉proteus仿真軟件的使用;</p><p> 3、基本掌握電路板的焊接調(diào)試技巧;</p><p> 4、基本掌握51單片機(jī)最小應(yīng)用系統(tǒng)的組裝、調(diào)試。</p><p><b> 五、附錄</b></p><p> 5.1、附錄一、DS1320的引腳功能及工作時序</p
92、><p> 5.1.1、DS1302的引腳描述</p><p> 在DS1302中Vcc1為后備電源,Vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電;當(dāng)Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768KHz晶振。RST
93、是復(fù)位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進(jìn)行操作。如果在傳送過程中RSTS置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電動行時,在VCC大于等于2.5V之前,RST必須保持低電平。只有在SCLK 為低電平時
94、,才能將RST置為高電平,I/O為串行數(shù)據(jù)輸入端(雙向)。SCLK始終是輸入端。</p><p> 5.1.2、DS1302的引腳功能</p><p> 表5-1 DS1302引腳功能</p><p> 5.1.3、DS1302的操作原理</p><p> (1) 時鐘芯片DS1302的工作原理</p><p&g
95、t; DS1302在每次進(jìn)行讀、寫程序前都必須初始化,先把SCLK端置“0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時序如下圖-4所示。表-2為DS1302的控制字格式,此控制字的位7必須置1,若為0則不能把對DS1302進(jìn)行讀寫數(shù)據(jù)。對于位6,若對程序進(jìn)行讀/寫時RAM=1,對時間進(jìn)行讀/寫時,CK=0。位1至位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀操作時,該位為1;進(jìn)行寫操作時,該位為0??刂谱止?jié)總是從最低
96、位開始輸入/輸出的。表-2為DS1302的日歷、時間寄存器內(nèi)容:“CH”是時鐘暫停標(biāo)志位,當(dāng)該位為1時,時鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時,時鐘開始運(yùn)行。“WP”是寫保護(hù)位,在任何的對時鐘和RAM的寫操作之前,WP必須為0。當(dāng)“WP”為1時,寫保護(hù)位防止對任一寄存器的寫操作。</p><p> 表5-2 DS1302日歷、時鐘各寄存器與控制字對照表</p><p>
97、 (2) DS1302的控制字節(jié)</p><p> DS1302的控制字如表-3所示??刂谱止?jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出。 表5-3 DS1302
98、的控制字格式</p><p> RAM RD</p><p> 1 A4 A3 A2 A1 A0 </p><p> / CK /WR
99、 </p><p> (3) 數(shù)據(jù)輸入輸出(I/O)</p><p> 在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7,如圖-4所示。</p><p> 圖5-1 DS1302單字
100、節(jié)讀/寫時序圖</p><p> (4) DS1302的寄存器</p><p> DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時間寄存器及其控制字見表-4。</p><p> 表5-4 DS1302的日歷、時間寄存器</p><p> 此外,DS1302 還有年份寄存器、控制寄存器
101、、充電寄存器、時鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。</p><p&g
102、t; 5.2、附錄二、LCD1602液晶顯示器</p><p> 5.2.1、LCD的引腳定義</p><p> 表5-5 、1602引腳定義</p><p> 5.2.2、LCD1602的操作時序圖</p><p> 圖5-2 LCD1602讀時序</p><p> 圖5-3LCD1602寫時序</
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于ds1302和lcd1602的可調(diào)數(shù)字鐘
- 基于51單片機(jī)ds1302萬年歷課程設(shè)計(jì)報告
- 基于51單片機(jī)ds1302萬年歷課程設(shè)計(jì)報告
- 畢業(yè)設(shè)計(jì)——基于ds1302的電子萬年歷設(shè)計(jì)
- 1602數(shù)字萬年歷單片機(jī)課程設(shè)計(jì)
- 數(shù)字萬年歷課程設(shè)計(jì)
- 數(shù)字萬年歷課程設(shè)計(jì)報告
- 萬年歷課程設(shè)計(jì)--萬年歷電子時鐘
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 多功能數(shù)字萬年歷課程設(shè)計(jì)
- 基于89c52單片機(jī)和ds1302的萬年歷設(shè)計(jì)
- java萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)報告
- java課程設(shè)計(jì)--萬年歷
評論
0/150
提交評論