久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1901|回復: 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.zg4o1577.cn/bbs/dpj-200968-1.html
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品久久久 | 国产综合久久久久久鬼色 | 香蕉婷婷 | 伊人伊人伊人 | 国产一区二区久久 | 亚洲第一天堂 | 中文字幕高清视频 | 亚洲一区二区三区视频在线 | 中文在线一区二区 | 91在线精品播放 | 国产成人精品一区二区三区 | 狠狠色狠狠色综合系列 | 亚洲91精品 | 日韩一二区 | 99pao成人国产永久免费视频 | 一区二区中文字幕 | 欧美一区二区三区电影 | 成人午夜在线 | 在线成人 | 日本人和亚洲人zjzjhd | 国产色婷婷精品综合在线播放 | 91免费电影 | 欧亚av在线 | 欧美成人一区二区三区 | 成人超碰| 日韩午夜电影在线观看 | 欧美一区在线视频 | 欧美精品一区在线 | 国产视频不卡一区 | 亚洲综合国产 | 二区三区视频 | 国产精品福利在线观看 | 污视频免费在线观看 | 欧美电影一区 | 视频一二区 | 日韩一区二区三区视频在线播放 | 午夜视频在线视频 | 欧美日韩综合视频 | 国产区视频在线观看 | 欧美性猛交一区二区三区精品 | 亚洲欧美国产一区二区三区 |