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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2836|回復: 15
打印 上一主題 下一主題
收起左側

基于STC89C52單片機DS1302亂碼 可能是什么原因導致的?

[復制鏈接]
跳轉到指定樓層
樓主
DS1302顯示亂碼,位選正常,反而段選異常;后來試了下,讓把有數碼管輸出0正常顯示,請問大家是什么原因呢?自己畫的板子。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:155507 發表于 2022-4-28 12:11 | 只看該作者
沒有代碼你等于問了個寂寞,誰知道你端口怎么配置的呢?
連個實際接線圖都沒有,誰知道你是怎么接線的

問題現象
可退敲出幾個問題可能
1. 沒有消影    2. 延時不足    3. 其他代碼耗時太長

回復

使用道具 舉報

板凳
ID:123289 發表于 2022-4-28 12:16 | 只看該作者
先上硬件圖
回復

使用道具 舉報

地板
ID:390416 發表于 2022-4-28 12:32 | 只看該作者
STC8單片機+DS1302+DS18B20+74HC595的LED16x32點陣溫度萬年歷源代碼分享
http://www.zg4o1577.cn/bbs/dpj-200968-1.html
回復

使用道具 舉報

5#
ID:161164 發表于 2022-4-28 13:27 | 只看該作者
開貼一張圖,代碼全靠猜?
回復

使用道具 舉報

6#
ID:684084 發表于 2022-4-28 14:34 | 只看該作者
搞清楚共陰共陽和分時顯示就可以了
回復

使用道具 舉報

7#
ID:797929 發表于 2022-4-28 14:42 | 只看該作者
哦哦,晚點放硬件和代碼上來啊;我現在想想,延時不足有這個可能性
回復

使用道具 舉報

8#
ID:797929 發表于 2022-4-28 14:53 | 只看該作者

原理圖

12.jpg (2.09 MB, 下載次數: 41)

12.jpg
回復

使用道具 舉報

