版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 單片機課程設(shè)計,數(shù)字時鐘</p><p> 專業(yè):機械設(shè)計制造及其自動化</p><p><b> 班級: </b></p><p><b> 名: </b></p><p><b> 設(shè)計要求</b></p><p>
2、顯示學(xué)號及制作日期。</p><p> 可以調(diào)整時間,時分秒。</p><p><b> 可以定時</b></p><p><b> 配件</b></p><p> 51或52單片機一個,各種電容若干個,各種電阻若干個,六個共陽極led燈,一個12MHZ晶振,一個32.768kHz晶振,一個
3、ds1302</p><p> 時鐘芯片,一個排阻,一個喇叭,五個按鈕,導(dǎo)線若干個。</p><p><b> 數(shù)字電路模擬圖</b></p><p><b> 5、單片機程序</b></p><p> #include <reg52.h></p><p>
4、; #include <stdio.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> bit ta,ni,wo,nao,hu,ding,cha;</p><p> uint a,j,k,dingshi,d
5、ingfen;</p><p> uchar z,x,c,v,b,n,shi,fen,miao,w,r,y,dat,ds1,ds2,df1,df2,huancun,Th0,Tl0;</p><p> uchar code tab[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};</p><p> sb
6、it shi1=P1^0;</p><p> sbit shi2=P1^1;</p><p> sbit fen1=P1^2;</p><p> sbit fen2=P1^3;</p><p> sbit miao1=P1^4;</p><p> sbit miao2=P1^5;</p><
7、;p> sbit RST=P2^0;</p><p> sbit SCLK=P2^1;</p><p> sbit IO= P2^2;</p><p> sbit jiashi=P2^3;</p><p> sbit jiafen=P2^4;</p><p> sbit jiamiao=P2^5;&l
8、t;/p><p> sbit kai=P2^6;</p><p> sbit xiang=P2^7;</p><p> void delay1 () ;</p><p> void shuru(uchar q);</p><p> void xuehao1 (uchar z,uchar x,uchar c,uch
9、ar v,uchar b,uchar n);</p><p> void write_byte(uchar dat);//寫一個字節(jié)</p><p> uchar read_byte();//讀一個字節(jié)</p><p> void write_1302(uchar add,uchar dat);//向1302芯片寫函數(shù),指定寫入地址,數(shù)據(jù)</p>
10、<p> uchar read_1302(uchar add);//從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來源地址</p><p> void ds1302_init() ;//1302芯片初始化子函數(shù)(2012-06-18,12:00:00,week7)</p><p> uchar readset1302(uchar Cmd);</p><p>
11、 void xianshimiao(uchar w);</p><p> void xianshifen(uchar r) ;</p><p> void xianshishi(uchar y);</p><p> void tiaozhengshi();</p><p> void tiaozhengfen();</p>
12、<p> void tiaozhengmiao();</p><p> void PlayKey(void);</p><p> void delay_1ms(uchar i);</p><p> void dingshikaiguan(void);</p><p> void chanao(void);</p&
13、gt;<p> void tiaozhengshijian(void);</p><p> void kaishi(uchar z,uchar x,uchar c,uchar v,uchar b,uchar n);</p><p> uchar code KeyCode[]={0xFF,0xFF,0xF8,0x8B,0xF9,0x5B,0xFA,0x14,0xFA,0x
14、66,0xFB,0x03,0xFB,0x8F,0xFC,0x0B,//低音</p><p> 0xFC,0x43,0xFC,0xAB,0xFD,0x08,0xFD,0x33,0xFD,0x81,0xFD,0xC7,0xFE,0x05,//中音</p><p> 0xFE,0x21,0xFE,0x55,0xFE,0x84,0xFE,0X99,0XFE,0xC0,0xFE,0xE3,0xF
15、F,0x02,//高音</p><p><b> };</b></p><p> void int2_int() interrupt 0</p><p><b> {</b></p><p><b> hu=1;</b></p><p>&l
16、t;b> ding=0;</b></p><p><b> cha=0;</b></p><p><b> }</b></p><p> time0() interrupt 1 //定時器0中斷</p><p><b> { </b></p&g
17、t;<p><b> TH0=Th0; </b></p><p><b> TL0=Tl0; </b></p><p> xiang=~xiang; </p><p><b> } </b></p><p> void main ()</p&g
18、t;<p><b> {</b></p><p><b> P1=0;</b></p><p><b> xiang=1;</b></p><p><b> ding=0;</b></p><p><b> cha=0
19、;</b></p><p> kaishi(2,0,1,0,0,6) ;</p><p> kaishi(0,2,4,2,1,4) ;</p><p> kaishi(1,3,0,6,1,6) ;</p><p> ds1302_init() ;</p><p><b> EA=1
20、;</b></p><p><b> EX0=1; </b></p><p><b> IT0=1;</b></p><p> TMOD=0X01; </p><p><b> TR0=0; </b></p><p><b>
21、; ET0=1; </b></p><p><b> while(1)</b></p><p><b> {</b></p><p> miao=read_1302(0x81);</p><p> xianshimiao(miao);</p><p>
22、 fen=read_1302(0x83);</p><p> xianshifen(fen) ;</p><p> shi= read_1302(0x85);</p><p> xianshishi(shi);</p><p> chanao();</p><p> dingshikaiguan();<
23、;/p><p> if(ding==1)</p><p><b> {</b></p><p> PlayKey();</p><p><b> xiang=1;</b></p><p><b> }</b></p><p>
24、; tiaozhengshijian();</p><p><b> }</b></p><p><b> }</b></p><p> void xianshimiao(uchar w)</p><p><b> {</b></p><p>
25、<b> uchar e;</b></p><p><b> e=w/16;</b></p><p> P0=tab[e];</p><p><b> miao1=1;</b></p><p> delay1 ();</p><p><b
26、> miao1=0;</b></p><p><b> e=w%16;</b></p><p> P0=tab[e];</p><p><b> miao2=1;</b></p><p> delay1 ();</p><p><b>
27、 miao2=0 ;</b></p><p><b> }</b></p><p> void xianshifen(uchar r)</p><p><b> {</b></p><p><b> uchar t;</b></p><p
28、><b> t=r/16;</b></p><p> P0=tab[t]; </p><p><b> fen1=1;</b></p><p> delay1 ();</p><p><b> fen1=0;</b></p><p>&l
29、t;b> t=r%16;</b></p><p> P0=tab[t];</p><p><b> fen2=1;</b></p><p> delay1 ();</p><p><b> fen2=0;</b></p><p><b>
30、 }</b></p><p> void xianshishi(uchar y)</p><p><b> {</b></p><p><b> uchar u;</b></p><p><b> u=y/16;</b></p><p&
31、gt; P0=tab[u]; </p><p><b> shi1=1;</b></p><p> delay1 ();</p><p><b> shi1=0;</b></p><p><b> u=y%16;</b></p><p> P
32、0=tab[u];</p><p><b> shi2=1;</b></p><p> delay1 ();</p><p><b> shi2=0;</b></p><p><b> }</b></p><p> void shuru(uch
33、ar q)</p><p><b> {</b></p><p> P0=tab[q] ;</p><p><b> } </b></p><p> void delay1 () </p><p><b> {</b></p&g
34、t;<p> for(k=0;k<120;k++) ;</p><p><b> }</b></p><p> void delaynus(uchar n)</p><p><b> {</b></p><p><b> uchar i;</b>&
35、lt;/p><p> for(i=0;i<n;i++) ;</p><p><b> }</b></p><p> void xuehao1 (uchar z,uchar x,uchar c,uchar v,uchar b,uchar n)</p><p><b> {</b></p
36、><p> for(a=0;a<1;a++)</p><p><b> {</b></p><p><b> shuru(z);</b></p><p><b> shi1=1 ;</b></p><p> delay1 ();</
37、p><p><b> shi1=0;</b></p><p><b> shuru(x);</b></p><p><b> shi2=1;</b></p><p> delay1 () ;</p><p><b> shi2=0;&l
38、t;/b></p><p><b> shuru(c);</b></p><p><b> fen1=1;</b></p><p> delay1 () ;</p><p><b> fen1=0;</b></p><p><b&
39、gt; shuru(v);</b></p><p><b> fen2=1;</b></p><p> delay1 () ;</p><p><b> fen2=0;</b></p><p><b> shuru(b);</b></p>
40、<p><b> miao1=1;</b></p><p> delay1 ();</p><p><b> miao1=0;</b></p><p><b> shuru(n);</b></p><p><b> miao2=1;<
41、/b></p><p> delay1 () ;</p><p><b> miao2=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> void write_byte(uch
42、ar dat)</p><p><b> {</b></p><p><b> uchar p;</b></p><p> SCLK=0; //拉低SCLK,為脈沖上升沿寫入數(shù)據(jù)做好準(zhǔn)備</p><p> delaynus(2); //稍微等待,使硬件做好準(zhǔn)備</p><
43、p> for(p=0;p<8;p++) //連續(xù)寫8個二進制位數(shù)據(jù)</p><p><b> {</b></p><p> IO=dat&0x01; //取出dat的第0位數(shù)據(jù)寫入1302</p><p> delaynus(2); //稍微等待,使硬件做好準(zhǔn)備</p><p> SCLK=
44、1; //上升沿寫入數(shù)據(jù)</p><p> delaynus(2); //稍微等待,使硬件做好準(zhǔn)備</p><p> SCLK=0; //重新拉低SCLK,形成脈沖</p><p> dat>>=1; //將dat的各數(shù)據(jù)位右移1位,準(zhǔn)備寫入下一個數(shù)據(jù)位</p><p><b> }</b></
45、p><p><b> } </b></p><p> uchar read_byte(void)</p><p><b> {</b></p><p> uchar i,dat;</p><p> delaynus(2); //稍微等待,使硬件做好準(zhǔn)備<
46、/p><p> for(i=0;i<8;i++) //連續(xù)讀8個二進制位數(shù)據(jù)</p><p><b> {</b></p><p> dat>>=1; //將dat的各數(shù)據(jù)位右移1位,因為先讀出的是字節(jié)的最低位</p><p> if(IO==1) //如果讀出的數(shù)據(jù)是1</p>&l
47、t;p> dat|=0x80; //將1取出,寫在dat的最高位</p><p> SCLK=1; //將SCLK置于高電平,為下降沿讀出</p><p> delaynus(2); //稍微等待</p><p> SCLK=0; //拉低SCLK,形成脈沖下降沿</p><p> delaynus(2); //稍微等待<
48、;/p><p><b> }</b></p><p> return dat; //將讀出的數(shù)據(jù)返回</p><p><b> }</b></p><p> void write_1302(uchar add,uchar dat)//向1302芯片寫函數(shù),指定寫入地址,數(shù)據(jù)</p>
49、<p><b> {</b></p><p><b> RST=0;</b></p><p><b> SCLK=0; </b></p><p><b> RST=1;</b></p><p> write_byte(add);&l
50、t;/p><p> write_byte(dat);</p><p><b> SCLK=1;</b></p><p><b> RST=0;</b></p><p><b> }</b></p><p> uchar read_1302(ucha
51、r add)//從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來源地址</p><p><b> {</b></p><p> uchar temp;</p><p><b> RST=0;</b></p><p><b> SCLK=0;</b></p><p
52、><b> RST=1;</b></p><p> write_byte(add);</p><p> temp=read_byte();</p><p><b> SCLK=1;</b></p><p><b> RST=0;</b></p>&
53、lt;p> return(temp);</p><p><b> }</b></p><p> void ds1302_init() //1302芯片初始化子函數(shù)(2012-06-18,12:00:00,week7)</p><p><b> {</b></p><p><b&g
54、t; RST=0;</b></p><p><b> SCLK=0;</b></p><p> write_1302(0x8e,0x00); //允許寫,禁止寫保護 </p><p> write_1302(0x80,0x00); //向DS1302內(nèi)寫秒寄存器80H寫入初始秒數(shù)據(jù)00</p><p>
55、; write_1302(0x82,0x00);//向DS1302內(nèi)寫分寄存器82H寫入初始分?jǐn)?shù)據(jù)00</p><p> write_1302(0x84,0x12);//向DS1302內(nèi)寫小時寄存器84H寫入初始小時數(shù)據(jù)12</p><p> write_1302(0x8a,0x07);//向DS1302內(nèi)寫周寄存器8aH寫入初始周數(shù)據(jù)4</p><p>
56、write_1302(0x86,0x16);//向DS1302內(nèi)寫日期寄存器86H寫入初始日期數(shù)據(jù)16</p><p> write_1302(0x88,0x06);//向DS1302內(nèi)寫月份寄存器88H寫入初始月份數(shù)據(jù)06</p><p> write_1302(0x8c,0x13);//向DS1302內(nèi)寫年份寄存器8cH寫入初始年份數(shù)據(jù)13</p><p>
57、<b> }</b></p><p> void tiaozhengshi()</p><p><b> {</b></p><p> shi=((shi+1)/16+(shi+1)%16/10)*16+(shi+1)%16%10;</p><p> if(shi==0x24)</
58、p><p><b> { </b></p><p><b> shi=0;</b></p><p><b> }</b></p><p> write_1302(0x84,shi);</p><p><b> }</b>&
59、lt;/p><p> void tiaozhengfen()</p><p><b> { </b></p><p> fen=((fen+1)/16+(fen+1)%16/10)*16+(fen+1)%16%10;</p><p> if(fen==0x60)</p><p><b&
60、gt; {</b></p><p><b> fen=0;</b></p><p><b> }</b></p><p> write_1302(0x82,fen);</p><p><b> }</b></p><p> voi
61、d tiaozhengmiao()</p><p><b> { </b></p><p> miao=((miao+1)/16+(miao+1)%16/10)*16+(miao+1)%16%10;</p><p> if(miao==0x60)</p><p><b> {</b><
62、;/p><p><b> miao=0;</b></p><p><b> }</b></p><p> write_1302(0x80,miao);</p><p><b> }</b></p><p> void PlayKey(void) &
63、lt;/p><p><b> { </b></p><p> Th0=KeyCode[2*14+2*2]; </p><p> Tl0=KeyCode[2*14+2*2+1]; </p><p><b> TH0=Th0; </b></p><p><b>
64、TL0=Tl0; </b></p><p><b> TR0=1; </b></p><p> delay_1ms(20);</p><p><b> TR0=0;</b></p><p><b> } </b></p><p>
65、void delay_1ms(uchar i) //延時</p><p><b> { </b></p><p> uchar j,k; </p><p> for(j=0;j<i;j++) </p><p> for(k=0;k<148;k++) ; </p><p><
66、;b> }</b></p><p> void dingshikaiguan(void)</p><p><b> {</b></p><p> if(kai==0)</p><p><b> {</b></p><p><b> wo
67、=0;</b></p><p><b> ta=0;</b></p><p> dingshi=0;</p><p> dingfen=0;</p><p><b> hu=0;</b></p><p><b> ds1=0;</b>
68、;</p><p><b> ds2=0;</b></p><p><b> df1=0 ;</b></p><p><b> df2=0;</b></p><p> while(hu==0)</p><p><b> {</b
69、></p><p> xuehao1 (ds1,ds2,df1,df2,0,0);</p><p> if(jiashi==1)</p><p><b> {</b></p><p><b> wo=0;</b></p><p><b> }<
70、/b></p><p> if(jiafen==1)</p><p><b> {</b></p><p><b> ta=0;</b></p><p><b> }</b></p><p><b> if(wo==0)<
71、/b></p><p><b> {</b></p><p> if(jiashi==0)</p><p><b> {</b></p><p> dingshi++;</p><p> if(dingshi==24)</p><p>
72、<b> {</b></p><p> dingshi=0;</p><p><b> }</b></p><p> ds1= dingshi/10;</p><p> ds2=dingshi%10;</p><p><b> wo=1;</b&g
73、t;</p><p><b> }</b></p><p><b> }</b></p><p><b> if(ta==0)</b></p><p><b> {</b></p><p> if(jiafen==0)&l
74、t;/p><p><b> {</b></p><p> dingfen++;</p><p> if(dingfen==60)</p><p><b> {</b></p><p> dingfen=0;</p><p><b>
75、}</b></p><p> df1=dingfen/10;</p><p> df2=dingfen%10;</p><p><b> ta=1;</b></p><p><b> }</b></p><p><b> }</b>
76、;</p><p><b> }</b></p><p> if((dingfen+dingshi)!=0)</p><p><b> {</b></p><p><b> cha=1;</b></p><p><b> } <
77、;/b></p><p> fen=read_1302(0x83);</p><p> huancun=(fen+dingfen)/60;</p><p> dingfen= (fen+dingfen)%60;</p><p> shi= read_1302(0x85);</p><p> dingsh
78、i=(dingshi+shi+huancun)%24;</p><p><b> }</b></p><p><b> }</b></p><p> void chanao(void)</p><p><b> {</b></p><p> i
79、f(cha==1)</p><p><b> {</b></p><p> if(dingshi==shi)</p><p><b> {</b></p><p> if(dingfen==fen)</p><p><b> {</b><
80、/p><p><b> ding=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> } </b></p><p><b> }</b>&l
81、t;/p><p> void tiaozhengshijian(void)</p><p><b> {</b></p><p> if(jiashi==1)</p><p><b> {</b></p><p><b> wo=0;</b><
82、;/p><p><b> }</b></p><p> if(jiafen==1)</p><p><b> {</b></p><p><b> ta=0;</b></p><p><b> }</b></p>
83、<p> if(jiamiao==1)</p><p><b> {</b></p><p><b> ni=0;</b></p><p><b> }</b></p><p><b> if(wo==0)</b></p>
84、<p><b> {</b></p><p> if(jiashi==0)</p><p><b> {</b></p><p> tiaozhengshi();</p><p><b> wo=1;</b></p><p>&l
85、t;b> }</b></p><p><b> }</b></p><p><b> if(ta==0)</b></p><p><b> {</b></p><p> if(jiafen==0)</p><p><b&
86、gt; {</b></p><p> tiaozhengfen();</p><p><b> ta=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b>
87、if(ni==0)</b></p><p><b> {</b></p><p> if(jiamiao==0)</p><p><b> {</b></p><p> tiaozhengmiao();</p><p><b> ni=1 ;
88、</b></p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p><p> void kaishi(uchar z,uchar x,uchar c,uchar v,uchar b,uchar
89、 n)</p><p> { for(j=0;j<1000;j++)</p><p> xuehao1 (z,x,c,v,b,n); </p><p><b> }</b></p><p><b> 注意事項</b></p><p> 因為我用的是盜版軟件,
90、模擬的時候數(shù)碼管顯示的時候,在共陽端接餓三極管多了軟件就卡死了,所以我就把三極管全省略了,但是在連接實物的時候,一定要記得連接三極管,因為單片機輸出的電流太小,不能為數(shù)碼管提供電流 。</p><p> 這個程序也只是模擬的時候用的,再向單片機里面下載程序的時候,要把數(shù)碼管片選信號輸出的1變?yōu)?,0變?yōu)?.不然會出現(xiàn)斷碼現(xiàn)象。在這個程序里我定義的片選變量分別為,shi1、shi2、fen1、</p>
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計--數(shù)字時鐘
- 單片機數(shù)字時鐘課程設(shè)計
- 單片機課程設(shè)計--數(shù)字時鐘
- 單片機課程設(shè)計(數(shù)字時鐘)
- 單片機課程設(shè)計報告---單片機數(shù)字時鐘
- 單片機課程設(shè)計---單片機數(shù)字時鐘.doc
- 單片機課程設(shè)計數(shù)字時鐘
- 單片機數(shù)字時鐘控制課程設(shè)計
- 單片機課程設(shè)計--基于單片機的數(shù)字時鐘設(shè)計
- 課程設(shè)計-單片機基于單片機的數(shù)字時鐘設(shè)計
- 單片機數(shù)字時鐘課程設(shè)計報告
- 單片機課程設(shè)計數(shù)字時鐘
- 數(shù)字時鐘的課程設(shè)計--基于單片機的數(shù)字時鐘
- 單片機課程設(shè)計---數(shù)字時鐘的設(shè)計
- 單片機課程設(shè)計報告---基于單片機的數(shù)字時鐘設(shè)計
- 數(shù)字電子時鐘-單片機課程設(shè)計
- 多功能數(shù)字時鐘 單片機課程設(shè)計
- 單片機課程設(shè)計-單片機課程設(shè)計---電子時鐘
- 單片機數(shù)字時鐘課程設(shè)計--單片機多功能電子鐘設(shè)計
- 課程設(shè)計---基于51單片機的數(shù)字時鐘
評論
0/150
提交評論