找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1518|回复: 0
打印 上一主题 下一主题
收起左侧

四位数码管电子钟单片机程序

[复制链接]
跳转到指定楼层
楼主
ID:201106 发表于 2017-5-20 08:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. //四位数码管电子钟
  2. //应用程序 C
  3. //neo
  4. //V1.1
  5. //MCS-51 12MHZ C语言
  6. //接口说明:  DS1302、DS18B20
  7. *********************************************************************************************/
  8. #include <reg52.h>
  9. #include <intrins.h>
  10. #define uint8 unsigned char
  11. #define uchar unsigned char
  12. #define uint  unsigned int
  13. uchar Disp_Buff[4];
  14. char SB=4;  // clock set time bit
  15. //bit Set_Flag;  // set time flag
  16. bit T=0;  // display Temperature and Time flag         
  17. bit TT=0; // 10S Auto change display Temperature and Time flag
  18. //#define T0_H  0xf0    // 4ms
  19. //#define T0_L  0x60
  20. #define T0_H  0xf5    // 2666us
  21. #define T0_L  0x96
  22. #define ST    20
  23. #define T1_H  0xb1    //20ms
  24. #define T1_L  0xe0
  25. #define NumLed_Bit P2
  26. #define Disp       P1
  27. #define Key        P3
  28. #define Key1 1
  29. #define Key2 2
  30. #define Key3 3
  31. #define Key4 4
  32. #define Key_NULL 0
  33. sbit Beep=P0^7;
  34. void Play(uchar t);
  35. sbit Red_Led=P3^7;
  36. // Driver DS1302
  37. /********************************************************************************************/
  38. sbit RST=P0^0;
  39. sbit IO=P0^1;
  40. sbit SCLK=P0^2;
  41. #define second_write 0x80
  42. #define minute_write 0x82
  43. #define hour_write   0x84
  44. #define week_write   0x8a
  45. #define day_write    0x86
  46. #define month_write  0x88
  47. #define year_write   0x8c
  48. #define second_read 0x81
  49. #define minute_read 0x83
  50. #define hour_read   0x85
  51. #define week_read   0x8b
  52. #define day_read    0x87
  53. #define month_read  0x89
  54. #define year_read   0x8d
  55. #define sclk_high    SCLK=1;
  56. #define sclk_low     SCLK=0;
  57. #define io_high      IO=1;
  58. #define io_low       IO=0;
  59. #define io_read      IO
  60. #define rst_high     RST=1;
  61. #define rst_low      RST=0;
  62. struct {uint8 second;
  63.         uint8 minute;
  64.      uint8 hour;
  65.      uint8 day;
  66.      uint8 week;
  67.   uint8 month;
  68.   uint8 year; } current_time;
  69. /********************************************************************************************/
  70. static void ds1302write(uint8 content)
  71. {
  72. uint8 i;
  73. for(i=8;i>0;i--) { if(content&0x01) io_high
  74.                        else io_low
  75.                     content>>=1; sclk_high  sclk_low
  76.      }
  77. }
  78. /********************************************************************************************/
  79. static uint8 ds1302read(void)
  80. {
  81. uint8 i,readvalue;
  82. io_high
  83. for(i=8;i>0;i--) { readvalue>>=1; if(io_read) readvalue|=0x80;
  84.                                       else     readvalue&=0x7f;
  85.      sclk_high  sclk_low  }
  86. return readvalue;
  87. }
  88. /********************************************************************************************/
  89. void ds1302write_byte (uint8 address,uint8 content)
  90. {
  91. rst_low  sclk_low  rst_high  ds1302write(address);
  92. ds1302write(content); rst_low  sclk_high
  93. }
  94. uint8 ds1302read_byte(uint8 address)
  95. {
  96. uint8 readvalue;
  97. rst_low  sclk_low  rst_high
  98. ds1302write(address);
  99. readvalue=ds1302read();
  100. rst_low  sclk_high
  101. return readvalue;
  102. }
  103. /********************************************************************************************/
  104. void Clock_Init(void)
  105. {
  106. uchar R;
  107. if(ds1302read_byte(0xc1)!=0xf0) {
  108.                                   ds1302write_byte(0x8e,0x00);
  109.              ds1302write_byte(year_write,0x11);
  110.              ds1302write_byte(week_write,0x06);
  111.              ds1302write_byte(month_write,0x04);
  112.              ds1302write_byte(day_write,0x09);
  113.              ds1302write_byte(hour_write,0x23);
  114.              ds1302write_byte(minute_write,0x59);
  115.              ds1302write_byte(second_write,0x30);
  116.         
  117.                                   ds1302write_byte(0x90,0xa5);
  118.                                   ds1302write_byte(0xc0,0xf0);
  119.                                   for (R=0;R<10;R+=2)
  120.               {
  121.              ds1302write_byte(0xc2+R,0);
  122.              }
  123.           ds1302write_byte(0x8e,0x80);
  124.                }
  125. }
  126. /********************************************************************************************/
  127. void Clock_Updata(void)
  128. {
  129. current_time.second=ds1302read_byte(second_read);
  130. current_time.minute=ds1302read_byte(minute_read);
  131. current_time.hour=  ds1302read_byte(hour_read);
  132. current_time.day=   ds1302read_byte(day_read);
  133. current_time.month= ds1302read_byte(month_read);
  134. current_time.week=  ds1302read_byte(week_read);
  135. current_time.year=  ds1302read_byte(year_read);
  136. }
  137. /********************************************************************************************/
  138. void Write_Time(void)
  139. {
  140.   ds1302write_byte(0x8e,0x00);
  141.   ds1302write_byte(0x82,((Disp_Buff[2]<<4)|Disp_Buff[3]));
  142.   ds1302write_byte(0x84,((Disp_Buff[0]<<4)|Disp_Buff[1]));
  143.   ds1302write_byte(0x8e,0x80);
  144.   }
  145. /********************************************************************************************/
  146. void Write_Alarm(void)
  147. {
  148.   ds1302write_byte(0x8e,0x00);
  149.   ds1302write_byte(0xca,((Disp_Buff[2]<<4)|Disp_Buff[3])); // alarm minute
  150.   ds1302write_byte(0xc8,((Disp_Buff[0]<<4)|Disp_Buff[1])); // alarm hour
  151.   ds1302write_byte(0xc6,1);
  152.   ds1302write_byte(0x8e,0x80);
  153. }
  154. /********************************************************************************************/

  155. void Alarm(void)
  156. {
  157. if(ds1302read_byte(0xc7)==1&&
  158.     current_time.minute==ds1302read_byte(0xcb)&&
  159. current_time.hour==ds1302read_byte(0xc9)  )
  160.         {
  161.         ds1302write_byte(0x8e,0x00);
  162.         ds1302write_byte(0xc6,0);
  163.         ds1302write_byte(0x8e,0x80);
  164.         Play(3);
  165.         }
  166. }
  167. /********************************************************************************************/
  168. // DS18B20 driver
  169. sbit io_DQ=P0^6;
  170. #define DQ_HIGH io_DQ=1;
  171. #define DQ_LOW  io_DQ=0;
  172. #define DQ_READ io_DQ
  173. unsigned char Temperature[4];
  174.             
  175. void Delay_10Us (unsigned int Count)
  176. {
  177.   while(--Count)
  178.                 {
  179.         _nop_();  
  180.             }
  181. }

  182. /********************************************************************************************/  
  183. unsigned char Ds18b20_Init(void)
  184.   {
  185.     unsigned char Flag;
  186.         
  187. DQ_HIGH Delay_10Us(3);
  188.     DQ_LOW  Delay_10Us(80);
  189.     DQ_HIGH Delay_10Us(15);
  190.    
  191. Flag=DQ_READ;
  192.     return Flag;
  193. }           
  194. /********************************************************************************************/            
  195. void Write_f(unsigned char cmd)
  196.    {
  197.     unsigned char i;
  198.    
  199. for(i=8;i>0;i--) {
  200.                     EA=0;
  201.         DQ_LOW
  202.                        DQ_READ=cmd&0x01;
  203.                        Delay_10Us(5);
  204.                        DQ_HIGH
  205.                        EA=1;
  206.         cmd>>=1;
  207.         }
  208.         
  209.         }
  210. /********************************************************************************************/         
  211. unsigned char Read_f(void)
  212. {
  213.   unsigned char Read_Value,i;
  214.      
  215.   for (i=8;i>0;i--) {
  216.                       EA=0;
  217.        DQ_LOW
  218.                          Read_Value>>=1;
  219.                          DQ_HIGH
  220.                          if (DQ_READ==1) Read_Value|=0x80;
  221.                          EA=1;
  222.        Delay_10Us(3);
  223.        }
  224.   
  225.   return Read_Value;
  226. }
  227. /********************************************************************************************/  
  228. unsigned int Read_Temp(void)
  229.        {
  230.       unsigned char Temp_H, Temp_L;
  231.          unsigned int  Return_Temp;
  232.          EA=0;      // close interrupt;
  233.    Ds18b20_Init();
  234.          Write_f(0xcc);
  235.          Write_f(0x44);
  236.          Ds18b20_Init();
  237.          Write_f(0xcc);
  238.          Write_f(0xbe);
  239.          Temp_L=Read_f();
  240.          Temp_H=Read_f();
  241.          EA=1;
  242.    Return_Temp=Temp_H;
  243.          Return_Temp<<=8;
  244.          Return_Temp|=Temp_L;
  245.          return Return_Temp;
  246.         }
  247. /********************************************************************************************/         
  248. void Temperature_Update(void)
  249.    {
  250.      unsigned char T_flag=0;
  251.      unsigned int  Temp_Dat;
  252.      float         Temp;
  253.      Temp_Dat=Read_Temp();
  254.      if(Temp_Dat&0xf000) {T_flag=1; Temp_Dat=~Temp_Dat+1; }
  255.      Temp=Temp_Dat*0.0625;
  256.      Temp_Dat=Temp*10;
  257.      Temperature[0]=T_flag;
  258.      Temperature[1]=Temp_Dat/100;
  259.      Temperature[2]=Temp_Dat%100/10;
  260.      Temperature[3]=Temp_Dat%10;
  261.       
  262.   }
  263. /********************************************************************************************/
  264. void Timer0_Init(void)
  265. {
  266.     TMOD|=0x01;
  267.     TH0=T0_H;
  268.     TL0=T0_L;
  269.     EA=1;
  270.     ET0=1;
  271.     TR0=1;
  272. }
  273. /********************************************************************************************/
  274. bit T_10S,T_1S;
  275. bit S;   // shining flag
  276. bit pp=1;      // open or close :
  277. unsigned int ms1,ms2,ms3;
  278. uchar Bit;// Number Led select
  279. uchar code Disp_NumCode[]={0x3F,0x06,0x5B,0x4F,
  280.                            0x66,0x6D,0x7D,0x07,
  281.          0x7F,0x6F,  // dp-a  P07-P00  0-9,
  282.          0x39,   //c 10
  283.          0x37,0x79,0x3F, //NEO  11-13
  284.          0x6D,0x39,0x77, // S,C,A 14-16
  285.          0x5E,0x73,0x71, // d,p,F   17-19
  286.          0x00,     //  " "  20
  287.          0x38,0x08    //   L  21  _ 22
  288.          };
  289.    
  290. /********************************************************************************************/
  291. uchar code Open_Logo[]={11,12,13,20};
  292. uchar code S_C[]={14,22,15,20};
  293. uchar code S_A[]={14,22,16,20};
  294. uchar code d_p[]={17,22,18,20};
  295. uchar code BELL[]={17,12,21,21};
  296. uchar code ON[]= {20,13,11,20};
  297. uchar code OFF[]={20,13,19,19};   
  298. void Put_In(uchar *P)
  299. {
  300. uchar a;
  301. for (a=0;a<4;a++)
  302.     {
  303.      Disp_Buff[a]=P[a];
  304.      }
  305. }
  306. /********************************************************************************************/
  307. void Timer0_Isr(void) interrupt 1           
  308. {
  309. TH0=T0_H;     //4ms
  310. TL0=T0_L;

  311. Disp=0x00;

  312.      /*
  313.          
  314.     switch(Bit) {
  315.                        case 0 : NumLed_Bit=0xfe; break;
  316.               case 1 : NumLed_Bit=0xfd; break;
  317.               case 2 : NumLed_Bit=0xfb; break;
  318.               case 3 : NumLed_Bit=0xf7; break;
  319.               case 4 :  NumLed_Bit=0xf3; break; // display :
  320.               default : break;
  321.              }
  322.       */

  323.         
  324.     switch(Bit) {
  325.                     case 0 :  {
  326.                  if(SB==0)
  327.                            {
  328.                             if (S)     NumLed_Bit=0xfe;
  329.              if(S==0)   NumLed_Bit=0x00;
  330.              }
  331.             else NumLed_Bit=0xfe;
  332.          }break;
  333.                
  334.         case 1 :  {
  335.                     if(SB==1)
  336.                               {
  337.                             if (S)     NumLed_Bit=0xfd;
  338.              if(S==0)   NumLed_Bit=0x00;
  339.              }
  340.               else NumLed_Bit=0xfd;
  341.          }break;
  342.          
  343.         case 2 :  {
  344.                  if(SB==2)
  345.                               {
  346.                             if (S)     NumLed_Bit=0xfb;
  347.              if(S==0)   NumLed_Bit=0x00;
  348.              }
  349.              else NumLed_Bit=0xfb;
  350.          } break;
  351.            
  352.       case 3 : {
  353.                   if(SB==3)
  354.                               {
  355.                             if (S)     NumLed_Bit=0xf7;
  356.              if(S==0)   NumLed_Bit=0x00;
  357.              }
  358.               else NumLed_Bit=0xf7;
  359.        } break;
  360.       
  361.               case 4 : {
  362.                   if(T==0||TT==0)  NumLed_Bit=0xf3;  // display :
  363.          if( T || TT )   NumLed_Bit=0xfb;  // display  .
  364.          } break;
  365.               default : break;
  366.                      }

  367. if(Bit<4) {
  368.               
  369.              Disp=Disp_NumCode[Disp_Buff[Bit]];
  370.        }
  371. else   
  372.         {
  373.      if(pp==1)
  374.           {  
  375.            if (T==0||TT==0)              
  376.                      {
  377.          if(current_time.second%2) Disp=0x80;   
  378.                        else                    Disp=0x00;
  379.        }
  380.      if( T || TT )  Disp=0x80;
  381.       }
  382.      else Disp=0x00;    // close :
  383.        }

  384. if(++Bit>4) Bit=0;



  385. }
  386. /********************************************************************************************/
  387. void Timer1_Init(void)
  388. {
  389.     TMOD|=0x10;
  390.     TH1=T1_H;  //20ms
  391.     TL1=T1_L;
  392.     EA=1;
  393.     ET1=1;
  394.     TR1=1;
  395. }
  396.   
  397. /********************************************************************************************/
  398. uchar Key_Time;
  399. void Timer1_Isr(void) interrupt 3           
  400. {
  401. TH1=T1_H;
  402. TL1=T1_L;
  403. if(Key!=0xff) Key_Time++;
  404. if(++ms1>ST)  { ms1=0;  S=~S;   }   //when set time Shining bit
  405. if(++ms2>=50) { ms2=0;  T_1S=1; }
  406. if(++ms3>500) { ms3=0;  T_10S=1;}
  407. }
  408. /********************************************************************************************/
  409. void DelayM(unsigned int a){//-延时函数 1MS/次
  410. unsigned char i;
  411. while(a--)
  412.    {  
  413.   for(i = 0; i < 125; i++)  
  414.     {}
  415.   }          //i 从0加到125,CPU大概就耗时1毫秒
  416. }
  417. /********************************************************************************************/
  418. void Play(uchar t)
  419. {
  420.   uchar i;
  421.   switch(t) {
  422.              case 1:     
  423.       {  
  424.                     Beep=0;   
  425.      DelayM(100);
  426.                   } break;        
  427.      case 2:
  428.         {
  429.         Beep=0;
  430.      DelayM(400);
  431.         Beep=1;
  432.         DelayM(500);
  433.      Beep=0;
  434.      DelayM(100);
  435.        } break;
  436.     case 3:
  437.        {
  438.         for(i=0;i<20;i++)
  439.      {
  440.      Beep=0;
  441.      DelayM(100);
  442.         Beep=1;
  443.      DelayM(100);
  444.      Beep=0;
  445.      DelayM(100);
  446.      Beep=1;
  447.         DelayM(500);
  448.      }
  449.        } break;
  450.     default : break;
  451.     }
  452. Beep=1;
  453. }
  454. /********************************************************************************************/
  455. uchar Key_Scan(void)
  456. {
  457. static bit Key_Down;
  458. static uchar K;
  459. uchar K_Value=0;
  460. if(Key_Time>250) Key_Time=3;
  461. if(Key_Time>=3&&Key_Down==0)
  462.                  {
  463.                   Key_Time=0;
  464.       Key_Down=1;
  465.       switch(Key)
  466.         {
  467.       case  0xfe : K=1; break;
  468.          case  0xfd : K=2; break;
  469.       case  0xfb : K=3; break;
  470.       case  0xf7 : K=4; break;
  471.       default :    K=0; break;
  472.       }
  473.       }
  474.    

  475. if(Key==0xFF&&Key_Down==1)      
  476.                   {  
  477.      Key_Down=0;
  478.      K_Value=K;
  479.        Play(1);
  480.      }
  481. return K_Value;      
  482. }
  483. /********************************************************************************************/
  484. void Disp_Time(void)
  485. {
  486. Disp_Buff[3]=current_time.minute%16;
  487. Disp_Buff[2]=current_time.minute/16;
  488. Disp_Buff[1]=current_time.hour%16;
  489. Disp_Buff[0]=current_time.hour/16;
  490. }
  491. /********************************************************************************************/
  492. void Disp_Temperature_3bit(void)
  493. {
  494. Disp_Buff[3]=20;
  495. Disp_Buff[2]=10; // display 'c'
  496. Disp_Buff[1]=Temperature[2];
  497. Disp_Buff[0]=Temperature[1];
  498. }
  499. /********************************************************************************************
  500. void Disp_Temperature_4bit(void)
  501. {
  502. Disp_Buff[3]=Temperature[3];
  503. Disp_Buff[2]=10; // display c
  504. Disp_Buff[1]=Temperature[2];
  505. Disp_Buff[0]=Temperature[1];
  506. }
  507. ********************************************************************************************/
  508. uchar Select_M=4;
  509. void MENU (void)
  510. {     
  511.    uchar K;
  512.    char Menu=0;
  513.    pp=0; // close ':'
  514.    while(Menu!=4)
  515.                  {
  516.       K=Key_Scan();
  517.       switch (Menu)
  518.                       {
  519.         case 0 : { Put_In(S_C); } break;
  520.            case 1 : { Put_In(S_A); } break;
  521.         case 2 : { Put_In(d_p); } break;
  522.         case 3 : { Put_In(BELL);}
  523.         default : break;
  524.         }
  525.         
  526.        if(K==Key3) Menu=4;
  527.        if(K==Key2) Menu=(Menu+1)%4;
  528.        if(K==Key1) {
  529.                     Select_M=Menu; Menu=4;
  530.                     }
  531.      }
  532.   pp=1;
  533. }
  534. /********************************************************************************************/
  535. void Set_Time(void)
  536. {
  537. bit Set_Flag=1;  // set time flag
  538. uchar K;
  539. SB=0;
  540. Disp_Time();
  541. T=0;
  542. TT=0;
  543. while(Set_Flag)
  544.               {
  545.       
  546.    
  547.        K=Key_Scan();
  548.     if(K==Key1)                     
  549.           {
  550.           switch(SB)
  551.                                    {
  552.                                  case 0 : {
  553.                                               if(Disp_Buff[1]>3)
  554.                    Disp_Buff[0]=(Disp_Buff[0]+1)%2;
  555.                                                  else
  556.                    Disp_Buff[0]=(Disp_Buff[0]+1)%3;
  557.                 } break;
  558.                                  case 1 : {
  559.                                         if(Disp_Buff[0]==2)
  560.                    Disp_Buff[1]=(Disp_Buff[1]+1)%4;
  561.                 else
  562.                  Disp_Buff[1]=(Disp_Buff[1]+1)%10;
  563.                 }  break;
  564.                                  case 2 : {
  565.                                         Disp_Buff[2]=(Disp_Buff[2]+1)%6;
  566.                                               }  break;
  567.                                  case 3 :    {
  568.                                         Disp_Buff[3]=(Disp_Buff[3]+1)%10;
  569.                                              }  break;
  570.                               default : break;
  571.                                  }
  572.             }
  573.     if(K==Key2) { SB=  (SB+1)%4; }
  574.        if(K==Key3) { Set_Flag=0; SB=4; }
  575.     if(K==Key4) {
  576.                   Set_Flag=0; SB=4; Write_Time(); T_10S=0;
  577.         }
  578.                 }

  579. }
  580. /********************************************************************************************/
  581. void Write_Ds1302Ram(uchar address,uchar dat)
  582. {
  583.   ds1302write_byte(0x8e,0x00);
  584.   ds1302write_byte(address,dat);
  585.   ds1302write_byte(0x8e,0x80);
  586. }
  587. /********************************************************************************************/
  588. uchar dp; // display modle select bit
  589. void Set_Dp(void)
  590. {
  591. bit dp_Set=1;   
  592. uchar K;
  593. pp=0;    // close ':'
  594. //dp=ds1302read_byte(0xc3);
  595. while(dp_Set)
  596. {
  597.   K=Key_Scan();
  598.   switch(dp)
  599.    {
  600.    case 1 : Put_In(ON);  break;
  601.    case 0 : Put_In(OFF); break;
  602.    default : break;
  603.    }
  604.   if(K==Key3)   dp_Set=0;
  605.   if(K==Key2)   dp=(dp+1)%2;
  606.   if(K==Key1) { dp_Set=0;  Write_Ds1302Ram(0xc2,dp);  T=0;  TT=0; T_10S=0; }
  607. }
  608. pp=1;
  609. }

  610. /********************************************************************************************/
  611. uchar Bell_State;
  612. void Set_Bell(void)
  613. {
  614. bit Bell_Set=1;
  615. uchar K;
  616. pp=0;
  617. //Bell_State=ds1302read_byte(0xc5);
  618. while(Bell_Set)
  619. {
  620.   K=Key_Scan();
  621.   switch(Bell_State)
  622.    {
  623.    case 1 : Put_In(ON);  break;
  624.    case 0 : Put_In(OFF); break;
  625.    default : break;
  626.    }
  627.   if(K==Key3)   Bell_Set=0;
  628.   if(K==Key2)   Bell_State=(Bell_State+1)%2;
  629.   if(K==Key1) {
  630.                Write_Ds1302Ram(0xc4,Bell_State); Bell_Set=0; T=0; TT=0; T_10S=0;
  631.       }
  632. }
  633. pp=1;
  634. }

  635. /********************************************************************************************/
  636. void Set_Alarm(void)
  637. {
  638. static bit First_Alarm_Set=0;
  639. bit Set_Flag=1;  // set time flag
  640. uchar K;
  641. SB=0;
  642. T=0;
  643. TT=0;

  644. if(First_Alarm_Set)
  645. {
  646.   Disp_Buff[0]=ds1302read_byte(0xc9)/16;    //alarm hour
  647.   Disp_Buff[1]=ds1302read_byte(0xc9)%16;
  648.   Disp_Buff[2]=ds1302read_byte(0xcb)/16;    //alarm minute
  649.   Disp_Buff[3]=ds1302read_byte(0xcb)%16;
  650.   }
  651.   else  Disp_Time();
  652. while(Set_Flag)
  653.               {
  654.       
  655.    
  656.        K=Key_Scan();
  657.     if(K==Key1)                     
  658.           {
  659.           switch(SB)
  660.                                   {
  661.                                  case 0 : {
  662.                                               if(Disp_Buff[1]>3)
  663.                    Disp_Buff[0]=(Disp_Buff[0]+1)%2;
  664.                                                  else
  665.                    Disp_Buff[0]=(Disp_Buff[0]+1)%3;
  666.                 } break;
  667.                                  case 1 : {
  668.                                         if(Disp_Buff[0]==2)
  669.                    Disp_Buff[1]=(Disp_Buff[1]+1)%4;
  670.                 else
  671.                  Disp_Buff[1]=(Disp_Buff[1]+1)%10;
  672.                 }  break;
  673.                                  case 2 : {
  674.                                         Disp_Buff[2]=(Disp_Buff[2]+1)%6;
  675.                                               }  break;
  676.                                  case 3 :    {
  677.                                         Disp_Buff[3]=(Disp_Buff[3]+1)%10;
  678.                                              }  break;
  679.                               default : break;
  680.                                  }
  681.             }
  682.     if(K==Key2) { SB=  (SB+1)%4; }
  683.        if(K==Key3) { Set_Flag=0; SB=4; }
  684.     if(K==Key4) {
  685.         Set_Flag=0; SB=4;   
  686.         First_Alarm_Set=1;
  687.         Write_Alarm(); T_10S=0;
  688.         }
  689.                 }

  690. }
  691. /********************************************************************************************/
  692. /*
  693. void Ds1302Ram_Init(void)
  694. {
  695. uchar i;
  696. //for(i=0xc3;i<0xc7;i+=2)
  697. i=ds1302read_byte(0xc3);
  698.      if(i!=0||i!=1)
  699.         {
  700.          Write_Ds1302Ram(0xc2,0);
  701.         }
  702. i=ds1302read_byte(0xc5);
  703.      if(i!=0||i!=1)
  704.         {
  705.          Write_Ds1302Ram(0xc4,0);
  706.         }  
  707. } */
  708. /********************************************************************************************/
  709. void main()
  710. {
  711. uchar K;
  712. Key=0xff;
  713. Timer0_Init();
  714. Timer1_Init();
  715. Clock_Init();

  716. //Ds1302Ram_Init();
  717. Put_In(Open_Logo);
  718. Play(1);
  719. DelayM(3000);

  720. dp=ds1302read_byte(0xc3);
  721. Bell_State=ds1302read_byte(0xc5);
  722. Clock_Updata();
  723. while(1)
  724.   {
  725.    //if(T_1S) {  T_1S=0;  Clock_Updata(); Temperature_Update(); }
  726.    
  727.    Clock_Updata();
  728.    if(current_time.minute==0&&
  729.       current_time.second==0&&  
  730. Bell_State==1)
  731.   { DelayM(1000); Play(2);  }
  732.    
  733.    
  734.    K=Key_Scan();
  735.    if(K==4) MENU();
  736.    if(K==1&&dp==0) T=~T;
  737.    
  738. switch (Select_M)
  739.                  {
  740.       case 0 : { Set_Time();  Select_M=4; } break;
  741.       case 1 : { Set_Alarm(); Select_M=4; } break;
  742.       case 2 : { Set_Dp();    Select_M=4; } break;
  743.       case 3 : { Set_Bell();  Select_M=4; };break;
  744.       default : break;
  745.       }
  746.    
  747.    if(T_10S==1&&dp) { TT=~TT;  T_10S=0; }
  748.    
  749.    if(TT==0&&dp)
  750.              {
  751.                
  752.      Disp_Time();
  753.               }
  754.    if(TT&&dp)
  755.             {
  756.        Temperature_Update();
  757.     Disp_Temperature_3bit();
  758.              }
  759.    
  760.    if(T==0&&dp==0)
  761.              {
  762.                
  763.      Disp_Time();
  764.               }
  765.    if(T&&dp==0)
  766.              {
  767.               Temperature_Update();
  768.      Disp_Temperature_3bit();
  769.               }
  770.    Alarm();
  771.    }
  772. }
  773. /***********
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表