9#
ID:797929 發表于 2022-4-28 20:26 | 只看該作者
angmall 發表于 2022-4-28 12:11
沒有代碼你等于問了個寂寞,誰知道你端口怎么配置的呢?
連個實際接線圖都沒有,誰知道你是怎么接線的
  1. #ifndef         _DELAY1MS_H
  2. #define  _DELAY1MS_H

  3. //包含頭文件//


  4. void delay1ms(unsigned int i);


  5. #endif
  6. ///////////////////////////////////////////////////////////
  7. #include "delay1ms.h"



  8. void delay1ms(unsigned int i)
  9. {
  10.         while(i--);        
  11. }
  12. ///////////////////////////////////////////////////
  13. #ifndef __KEY_H_
  14. #define __EKY_H_

  15. #include <reg52.h>        



  16. void key_prc();

  17. sbit k1=P2^5;
  18. sbit k2=P2^6;
  19. sbit k3=P2^7;



  20. #endif

  21. //////////////////////////////////
  22. #include "key.h"
  23. #include "delay1ms.h"
  24. #include"ds1302.h"
  25. #include"display.h"

  26. unsigned char M;




  27. void key_prc()//K1,K2,K3,K4按鍵代碼
  28. {         

  29.         if(k1==0)
  30.         {
  31.                 M++;
  32.                 TR0=1;
  33.                 delay1ms(100);
  34.                 while(!k1)
  35.                 {        
  36.                 Display();
  37.                 }
  38.                 if(M==4)
  39.                 {
  40.                         TR0=0;
  41.                         M=0;
  42.                 }

  43.                
  44.         }

  45. if(M!=0)
  46. {
  47.         
  48.         switch(M)
  49.         {
  50. case (1):
  51.                         {
  52.                         if(k2==0)
  53.                         {
  54.                                 delay1ms(10);
  55.                                 if(k2==0)
  56.                                 {
  57.                                         TIME[2]=(TIME[2]/16*10)+(TIME[2]%16);//轉化為十進制
  58.                                         TIME[2]++;
  59.                                         if(TIME[2]==24)
  60.                                                 TIME[2]=0;
  61.                                 }
  62.                         TIME[2]=((TIME[2]/10)<<4)+(TIME[2]%10);//十制數轉16進制,(TIME[2]/10)<<4)|(TIME[2]%10),若23TIME[2]/10=2,2-->0010,左移4位0010 0000,3-->0000 0011,0010 0000 |0000 0011=0011 0011,其中“+”與“|”運算結果一樣的
  63.                                 Ds1302Write(0x8E,0X00);//打開寫保護
  64.                
  65.                                 Ds1302Write(0x84,TIME[2]);//寫入時數據
  66.         
  67.                                 Ds1302Write(0x8E,0x80);//關閉寫保護
  68.                         while(!k2)
  69.                         {
  70.                         Display();
  71.                         }
  72.                         
  73.                                 
  74.                         }
  75.                                 if(k3==0)
  76.                                 {
  77.                                         delay1ms(10);
  78.                                         if(k3==0)
  79.                                         {
  80.                                         TIME[2]=(TIME[2]/16*10)+(TIME[2]%16);        
  81.                                                 if(TIME[2]==0)
  82.                                                         TIME[2]=24;
  83.                                         }

  84.                                         TIME[2]--;
  85.                                         TIME[2]=((TIME[2]/10)<<4)+(TIME[2]%10);
  86.                                         Ds1302Write(0x8E,0X00);
  87.                         
  88.                                         Ds1302Write(0x84,TIME[2]);
  89.         
  90.                                         Ds1302Write(0x8E,0x80);
  91.                                                 while(!k3)
  92.                                                 {
  93.                                                 Display();
  94.                                                 }
  95.         
  96.                                 }
  97. //                                if(k4==0)
  98. //                                {
  99. //                                        delay1ms(10);
  100. //                                        if(k4==0)
  101. //                                        {
  102. //                                                TR0=0;
  103. //                                                M=0;
  104. //                                                flag=0;
  105. //                                                
  106. //                                                
  107. //                                        }
  108. //                                }

  109.         }
  110. break;
  111. case (2):
  112.                         {
  113.                         if(k2==0)
  114.                         {
  115.                                 delay1ms(10);
  116.                                 if(k2==0)
  117.                                 {
  118.                                         TIME[1]=(TIME[1]/16*10)+(TIME[1]%16);
  119.                                         TIME[1]++;
  120.                                         if(TIME[1]==60)
  121.                                                 TIME[1]=0;
  122.                                 }
  123.                                 TIME[1]=((TIME[1]/10)<<4)+(TIME[1]%10);
  124.                                 Ds1302Write(0x8E,0X00);
  125.                
  126.                                 Ds1302Write(0x82,TIME[1]);
  127.         
  128.                                 Ds1302Write(0x8E,0x80);
  129.                         while(!k2)
  130.                         {
  131.                         Display();
  132.                         }
  133.                                 
  134.                         }
  135.                                 if(k3==0)
  136.                                 {
  137.                                         delay1ms(10);
  138.                                         if(k3==0)
  139.                                         {
  140.                                         TIME[1]=(TIME[1]/16*10)+(TIME[1]%16);                                                
  141.                                                 if(TIME[1]==0)
  142.                                                                 TIME[1]=60;
  143.                                                         }

  144.                                         TIME[1]--;
  145.                                         TIME[1]=((TIME[1]/10)<<4)+(TIME[1]%10);
  146.                                         Ds1302Write(0x8E,0X00);
  147.                         
  148.                                         Ds1302Write(0x82,TIME[1]);
  149.         
  150.                                         Ds1302Write(0x8E,0x80);
  151.                                                 while(!k3)
  152.                                                 {
  153.                                                 Display();
  154.                                                 }
  155.         
  156.         
  157.                                 }
  158. //                                if(k4==0)
  159. //                                {
  160. //                                        delay1ms(10);
  161. //                                        if(k4==0)
  162. //                                        {
  163. //                                                TR0=0;
  164. //                                                M=0;
  165. //                                                flag=0;
  166. //                                                
  167. //                                                
  168. //                                        }
  169. //                                }
  170.         }
  171. break;
  172. case (3):
  173.                         {
  174.                         if(k2==0)
  175.                         {
  176.                                 delay1ms(10);
  177.                                 if(k2==0)
  178.                                 {
  179.                                         TIME[0]=(TIME[0]/16*10)+(TIME[0]%16);
  180.                                         TIME[0]++;
  181.                                         if(TIME[0]==60)
  182.                                                 TIME[0]=0;
  183.                                 }
  184.                                 TIME[0]=((TIME[0]/10)<<4)+(TIME[0]%10);
  185.                                 Ds1302Write(0x8E,0X00);
  186.                
  187.                                 Ds1302Write(0x80,TIME[0]);
  188.         
  189.                                 Ds1302Write(0x8E,0x80);
  190.                         while(!k2)
  191.                         {
  192.                         Display();
  193.                         }
  194.                                 
  195.                         }
  196.                                 if(k3==0)
  197.                                 {
  198.                                         delay1ms(10);
  199.                                         if(k3==0)
  200.                                         {
  201.                                         TIME[0]=(TIME[0]/16*10)+(TIME[0]%16);                                                
  202.                                                 if(TIME[0]==0)
  203.                                                                 TIME[0]=60;
  204.                                                         }

  205.                                         TIME[0]--;
  206.                                         TIME[0]=((TIME[0]/10)<<4)+(TIME[0]%10);
  207.                                         Ds1302Write(0x8E,0X00);
  208.                         
  209.                                         Ds1302Write(0x80,TIME[0]);
  210.         
  211.                                         Ds1302Write(0x8E,0x80);
  212.                                                 while(!k3)
  213.                                                 {
  214.                                                 Display();
  215.                                                 }
  216.         
  217.         
  218.                                 }
  219. //                                if(k4==0)
  220. //                                {
  221. //                                        delay1ms(10);
  222. //                                        if(k4==0)
  223. //                                        {
  224. //                                                TR0=0;
  225. //                                                M=0;
  226. //                                                flag=0;
  227. //                                                
  228. //                                                
  229. //                                        }
  230. //                                }
  231.         }
  232. break;


  233. }
  234. }
  235. }
  236. /////////////////////////////////////////////////////
  237. #ifndef __DISPLAY_H_
  238. #define __DISPLAY_H_
  239. #include <reg52.h>        

  240. extern unsigned char DisplayData[8];
  241. extern bit flag;
  242. extern unsigned char M;
  243. //sbit LSA=P2^7;
  244. //sbit LSB=P2^6;
  245. //sbit LSC=P2^5;
  246. void Display();
  247. //void Displayflag();
  248.         
  249. #endif

  250. ////////////////////////////////////////////////////////
  251. #include "display.h"
  252. #include "delay1ms.h"
  253. #include "key.h"
  254. unsigned char i;

  255. unsigned char code weidata[8]={0x00,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0};
  256. void Display()
  257. {
  258.         if(flag==0 | M==0)
  259. {
  260.         for(i=0;i<8;i++)
  261.         {
  262.                 switch(i)         //位選,選擇點亮的數碼管
  263.                 {
  264.                         case(0):
  265.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第0位
  266.                         case(1):
  267.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第1位
  268.                         case(2):
  269.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第2位
  270.                         case(3):
  271.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第3位
  272.                         case(4):
  273.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第4位
  274.                         case(5):
  275.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第5位
  276.                         case(6):
  277.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第6位
  278.                         case(7):
  279.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第7位
  280.                 }
  281.                 P1=DisplayData[i];//發送數據
  282.                 delay1ms(200); //間隔一段時間掃描        
  283.                 P1=0x00;//消隱
  284.                         
  285.         }
  286. }
  287. else
  288. {
  289.         if(M==1)
  290.         {
  291.                 for(i=2;i<8;i++)
  292.         {
  293.                 switch(i)         //位選,選擇點亮的數碼管,
  294.                 {
  295.                         case(2):
  296.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第2位
  297.                         case(3):
  298.                                 P0 &=0x0f;P0 |=weidata[i];break;//顯示第3位
  299.                         case(4):
  300.                                 P0 &=0x0f;P0 |=weidata[i];//顯示第4位
  301.                         case(5):
  302.                                 P0 &=0x0f;P0 |=weidata[i];//顯示第5位
  303.                         case(6):
  304.                                 P0 &=0x0f;P0 |=weidata[i];//顯示第6位
  305.                         case(7):
  306.                                 P0 &=0x0f;P0 |=weidata[i];break;//顯示第7位
  307.                 }
  308.                 P1=DisplayData[i];//發送數據
  309.                 delay1ms(100); //間隔一段時間掃描        
  310.                 P1=0x00;//消隱
  311.         }
  312.         }
  313.         if(M==2)
  314.         {
  315.                 for(i=0;i<3;i++)
  316.         {
  317.                 switch(i)         //位選,選擇點亮的數碼管,
  318.                 {
  319.                         case(0):
  320.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第0位
  321.                         case(1):
  322.                                 P0 &=0x0f;P0 |=weidata[i];break;//顯示第1位
  323.                         case(2):
  324.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第2位
  325.                 }
  326.                 P1=DisplayData[i];//發送數據
  327.                 delay1ms(100); //間隔一段時間掃描        
  328.                 P1=0x00;//消隱
  329.         }
  330.         for(i=5;i<8;i++)
  331.         {
  332.                 switch(i)         //位選,選擇點亮的數碼管,
  333.                 {
  334.                         case(5):
  335.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第5位
  336.                         case(6):
  337.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第6位
  338.                                 case(7):
  339.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第7位
  340.                 }
  341.                 P1=DisplayData[i];//發送數據
  342.                 delay1ms(100); //間隔一段時間掃描        
  343.                 P1=0x00;//消隱
  344.         }
  345.         }
  346.                 if(M==3)
  347.         {
  348.         for(i=0;i<6;i++)
  349.         {
  350.                 switch(i)         //位選,選擇點亮的數碼管,
  351.                 {
  352.                         case(0):
  353.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第0位
  354.                         case(1):
  355.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第1位
  356.                         case(2):
  357.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第2位
  358.                         case(3):
  359.                                 P0 &=0x0f;P0 |=weidata[i];break;//顯示第3位
  360.                         case(4):
  361.                                 P0 &=0x0f;P0 |=weidata[i];break;//顯示第4位
  362.                         case(5):
  363.                                 P0 &=0x0f;P0 |=weidata[i]; break;//顯示第5位

  364.                 }
  365.                 P1=DisplayData[i];//發送數據
  366.                 delay1ms(100); //間隔一段時間掃描        
  367.                 P1=0x00;//消隱
  368.         }
  369.         }
  370. }
  371. }

  372. ////////////////////////////////////////////////////////////////////////////////////////////////////
  373. #ifndef __DS1302_H_
  374. #define __DS1302_H_

  375. //---包含頭文件---//
  376. #include<reg52.h>
  377. #include<intrins.h>

  378. //---重定義關鍵詞---//
  379. #ifndef uchar
  380. #define uchar unsigned char
  381. #endif

  382. #ifndef uint
  383. #define uint unsigned int
  384. #endif

  385. //---定義ds1302使用的IO口---//
  386. sbit DSIO=P3^1;
  387. sbit RST=P3^0;
  388. sbit SCLK=P3^2;
  389. //sbit DSIO=P3^4;
  390. //sbit RST=P3^5;
  391. //sbit SCLK=P3^6;
  392. //---定義全局函數---//
  393. void Ds1302Write(uchar addr, uchar dat);
  394. uchar Ds1302Read(uchar addr);
  395. void Ds1302Init();
  396. void Ds1302ReadTime();

  397. //---加入全局變量--//
  398. extern uchar TIME[7];        //加入全局變量

  399. #endif

  400. /////////////////////////////////////////////////////////////////////
  401. #include"ds1302.h"

  402. //---DS1302寫入和讀取時分秒的地址命令---//
  403. //---秒分時日月周年 最低位讀寫位;-------//
  404. uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
  405. uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};

  406. //---DS1302時鐘初始化2016年5月7日星期六12點00分00秒。---//
  407. //---存儲順序是秒分時日月周年,存儲格式是用BCD碼---//
  408. uchar TIME[7] = {0, 0, 0x12, 0x07, 0x05, 0x06, 0x16};

  409. /*******************************************************************************
  410. * 函 數 名         : Ds1302Write
  411. * 函數功能                   : 向DS1302命令(地址+數據)
  412. * 輸    入         : addr,dat
  413. * 輸    出         : 無
  414. *******************************************************************************/

  415. void Ds1302Write(uchar addr, uchar dat)
  416. {
  417.         uchar n;
  418.         RST = 0;
  419.         _nop_();

  420.         SCLK = 0;//先將SCLK置低電平。
  421.         _nop_();
  422.         RST = 1; //然后將RST(CE)置高電平。
  423.         _nop_();

  424.         for (n=0; n<8; n++)//開始傳送八位地址命令
  425.         {
  426.                 DSIO = addr & 0x01;//數據從低位開始傳送
  427.                 addr >>= 1;
  428.                 SCLK = 1;//數據在上升沿時,DS1302讀取數據
  429.                 _nop_();
  430.                 SCLK = 0;
  431.                 _nop_();
  432.         }
  433.         for (n=0; n<8; n++)//寫入8位數據
  434.         {
  435.                 DSIO = dat & 0x01;
  436.                 dat >>= 1;
  437.                 SCLK = 1;//數據在上升沿時,DS1302讀取數據
  438.                 _nop_();
  439.                 SCLK = 0;
  440.                 _nop_();        
  441.         }        
  442.                  
  443.         RST = 0;//傳送數據結束
  444.         _nop_();
  445. }

  446. /*******************************************************************************
  447. * 函 數 名         : Ds1302Read
  448. * 函數功能                   : 讀取一個地址的數據
  449. * 輸    入         : addr
  450. * 輸    出         : dat
  451. *******************************************************************************/

  452. uchar Ds1302Read(uchar addr)
  453. {
  454.         uchar n,dat,dat1;
  455.         RST = 0;
  456.         _nop_();

  457.         SCLK = 0;//先將SCLK置低電平。
  458.         _nop_();
  459.         RST = 1;//然后將RST(CE)置高電平。
  460.         _nop_();

  461.         for(n=0; n<8; n++)//開始傳送八位地址命令
  462.         {
  463.                 DSIO = addr & 0x01;//數據從低位開始傳送
  464.                 addr >>= 1;
  465.                 SCLK = 1;//數據在上升沿時,DS1302讀取數據
  466.                 _nop_();
  467.                 SCLK = 0;//DS1302下降沿時,放置數據
  468.                 _nop_();
  469.         }
  470.         _nop_();
  471.         for(n=0; n<8; n++)//讀取8位數據
  472.         {
  473.                 dat1 = DSIO;//從最低位開始接收
  474.                 dat = (dat>>1) | (dat1<<7);
  475.                 SCLK = 1;
  476.                 _nop_();
  477.                 SCLK = 0;//DS1302下降沿時,放置數據
  478.                 _nop_();
  479.         }

  480.         RST = 0;
  481.         _nop_();        //以下為DS1302復位的穩定時間,必須的。
  482.         SCLK = 1;
  483.         _nop_();
  484.         DSIO = 0;
  485.         _nop_();
  486.         DSIO = 1;
  487.         _nop_();
  488.         return dat;        
  489. }

  490. /*******************************************************************************
  491. * 函 數 名         : Ds1302Init
  492. * 函數功能                   : 初始化DS1302.
  493. * 輸    入         : 無
  494. * 輸    出         : 無
  495. *******************************************************************************/

  496. void Ds1302Init()
  497. {
  498.         uchar n;
  499.         Ds1302Write(0x8E,0X00);                 //禁止寫保護,就是關閉寫保護功能
  500.         for (n=0; n<7; n++)//寫入7個字節的時鐘信號:分秒時日月周年
  501.         {
  502.                 Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);        
  503.         }
  504.         Ds1302Write(0x8E,0x80);                 //打開寫保護功能
  505. }

  506. /*******************************************************************************
  507. * 函 數 名         : Ds1302ReadTime
  508. * 函數功能                   : 讀取時鐘信息
  509. * 輸    入         : 無
  510. * 輸    出         : 無
  511. *******************************************************************************/

  512. void Ds1302ReadTime()
  513. {
  514.         uchar n;
  515.         for (n=0; n<7; n++)//讀取7個字節的時鐘信號:分秒時日月周年
  516.         {
  517.                 TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
  518.         }
  519.                
  520. }

  521. //////////////////////////////////////////////////////////////////////////////////////////////////////////


  522. #include "ds1302.h"        
  523. #include "display.h"
  524. #include "key.h"

  525. typedef unsigned int u16;          //對數據類型進行聲明定義
  526. typedef unsigned char u8;
  527. unsigned char DisplayData[8];


  528. char num=0;
  529. u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  530. bit flag=0;

  531. u16 t;

  532. void datapros();         




  533. /*******************************************************************************
  534. * 函 數 名       : main
  535. * 函數功能                 : 主函數
  536. * 輸    入       : 無
  537. * 輸    出             : 無
  538. *******************************************************************************/
  539. void main()
  540. {        
  541.         Ds1302Init();           //第一次初始化后就可以注釋該條語句,這樣下次重啟就不會再次初始化了
  542.                 TMOD=0X01;                        
  543.                 TH0=(65536-46080)/256;
  544.                 TL0=(65536-46080)%256;
  545.                 EA=1;
  546.                 ET0=1;
  547.         while(1)
  548.         {
  549.                 datapros();         //數據處理函數
  550.                 Display();//數碼管顯示函數               
  551.           key_prc();
  552.         }               
  553. }

  554. void datapros()         
  555. {
  556.   Ds1302ReadTime();
  557.         DisplayData[0] = smgduan[TIME[2]/16];                                //時
  558.         DisplayData[1] = smgduan[TIME[2]&0x0f];                                 
  559.         DisplayData[2] = 0x40;
  560.         DisplayData[3] = smgduan[TIME[1]/16];                                //分
  561.         DisplayData[4] = smgduan[TIME[1]&0x0f];        
  562.         DisplayData[5] = 0x40;
  563.         DisplayData[6] = smgduan[TIME[0]/16];                                //秒
  564.         DisplayData[7] = smgduan[TIME[0]&0x0f];
  565. }


  566. void timer0() interrupt 1 //定時器1中斷函數代碼
  567. {
  568.         
  569.         TH0=(65536-46080)/256;//定時50ms
  570.         TL0=(65536-46080)%256;
  571.         t ++;

  572.         if(t==5)//0.25秒=0.25秒
  573.         {
  574.                 t=0;
  575.                 flag=~flag;
  576.         }
  577.         
  578. }
