找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2946|回复: 4
收起左侧

DIY单片机Ds3231高精度时钟程序 温度显示器12864 ds18b20 89c51

[复制链接]
ID:586730 发表于 2019-8-2 10:37 | 显示全部楼层 |阅读模式
DIY高精度时钟、温度显示器Ds3231+12864+ds18b20+89c51
硬件:
程序:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include<stdlib.h>
  4.                                                                        
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. /*端口定义*/
  8. sbit LCD_RS=P2^6;
  9. sbit LCD_RW=P2^5;
  10. sbit LCD_EN=P2^4;
  11. sbit LCD_PSB=P2^3;
  12. sbit DQ=P3^7;                                                        //18b20
  13. sbit SDA=P1^4;                                               //ds32321            //模拟I2C数据传送位SDA      
  14. sbit SCL=P1^3;                                   //模拟I2C时钟控制位SCL
  15. //***按键功能****//
  16. ////***K1停止时间显示****//
  17. ////***K2选择修改位置****//
  18. ////***K3进行加1的修改****//
  19. ////***K4将修改写入ds3231,同时启动时间显示****//
  20. sbit K1=P3^2;                                          
  21. sbit K2=P3^3;
  22. sbit K3=P3^4;
  23. sbit K4=P3^5;
  24. //定义变量                           
  25. uchar numbr[10]="0123456789";                                          //字模
  26.                                                                                    
  27.                                                                                                                                                                                                                  
  28. uchar dis4[]="   ";                                                                                                     //                第四行显示   自己添加
  29. uchar t[]="  .   ℃" ;                                                                        //18b20
  30. uint  sdata,xiaoshu1,xiaoshu2;                                                         //整数、小数1位、小数2位
  31. bit  fg=1;                                   //温度正负标志
  32. uchar tempL=0,tempH=0;                                                                                                     // 变量            
  33. uchar year,month,date,hour,min,sec;                                                        //              ds3231
  34. uchar a[]="2011年22月33日";
  35. uchar b[]="11时22分33秒";
  36.                                 ///函数
  37. //******************延时子程序 *******************************

  38. //这个延时程序的具体延时时间是time=i*8+10,适用于小于2ms的延时

  39. //************************************************************
  40. void delay(unsigned char i)
  41. {
  42. for(i;i>0;i--);
  43. }
  44. //***********************************************************
  45. //                     延时子程序
  46. //************************************************************
  47. void delay1ms(uchar j)
  48. {
  49. while(j!=0)
  50. {uchar i;
  51. for(i=124;i>0;i--);  //延时124*8+10=1002us
  52. j--;
  53. }
  54. }
  55. /**************************12864部分*************************************/
  56. /**************************12864部分*************************************/            
  57.                                                                                                                                             /*写指令数据到LCD
  58.                                                                                                                                             RS=L——表示DB0-DB7为显示指令数据
  59.                                                                                                                                             RW=L——表示DB0-DB7数据被write(当E=“H-L”,指令数据被写到IR或DR)
  60.                                                                                                                                             E=高脉冲
  61.                                                                                                                                             此时DB0-DB7=指令码              */
  62. void write_cmd(uchar cmd)
  63. {
  64.               LCD_RS=0;
  65.               LCD_RW=0;
  66.               LCD_EN=0;
  67.               P0=cmd;
  68.               delay1ms(5);
  69.               LCD_EN=1;
  70.               delay1ms(5);
  71.               LCD_EN=0;
  72. }
  73.                                                                                                                               /*设定显示位置*/
  74. void lcd_pos(uchar X, uchar Y)
  75. {
  76.               uchar pos;

  77.               if(X == 0)
  78.               {
  79.                             X = 0x80;
  80.               }
  81.               else if(X == 1)
  82.               {
  83.                             X = 0x90;
  84.               }
  85.               else if(X == 2)
  86.               {
  87.                             X = 0x88;
  88.               }
  89.               else if(X == 3)
  90.               {
  91.                             X = 0x98;
  92.               }
  93.               pos = X + Y;
  94.               write_cmd(pos);                                                                                    //显示地址
  95. }

  96.                                                                                                                                                                         /*写显示数据到LCD*/
  97.                                                                                                                                                                         /*
  98.                                                                                                                                                                                       RS=H ——表示DB0-DB7为显示数据
  99.                                                                                                                                                                                       RW=L ——RW=L,E='H-L',DB0-DB7数据被写到IR或DR            
  100.                                                                                                                                                                                       E=高脉冲
  101.                                                                                                                                                                                       DB0-DB7=显示数据              */
  102. void write_dat(uchar dat)
  103. {
  104.               LCD_RS=1;
  105.               LCD_RW=0;
  106.               LCD_EN=0;
  107.               P0=dat;
  108.               delay1ms(5);
  109.               LCD_EN=1;
  110.               delay1ms(5);
  111.               LCD_EN=0;
  112. }
  113.                                                                                                                                                                                       /*LCD初始化*/
  114. void lcd_init()
  115. {              uint i;

  116.               LCD_PSB=1;                                                                                                                              //并口方式
  117.               write_cmd(0x30);                                                                                                  //基本操作指令
  118.               delay1ms(5);
  119.               write_cmd(0x0c);                                                                                                  //打开显示,光标关闭
  120.               delay1ms(5);
  121.               write_cmd(0x01);                                                                                                  //清除LCD显示类容
  122.               delay1ms(5);


  123.               lcd_pos(3,0);
  124.                                                         i=0;
  125.                                                         while(dis4[i]!='\0')
  126.                                                                       {
  127.                                                                       delay1ms(1);
  128.                                                                       write_dat(dis4[i]);
  129.                                                                       delay1ms(1);
  130.                                                                       i++;
  131.                                                                       }
  132.                                                                                                                                                                                                    
  133. }
  134. /**********************************18b20************************************************/
  135. /**********************************18b20************************************************/


  136. void Init_DS18B20(void)                                                                                                                                             //初始化
  137. {
  138. uchar x=0;
  139. DQ=1; //DQ先置高
  140. delay(8); //稍延时
  141. DQ=0; //发送复位脉冲
  142. delay(80); //延时(>480us)
  143. DQ=1; //拉高数据线
  144. delay(5); //等待(15~60us)
  145. x=DQ; //用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1
  146. delay(20);
  147. }

  148. //**********读一个字节************//

  149. ReadOneChar(void)  //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
  150. {
  151. unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
  152. unsigned char dat=0;
  153. for (i=8;i>0;i--) //一个字节有8位
  154. {
  155. DQ=1;
  156. delay(1);
  157. DQ=0;
  158. dat>>=1;
  159. DQ=1;
  160. if(DQ)
  161. dat|=0x80;
  162. delay(4);
  163. }
  164. return(dat);
  165. }
  166. //*********************** **写一个字节**************************//

  167. void WriteOneChar(unsigned char dat)
  168. {
  169.   unsigned char i=0; //数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上,
  170.   for(i=8;i>0;i--) //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。
  171.   {
  172.    DQ=0; //在开始另一个写周期前必须有1us以上的高电平恢复期。
  173.    DQ=dat&0x01;
  174.    delay(5);
  175.    DQ=1;
  176.    dat>>=1;
  177.   }
  178.   delay(4);
  179. }

  180. void ReadTemperature(void)                                                                                                                               //读温度值(低位放tempL;高位放tempH;)//
  181.               {
  182.               Init_DS18B20(); //初始化
  183.               WriteOneChar(0xcc); //跳过读序列号的操作
  184.               WriteOneChar(0x44); //启动温度转换
  185.               delay(125); //转换需要一点时间,延时
  186.               Init_DS18B20(); //初始化
  187.               WriteOneChar(0xcc); //跳过读序列号的操作
  188.               WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)
  189.               tempL=ReadOneChar(); //读出温度的低位LSB
  190.               tempH=ReadOneChar(); //读出温度的高位MSB

  191.                             if(tempH>0x7f)      //最高位为1时温度是负
  192.                             {
  193.                             tempL=~tempL;         //补码转换,取反加一
  194.                             tempH=~tempH+1;      
  195.                             fg=0;      //读取温度为负时fg=0
  196.        }
  197.                             sdata = tempL/16+tempH*16;      //整数部分
  198.                             xiaoshu1 = (tempL&0x0f)*10/16; //小数第一位
  199.                             xiaoshu2 = (tempL&0x0f)*100/16%10;//小数第二位
  200.                             t[0]=numbr[sdata/10];
  201.                             t[1]=numbr[sdata%10];
  202.                             t[3]=numbr[xiaoshu1];
  203.                             t[4]=numbr[xiaoshu2];

  204.               }
  205. /*****************************************ds3231********************************************/

  206. #define ADDRTW          0xD0    //器件写地址
  207. #define ADDRTD          0xD1 //器件读地址
  208. #define DS3231_SEC      0x00    //秒
  209. #define DS3231_MIN      0x01    //分
  210. #define DS3231_HOUR     0x02    //时
  211. #define DS3231_DAY      0x03    //星期
  212. #define DS3231_DATE     0x04    //日
  213. #define DS3231_MONTH    0x05    //月
  214. #define DS3231_YEAR     0x06    //年
  215. //闹铃1           
  216. #define DS3231_Al1SEC   0x07    //秒
  217. #define DS3231_AL1MIN   0x08    //分
  218. #define DS3231_AL1HOUR  0x09    //时
  219. #define DS3231_AL1DAY   0x0A    //星期/日
  220. //闹铃2
  221. #define DS3231_AL2MIN   0x0b    //分
  222. #define DS3231_AL2HOUR  0x0c    //时
  223. #define DS3231_AL2DAY   0x0d    //星期/日
  224. #define DS3231_CONTROL  0x0e    //控制寄存器
  225. #define DS3231_STATUS   0x0f    //状态寄存器
  226. bit ack;


  227. uchar BCD2HEX(uchar val)           //BCD转换为Byte            
  228. {              uchar i;
  229.     i= val&0x0f;
  230.     val >>= 4;
  231.     val &= 0x0f;
  232.     val *= 10;
  233.     i += val;

  234.     return i;
  235. }


  236. uchar HEX2BCD(uchar val)//B码转换为BCD码
  237.               {
  238.               uchar i,j,k;
  239.             
  240.                 i=val/10;
  241.                 j=val%10;
  242.                 k=j+(i<<4);
  243.                 return k;
  244.               }

  245. void Start()            
  246. {
  247.     SDA=1;                  //发送起始条件的数据信号
  248.     delay(1);
  249.     SCL=1;
  250.     delay(5);             //起始条件建立时间大于4.7us,延时
  251.                  SDA=0;                  //发送起始信号
  252.     delay(5);             // 起始条件锁定时间大于4μs
  253.     SCL=0;                  //钳住I2C总线,准备发送或接收数据
  254.     delay(2);
  255. }
  256. void Stop()
  257. {
  258.     SDA=0;                  //发送结束条件的数据信号
  259.     delay(1);             //发送结束条件的时钟信号
  260.     SCL=1;                  //结束条件建立时间大于4us
  261.     delay(5);

  262.     SDA=1;                  //发送I2C总线结束信号
  263.     delay(4);
  264. }
  265. /********************************************************/
  266. /*******************************************************************
  267.                   字节数据发送函数              
  268. 函数原型:     void   SendByte(uchar Dat);
  269. 功能:      将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
  270.            此状态位进行操作.(不应答或非应答都使ack=0)
  271.            ack=1        发送数据正常,
  272.            ack=0        被控器无应答或损坏。
  273. ********************************************************************/
  274. void SendByte(uchar Dat)
  275. {
  276. uchar BitCnt;

  277.     for(BitCnt=0;BitCnt<8;BitCnt++)         //要传送的数据长度为8位
  278.     {
  279.         if((Dat<<BitCnt)&0x80)
  280.             SDA=1;                          //判断发送位
  281.         else
  282.             SDA=0;              
  283.           delay(1);
  284.          SCL=1;                            //置时钟线为高,通知被控器开始接收数据位
  285.           delay(5);                       //保证时钟高电平周期大于4μs  
  286.           SCL=0;
  287.     }

  288.     delay(2);
  289.     SDA=1;                                  //8位发送完后释放数据线,准备接收应答位
  290.     delay(2);
  291.     SCL=1;
  292.    delay(3);
  293.     if(SDA==1)
  294.         ack=0;   
  295.     else
  296.         ack=1;                              //判断是否接收到应答信号
  297.     SCL=0;
  298.     delay(2);
  299. }

  300. uchar RcvByte()                                                                                                                              // 功能:      用来接收从器件传来的数据,并判断总线错误(不发应答信号),发完后请用应答函数应答从机。
  301. {
  302. uchar retc;
  303. uchar BitCnt;

  304.    retc=0;
  305.    SDA=1;                           //置数据线为输入方式
  306.    for(BitCnt=0;BitCnt<8;BitCnt++)
  307.    {
  308.         delay(1);
  309.         SCL=0;                      //置时钟线为低,准备接收数据位

  310.         delay(5);                 //时钟低电平周期大于4.7μs

  311.         SCL=1;                      //置时钟线为高使数据线上数据有效
  312.         delay(3);
  313.         retc=retc<<1;
  314.         if(SDA==1)
  315.             retc=retc+1;            //读数据位,接收的数据位放入retc中
  316.         delay(2);
  317.    }
  318.    SCL=0;
  319.    delay(2);
  320.    return(retc);
  321. }

  322. void I2CACK(bit a)                                          // 功能:       主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)
  323. {

  324.     if(a==0)
  325.         SDA=0;              //在此发出应答或非应答信号
  326.     else
  327.         SDA=1;
  328.     delay(3);   
  329.     SCL=1;

  330.     delay(5);             //时钟低电平周期大于4μs

  331.     SCL=0;                  //清时钟线,钳住I2C总线以便继续接收
  332.     delay(2);  
  333. }



  334. uchar I2CRead()                                                                                                                              /************从DS3231当前地址读一个字节************/
  335. {
  336. uchar read_data;
  337.               Start();
  338.     SendByte(ADDRTD);                                                                     
  339.     if(ack==0)
  340.     {
  341.   return(0);
  342.     }
  343.     read_data = RcvByte();
  344.     I2CACK(1);
  345.     Stop();
  346.     return read_data;
  347. }


  348. uchar I2CReadAdd(uchar addr)                                                                                    /************从DS3231指定地址读一个字节************/
  349.               {
  350.                   Start();
  351.                   SendByte(ADDRTW);                                         
  352.                   if(ack==0)
  353.                   {            
  354.                 return(0);
  355.                   }
  356.                   SendByte(addr);
  357.                   if(ack==0)
  358.                   {            
  359.                 return(0);
  360.                   }
  361.                   return(I2CRead());
  362.               }
  363. void Readtime()                                                                                                                                            /*********************读取时间**********************/
  364.               {
  365.               uchar temp;
  366.               temp=I2CReadAdd(DS3231_SEC);//秒
  367.               sec=BCD2HEX(temp);
  368.             
  369.               temp=I2CReadAdd(DS3231_MIN);//分
  370.               min=BCD2HEX(temp);
  371.             
  372.               temp=I2CReadAdd(DS3231_HOUR);  //时                 
  373.               hour=BCD2HEX(temp);
  374.             
  375.               temp=I2CReadAdd(DS3231_DATE);  //日
  376.               date=BCD2HEX(temp);
  377.             
  378.               temp=I2CReadAdd(DS3231_MONTH); //月
  379.               month=BCD2HEX(temp);
  380.             
  381.               temp=I2CReadAdd(DS3231_YEAR);  //年
  382.               year=BCD2HEX(temp);
  383.               }

  384. void InitDS3231()                                                                                                                                                                        //ds3231初始化
  385.               {SCL=1;
  386.               delay(5);
  387.               SDA=1;
  388.               delay(5);

  389.               }
  390. void TimeDisplay(uchar Dhour,uchar Dmin,uchar Dsec)                                                        //时分秒数组赋值            
  391.               {              b[0]=numbr[Dhour / 10];        // 时十位
  392.                   b[1]=numbr[Dhour % 10];        // 时个位
  393.                   b[4]=numbr[Dmin / 10];         // 分十位
  394.                   b[5]=numbr[Dmin % 10];         // 分个位
  395.                   b[8]=numbr[Dsec / 10];         // 秒十位
  396.                   b[9]=numbr[Dsec % 10];         // 秒个位
  397.               }
  398. void DateDisplay(uchar Dyear,uchar Dmonth,uchar Dday)                                          //年月天数组赋值               
  399.               {              a[2]=numbr[Dyear / 10];        // 年十位
  400.                   a[3]=numbr[Dyear % 10];        // 年个位
  401.                   a[6]=numbr[Dmonth / 10];       // 月十位
  402.                   a[7]=numbr[Dmonth % 10];       // 月个位
  403.                   a[10]=numbr[Dday / 10];         // 天十位
  404.                   a[11]=numbr[Dday % 10];         // 天个位                                                         
  405.               }

  406. void Start_I2C()
  407. {
  408.     SDA=1;                  //发送起始条件的数据信号
  409.     delay(1);
  410.     SCL=1;
  411.     delay(5);             //起始条件建立时间大于4.7us,延时

  412.     SDA=0;                  //发送起始信号
  413.     delay(5);             // 起始条件锁定时间大于4μs

  414.     SCL=0;                  //钳住I2C总线,准备发送或接收数据
  415.     delay(2);
  416. }

  417. void Stop_I2C()
  418. {
  419.     SDA=0;                  //发送结束条件的数据信号
  420.     delay(1);             //发送结束条件的时钟信号
  421.     SCL=1;                  //结束条件建立时间大于4us
  422.     delay(5);

  423.     SDA=1;                  //发送I2C总线结束信号
  424.     delay(4);
  425. }

  426. uchar write_byte(uchar addr, uchar write_data)
  427. {
  428.     Start_I2C();
  429.     SendByte(ADDRTW);                            //////*******************************************************************///////////
  430.     if (ack == 0)
  431.         return 0;

  432.     SendByte(addr);  
  433.     if (ack == 0)
  434.         return 0;

  435.     SendByte(write_data);
  436.     if (ack == 0)
  437.         return 0;

  438.     Stop_I2C();
  439.      delay1ms(10);     
  440.     return 1;
  441. }

  442. void ModifyTime(uchar yea,uchar mon,uchar da,uchar hou,uchar min,uchar sec)
  443. {                uchar temp=0;

  444.     temp=HEX2BCD(yea);
  445.     write_byte(DS3231_YEAR,temp);   //修改年

  446.     temp=HEX2BCD(mon);
  447.     write_byte(DS3231_MONTH,temp);  //修改月

  448.     temp=HEX2BCD(da);                                                                                                                                 /////////////////////
  449.     write_byte(DS3231_DATE,temp);    //修改日

  450.     temp=HEX2BCD(hou);
  451.     write_byte(DS3231_HOUR,temp);   //修改时

  452.     temp=HEX2BCD(min);
  453.     write_byte(DS3231_MIN,temp); //修改分

  454.     temp=HEX2BCD(sec);
  455.     write_byte(DS3231_SEC,temp); //修改秒
  456. }





  457. void xianshi(void)
  458.    {

  459.                                           { uint i;
  460.                            
  461.                                          
  462.                             TimeDisplay(hour,min,sec);                                                                                                                                          
  463.                                                         lcd_pos(1,1);                                             //时间
  464.                                                         i=0;
  465.                                                         while(b[i]!='\0')
  466.                                                                       {
  467.                                                                       delay1ms(1);
  468.                                                                       write_dat(b[i]);
  469.                                                                       delay1ms(1);
  470.                                                                       i++;
  471.                                                                       }
  472.                            
  473.                                                         DateDisplay(year,month,date);              //显示日期                                                                                                                                                                                                                                                           
  474.                                                         delay1ms(1);
  475.                                                         lcd_pos(0,0);
  476.                                                         i=0;
  477.                                                         while(a[i]!='\0')
  478.                                                                       {
  479.                                                                       delay1ms(1);
  480.                                                                       write_dat(a[i]);
  481.                                                                       delay1ms(1);
  482.                                                                       i++;
  483.                                                                       }
  484.                                                         ReadTemperature();                                                                                                  //显示温度
  485.                                                         delay1ms(1);
  486.                                                         lcd_pos(2,1);
  487.                                                         delay1ms(1);
  488.                                                         i=0;
  489.                                                         while(t[i]!='\0')
  490.                                                                                     {
  491.                                                                                     delay1ms(1);
  492.                                                                                     write_dat(t[i]);
  493.                                                                                     delay1ms(2);
  494.                                                                                     i++;
  495.                                                                                     }
  496.                                           }
  497. }

  498. void shuaxin(void)
  499.               {                            uint i;
  500.                             TimeDisplay(hour,min,sec);                                                                                                                                          
  501.                                                         lcd_pos(1,1);                                             //时间
  502.                                                         i=0;
  503.                                                         while(b[i]!='\0')
  504.                                                                       {
  505.                                                                       delay1ms(1);
  506.                                                                       write_dat(b[i]);
  507.                                                                       delay1ms(1);
  508.                                                                       i++;
  509.                                                                       }
  510.                            
  511.                                                         DateDisplay(year,month,date);              //显示日期                                                                                                                                                                                                                                                           
  512.                                                         delay1ms(1);
  513.                                                         lcd_pos(0,0);
  514.                                                         i=0;
  515.                                                         while(a[i]!='\0')
  516.                                                                       {
  517.                                                                       delay1ms(1);
  518.                                                                       write_dat(a[i]);
  519.                                                                       delay1ms(1);
  520.                                                                       i++;
  521.                                                                       }
  522.               }



  523. void sotp(void)                                                                                                                                                                                    
  524. {
  525.               uint i;                                          
  526.             
  527. while(1)
  528.               {
  529.               duan1:                            if(K1==0)
  530.                                           {
  531.                                           delay1ms(100);
  532.                                           if(K1==0)
  533.                                                         {
  534.                                                         Readtime();
  535.                                                         shuaxin();
  536.                                                         i=0;
  537.                                           goto duan2;
  538.                                                       
  539.                                                         }
  540.                                           }
  541.                                           else
  542.                                           {goto duan5;}

  543.               duan2:                            if(K2==0)
  544.                                           {
  545.                                                         delay1ms(100);
  546.                                                         if(K2==0)
  547.                                                         {
  548.                                                         i++;
  549.                                                         if(i>6){i=0;}
  550.                                                         shuaxin();
  551.                                                         }            
  552.                                           }
  553.                                           switch(i)
  554.                                           {
  555.                                                         case 0:   if(K3==0){delay1ms(100);if(K3==0){year=year+1;}                            if(year>=100){year=0;}                                                                                                  shuaxin();} break;
  556.                                                         case 1:   if(K3==0){delay1ms(100);if(K3==0){month=month+1;}              if(month>=13){month=0;}                                                                                                  shuaxin();} break;
  557.                                                         case 2:   if(K3==0){delay1ms(100);if(K3==0){date=date+1;}                            if(date>=32){date=0;}                                                                                                  shuaxin();} break;
  558.                                                         case 3:   if(K3==0){delay1ms(100);if(K3==0){hour=hour+1;}                            if(hour>=25){hour=0;}                                                                                                  shuaxin();} break;
  559.                                                         case 4:   if(K3==0){delay1ms(100);if(K3==0){min=min+1;}                              if(min>=61){min=0;}                                                                                                                   shuaxin();} break;
  560.                                                         case 5:   if(K3==0){delay1ms(100);if(K3==0){sec=sec+1;}                             if(sec>=61){sec=0;}                                                                                                                  shuaxin();} break;
  561.                                           }


  562.               duan4:                            if(K4==0)
  563.                                           {
  564.                                           delay1ms(100);
  565.                                           if(K4==0)
  566.                                           {
  567.                                           ModifyTime(year,month,date,hour,min,sec);
  568.                                           goto duan5;                                                    ///////////////////*******************//////////
  569.                                           }            
  570.                             }
  571.             
  572.                                             else
  573.                                           {goto duan2;}
  574.             
  575.             
  576.             
  577.             

  578.                

  579. duan5:              Readtime();
  580.                             xianshi();
  581.                             }
  582.                            
  583.               }
  584.                



  585. main()                                                                        /*主程序*/
  586. {
  587.             
  588.             
  589.               lcd_init();
  590.               delay1ms(5);
  591.               InitDS3231();
  592.               delay1ms(5);
  593.               delay1ms(5);
  594.               sotp();            
  595. }
复制代码

以上的Word格式文档51黑下载地址:
ds3231,51例程.7z (2.83 MB, 下载次数: 93)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:463339 发表于 2019-8-21 00:40 | 显示全部楼层
楼主您好,请问您这个作品,有上电实时显示时间(跟着当前时间走,不会重新刷新时间)功能吗?
回复

使用道具 举报

ID:71883 发表于 2019-8-22 12:16 | 显示全部楼层
楼主程序太复杂有空试试
回复

使用道具 举报

ID:471297 发表于 2021-1-18 23:55 | 显示全部楼层
能加上星期和农历就完美了
回复

使用道具 举报

ID:390416 发表于 2021-1-19 01:09 | 显示全部楼层
用我这个贴子的代码 更好  http://www.51hei.com/bbs/dpj-200966-1.html
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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