版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 單片機(jī)課程設(shè)計(jì),數(shù)字時(shí)鐘</p><p> 專業(yè):機(jī)械設(shè)計(jì)制造及其自動(dòng)化</p><p><b> 班級(jí): </b></p><p><b> 名: </b></p><p><b> 設(shè)計(jì)要求</b></p><p>
2、顯示學(xué)號(hào)及制作日期。</p><p> 可以調(diào)整時(shí)間,時(shí)分秒。</p><p><b> 可以定時(shí)</b></p><p><b> 配件</b></p><p> 51或52單片機(jī)一個(gè),各種電容若干個(gè),各種電阻若干個(gè),六個(gè)共陽(yáng)極led燈,一個(gè)12MHZ晶振,一個(gè)32.768kHz晶振,一個(gè)
3、ds1302</p><p> 時(shí)鐘芯片,一個(gè)排阻,一個(gè)喇叭,五個(gè)按鈕,導(dǎo)線若干個(gè)。</p><p><b> 數(shù)字電路模擬圖</b></p><p><b> 5、單片機(jī)程序</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);//寫(xiě)一個(gè)字節(jié)</p><p> uchar read_byte();//讀一個(gè)字節(jié)</p><p> void write_1302(uchar add,uchar dat);//向1302芯片寫(xiě)函數(shù),指定寫(xiě)入地址,數(shù)據(jù)</p>
10、<p> uchar read_1302(uchar add);//從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來(lái)源地址</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 //定時(shí)器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,為脈沖上升沿寫(xiě)入數(shù)據(jù)做好準(zhǔn)備</p><p> delaynus(2); //稍微等待,使硬件做好準(zhǔn)備</p><
43、p> for(p=0;p<8;p++) //連續(xù)寫(xiě)8個(gè)二進(jìn)制位數(shù)據(jù)</p><p><b> {</b></p><p> IO=dat&0x01; //取出dat的第0位數(shù)據(jù)寫(xiě)入1302</p><p> delaynus(2); //稍微等待,使硬件做好準(zhǔn)備</p><p> SCLK=
44、1; //上升沿寫(xiě)入數(shù)據(jù)</p><p> delaynus(2); //稍微等待,使硬件做好準(zhǔn)備</p><p> SCLK=0; //重新拉低SCLK,形成脈沖</p><p> dat>>=1; //將dat的各數(shù)據(jù)位右移1位,準(zhǔn)備寫(xiě)入下一個(gè)數(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個(gè)二進(jìn)制位數(shù)據(jù)</p><p><b> {</b></p><p> dat>>=1; //將dat的各數(shù)據(jù)位右移1位,因?yàn)橄茸x出的是字節(jié)的最低位</p><p> if(IO==1) //如果讀出的數(shù)據(jù)是1</p>&l
47、t;p> dat|=0x80; //將1取出,寫(xiě)在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芯片寫(xiě)函數(shù),指定寫(xiě)入地址,數(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ù)來(lái)源地址</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); //允許寫(xiě),禁止寫(xiě)保護(hù) </p><p> write_1302(0x80,0x00); //向DS1302內(nèi)寫(xiě)秒寄存器80H寫(xiě)入初始秒數(shù)據(jù)00</p><p>
55、; write_1302(0x82,0x00);//向DS1302內(nèi)寫(xiě)分寄存器82H寫(xiě)入初始分?jǐn)?shù)據(jù)00</p><p> write_1302(0x84,0x12);//向DS1302內(nèi)寫(xiě)小時(shí)寄存器84H寫(xiě)入初始小時(shí)數(shù)據(jù)12</p><p> write_1302(0x8a,0x07);//向DS1302內(nèi)寫(xiě)周寄存器8aH寫(xiě)入初始周數(shù)據(jù)4</p><p>
56、write_1302(0x86,0x16);//向DS1302內(nèi)寫(xiě)日期寄存器86H寫(xiě)入初始日期數(shù)據(jù)16</p><p> write_1302(0x88,0x06);//向DS1302內(nèi)寫(xiě)月份寄存器88H寫(xiě)入初始月份數(shù)據(jù)06</p><p> write_1302(0x8c,0x13);//向DS1302內(nèi)寫(xiě)年份寄存器8cH寫(xiě)入初始年份數(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) //延時(shí)</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> 注意事項(xiàng)</b></p><p> 因?yàn)槲矣玫氖潜I版軟件,
90、模擬的時(shí)候數(shù)碼管顯示的時(shí)候,在共陽(yáng)端接餓三極管多了軟件就卡死了,所以我就把三極管全省略了,但是在連接實(shí)物的時(shí)候,一定要記得連接三極管,因?yàn)閱纹瑱C(jī)輸出的電流太小,不能為數(shù)碼管提供電流 。</p><p> 這個(gè)程序也只是模擬的時(shí)候用的,再向單片機(jī)里面下載程序的時(shí)候,要把數(shù)碼管片選信號(hào)輸出的1變?yōu)?,0變?yōu)?.不然會(huì)出現(xiàn)斷碼現(xiàn)象。在這個(gè)程序里我定義的片選變量分別為,shi1、shi2、fen1、</p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ī)課程設(shè)計(jì)--數(shù)字時(shí)鐘
- 單片機(jī)數(shù)字時(shí)鐘課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)(數(shù)字時(shí)鐘)
- 單片機(jī)課程設(shè)計(jì)報(bào)告---單片機(jī)數(shù)字時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)數(shù)字時(shí)鐘.doc
- 單片機(jī)課程設(shè)計(jì)數(shù)字時(shí)鐘
- 單片機(jī)數(shù)字時(shí)鐘控制課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的數(shù)字時(shí)鐘設(shè)計(jì)
- 課程設(shè)計(jì)-單片機(jī)基于單片機(jī)的數(shù)字時(shí)鐘設(shè)計(jì)
- 單片機(jī)數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)數(shù)字時(shí)鐘
- 數(shù)字時(shí)鐘的課程設(shè)計(jì)--基于單片機(jī)的數(shù)字時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)---數(shù)字時(shí)鐘的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告---基于單片機(jī)的數(shù)字時(shí)鐘設(shè)計(jì)
- 數(shù)字電子時(shí)鐘-單片機(jī)課程設(shè)計(jì)
- 多功能數(shù)字時(shí)鐘 單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-單片機(jī)課程設(shè)計(jì)---電子時(shí)鐘
- 單片機(jī)數(shù)字時(shí)鐘課程設(shè)計(jì)--單片機(jī)多功能電子鐘設(shè)計(jì)
- 課程設(shè)計(jì)---基于51單片機(jī)的數(shù)字時(shí)鐘
評(píng)論
0/150
提交評(píng)論