單片機(jī)課程設(shè)計(jì)--數(shù)字時(shí)鐘_第1頁(yè)
已閱讀1頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

最新文檔

評(píng)論

0/150

提交評(píng)論