復制代碼
回復

使用道具 舉報

10#
ID:229502 發表于 2022-4-28 23:20 | 只看該作者
P05P06P07加上上拉電阻試試。
回復

使用道具 舉報

11#
ID:625730 發表于 2022-4-28 23:26 | 只看該作者

導致P1賦值不遵循0-10的變化,檢查一下datapros函數中的displaydata的取值是不是有問題。
回復

使用道具 舉報

12#
ID:401564 發表于 2022-4-28 23:40 | 只看該作者
自己畫板,這個板子能改進的地方太多了
單片機可以STC8A4K的,這個也是8051單片機,內置上拉電阻,不需要復位電路,不需要晶振,不需要那兩個數字IC
整個電路只需要:1片STC8A4K,1個DS1302,6個電容,一個CR2032,再加上按鍵就行了,電路簡單到不行
不喜歡的話,就當我沒說
你這個程序可以自己調試的,不用太多時間的
1,先搞定顯示部分的,不要讀取時鐘芯片的數據,只要顯示程序顯示一個變量就行,從0-9每次燒錄驗證
2,調試按鍵,在顯示正常之后,按鍵暫時不需要寫入,調試好按鍵功能,按一下變量加1或者減1,然后送顯示,每次燒錄驗證
3,按鍵功能正常之后,再對時鐘芯片進行讀寫驗證
回復

