找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1627|回复: 3
收起左侧

哪位大神能帮忙看一下,下面单片机DS1302程序是什么问题?

[复制链接]
ID:814785 发表于 2021-5-24 15:27 | 显示全部楼层 |阅读模式
使用DS1302做一个可调时间的万年历,现在按键设定时间后,无法将时间保存到DS1302中。按键功能是:KEY0长按:进入/保存设定,KEY0在设定界面短按,改变选中,KEY1在设定界面短按加1,长按返回实时显示界面,不保存设定时间。

单片机源程序如下:
  1. /******************************************************
  2. 内容:
  3. 硬件连接:
  4.                 _RD与单片机P2.6引脚连接
  5.                 _WR与单片机P2.5引脚连接
  6.                 _EN与单片机P2.7引脚连接
  7.                 8位并行数据口与单片机P0组I/O口连接
  8. **************************************************************/
  9. #include "reg52.h"
  10. #include "intrins.h"
  11. #define uint unsigned int
  12. #define uchar unsigned char
  13. sbit _RD=P2^6;                //LCD1602数据/命令选择端位定义
  14. sbit _WR=P2^5;                //LCD1602读/写选择端位定义
  15. sbit _EN=P2^7;                //LCD1602使能信号端位定义

  16. sbit _SCL=P3^6;        //DS1302串行时钟口位定义
  17. sbit _SDA=P3^4;        //DS1302数据输入/输出口位定义
  18. sbit _RST=P3^5;        //DS1302复位口

  19. sbit DQ=P3^7;                //DS18B20总线口位定义

  20. sbit KEY0=P1^0;
  21. sbit KEY1=P1^1;

  22. uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
  23. uchar  time0[8]={20,21,5,19,3,20,51,35};                //存放年、月、日、周,时、分、秒初始值
  24. uchar time1[8];                                                                //存放DS1302读取的年、月、日、周,时、分、秒值
  25. uchar time2[8];                                                                //用于存放临时设定的时间值
  26. uchar time3[8];                                                                //用于存放显示的值
  27. uint temperature=0;                //温度
  28. uchar flag0=0,flag1=0;                //flag0为设定标志,为0时,显示实时时间,为1时,显示设定的值,flag1为温度零下标志,为0表示正,为1表示负
  29. uchar num=0;                                                //用于显示实时温度和设定时间
  30. //--------------------------------------DS1302驱动------------------------------------------
  31. uchar read_byte0(uchar addr)                                //DS1302读数据
  32. {
  33.         uchar i,dat;
  34.         _RST=1;                        //把RST拉高时,SCL必须为低电平
  35.         addr=addr|0x01;        //功能未知
  36.         for(i=0;i<8;i++)        //写地址
  37.         {
  38.                 _SDA=(bit)(addr&0x01);
  39.                 _nop_();
  40.                 _SCL=1;                        //上升沿,写入地址数据
  41.                 _nop_();
  42.                 _SCL=0;
  43.                 addr>>=1;
  44.         }
  45.         for(i=0;i<8;i++)        //读数据
  46.         {
  47.                 dat>>=1;
  48.                 if(_SDA==1)
  49.                         dat|=0x80;
  50.                 _SCL=1;
  51.                 _SCL=0;
  52.         }
  53.         _RST=0;
  54.         _SCL=1;                        //要加上,不然程序会异常
  55.         _SDA=0;                        //要加上,不然程序会异常
  56.         _SDA=1;
  57.         return dat;
  58. }
  59. /****************************************************************************************************
  60. 函数功能:DS1302写一个字节
  61. 入口参数:地址,命令
  62. 说明:
  63. 时间:
  64. ****************************************************************************************************/
  65. void write_byte0(uchar addr,uchar com)                                //DS1302写数据
  66. {
  67.         uchar i;
  68.         _RST=1;                        //把RST拉高时,SCL必须为低电平
  69.         addr=addr&0xfe;                //最低位置零
  70.         for(i=0;i<8;i++)        //写地址
  71.         {
  72.                 _SDA=(bit)(addr&0x01);
  73.                 _nop_();
  74.                 _SCL=1;                        //上升沿,写入地址数据
  75.                 _nop_();
  76.                 _SCL=0;
  77.                 addr>>=1;
  78.         }
  79.         for(i=0;i<8;i++)        //读数据
  80.         {
  81.                 _SDA=(bit)(com&0x01);
  82.                 _nop_();
  83.                 _SCL=1;                        //上升沿,写入地址数据
  84.                 _nop_();
  85.                 _SCL=0;
  86.                 com>>=1;
  87.         }
  88.         _RST=0;
  89. }
  90. /*******************************************************************************
  91. 函数功能:十进制转BCD码
  92. 入口参数:
  93. 说明:
  94. 时间:
  95. ****************************************************************************************************/
  96. uchar Dec_Bcd(uchar dec)                        //十进制转BCD码
  97. {
  98.         uchar bcd,tmp;
  99.         tmp=dec/10;
  100.         dec=dec%10;
  101.         bcd=dec+tmp*16;

  102.         return bcd;
  103. }
  104. /****************************************************************************************************
  105. 函数功能:BCD码转十进制
  106. 入口参数:
  107. 说明:
  108. 时间:
  109. ****************************************************************************************************/
  110. uchar Bcd_Dec(uchar bcd)
  111. {
  112.         uchar dec,tmp;
  113.         tmp=bcd/16;
  114.         bcd=bcd%16;
  115.         dec=bcd+tmp*10;
  116.         
  117.         return dec;
  118. }
  119. /****************************************************************************************************
  120. 函数功能:向DS1302写入时钟数据
  121. 入口参数:地址
  122. 说明:
  123. 时间:
  124. ****************************************************************************************************/
  125. void DS1302_Write_Time(void)
  126. {
  127.         write_byte0(0x8e,0x00);                                        //关闭写保护
  128.         write_byte0(0x80,0x80);                                        //暂停
  129.         write_byte0(0x90,0xa9);                                        //涓流放电
  130.         
  131.         write_byte0(0x8c,Dec_Bcd(time0[1]));                                        //写入年
  132.         write_byte0(0x88,Dec_Bcd(time0[2]));                                        //写入月
  133.         write_byte0(0x86,Dec_Bcd(time0[3]));                                        //写入日
  134.         write_byte0(0x8a,Dec_Bcd(time0[4]));                                        //写入星期
  135.         write_byte0(0x84,Dec_Bcd(time0[5]));                                        //写入时
  136.         write_byte0(0x82,Dec_Bcd(time0[6]));                                        //写入分
  137.         write_byte0(0x80,Dec_Bcd(time0[7]));                                        //写入秒
  138.         write_byte0(0x8e,0x80);                                        //打开写保护
  139. }
  140. /****************************************************************************************************
  141. 函数功能:从DS1302读出时钟数据
  142. 入口参数:
  143. 说明:
  144. 时间:
  145. ****************************************************************************************************/
  146. void DS1302_Read_Time(void)
  147. {
  148.         uchar i;
  149.         time1[0]=time0[0];
  150.         time1[1]=read_byte0(0x8c);                                //年
  151.         time1[2]=read_byte0(0x88);                                //月
  152.         time1[3]=read_byte0(0x86);                                //日
  153.         time1[4]=read_byte0(0x8a);                                //星期
  154.         time1[5]=read_byte0(0x84);                                //时
  155.         time1[6]=read_byte0(0x82);                                //分
  156.         time1[7]=read_byte0(0x80);                                //秒

  157.         for(i=1;i<8;i++)
  158.         {
  159.                 time1[i]=Bcd_Dec(time1[i]);
  160.         }
  161. }
  162. /****************************************************************************************************
  163. 函数功能:DS1302初始化
  164. 入口参数:无
  165. 说明:
  166. 时间:
  167. ****************************************************************************************************/
  168. void DS1302_Init()
  169. {
  170.         _RST=0;
  171.         _SCL=0;
  172.         write_byte0(0x80,0x00);
  173. }
  174. //------------------------------------------液晶驱动略-------------------------------------------------
  175. /****************************************************************************************************
  176. 函数功能:按键处理函数
  177. 入口参数:无
  178. 说明:
  179. 时间:
  180. ****************************************************************************************************/
  181. void Scan()
  182. {
  183.         uchar i;
  184.         static uint temp0=0,temp1=0;
  185.         static uchar pass0=0,pass1=0;

  186.         if(KEY0==0)
  187.                 temp0++;
  188.         if(temp0>2&&temp0<80&&KEY0==1)                        //设置界面短按切换焦点
  189.         {
  190.                 if(num>0&&num<10)
  191.                         num++;
  192.                 else if(num>=10)
  193.                         num=1;
  194.         }
  195.         if(temp0>=80&&pass0==0)                                        //长按进入设定界面或设定界面保存设定数据
  196.         {
  197.                 pass0=1;
  198.                 switch(num)
  199.                 {
  200.                         case 0:
  201.                                 num=1;
  202.                                 for(i=1;i<8;i++)        //将显示的当前数据送入临时数据中
  203.                                 {
  204.                                         time2[i]=time1[i];
  205.                                 }
  206.                         break;
  207.                         case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:
  208.                                 num=0;
  209.                                 for(i=1;i<8;i++)
  210.                                 {
  211.                                         time0[i]=time2[i];
  212.                                 }
  213.                                 DS1302_Write_Time();
  214.                         break;
  215.                 }
  216.         }
  217.         if(KEY0==1)
  218.         {
  219.                 pass0=0;
  220.                 temp0=0;
  221.         }
  222.         if(KEY1==0)
  223.                 temp1++;
  224.         if(temp1>2&&temp1<80&&KEY1==1)                                //设定界面点击焦点加1
  225.         {
  226.                 switch(num)
  227.                 {
  228.                         case 0:                                //无焦点
  229.         
  230.                         break;
  231.                         case 1:                                //年十位加1
  232.                                 if(time2[1]<90)
  233.                                         time2[1]=time2[1]+10;
  234.                                 else
  235.                                         time2[1]=time2[1]%10;
  236.                         break;
  237.                         case 2:                                //设定年个位
  238.                                 if(time2[1]%10<9)
  239.                                         time2[1]++;
  240.                                 else
  241.                                         time2[1]=time2[1]/10;
  242.                         break;
  243.                         case 3:                                //设定月
  244.                                 if(time2[2]<12)
  245.                                         time2[2]++;
  246.                                 else
  247.                                         time2[2]=1;
  248.                         break;
  249.                         case 4:                                //设定日
  250.                                 if(time2[2]==1||time2[2]==3||time2[2]==5||time2[2]==7||time2[2]==8||time2[2]==10||time2[2]==12)                //31天的月份
  251.                                 {
  252.                                         if(time2[3]<31)
  253.                                                 time2[3]++;
  254.                                         else
  255.                                                 time2[3]=1;
  256.                                 }
  257.                                 else if(time2[2]==4||time2[2]==6||time2[2]==9||time2[2]==11)                //30天的月份
  258.                                 {
  259.                                         if(time2[3]<30)
  260.                                                 time2[3]++;
  261.                                         else
  262.                                                 time2[3]=1;                                       
  263.                                 }
  264.                                 else  if(time2[2]==2)                                //2月份平年28天闰年29天
  265.                                 {
  266.                                         if((((time2[0]*100+time2[1])%4==0)&&((time2[0]*100+time2[1])%100!=0))||((time2[0]*100+time2[1])%400==0))        //闰年2月有29天
  267.                                         {
  268.                                                 if(time2[3]<29)
  269.                                                         time2[3]++;
  270.                                                 else
  271.                                                         time2[3]=1;
  272.                                         }
  273.                                         else                        //平年2月有28天
  274.                                         {
  275.                                                 if(time2[3]<28)
  276.                                                         time2[3]++;
  277.                                                 else
  278.                                                         time2[3]=1;                                                
  279.                                         }
  280.                                 }
  281.                         break;
  282.                         case 5:                                //设定星期
  283.                                 if(time2[4]<7)
  284.                                         time2[4]++;
  285.                                 else
  286.                                         time2[4]=1;
  287.                         break;
  288.                         case 6:                                //设定时
  289.                                 if(time2[5]<23)
  290.                                         time2[5]++;
  291.                                 else
  292.                                         time2[5]=0;
  293.                         break;
  294.                         case 7:                                //设定分十位
  295.                                 if(time2[6]<50)
  296.                                         time2[6]=time2[6]+10;
  297.                                 else
  298.                                         time2[6]=time2[6]%10;
  299.                         break;
  300.                         case 8:                                //设定分个位
  301.                                 if(time2[6]%10<9)
  302.                                         time2[6]++;
  303.                                 else
  304.                                         time2[6]=time2[6]/10;        
  305.                         break;
  306.                         case 9:                                //设定秒十位
  307.                                 if(time2[7]<50)
  308.                                         time2[7]=time2[7]+10;
  309.                                 else
  310.                                         time2[7]=time2[7]%10;        
  311.                         break;
  312.                         case 10:                                //设定秒个位
  313.                                 if(time2[7]%10<9)
  314.                                         time2[7]++;
  315.                                 else
  316.                                         time2[7]=time2[7]/10;               
  317.                         break;
  318.                 }
  319.         }
  320.         if(temp1>=80&&pass1==0)
  321.         {
  322.                 pass1=1;
  323.                 if(num!=0)
  324.                         num=0;
  325.         }
  326.         if(KEY1==1)
  327.         {
  328.                 pass1=0;
  329.                 temp1=0;
  330.         }
  331. }
  332. void display0(uchar row,uchar line,uchar signal)                        //row为行位参数,line为列为参数
  333. {
  334.         static uchar a=0;

  335.         if(row==1)
  336.                 a=0x80;
  337.         if(row==2)
  338.                 a=0xc0;
  339.         a=a+line-1;
  340.         Wcmd(a);
  341.         Wdat(signal);
  342. }
  343. void display1()
  344. {
  345.         uchar year0,year1,year2,year3,month0,month1,day0,day1;
  346.         uchar hours0,hours1,minutes0,minutes1,seconds0,seconds1;
  347.         uchar temperature0,temperature1,temperature2,temperature3;
  348.         uint j;
  349.         uchar i;
  350.         j++;
  351.         Read_Temp();
  352.         DS1302_Read_Time();
  353.         switch(num)
  354.         {
  355.                 case 0:
  356.                         for(i=1;i<8;i++)
  357.                                 time3[i]=time1[i];
  358.                 break;
  359.                 case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:
  360.                         for(i=1;i<8;i++)
  361.                                 time3[i]=time2[i];
  362.                  break;
  363.         }
  364.         year0=time0[0]/10;
  365.         year1=time0[0]%10;                                                                        //分离出年的十位和个位

  366.         year2=time3[1]/10;
  367.         year3=time3[1]%10;                                                                        //分离出年的十位和个位

  368.         month0=time3[2]/10;
  369.         month1=time3[2]%10;                                                                        //分离出月的十位和个位

  370.         day0=time3[3]/10;
  371.         day1=time3[3]%10;                                                                        //分离出日的十位和个位

  372.         hours0=time3[5]/10;
  373.         hours1=time3[5]%10;                                                                        //分离出时的十位和个位

  374.         minutes0=time3[6]/10;
  375.         minutes1=time3[6]%10;                                                                //分离出分的十位和个位

  376.         seconds0=time3[7]/10;
  377.         seconds1=time3[7]%10;                                //分离出秒的十位和个位

  378.         temperature0=temperature/1000;                                //分离出温度百位
  379.         temperature1=temperature%1000/100;                        //分离出温度十位
  380.         temperature2=temperature%100/10;                                //分离出温度个位
  381.         temperature3=temperature%10;                                        //分离出温度十分位               
  382.         display0(1,1,table[year0]);
  383.         display0(1,2,table[year1]);
  384.         switch(num)
  385.         {
  386.                 case 0:                                //实时显示
  387.                         display0(1,3,table[year2]);                                        //年十位
  388.                         display0(1,4,table[year3]);                                        //年个位
  389.                         display0(1,5,'-');
  390.                         display0(1,6,table[month0]);                                        //月十位
  391.                         display0(1,7,table[month1]);                                        //月个位
  392.                         display0(1,8,'-');
  393.                         display0(1,9,table[day0]);                                        //日十位
  394.                         display0(1,10,table[day1]);                                        //日个位
  395.                
  396.                         display0(1,12,table[time3[4]]);                                //星期
  397.                
  398.                         display0(2,1,table[hours0]);                                        //时十位
  399.                         display0(2,2,table[hours1]);                                        //时个位
  400.                         display0(2,3,':');
  401.                         display0(2,4,table[minutes0]);                                //分十位                        
  402.                         display0(2,5,table[minutes1]);                                //分个位
  403.                         display0(2,6,':');
  404.                         display0(2,7,table[seconds0]);                                //秒十位
  405.                         display0(2,8,table[seconds1]);                                //秒个位
  406.                 break;
  407.                 case 1:                                //设定年十位
  408.                         if(j<20)                                                                                                //年十位闪烁
  409.                                 display0(1,3,table[year2]);                                
  410.                         else if(j>=20&&j<40)
  411.                                 display0(1,3,0x20);
  412.                         else
  413.                                 j=0;
  414.                         display0(1,4,table[year3]);                                        //年个位
  415.                         display0(1,5,'-');
  416.                         display0(1,6,table[month0]);                                        //月十位
  417.                         display0(1,7,table[month1]);                                        //月个位
  418.                         display0(1,8,'-');
  419.                         display0(1,9,table[day0]);                                                //日十位
  420.                         display0(1,10,table[day1]);                                        //日个位
  421.                
  422.                         display0(1,12,table[time3[4]]);                                //星期
  423.                
  424.                         display0(2,1,table[hours0]);                                        //时十位
  425.                         display0(2,2,table[hours1]);                                        //时个位
  426.                         display0(2,3,':');
  427.                         display0(2,4,table[minutes0]);                                //分十位                        
  428.                         display0(2,5,table[minutes1]);                                //分个位
  429.                         display0(2,6,':');
  430.                         display0(2,7,table[seconds0]);                                //秒十位
  431.                         display0(2,8,table[seconds1]);                                //秒个位
  432.                 break;
  433.                 case 2:                                //设定年个位
  434.                         display0(1,3,table[year2]);                                        //年十位
  435.                         if(j<20)                                                                                                //年个位闪烁
  436.                                 display0(1,4,table[year3]);                                       
  437.                         else if(j>=20&&j<40)
  438.                                 display0(1,4,0x20);
  439.                         else
  440.                                 j=0;
  441.                         display0(1,5,'-');
  442.                         display0(1,6,table[month0]);                                        //月十位
  443.                         display0(1,7,table[month1]);                                        //月个位
  444.                         display0(1,8,'-');
  445.                         display0(1,9,table[day0]);                                        //日十位
  446.                         display0(1,10,table[day1]);                                        //日个位
  447.                
  448.                         display0(1,12,table[time3[4]]);                                //星期
  449.                
  450.                         display0(2,1,table[hours0]);                                        //时十位
  451.                         display0(2,2,table[hours1]);                                        //时个位
  452.                         display0(2,3,':');
  453.                         display0(2,4,table[minutes0]);                                //分十位                        
  454.                         display0(2,5,table[minutes1]);                                //分个位
  455.                         display0(2,6,':');
  456.                         display0(2,7,table[seconds0]);                                //秒十位
  457.                         display0(2,8,table[seconds1]);                                //秒个位
  458.                 break;
  459.                 case 3:                                //设定月
  460.                         display0(1,3,table[year2]);                                        //年十位
  461.                         display0(1,4,table[year3]);                                        //年个位
  462.                         display0(1,5,'-');
  463.                         if(j<20)                                                                                                //月闪烁
  464.                         {
  465.                                 display0(1,6,table[month0]);
  466.                                 display0(1,7,table[month1]);                                        //月个位
  467.                         }
  468.                         else if(j>=20&&j<40)
  469.                         {
  470.                                 display0(1,6,0x20);
  471.                                 display0(1,7,0x20);
  472.                         }
  473.                         else
  474.                                 j=0;        
  475.                         display0(1,8,'-');
  476.                         display0(1,9,table[day0]);                                        //日十位
  477.                         display0(1,10,table[day1]);                                        //日个位
  478.                
  479.                         display0(1,12,table[time3[4]]);                                //星期
  480.                
  481.                         display0(2,1,table[hours0]);                                        //时十位
  482.                         display0(2,2,table[hours1]);                                        //时个位
  483.                         display0(2,3,':');
  484.                         display0(2,4,table[minutes0]);                                //分十位                        
  485.                         display0(2,5,table[minutes1]);                                //分个位
  486.                         display0(2,6,':');
  487.                         display0(2,7,table[seconds0]);                                //秒十位
  488.                         display0(2,8,table[seconds1]);                                //秒个位
  489.                 break;
  490.                 case 4:                                //设定日
  491.                         display0(1,3,table[year2]);                                        //年十位
  492.                         display0(1,4,table[year3]);                                        //年个位
  493.                         display0(1,5,'-');
  494.                         display0(1,6,table[month0]);                                        //月十位
  495.                         display0(1,7,table[month1]);                                        //月个位
  496.                         display0(1,8,'-');
  497.                         if(j<20)
  498.                         {
  499.                                 display0(1,9,table[day0]);                                        //日十位
  500.                                 display0(1,10,table[day1]);                                //日个位
  501.                         }
  502.                         else if(j>=20&&j<40)
  503.                         {
  504.                                 display0(1,9,0x20);
  505.                                 display0(1,10,0x20);
  506.                         }
  507.                         else
  508.                                 j=0;        
  509.                
  510.                         display0(1,12,table[time3[4]]);                                //星期
  511.                
  512.                         display0(2,1,table[hours0]);                                        //时十位
  513.                         display0(2,2,table[hours1]);                                        //时个位
  514.                         display0(2,3,':');
  515.                         display0(2,4,table[minutes0]);                                //分十位                        
  516.                         display0(2,5,table[minutes1]);                                //分个位
  517.                         display0(2,6,':');
  518.                         display0(2,7,table[seconds0]);                                //秒十位
  519.                         display0(2,8,table[seconds1]);                                //秒个位
  520.                 break;
  521.                 case 5:                                //设定星期
  522.                         display0(1,3,table[year2]);                                        //年十位
  523.                         display0(1,4,table[year3]);                                        //年个位
  524.                         display0(1,5,'-');
  525.                         display0(1,6,table[month0]);                                        //月十位
  526.                         display0(1,7,table[month1]);                                        //月个位
  527.                         display0(1,8,'-');
  528.                         display0(1,9,table[day0]);                                        //日十位
  529.                         display0(1,10,table[day1]);                                        //日个位
  530.                
  531.                         if(j<20)
  532.                                 display0(1,12,table[time3[4]]);                                //星期
  533.                         else if(j>=20&&j<40)
  534.                                 display0(1,12,0x20);
  535.                         else
  536.                                 j=0;        
  537.                
  538.                         display0(2,1,table[hours0]);                                        //时十位
  539.                         display0(2,2,table[hours1]);                                        //时个位
  540.                         display0(2,3,':');
  541.                         display0(2,4,table[minutes0]);                                //分十位                        
  542.                         display0(2,5,table[minutes1]);                                //分个位
  543.                         display0(2,6,':');
  544.                         display0(2,7,table[seconds0]);                                //秒十位
  545.                         display0(2,8,table[seconds1]);                                //秒个位
  546.                 break;
  547.                 case 6:                                //设定小时
  548.                         display0(1,3,table[year2]);                                        //年十位
  549.                         display0(1,4,table[year3]);                                        //年个位
  550.                         display0(1,5,'-');
  551.                         display0(1,6,table[month0]);                                        //月十位
  552.                         display0(1,7,table[month1]);                                        //月个位
  553.                         display0(1,8,'-');
  554.                         display0(1,9,table[day0]);                                        //日十位
  555.                         display0(1,10,table[day1]);                                        //日个位
  556.                
  557.                         display0(1,12,table[time3[4]]);                                //星期
  558.                
  559.                         if(j<20)
  560.                         {
  561.                                 display0(2,1,table[hours0]);                                        //时十位
  562.                                 display0(2,2,table[hours1]);                                        //时个位
  563.                         }
  564.                         else if(j>=20&&j<40)
  565.                         {
  566.                                 display0(2,1,0x20);
  567.                                 display0(2,2,0x20);
  568.                         }
  569.                         else
  570.                                 j=0;        
  571.                         display0(2,3,':');
  572.                         display0(2,4,table[minutes0]);                                //分十位                        
  573.                         display0(2,5,table[minutes1]);                                //分个位
  574.                         display0(2,6,':');
  575.                         display0(2,7,table[seconds0]);                                //秒十位
  576.                         display0(2,8,table[seconds1]);                                //秒个位
  577.                 break;
  578.                 case 7:                                //设定分十位
  579.                         display0(1,3,table[year2]);                                        //年十位
  580.                         display0(1,4,table[year3]);                                        //年个位
  581.                         display0(1,5,'-');
  582.                         display0(1,6,table[month0]);                                        //月十位
  583.                         display0(1,7,table[month1]);                                        //月个位
  584.                         display0(1,8,'-');
  585.                         display0(1,9,table[day0]);                                        //日十位
  586.                         display0(1,10,table[day1]);                                        //日个位
  587.                
  588.                         display0(1,12,table[time3[4]]);                                //星期
  589.                
  590.                         display0(2,1,table[hours0]);                                        //时十位
  591.                         display0(2,2,table[hours1]);                                        //时个位
  592.                         display0(2,3,':');
  593.                         if(j<20)
  594.                                 display0(2,4,table[minutes0]);                                //分十位        
  595.                         else if(j>=20&&j<40)
  596.                                 display0(2,4,0x20);
  597.                         else
  598.                                 j=0;        
  599.                         display0(2,5,table[minutes1]);                                //分个位
  600.                         display0(2,6,':');
  601.                         display0(2,7,table[seconds0]);                                //秒十位
  602.                         display0(2,8,table[seconds1]);                                //秒个位
  603.                 break;
  604.                 case 8:                                //设定分个位
  605.                         display0(1,3,table[year2]);                                        //年十位
  606.                         display0(1,4,table[year3]);                                        //年个位
  607.                         display0(1,5,'-');
  608.                         display0(1,6,table[month0]);                                        //月十位
  609.                         display0(1,7,table[month1]);                                        //月个位
  610.                         display0(1,8,'-');
  611.                         display0(1,9,table[day0]);                                        //日十位
  612.                         display0(1,10,table[day1]);                                        //日个位
  613.                
  614.                         display0(1,12,table[time3[4]]);                                //星期
  615.                
  616.                         display0(2,1,table[hours0]);                                        //时十位
  617.                         display0(2,2,table[hours1]);                                        //时个位
  618.                         display0(2,3,':');
  619.                         display0(2,4,table[minutes0]);                                //分十位        
  620.                         if(j<20)
  621.                                 display0(2,5,table[minutes1]);                                //分个位
  622.                         else if(j>=20&&j<40)
  623.                                 display0(2,5,0x20);
  624.                         else
  625.                                 j=0;        
  626.                         display0(2,6,':');
  627.                         display0(2,7,table[seconds0]);                                //秒十位
  628.                         display0(2,8,table[seconds1]);                                //秒个位
  629.                 break;
  630.                 case 9:                                //设定秒十位
  631.                         display0(1,3,table[year2]);                                        //年十位
  632.                         display0(1,4,table[year3]);                                        //年个位
  633.                         display0(1,5,'-');
  634.                         display0(1,6,table[month0]);                                        //月十位
  635.                         display0(1,7,table[month1]);                                        //月个位
  636.                         display0(1,8,'-');
  637.                         display0(1,9,table[day0]);                                        //日十位
  638.                         display0(1,10,table[day1]);                                        //日个位
  639.                
  640.                         display0(1,12,table[time3[4]]);                                //星期
  641.                
  642.                         display0(2,1,table[hours0]);                                        //时十位
  643.                         display0(2,2,table[hours1]);                                        //时个位
  644.                         display0(2,3,':');
  645.                         display0(2,4,table[minutes0]);                                //分十位                        
  646.                         display0(2,5,table[minutes1]);                                //分个位
  647.                         display0(2,6,':');
  648.                         if(j<20)
  649.                                 display0(2,7,table[seconds0]);                                //秒十位
  650.                         else if(j>=20&&j<40)
  651.                                 display0(2,7,0x20);
  652.                         else
  653.                                 j=0;        
  654.                         display0(2,8,table[seconds1]);                                //秒个位
  655.                 break;
  656.                 case 10:                                //设定秒个位
  657.                         display0(1,3,table[year2]);                                        //年十位
  658.                         display0(1,4,table[year3]);                                        //年个位
  659.                         display0(1,5,'-');
  660.                         display0(1,6,table[month0]);                                        //月十位
  661.                         display0(1,7,table[month1]);                                        //月个位
  662.                         display0(1,8,'-');
  663.                         display0(1,9,table[day0]);                                        //日十位
  664.                         display0(1,10,table[day1]);                                        //日个位
  665.                
  666.                         display0(1,12,table[time3[4]]);                                //星期
  667.                
  668.                         display0(2,1,table[hours0]);                                        //时十位
  669.                         display0(2,2,table[hours1]);                                        //时个位
  670.                         display0(2,3,':');
  671.                         display0(2,4,table[minutes0]);                                //分十位                        
  672.                         display0(2,5,table[minutes1]);                                //分个位
  673.                         display0(2,6,':');
  674.                         display0(2,7,table[seconds0]);                                //秒十位
  675.                         if(j<20)
  676.                                 display0(2,8,table[seconds1]);                                //秒个位
  677.                         else if(j>=20&&j<40)
  678.                                 display0(2,8,0x20);
  679.                         else
  680.                                 j=0;        
  681.                 break;
  682.         }
  683.         if(flag1==0)
  684.         {
  685.                 if(temperature>=1000)
  686.                 {
  687.                         display0(2,10,table[temperature0]);                        //温度百位        

  688.                
  689.                         display0(2,11,table[temperature1]);                        //温度十位
  690.                         display0(2,12,table[temperature2]);                        //温度个位
  691.                         display0(2,13,'.');
  692.                         display0(2,14,table[temperature3]);                        //温度十分位
  693.                 }
  694.                 else if(temperature>=100&&temperature<1000)
  695.                 {
  696.                         display0(2,11,table[temperature1]);                        //温度十位
  697.                         display0(2,12,table[temperature2]);                        //温度个位
  698.                         display0(2,13,'.');
  699.                         display0(2,14,table[temperature3]);                        //温度十分位        
  700.                 }
  701.                 else
  702.                 {
  703.                         display0(2,12,table[temperature2]);                        //温度个位
  704.                         display0(2,13,'.');
  705.                         display0(2,14,table[temperature3]);                        //温度十分位                        
  706.                 }
  707.         }
  708.         else
  709.         {
  710.                 if(temperature>=100)
  711.                 {
  712.                         display0(2,10,'-');                        //温度百位                        
  713.                         display0(2,11,table[temperature1]);                        //温度十位
  714.                         display0(2,12,table[temperature2]);                        //温度个位
  715.                         display0(2,13,'.');
  716.                         display0(2,14,table[temperature3]);                        //温度十分位
  717.                 }
  718.                 else
  719.                 {
  720.                         display0(2,11,'-');                        //温度十位
  721.                         display0(2,12,table[temperature2]);                        //温度个位
  722.                         display0(2,13,'.');
  723.                         display0(2,14,table[temperature3]);                        //温度十分位        
  724.                 }                        
  725.         }
  726.         display0(2,15,0xdf);
  727.         display0(2,16,'C');
  728. }
  729. main()
  730. {
  731.         Lcd_Init();
  732.         DS1302_Init();
  733.         DS1302_Write_Time();
  734.         display0(1,1,0x20);
  735.         while(1)
  736.         {
  737.                 Scan();
  738.                 display1();
  739.                 delayms(5);
  740.         }
  741. }
复制代码
回复

使用道具 举报

ID:824490 发表于 2021-5-25 10:00 | 显示全部楼层
找不到合适的板支来测试你的代码,
走时显示正常说明1302读写正常,问题可能发生在按键处理,逻辑上你要画个流程图来
回复

使用道具 举报

ID:584814 发表于 2021-5-26 09:27 | 显示全部楼层
本坛内搜索一个1302的参考就可以,700多行代码还没有图呵呵
回复

使用道具 举报

ID:390416 发表于 2021-7-6 20:36 | 显示全部楼层
STC8单片机+DS1302+DS18B20+74HC595的LED16x32点阵温度万年历源代码分享 http://www.51hei.com/bbs/dpj-200968-1.html
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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