單片機實現(xiàn)萬年歷程序_第1頁
單片機實現(xiàn)萬年歷程序_第2頁
單片機實現(xiàn)萬年歷程序_第3頁
單片機實現(xiàn)萬年歷程序_第4頁
單片機實現(xiàn)萬年歷程序_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、51單片機實現(xiàn)萬年歷 利用AT89S52單片機的P0口來和另外幾個口來控制1602液晶的顯示和P1口還有其它口來控制ds12887時鐘芯片。設置四個按鍵,1個定義為時間設置功能鍵,一個定義為鬧鐘設置功能鍵,另外兩個用來調(diào)節(jié)時間的增減。 原理圖: pcb圖: 源程序: #include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit beep=P20;/蜂鳴器控制口 sbit timeadd=P21;/調(diào)節(jié)時間加 sbit timesub=P22;/調(diào)節(jié)時間減 sbit timeclk=P23;/鬧鐘設

2、定鍵 sbit timefun=P24;/時間設定鍵 sbit lcdrs=P25;/液晶的命令和數(shù)據(jù)控制口 sbit ledrw=P26;/液晶的寫數(shù)據(jù)口 sbit lcden=P27;/液晶顯示模塊的使能端 sbit timeds=P33;/時鐘芯片地址閘 sbit timerw=P34;/時鐘芯片讀寫 sbit timeas=P35;/時鐘芯片地址閘 sbit timeen=P36;/時鐘芯片片選 uchar code table="20  -  -   week "uchar code table1=&qu

3、ot;     :  :  "/要顯示的字符串 char num,shi,fen,miao,nian=2000,yue,ri,week,numfun,anumfun,flag,flag1;uchar leap;void delay(uint x)    uchar i,j;   for(i=x;i>0;i-)      for(j=110;j>0;j-);void didi()  &#

4、160; beep=0;   delay(1000);   beep=1;   delay(1000);void write_com(uchar com)    lcdrs=0;   P0=com;   delay(5);   lcden=1;   delay(20);   lcden=0; void write_date(uchar date)    lcdrs=1;   P

5、0=date;   delay(5);   lcden=1;   delay(20);   lcden=0;void write_sfm(uchar add,uchar date)    uchar shi,ge;   shi=date/10;   ge=date%10;   write_com(0x80+0x40+add);   write_date(0x30+shi);   write_dat

6、e(0x30+ge);void write_nyr(uchar add,uchar date)    uchar shi,ge;   shi=date/10;   ge=date%10;   write_com(0x80+add);   write_date(0x30+shi);   write_date(0x30+ge);void write_zhou(uchar add,uchar date)   write_com(0x80+add); &

7、#160; write_date(0x30+date);void write_ds(uchar add,uchar date)    timeen=0;   timeas=1;   timeds=1;   timerw=1;   P1=add;   timeas=0;   timerw=0;   P1=date;   timerw=1;   timeas=1;   timeen

8、=1;          uchar read_ds(uchar add)    uchar ds_date;   timeas=1;   timeds=1;   timerw=1;   timeen=0;   P1=add;   timeas=0;   timeds=0;   P1=0xff;  

9、 ds_date=P1;   timeds=1;   timeas=1;   timeen=1;   return ds_date; void keyscan()    if(flag1=1)/用來關(guān)閉鬧鐘鈴聲                if(timeadd=0)       

10、0;                    delay(5);                if(timeadd=0)          

11、                               while(!timeadd=0);                 

12、;     flag1=0;                                        if(timesub=0)   

13、                         delay(5);                if(timesub=0)     &#

14、160;                                   while(!timesub=0);            &

15、#160;         flag1=0;                                        if(

16、timefun=0)               delay(5);         if(timefun=0)                      &#

17、160;     while(!timefun);                flag=1;                numfun+;       &

18、#160;        if(numfun=1)                                        

19、 write_com(0x80+0x40+0x0a);                      write_com(0x0f);                     

20、;              if(numfun=2)                                  

21、0;      write_com(0x80+0x40+0x07);                      write_com(0x0f);              

22、0;                    if(numfun=3)                             &#

23、160;           write_com(0x80+0x40+0x04);                      write_com(0x0f);         &#

24、160;                         if(numfun=4)                        

25、                 write_com(0x80+0x0f);                      write_com(0x0f);     

26、;                              if(numfun=5)                   

27、60;                     write_com(0x80+0x09);                      write_com(0x0f);&#

28、160;                                  if(numfun=6)              &

29、#160;                          write_com(0x80+0x06);                    

30、60; write_com(0x0f);                                   if(numfun=7)         

31、0;                               write_com(0x80+0x03);                

32、      write_com(0x0f);                                   if(numfun=8)     &

33、#160;                                   numfun=0;             