使用道具 舉報

13#
ID:797929 發表于 2022-4-29 09:18 來自手機 | 只看該作者
Y_G_G 發表于 2022-4-28 23:40
自己畫板,這個板子能改進的地方太多了
單片機可以STC8A4K的,這個也是8051單片機,內置上拉電阻,不需要復位 ...

業余的啊,自己畫來玩玩的,多賜教。顯示部分,調試過直接輸出賦值0,八位數碼管都能正常顯示。在開發板上11.0592MHz下載這代碼,能正常工作,只是端口配置不一樣。不會是時鐘模塊壞了吧。
回復

使用道具 舉報

14#
ID:797929 發表于 2022-4-29 09:22 來自手機 | 只看該作者
Y_G_G 發表于 2022-4-28 23:40
自己畫板,這個板子能改進的地方太多了
單片機可以STC8A4K的,這個也是8051單片機,內置上拉電阻,不需要復位 ...

在keil中,調試模式下,看了輸出段顯,只高三位(P1.6~P1.8)有高低電平變化
回復

使用道具 舉報

15#
ID:401564 發表于 2022-4-29 10:01 | 只看該作者
k21992 發表于 2022-4-29 09:22
在keil中,調試模式下,看了輸出段顯,只高三位(P1.6~P1.8)有高低電平變化

