找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4217|回复: 0
收起左侧

可修改时间和日期的DS1302C语言程序(分屏)

[复制链接]
ID:113276 发表于 2016-4-10 17:49 | 显示全部楼层 |阅读模式
比较完整的可修改日期时间的程序,延迟程序用unsigned int us,则温度显示00,显示不正常,所以,延迟不能用int做变量!电路图在后面.



  1. #include"reg52.h"
  2. #include"intrins.h"
  3. #define uchar unsigned char
  4. sbit rs=P2^0;
  5. sbit rw=P2^1;
  6. sbit en=P2^2;
  7. sbit rst =P2^3;
  8. sbit sclk=P2^4;
  9. sbit DI  =P2^5;
  10. sbit ds18b20=P2^6;
  11. sbit TOK=P2^7;
  12. sbit A7=ACC^7;
  13. sbit A0=ACC^0;
  14. sbit B0=B^0;
  15. uchar tt0[]="Time:";
  16. uchar tt1[]="Data:";
  17. uchar tt2[]="week:";
  18. uchar tt3[]="temp:";
  19. static char ch[7][3]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
  20. unsigned char TT,temp1,KK;
  21. unsigned char temp2;
  22. uchar ddd0,ddd1,adr,td,ddd,jz,xx;
  23. void delay(unsigned char us)
  24. {  
  25.   while(us--);
  26. }
  27. void delayms(unsigned char us)
  28. {  
  29.         char a,b;
  30.   while(us--)
  31.         {
  32.    for(a=0;a<50;a++)
  33.                 for(b=0;b<60;b++);
  34.   }
  35. }
  36. bit Reset(void)
  37. {
  38.    bit k;
  39.    ds18b20=0;   
  40.    delay(145);     
  41.    ds18b20=1;      
  42.    delay(10);   
  43.    k=ds18b20;
  44.    delay(90);
  45.    return k;
  46. }
  47. //---------------------------
  48. unsigned char ReadByte(void)
  49. {
  50.    unsigned char j,buf=0;
  51.    for(j=0;j<8;j++)
  52.    {
  53.         buf=buf>>1;
  54.         ds18b20=0;
  55.         _nop_();
  56.         _nop_();
  57.         ds18b20=1;
  58.         _nop_();
  59.         _nop_();
  60.         _nop_();
  61.         _nop_();
  62.         _nop_();
  63.         _nop_();
  64.         if(ds18b20==1)
  65.             buf|=0x80;
  66.         delay(8);
  67.                   
  68.      }
  69.    return buf;
  70. }
  71. //-------------------------------
  72. void WriteByte(unsigned char dat)
  73. {
  74.     unsigned char j;
  75.     for(j=0;j<8;j++)
  76.      {            
  77.        if(dat&0x01)
  78.          {      
  79.             ds18b20=0;
  80.             _nop_();
  81.             _nop_();
  82.             ds18b20=1;
  83.             delay(10);
  84.          }
  85.       else
  86.          {            
  87.             ds18b20=0;
  88.             delay(10);
  89.             ds18b20=1;
  90.             _nop_();
  91.             _nop_();
  92.          }
  93.     dat=dat>>1;
  94. }
  95. }
  96. //------------------
  97. bit Convert(void)
  98. {   
  99. if(Reset()==0)
  100.      {  
  101.         WriteByte(0xcc);
  102.         WriteByte(0x44);
  103.         return 1;
  104.      }
  105. else   
  106.      {   
  107.         return 0;
  108.      }
  109. }
  110. //---------------------------------------
  111. void ReadFlash(void)
  112. {   
  113. unsigned char Lsb,Msb;
  114.     if(Reset()==0)
  115.       {
  116.         WriteByte(0xcc);
  117.         WriteByte(0xbe);
  118.         Lsb=ReadByte();
  119.         Msb=ReadByte();
  120.         temp1=Lsb;//L 8bit
  121.         temp2=Msb;//H 8bit
  122.       }
  123.      else
  124.       {
  125.         temp1=0;
  126.         temp2=0;
  127.       }
  128. }
  129. void w1602(uchar dat,bit r)
  130. {
  131.              uchar n0;
  132.                                 rs=r;
  133.                                 rw=0;
  134.                                 P1=dat;
  135.                                 en=0;
  136.              n0=3;
  137.                                 while(n0--);
  138.                                 en=1;
  139.              n0=6;
  140.                                 while(n0--);
  141.                                 en=0;
  142. }
  143. void init1602()
  144. {
  145.         w1602(0x38,0);
  146.                                 w1602(0x06,0);
  147.                                 w1602(0x0c,0);
  148.                                 w1602(0x01,0);
  149. }
  150. void w1302(uchar addr,dat)
  151. {
  152. uchar n;
  153. rst=0;
  154. sclk=0;
  155. rst=1;
  156. for(n=0;n<8;n++)
  157.     {
  158. B=addr>>n;
  159. sclk=0;
  160. DI=B0;
  161. sclk=1;
  162.     }
  163. for(n=0;n<8;n++)
  164.     {
  165.       B=dat>>n;
  166. sclk=0;
  167. DI=B0;
  168. sclk=1;
  169.     }
  170. rst=0;
  171. }
  172. uchar r1302(uchar addr)
  173. {
  174.         uchar n;
  175.                                 rst=0;
  176.                                 sclk=0;
  177.                                 _nop_();
  178.                                 rst=1;
  179.                                 B=addr;
  180.                                 for(n=0;n<8;n++)
  181.                                                 {
  182.                                                         sclk=0;
  183.                                                         DI=B0;
  184.                                                         sclk=1;
  185.                                                         B=B>>1;
  186.                                                 }
  187.                                 for(n=0;n<8;n++)
  188.                                                 {
  189.                                                         A7=DI;
  190.                                                         sclk=1;
  191.                                                         ACC=ACC>>1;
  192.                                                         sclk=0;
  193.                                                 }
  194.                                 rst=0;
  195.                                 return(ACC);
  196. }
  197. void change()
  198. {
  199.              
  200.               ddd0=0x0f & r1302(adr);
  201.                                 ddd1=0x0f & (r1302(adr)>>4);
  202.          w1602(0x30+ddd1,1);
  203.                                 w1602(0x30+ddd0,1);
  204.              
  205.                                 if(TOK==0)
  206.                                 {
  207.                                         delayms(15);
  208.                                   if(TOK==0)
  209.                                         {
  210.                                                 xx++;
  211.                                           if(xx==jz)xx=1;
  212.                                                 ddd0=xx%10;
  213.                                                 ddd1=xx/10;
  214.                                   }
  215.                                 }
  216. }
  217. void main()
  218. {
  219.    uchar i,n,ttT;
  220.         unsigned int m;
  221.    init1602();
  222.         EA=1;
  223.         EX0=1;
  224.         EX1=1;
  225.         PX0=1;
  226.         IT0=1;
  227.         IT1=1;
  228.    while(1)
  229.    {         
  230.           m=600;
  231.           while(m--)
  232.           {
  233.                                                 w1602(0x80,0);
  234.                                                 for(i=0;i<5;i++)
  235.                                                 w1602(tt0[i],1);
  236.                                                 w1602(0x30+(r1302(0x85)>>4 & 0x0f),1);
  237.                                                 w1602(0x30+(r1302(0x85) & 0x0f),1);
  238.                                                 w1602(0x2d,1);
  239.                                                 w1602(0x30+(r1302(0x83)>>4 & 0x0f),1);
  240.                                                 w1602(0x30+(r1302(0x83) & 0x0f),1);
  241.                                                 w1602(0x2d,1);
  242.                                                 w1602(0x30+(r1302(0x81)>>4 & 0x0f),1);
  243.                                                 w1602(0x30+(r1302(0x81) & 0x0f),1);
  244.                                                 w1602(0xc0,0);
  245.                                                 for(i=0;i<5;i++)
  246.                                                 w1602(tt1[i],1);
  247.                                                 w1602(0x30+(r1302(0x87)>>4 & 0x0f),1);
  248.                                                 w1602(0x30+(r1302(0x87) & 0x0f),1);
  249.                                                 w1602(0x2d,1);
  250.                                                 w1602(0x30+(r1302(0x89)>>4 & 0x0f),1);
  251.                                                 w1602(0x30+(r1302(0x89) & 0x0f),1);
  252.                                                 w1602(0x2d,1);
  253.                                                 w1602(0x30+(r1302(0x8d)>>4 & 0x0f),1);
  254.                                                 w1602(0x30+(r1302(0x8d) & 0x0f),1);
  255.                                         }
  256.                                         w1602(0x01,0);
  257.                                        
  258.                                         m=800;
  259.           while(m--)
  260.           {
  261.                                                 if(Convert()==1)      
  262.               {      
  263.                 ReadFlash();               
  264.                 TT=(temp2<<4)|(temp1>>4);
  265.                 ttT=(~TT & 0x3F)+1;                                                               
  266.               }
  267.                                          w1602(0x83,0);     //week
  268.                                                 for(i=0;i<5;i++)  
  269.                                                 w1602(tt2[i],1);
  270.                                                 for(n=0;n<3;n++)
  271.                                          w1602(ch[(r1302(0x8B) & 0x07)-1][n],1);
  272.                                                        
  273.                                          w1602(0xc3,0);     //temp
  274.                                          for(i=0;i<5;i++)
  275.                                              w1602(tt3[i],1);
  276.                                                          w1602(0x20,1);
  277.                                          if(temp2 & 0x80==0x80)   //-
  278.                                            {
  279.                                               w1602(0x2d,1);
  280.                                                                 w1602(0x30+ttT/10,1);
  281.                                               w1602(0x30+ttT%10,1);
  282.                                                         }
  283.                                          else               //+
  284.               {
  285.                                                                        
  286.                                                                         w1602(0x30+TT/10,1);
  287.                                                                         w1602(0x30+TT%10,1);                                                                 
  288.                                                         }
  289.                                                 w1602(0x22,1);
  290.                                                 w1602(0x43,1);
  291.            }
  292.            w1602(0x01,0);
  293.        }
  294. }
  295. void zz() interrupt 0
  296.         {
  297.     KK++;
  298.   }
  299. void tz() interrupt 2
  300.         {
  301.                
  302.                 w1602(0x01,0);
  303.                 do{
  304.                         //////////////////////
  305.                         if(KK==0)
  306.                         {         
  307.                                 w1602(0x80,0);
  308.          w1602(0x72,1);
  309.          w1602(0x65,1);
  310.          w1602(0x61,1);
  311.          w1602(0x64,1);
  312.          w1602(0x79,1);
  313.                                  
  314.          w1602(0x2e,1);
  315.          w1602(0x2e,1);
  316.          w1602(0x2e,1);                         
  317.        }
  318.                         //////////////////////
  319.                         if(KK==1)  //sec
  320.                         {
  321.                                 adr=0x81;
  322.          jz=60;                                 
  323.                                 w1602(0x80,0);
  324.                                 w1602(0x53,1);
  325.                                 w1602(0x65,1);
  326.                                 w1602(0x63,1);
  327.                                 w1602(0x20,1);
  328.                                 w1602(0x20,1);
  329.                                 w1602(0x20,1);
  330.                                 w1602(0x20,1);
  331.                                 w1602(0x20,1);
  332.                                  
  333.                                 w1602(0xc0,0);
  334.                                 change();
  335.          ddd=(ddd1<<4)+ddd0;
  336.                                 w1302(0x80,ddd);
  337.        }
  338.                         /////////////////////////////
  339.                         if(KK==2)//min
  340.                         {
  341.                                 adr=0x83;
  342.                                 jz=60;
  343.                                 w1602(0x80,0);
  344.                                 w1602(0x6d,1);
  345.                                 w1602(0x69,1);
  346.                                 w1602(0x6e,1);                                 
  347.                                 w1602(0x20,1);
  348.                                 w1602(0x20,1);
  349.                                 w1602(0x20,1);
  350.                                 w1602(0x20,1);
  351.                                 w1602(0x20,1);
  352.                                  
  353.                                 w1602(0xC0,0);
  354.                                 change();
  355.          ddd=(ddd1<<4)+ddd0;
  356.                                 w1302(0x82,ddd);
  357.        }
  358.                         ////////////////////////
  359.                         if(KK==3)//hour
  360.                         {
  361.                                 adr=0x85;
  362.                                 jz=24;
  363.          w1602(0x80,0);
  364.                                 w1602(0x68,1);
  365.                                 w1602(0x6f,1);
  366.                                 w1602(0x75,1);
  367.                                 w1602(0x72,1);
  368.                                 w1602(0x20,1);
  369.                                 w1602(0x20,1);
  370.                                 w1602(0x20,1);
  371.                                 w1602(0x20,1);
  372.                                  
  373.                                 w1602(0xc0,0);
  374.                                 change();
  375.           ddd=(ddd1<<4)+ddd0;
  376.                                  w1302(0x84,ddd);
  377.        }
  378.                         //////////////////////////
  379.                         if(KK==4)//day
  380.                         {
  381.                                 adr=0x87;
  382.                                 jz=32;
  383.          w1602(0x80,0);
  384.                                 w1602(0x44,1);
  385.                                 w1602(0x61,1);
  386.                                 w1602(0x79,1);
  387.                                 w1602(0x20,1);
  388.                                 w1602(0x20,1);
  389.                                 w1602(0x20,1);
  390.                                 w1602(0x20,1);
  391.                                  
  392.                                 w1602(0xc0,0);
  393.                                 change();
  394.           ddd=(ddd1<<4)+ddd0;
  395.                                  w1302(0x86,ddd);
  396.                         }
  397.                         //////////////////////
  398.        if(KK==5)//month
  399.                         {
  400.                                 adr=0x89;
  401.                                 jz=13;
  402.          w1602(0x80,0);
  403.                                 w1602(0x6d,1);
  404.                                 w1602(0x6f,1);
  405.                                 w1602(0x6e,1);
  406.                                 w1602(0x74,1);
  407.                                 w1602(0x68,1);
  408.                                 w1602(0x20,1);
  409.                                 w1602(0x20,1);
  410.                                 w1602(0x20,1);
  411.                                  
  412.                                 w1602(0xc0,0);
  413.                                 change();
  414.           ddd=(ddd1<<4)|ddd0;
  415.                                  w1302(0x88,ddd);
  416.                         }
  417.                         /////////////////////////
  418.        if(KK==6)//year
  419.                         {
  420.                                 adr=0x8d;
  421.                                 jz=100;
  422.          w1602(0x80,0);
  423.                                 w1602(0x79,1);
  424.                                 w1602(0x65,1);
  425.                                 w1602(0x61,1);
  426.                                 w1602(0x72,1);
  427.                                 w1602(0x20,1);
  428.                                 w1602(0x20,1);
  429.                                 w1602(0x20,1);
  430.                                  
  431.                                 w1602(0xc0,0);
  432.                                 change();
  433.           ddd=(ddd1<<4)|ddd0;
  434.                                  w1302(0x8c,ddd);
  435.                         }
  436.                         ///////////////////////
  437.                         //ddd0=0;
  438.        if(KK==7)//week
  439.                         {
  440.                                 adr=0x8B;
  441.                                 jz=8;
  442.                                 w1602(0x80,0);
  443.                                 w1602(0x57,1);
  444.                                 w1602(0x65,1);
  445.                                 w1602(0x65,1);
  446.                                 w1602(0x6b,1);
  447.                                 w1602(0x20,1);
  448.                                 w1602(0x20,1);
  449.                                 w1602(0x20,1);
  450.                                  
  451.                                 w1602(0xc0,0);
  452.                                 change();
  453.          w1302(0x8A,ddd0);
  454.        }
  455.       }while(KK<8);
  456.                         w1602(0x01,0);
  457.                         KK=0;
  458.                 }