34、60;        flag=0;                                        if(numfun!=0

35、)               if(timeadd=0)                            delay(5);    

36、            while(!timeadd);                if(numfun=1)                 &#

37、160;                       miao+;                      if(miao=60)  &#

38、160;                      miao=0;                      write_sfm(9,miao);  

39、                    write_com(0x80+0x40+9);                      write_ds(0,miao); &#

40、160;                                 if(numfun=2)               &

41、#160;                         fen+;                      if(fen=60)

42、60;                        fen=0;                      write_sfm(6,fen);

43、60;                     write_com(0x80+0x40+6);                      write_ds(2,fen);

44、                                   if(numfun=3)              

45、;                           shi+;                      if(sh

46、i=24)                         shi=0;                      write_sfm(3,

47、shi);                      write_com(0x80+0x40+3);                      write_ds

48、(4,shi);                                   if(numfun=4)            

49、60;                            week+;                     &#

50、160;if(week=8)                         week=1;                      wr

51、ite_zhou(0x0f,week);                      write_com(0x80+0x0f);                     &

52、#160;write_ds(6,week);                                   if(numfun=5)          &

53、#160;                              if(nian=0)                  &#

54、160;                               switch(yue)                  &

55、#160;         case 1:ri+;if(ri=32) ri=1;break;                            case 2:ri+;if(ri=30) ri=1;break; 

56、60;                          case 3:ri+;if(ri=32) ri=1;break;                  &

57、#160;         case 4:ri+;if(ri=31) ri=1;break;                            case 5:ri+;if(ri=32) ri=1;break; 

58、60;                          case 6:ri+;if(ri=31) ri=1;break;                  &

59、#160;         case 7:ri+;if(ri=32) ri=1;break;                            case 8:ri+;if(ri=32) ri=1;break; 

60、60;                          case 9:ri+;if(ri=31) ri=1;break;                  &

61、#160;         case 10:ri+;if(ri=32) ri=1;break;                            case 11:ri+;if(ri=31) ri=1;break; &

62、#160;                          case 12:ri+;if(ri=32) ri=1;break;                 

63、0;                                                   &#

64、160;        else if(leap&&yue=2)                                     

65、60;               ri+;                            if(ri=30)    &#

66、160;                          ri=1;                       &#

67、160;                       else if(yue=2&&leap=0)                      &

68、#160;                              ri+;                   &#

69、160;        if(ri=29)                               ri=1;         

70、;                                      else             

71、;          switch(yue)                         case 1:ri+;if(ri=32) ri=1;break;        

72、60;                case 3:ri+;if(ri=32) ri=1;break;                         case 4:ri+;if(ri=31) ri=1;bre

73、ak;                         case 5:ri+;if(ri=32) ri=1;break;                    

74、     case 6:ri+;if(ri=31) ri=1;break;                         case 7:ri+;if(ri=32) ri=1;break;           

75、              case 8:ri+;if(ri=32) ri=1;break;                         case 9:ri+;if(ri=31) ri=1;break;  

76、                       case 10:ri+;if(ri=32) ri=1;break;                      &#

77、160;  case 11:ri+;if(ri=31) ri=1;break;                         case 12:ri+;if(ri=32) ri=1;break;             

78、                                        write_nyr(8,ri);        &

79、#160;             write_com(0x80+0x08);                      write_ds(7,ri);        &

80、#160;                          if(numfun=6)                       

81、;                  yue+;                      if(yue=13)       &#

82、160;                 yue=0;                      write_nyr(5,yue);       &#

83、160;              write_com(0x80+0x05);                      write_ds(8,yue);       &

84、#160;                           if(numfun=7)                      

85、;                   nian+;                      if(nian=100)      

86、;                   nian=0;                      leap=nian%4=0&&nian%100!=0;  

87、0;                   write_nyr(2,nian);                      write_com(0x80+2);  

88、0;                   write_ds(9,nian);                            

89、0;           if(timesub=0)                            delay(5);        

90、;        while(!timesub);                if(numfun=1)                      

91、                   miao-;                      if(miao=-1)      &

92、#160;                  miao=59;                      write_sfm(9,miao);     

93、0;                write_com(0x80+0x40+9);                      write_ds(0,miao);     

94、                              if(numfun=2)                   

95、0;                     fen-;                      if(fen=-1)    &

96、#160;                    fen=59;                      write_sfm(6,fen);    

97、                  write_com(0x80+0x40+6);                     write_ds(2,fen);     &#

98、160;                             if(numfun=3)                    

99、                     shi-;                      if(shi=-1)    

100、60;                    shi=23;                      write_sfm(3,shi);    &#

101、160;                 write_com(0x80+0x40+3);                      write_ds(4,shi);    

102、;                               if(numfun=4)                 

103、0;                       week-;                      if(week=0)   