不要仿真,只看燒錄結果
直接賦值顯示能正常的話,就說明你顯示部分是對的
去論壇下載一個DS1302的代碼,讀寫看一下
我沒有DS1302,沒法測試你的代碼
回復

使用道具 舉報

16#
ID:797929 發表于 2022-4-29 10:16 | 只看該作者
Y_G_G 發表于 2022-4-29 10:01
不要仿真,只看燒錄結果
直接賦值顯示能正常的話,就說明你顯示部分是對的
去論壇下載一個DS1302的代碼, ...

好的,可以試試,多謝啊!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品久久久久久综合五月天 | 欧美最猛黑人 | 欧美一区二区三区在线观看 | 久久久精品视 | 国产精品久久久久久久久久久久久久 | 日本天天操 | 欧美人妇做爰xxxⅹ性高电影 | 欧美日本一区 | 精品久久一区 | 在线中文字幕亚洲 | 日本精品视频 | 成人在线国产 | 久久福利电影 | 91精品国产综合久久国产大片 | 国产精品免费看 | 国产亚洲一区二区在线观看 | 国产亚洲一区二区三区在线观看 | 91资源在线 | 亚洲精品久久久久久久久久久 | 女朋友的闺蜜3韩国三级 | av日韩精品 | 久久免费视频1 | 国产精品成人一区二区三区 | 欧美视频二区 | 黄免费在线| 综合精品 | 久久亚洲一区 | 亚洲一区二区三区四区视频 | 91欧美激情一区二区三区成人 | 国产三级一区二区 | 91视频电影 | 免费同性女女aaa免费网站 | 日韩欧美在线观看 | 国产成人精品久久 | 精品国产一级 | 我爱操 | 北条麻妃国产九九九精品小说 | 中文字幕 亚洲一区 | 国产精品久久久久久久久 | 亚洲一区国产精品 | 国产激情视频 |