复制代码





  1. /////////////////////可修改日期//////////////////
  2. #include<reg52.h>
  3. #include<INTRINS.H>
  4. /************************************************************/
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. #define write_second          0x80      //??????,???(??)
  8. #define write_minute           0x82      //??????
  9. #define write_hour              0x84      //??????,12????,?0?????0x80(12????????)?
  10. #define read_second          0x81      //?,?????????
  11. #define read_minute           0x83      //?,?????????
  12. #define read_hour              0x85       //?,?????????
  13. #define write_day              0x86
  14. #define read_day               0x87
  15. #define write_month          0x88
  16. #define read_month          0x89
  17. #define write_week           0x8A
  18. #define read_week           0x8B
  19. #define write_year            0x8C
  20. #define read_year            0x8D

  21. #define write_protect 0x8E
  22. #define DD=0x2F;
  23. /************************************************************/
  24. sbit ACC_7=ACC^7;
  25. sbit SCLK =P2^2;
  26. sbit DIO  =P2^1;
  27. sbit CE   =P2^3;     
  28. sbit rs   =P2^5;
  29. sbit rw   =P2^6;
  30. sbit e    =P2^7;
  31. sbit B0   =B^0;

  32. /********************************/
  33. uchar dd[2][5]={"Time:","Date:"};
  34. void delay(char us)
  35. {
  36.      
  37.      while(us--);
  38.         
  39. }
  40. /**********/
  41. void write1302(unsigned char addr,dat)
  42. {
  43.    unsigned char i;
  44.    CE=0;
  45.    SCLK=0;
  46.    CE=1;
  47. B=addr;
  48.    for(i=0;i<8;i++)  //????
  49.       {
  50.          SCLK=0;
  51.          DIO=B0;
  52.          B>>=1;
  53.          SCLK=1;
  54.      }
  55.    B=dat;
  56.    for(i=0;i<8;i++)  //????
  57.       {
  58.         SCLK=0;
  59.         DIO=B0;
  60.         B=B>>1;
  61.         SCLK=1;
  62.      }
  63. }
  64. void w1602d(uchar dat)
  65. {
  66.    rs=1;
  67. rw=0;
  68. e=0;
  69. P1=dat;
  70. delay(4);
  71. e=1;
  72. delay(8);
  73. e=0;
  74. }
  75. void w1602c(uchar dat)
  76. {
  77.    rs=0;
  78. rw=0;
  79. e=0;
  80. P1=dat;
  81. delay(4);
  82. e=1;
  83. delay(8);
  84. e=0;
  85. }
  86. void init1602()
  87. {
  88.    w1602c(0x38);
  89. w1602c(0x06);
  90. w1602c(0x0c);
  91. w1602c(0x01);
  92. }
  93. unsigned char r1302(unsigned char addr)
  94. {
  95.    unsigned char i;
  96.    CE=0;
  97.    SCLK=0;
  98.    CE=1;
  99. B=addr;
  100.    for(i=8;i>0;i--)//?????????
  101.       {
  102.        SCLK =0;
  103.        DIO=B0;
  104.        B=B>>1;
  105.        SCLK=1;
  106.      }

  107. for(i=8;i>0;i--)//
  108.     {
  109.        ACC_7=DIO;
  110.        SCLK=1;
  111.        ACC>>=1;
  112.        SCLK=0;      
  113.      }
  114. CE=0;
  115. return(ACC);
  116. }
  117. /////////////////////////////////////
  118. void Initial(void)
  119. {
  120.         write1302(write_protect,0x00);
  121.         write1302(write_second,0x56);
  122.         write1302(write_minute,0x34);
  123.         write1302(write_hour,0x12);
  124.         write1302(write_protect,0x80);
  125. }
  126. /////////////////////
  127. void main(void)
  128. {
  129.     unsigned char i;
  130. init1602();
  131.     Initial();
  132.     write1302(write_second,0x45);  //
  133.     write1302(write_minute,0x29);  //??59??
  134.     write1302(write_hour,0x21); //??0x80
  135.     write1302(write_year,0x12);  //15?
  136. write1302(write_day,0x23);
  137.     write1302(write_week,0x3);//??
  138.     write1302(write_month,0x05);//10?
  139.     while(1)
  140.        {
  141.           w1602c(0x80);
  142.           for(i=0;i<5;i++)
  143.             w1602d(dd[0][i]);
  144. w1602d(((r1302(0x85)>>4) & 0x0f)+0x30);
  145. w1602d((r1302(0x85) & 0x0f)+0x30);
  146. w1602d(0x2d);
  147. w1602d(((r1302(0x83)>>4) & 0x0f)+0x30);
  148. w1602d((r1302(0x83) & 0x0f)+0x30);
  149. w1602d(0x2d);
  150. w1602d(((r1302(0x81)>>4) & 0x0f)+0x30);
  151. w1602d((r1302(0x81) & 0x0f)+0x30);

  152.           w1602c(0xc0);
  153.            for(i=0;i<5;i++)
  154.             w1602d(dd[1][i]);
  155. w1602d(((r1302(0x87)>>4) & 0x0f)+0x30);
  156. w1602d((r1302(0x87) & 0x0f)+0x30);
  157. w1602d(0x2d);
  158. w1602d(((r1302(0x89)>>4) & 0x0f)+0x30);
  159. w1602d((r1302(0x89) & 0x0f)+0x30);
  160. w1602d(0x2d);
  161. w1602d(((r1302(0x8d)>>4) & 0x0f)+0x30);
  162. w1602d((r1302(0x8d) & 0x0f)+0x30);
  163. }
  164. }

  165. ////////////////////////////////可调整日期时间程序//////////
  166. #include"reg52.h"
  167. #include"intrins.h"
  168. #define uchar unsigned char
  169. sbit rs=P2^0;
  170. sbit rw=P2^1;
  171. sbit en=P2^2;
  172. sbit rst =P2^3;
  173. sbit sclk=P2^4;
  174. sbit DI  =P2^5;
  175. sbit ds18b20=P2^6;
  176. sbit TOK=P2^7;
  177. sbit A7=ACC^7;
  178. sbit A0=ACC^0;
  179. sbit B0=B^0;
  180. uchar tt0[]="Time:";
  181. uchar tt1[]="Data:";
  182. uchar tt2[]="week:";
  183. uchar tt3[]="temp:";
  184. static char ch[7][3]={"Sun","Mon","Tue","Wed","Thu","Tri","Sat"};
  185. unsigned char TT,temp1,KK;
  186. unsigned char temp2;
  187. void delay(unsigned int us)
  188. {  
  189.   while(us--);
  190. }
  191. bit Reset(void)
  192. {
  193.    bit k;
  194.    ds18b20=0;   
  195.    delay(145);     
  196.    ds18b20=1;      
  197.    delay(10);   
  198.    k=ds18b20;
  199.    delay(90);
  200.    return k;
  201. }
  202. //---------------------------
  203. unsigned char ReadByte(void)
  204. {
  205.    unsigned char j,buf=0;
  206.    for(j=0;j<8;j++)
  207.    {
  208.         buf=buf>>1;
  209.         ds18b20=0;
  210.         _nop_();
  211.         _nop_();
  212.         ds18b20=1;
  213.         _nop_();
  214.         _nop_();
  215.         _nop_();
  216.         _nop_();
  217.         _nop_();
  218.         _nop_();
  219.         if(ds18b20==1)
  220.             buf|=0x80;
  221.         delay(8);
  222.                   
  223.      }
  224.    return buf;
  225. }
  226. //-------------------------------
  227. void WriteByte(unsigned char dat)
  228. {
  229.     unsigned char j;
  230.     for(j=0;j<8;j++)
  231.      {            
  232.        if(dat&0x01)
  233.          {      
  234.             ds18b20=0;
  235.             _nop_();
  236.             _nop_();
  237.             ds18b20=1;
  238.             delay(10);
  239.          }
  240.       else
  241.          {            
  242.             ds18b20=0;
  243.             delay(10);
  244.             ds18b20=1;
  245.             _nop_();
  246.             _nop_();
  247.          }
  248.     dat=dat>>1;
  249. }
  250. }
  251. //------------------
  252. bit Convert(void)
  253. {   
  254. if(Reset()==0)
  255.      {  
  256.         WriteByte(0xcc);
  257.         WriteByte(0x44);
  258.         return 1;
  259.      }
  260. else   
  261.      {   
  262.         return 0;
  263.      }
  264. }
  265. //---------------------------------------
  266. void ReadFlash(void)
  267. {   
  268. unsigned char Lsb,Msb;
  269.     if(Reset()==0)
  270.       {
  271.         WriteByte(0xcc);
  272.         WriteByte(0xbe);
  273.         Lsb=ReadByte();
  274.         Msb=ReadByte();
  275.         temp1=Lsb;//L 8bit
  276.         temp2=Msb;//H 8bit
  277.       }
  278.      else
  279.       {
  280.         temp1=0;
  281.         temp2=0;
  282.       }
  283. }
  284. void w1602(uchar dat,bit r)
  285. {
  286. rs=r;
  287. rw=0;
  288. P1=dat;
  289. en=0;
  290. delay(2);
  291. en=1;
  292. delay(4);
  293. en=0;
  294. }
  295. void init1602()
  296. {
  297.         w1602(0x38,0);
  298. w1602(0x06,0);
  299. w1602(0x0c,0);
  300. w1602(0x01,0);
  301. }
  302. uchar r1302(uchar addr)
  303. {
  304.         uchar n;
  305. rst=0;
  306. sclk=0;
  307. _nop_();
  308. rst=1;
  309. B=addr;
  310. for(n=0;n<8;n++)
  311. {
  312. sclk=0;
  313. DI=B0;
  314. sclk=1;
  315. B=B>>1;
  316. }
  317. for(n=0;n<8;n++)
  318. {
  319. A7=DI;
  320. sclk=1;
  321. ACC=ACC>>1;
  322. sclk=0;
  323. }
  324. rst=0;
  325. return(ACC);
  326. }
  327. void w1302(uchar addr,dat)
  328. {
  329. uchar n;
  330. rst=0;
  331. sclk=0;
  332. rst=1;
  333. for(n=0;n<8;n++)
  334.     {
  335. B=addr>>n;
  336. sclk=0;
  337. DI=B0;
  338. sclk=1;
  339.     }
  340. for(n=0;n<8;n++)
  341.     {
  342.       B=dat>>n;
  343. sclk=0;
  344. DI=B0;
  345. sclk=1;
  346.     }
  347. rst=0;
  348. }

  349. void main()
  350. {
  351.    uchar i,n,ttT;
  352. unsigned int m;
  353.    init1602();
  354. EA=1;
  355. EX0=1;
  356. EX1=1;
  357. IT0=1;
  358. IT1=1;
  359. PX0=1;
  360.    while(1)
  361.    {         
  362.           m=1500;
  363.           while(m--)
  364.           {
  365. w1602(0x80,0);
  366. for(i=0;i<5;i++)
  367. w1602(tt0[i],1);
  368. w1602(0x30+(r1302(0x85)>>4 & 0x0f),1);
  369. w1602(0x30+(r1302(0x85) & 0x0f),1);
  370. w1602(0x2d,1);
  371. w1602(0x30+(r1302(0x83)>>4 & 0x0f),1);
  372. w1602(0x30+(r1302(0x83) & 0x0f),1);
  373. w1602(0x2d,1);
  374. w1602(0x30+(r1302(0x81)>>4 & 0x0f),1);
  375. w1602(0x30+(r1302(0x81) & 0x0f),1);
  376. w1602(0xc0,0);
  377. for(i=0;i<5;i++)
  378. w1602(tt1[i],1);
  379. w1602(0x30+(r1302(0x87)>>4 & 0x0f),1);
  380. w1602(0x30+(r1302(0x87) & 0x0f),1);
  381. w1602(0x2d,1);
  382. w1602(0x30+(r1302(0x89)>>4 & 0x0f),1);
  383. w1602(0x30+(r1302(0x89) & 0x0f),1);
  384. w1602(0x2d,1);
  385. w1602(0x30+(r1302(0x8d)>>4 & 0x0f),1);
  386. w1602(0x30+(r1302(0x8d) & 0x0f),1);
  387. }
  388. w1602(0x01,0);
  389. m=800;
  390.           while(m--)
  391.           {
  392. if(Convert()==1)      
  393.               {      
  394.                 ReadFlash();               
  395.                 TT=(temp2<<4)|(temp1>>4);
  396.                 ttT=(~TT & 0x3F)+1;
  397.               }
  398. w1602(0x80,0);     //week
  399. for(i=0;i<5;i++)  
  400. w1602(tt2[i],1);
  401. for(n=0;n<3;n++)
  402. w1602(ch[(r1302(0x8B) & 0x07)-1][n],1);
  403. w1602(0xc0,0);     //temp
  404. for(i=0;i<5;i++)
  405.      w1602(tt3[i],1);
  406. if(temp2 & 0x80==0x80)   //-
  407.    {
  408.       w1602(0x2d,1);
  409. w1602(0x30+ttT/10,1);
  410.       w1602(0x30+ttT%10,1);
  411. }
  412. else               //+
  413.               {
  414. w1602(0x30+TT/10,1);
  415. w1602(0x30+TT%10,1);
  416. }
  417.            }
  418.            w1602(0x01,0);
  419.        }
  420. }
  421. void zz() interrupt 0
  422. {
  423.     KK++;
  424.   }
  425. void tz() interrupt 2
  426. {
  427. uchar ddd,ddd0,ddd1,td;
  428. w1602(0x01,0);
  429.     do{
  430. //////////////////////
  431. if(KK==0)
  432. {         
  433. w1602(0x80,0);
  434.          w1602(0x72,1);
  435.          w1602(0x65,1);
  436.          w1602(0x61,1);
  437.          w1602(0x64,1);
  438.          w1602(0x79,1);

  439.          w1602(0x2e,1);
  440.          w1602(0x2e,1);
  441.          w1602(0x2e,1);
  442.        }
  443. //////////////////////
  444. if(KK==1)  //sec
  445. {
  446.          ddd0=0x0f & r1302(0x81);
  447. ddd1=0x0f & (r1302(0x81)>>4);
  448. w1602(0x80,0);
  449. w1602(0x53,1);
  450. w1602(0x65,1);
  451. w1602(0x63,1);
  452. w1602(0x20,1);
  453. w1602(0x20,1);
  454. w1602(0x20,1);
  455. w1602(0x20,1);
  456. w1602(0x20,1);

  457. w1602(0xc0,0);
  458. w1602(0x30+ddd1,1);
  459. w1602(0x30+ddd0,1);
  460. if(TOK==0)
  461. {
  462. delay(30000);
  463.   if(TOK==0)
  464. {
  465. ddd0++;
  466.   if(ddd0==10)
  467. {
  468. ddd0=0;
  469. ddd1++;
  470. if(ddd1>5)
  471.                 {
  472.                   ddd1=0;
  473. ddd0=0;
  474.                 }
  475. }
  476.   }
  477. }
  478.           ddd=(ddd1<<4)+ddd0;
  479. w1302(0x80,ddd);
  480.        }
  481. /////////////////////////////
  482. if(KK==2)//min
  483. {
  484. ddd0=0x0f & r1302(0x83);
  485. ddd1=0x0f & (r1302(0x83)>>4);
  486. w1602(0x80,0);
  487. w1602(0x6d,1);
  488. w1602(0x69,1);
  489. w1602(0x6e,1);
  490. w1602(0x20,1);
  491. w1602(0x20,1);
  492. w1602(0x20,1);
  493. w1602(0x20,1);
  494. w1602(0x20,1);

  495. w1602(0xC0,0);
  496. w1602(0x30+ddd1,1);
  497. w1602(0x30+ddd0,1);
  498. if(TOK==0)
  499. {
  500. delay(10000);
  501.   if(TOK==0)
  502. {
  503. td++;
  504. if(td>59)td=0;
  505. ddd1=td/10;

  506.   }
  507. }
  508.           ddd=(ddd1<<4)+ddd0;
  509. w1302(0x82,ddd);
  510.        }
  511. ////////////////////////
  512. if(KK==3)//hour
  513. {
  514. ddd0=0x0f & r1302(0x85);
  515. ddd1=0x0f & (r1302(0x85)>>4);
  516.          w1602(0x80,0);
  517. w1602(0x68,1);
  518. w1602(0x6f,1);
  519. w1602(0x75,1);
  520. w1602(0x72,1);
  521. w1602(0x20,1);
  522. w1602(0x20,1);
  523. w1602(0x20,1);
  524. w1602(0x20,1);

  525. w1602(0xc0,0);
  526. w1602(0x30+ddd1,1);
  527. w1602(0x30+ddd0,1);
  528. if(TOK==0)
  529. {
  530. delay(10000);
  531.   if(TOK==0)
  532. {
  533. td++;
  534.   if(td>23)td=0;
  535. ddd1=td/10;
  536. ddd0=td%10;
  537. ddd=(ddd1<<4)+ddd0;
  538.   }
  539. }
  540.          
  541. w1302(0x84,ddd);
  542.        }
  543. //////////////////////////
  544. if(KK==4)//day
  545. {
  546. ddd0=0x0f & r1302(0x87);
  547. ddd1=0x0f & (r1302(0x87)>>4);
  548.          w1602(0x80,0);
  549. w1602(0x44,1);
  550. w1602(0x61,1);
  551. w1602(0x79,1);
  552. w1602(0x20,1);
  553. w1602(0x20,1);
  554. w1602(0x20,1);
  555. w1602(0x20,1);

  556. w1602(0xc0,0);
  557. w1602(0x30+ddd1,1);
  558. w1602(0x30+ddd0,1);
  559. if(TOK==0)
  560. {

  561. delay(10000);
  562.   if(TOK==0)
  563. {
  564. td++;
  565.   if(td>31)td=0;

  566. ddd1=td/10;
  567. ddd0=td%10;
  568.   }
  569. }
  570.           ddd=(ddd1<<4)+ddd0;
  571. w1302(0x86,ddd);
  572. }
  573. //////////////////////
  574.        if(KK==5)//month
  575. {
  576. ddd0=0x0f & r1302(0x89);
  577. ddd1=0x0f & (r1302(0x89)>>4);
  578.          w1602(0x80,0);
  579. w1602(0x6d,1);
  580. w1602(0x6f,1);
  581. w1602(0x6e,1);
  582. w1602(0x74,1);
  583. w1602(0x68,1);
  584. w1602(0x20,1);
  585. w1602(0x20,1);
  586. w1602(0x20,1);

  587. w1602(0xc0,0);
  588. w1602(0x30+ddd1,1);
  589. w1602(0x30+ddd0,1);
  590. if(TOK==0)
  591. {
  592. delay(10000);
  593.   if(TOK==0)
  594. {
  595. td++;
  596.   if(td==12)td=1;
  597. ddd1=td/10;
  598. ddd0=td%10;
  599.   }
  600. }
  601.           ddd=(ddd1<<4)|ddd0;
  602. w1302(0x88,ddd);
  603. }
  604. /////////////////////////
  605.        if(KK==6)//year
  606. {
  607. ddd0=0x0f & r1302(0x8d);
  608. ddd1=0x0f & (r1302(0x8d)>>4);
  609.          w1602(0x80,0);
  610. w1602(0x79,1);
  611. w1602(0x65,1);
  612. w1602(0x61,1);
  613. w1602(0x72,1);
  614. w1602(0x20,1);
  615. w1602(0x20,1);
  616. w1602(0x20,1);

  617. w1602(0xc0,0);
  618. w1602(0x30+ddd1,1);
  619. w1602(0x30+ddd0,1);
  620. if(TOK==0)
  621. {

  622. delay(10000);
  623.   if(TOK==0)
  624. {
  625. td++;
  626.   if(td>99) td=0;
  627. ddd1=td/10;
  628. ddd0=td%10;
  629.              ddd=(ddd1<<4)|ddd0;
  630.   }
  631. }         
  632. w1302(0x8c,ddd);
  633. }
  634. ///////////////////////
  635. //ddd0=0;
  636.        if(KK==7)//week
  637. {
  638. w1602(0x80,0);
  639. w1602(0x57,1);
  640. w1602(0x65,1);
  641. w1602(0x65,1);
  642. w1602(0x6b,1);
  643. w1602(0x20,1);
  644. w1602(0x20,1);
  645. w1602(0x20,1);

  646. w1602(0xc0,0);
  647. w1602(0x30+ddd0,1);
  648. w1602(0x20,1);
  649. if(TOK==0)
  650. {

  651. delay(20000);
  652.   if(TOK==0)
  653. {
  654. ddd0++;
  655.   if(ddd0>7)
  656. ddd0=1;
  657.   }
  658. }
  659.           w1302(0x8A,ddd0);
  660.        }
  661.       }while(KK<8);
  662. w1602(0x01,0);
  663. KK=0;
  664.   }
复制代码




回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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