104、;                      week=7;                      write_zhou(0x0f,week);  

105、;                    write_com(0x80+0x0f);                      write_ds(6,week); 

106、60;                                 if(numfun=5)               &#

107、160;                         if(nian=0)                       

108、60;                          switch(yue)                       &#

109、160;    case 1:ri-;if(ri=0) ri=31;break;                            case 2:ri-;if(ri=0) ri=29;break;      

110、0;                     case 3:ri-;if(ri=0) ri=31;break;                       &#

111、160;    case 4:ri-;if(ri=0) ri=30;break;                            case 5:ri-;if(ri=0) ri=31;break;      

112、0;                     case 6:ri-;if(ri=0) ri=30;break;                       &#

113、160;    case 7:ri-;if(ri=0) ri=31;break;                            case 8:ri-;if(ri=0) ri=31;break;      

114、0;                     case 9:ri-;if(ri=0) ri=30;break;                       &#

115、160;    case 10:ri-;if(ri=0) ri=31;break;                            case 11:ri-;if(ri=0) ri=30;break;      &#

116、160;                     case 12:ri-;if(ri=0) ri=31;break;                       

117、;                                                   

118、60;   else if(leap&&yue=2)                                          

119、;          ri-;                            if(ri=0)          

120、;                     ri=29;                             

121、60;                 else if(yue=2&&leap=0)                            &#

122、160;                        ri-;                        

123、0;   if(ri=0)                               ri=28;              &

124、#160;                                else                  &

125、#160;    switch(yue)                         case 1:ri-;if(ri=0) ri=31;break;              

126、;           case 3:ri-;if(ri=0) ri=31;break;                         case 4:ri-;if(ri=0) ri=30;break;     

127、;                    case 5:ri-;if(ri=0) ri=31;break;                         case 6:

128、ri-;if(ri=0) ri=30;break;                         case 7:ri-;if(ri=0) ri=31;break;                &#

129、160;        case 8:ri-;if(ri=0) ri=31;break;                         case 9:ri-;if(ri=0) ri=30;break;       &#

130、160;                 case 10:ri-;if(ri=0) ri=31;break;                         case 11:ri-;if(ri=0)

131、ri=30;break;                         case 12:ri-;if(ri=0) ri=31;break;                  &#

132、160;                                  write_nyr(8,ri);             

133、60;        write_com(0x80+0x08);                      write_ds(7,ri);             

134、60;                     if(numfun=6)                            &

135、#160;            yue-;                      if(yue=-1)            

136、0;            yue=12;                      write_nyr(5,yue);            

137、60;         write_com(0x80+0x05);                      write_ds(8,yue);            &#

138、160;                      if(numfun=7)                           

139、              nian-;                      if(nian=-1)           &

140、#160;             nian=99;                      leap=nian%4=0&&nian%100!=0;        

141、;              write_nyr(2,nian);                      write_com(0x80+2);        

142、;              write_ds(9,nian);                                  

143、;   void set_alarm() uchar ashi,afen,amiao;if(timeclk=0)/判斷是否按下鬧鐘設定鍵          delay(5);/延時消抖       if(timeclk=0)                  

144、   while(!timeclk);            anumfun+;/按鍵次數(shù)加1             if(anumfun=1)               &#

145、160;                   flag=1;                   write_com(0x80+0x40+0x0a);       

146、60;           write_com(0x0f);                            if(anumfun=2)      

147、60;                            flag=1;                   write_com(0x80+0x4

148、0+0x07);                   write_com(0x0f);                            

149、;if(anumfun=3)                                   flag=1;            &#

150、160;      write_com(0x80+0x40+0x04);                   write_com(0x0f);                   

151、         if(anumfun=4)                                   flag=0;   

152、60;               anumfun=0;                            if(anumfun!=0)      

153、;   if(timeadd=0)/如果加功能鍵按下                      delay(5);            while(!timeadd);      

154、0;     if(anumfun=1) /設定秒                                    amiao+;      &

155、#160;            if(amiao=60)                      amiao=0;            

156、0;      write_sfm(9,amiao);                   write_com(0x80+0x40+9);                   write_d

157、s(1,amiao);                            if(anumfun=2)                  

158、                 afen+;                   if(afen=60)             

159、;         afen=0;                   write_sfm(6,afen);                   wr

160、ite_com(0x80+0x40+6);                   write_ds(3,afen);                         

161、60;  if(anumfun=3)                                   ashi+;          &

162、#160;        if(ashi=24)                      ashi=0;                 

163、  write_sfm(3,ashi);                   write_com(0x80+0x40+3);                   write_ds(5,ashi);   

164、;                         if(anumfun!=0)         if(timesub=0)              

165、0;      delay(5);            while(!timesub);            if(anumfun=1)                                   amiao-;     &#

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論