找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1890|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

DS1302讀取時間問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1091661 發(fā)表于 2023-11-19 17:59 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
用51單片機寫了一個DS1302的驅(qū)動,之后顯示到數(shù)碼管上,可是讀出的一直都是 “8808”,問一下各位我的代碼有什么問題

8.jpg (98.56 KB, 下載次數(shù): 78)

8.jpg

DS1302 四位數(shù)碼管.rar

22.85 KB, 下載次數(shù): 12

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

使用道具 舉報

沙發(fā)
ID:213173 發(fā)表于 2023-11-20 06:50 | 只看該作者
這種段碼屏屬定制屏,必須了解外部引腳與內(nèi)部LED連接關(guān)系才能寫出正確的驅(qū)動碼。
回復(fù)

使用道具 舉報

板凳
ID:996773 發(fā)表于 2023-11-20 09:28 | 只看該作者
這問題問的一頭霧水,樓主讀取的1302的秒數(shù)據(jù)還是分鐘數(shù)據(jù),還是小時數(shù)據(jù)?

有沒有進行bcd到十進制轉(zhuǎn)換?沒代碼沒線路圖也就算了,問個問題也得精準一些嘛
回復(fù)

使用道具 舉報

地板
ID:1091661 發(fā)表于 2023-11-20 21:06 | 只看該作者
hi等你 發(fā)表于 2023-11-20 09:28
這問題問的一頭霧水,樓主讀取的1302的秒數(shù)據(jù)還是分鐘數(shù)據(jù),還是小時數(shù)據(jù)?

有沒有進行bcd到十進制轉(zhuǎn)換 ...

讀取小時和分鐘,已經(jīng)做轉(zhuǎn)換了
回復(fù)

使用道具 舉報

5#
ID:1091661 發(fā)表于 2023-11-20 21:07 | 只看該作者
wulin 發(fā)表于 2023-11-20 06:50
這種段碼屏屬定制屏,必須了解外部引腳與內(nèi)部LED連接關(guān)系才能寫出正確的驅(qū)動碼。

就是常見的共陽8字數(shù)碼管,帶定制圖標的
回復(fù)

使用道具 舉報

6#
ID:517466 發(fā)表于 2023-11-20 22:45 | 只看該作者
給你提個建議:
1、測試顯示屏輸出顯示數(shù)據(jù)有沒有問題
     這個治安們用你的函數(shù)去測試,與DS1302的處理沒有一點關(guān)系。確認沒毛病后再進行第二步
2、測試讀寫DS1302是否正常。
     就是說你通過內(nèi)部程序前腳設(shè)置DS1302內(nèi)容,比如時分秒、年月日數(shù)據(jù),然后再讀出來,看是否一致。也許秒數(shù)據(jù)會發(fā)生辯護啊,當(dāng)年月日以及其他和時間無關(guān)的數(shù)據(jù),設(shè)置完,再讀出來,應(yīng)該是一樣的。否則程序是有問題的。
3、1和2都正常了,再去進行讀取時間并顯示的操作。
回復(fù)

使用道具 舉報

7#
ID:517466 發(fā)表于 2023-11-20 22:49 | 只看該作者
順便發(fā)給你一個用STC89C52測試過沒問題的工程,你可以參考代碼看看,和你做的有沒有出入。我的程序用的是12M晶振 DS1302.zip (42.95 KB, 下載次數(shù): 7)


回復(fù)

使用道具 舉報

8#
ID:1091661 發(fā)表于 2023-11-22 20:57 | 只看該作者
suncat0504 發(fā)表于 2023-11-20 22:49
順便發(fā)給你一個用STC89C52測試過沒問題的工程,你可以參考代碼看看,和你做的有沒有出入。我的程序用的是12 ...

好的,謝大佬
回復(fù)

使用道具 舉報

9#
ID:213173 發(fā)表于 2023-11-23 13:47 | 只看該作者
BAAABBB 發(fā)表于 2023-11-20 21:07
就是常見的共陽8字數(shù)碼管,帶定制圖標的


  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar displaydata[4];
  6. uchar code smgduan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽數(shù)碼管編碼
  7. uchar code read_rtc_addr[7] ={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};//DS1302讀取地址
  8. uchar code write_rtc_addr[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//DS1302寫地址
  9. //順序:秒分時日月周年,存儲格式為十進制
  10. uchar time[7]={30,31,11,23,11,4,23};//時間
  11. bit flicker;//閃爍
  12. //=======================DS1302引腳===========================
  13. sbit SCLK=P0^6;
  14. sbit IO  =P0^4;
  15. sbit RST =P0^5;
  16. //=======================數(shù)碼管引腳===========================
  17. sbit d0=P1^1;//d0~d3  “8”字數(shù)碼管
  18. sbit d1=P1^2;
  19. sbit d2=P1^3;
  20. sbit d3=P1^4;

  21. //ACC累加器
  22. sbit ACC0=ACC^0;
  23. sbit ACC7=ACC^7;
  24. /***************DS1302有關(guān)子函數(shù)********************/
  25. void write_byte(uchar dat)//寫一個字節(jié)
  26. {
  27.         uchar i;
  28.         ACC=dat;
  29.         RST=1;
  30.         for(i=8;i>0;i--)
  31.         {
  32.                 IO=ACC0;
  33.                 SCLK=0;
  34.                 SCLK=1;
  35.                 ACC>>=1;
  36.         }
  37. }

  38. uchar read_byte()//讀一個字節(jié)
  39. {
  40.         uchar i;
  41.         RST=1;
  42.         for(i=8;i>0;i--)
  43.         {
  44.                 ACC7=IO;
  45.                 SCLK=1;
  46.                 SCLK=0;
  47.                 ACC>>=1;
  48.         }
  49.         return ACC;
  50. }

  51. void write_1302(uchar add,uchar dat)//向1302芯片指定地址寫入數(shù)據(jù)
  52. {
  53.         RST=0;
  54.         SCLK=0;
  55.         RST=1;
  56.         write_byte(add);
  57.         write_byte(dat);
  58.         SCLK=1;
  59.         RST=0;
  60. }

  61. uchar read_1302(uchar add)//從1302指定地址讀取數(shù)據(jù)
  62. {
  63.         uchar temp;
  64.         RST=0;
  65.         SCLK=0;
  66.         RST=1;
  67.         write_byte(add);
  68.         temp=read_byte();
  69.         SCLK=1;
  70.         RST=0;
  71.         return(temp);
  72. }

  73. uchar BCD_D(uchar bcd)//BCD碼轉(zhuǎn)十進制函數(shù)
  74. {
  75.         return ((bcd>>4)*10)+(bcd & 0x0f);
  76. }

  77. uchar D_BCD(uchar Dec)//十進制轉(zhuǎn)BCD碼函數(shù)
  78. {
  79.         return (Dec/10*16+Dec%10);
  80. }

  81. void rtc_init()//初始化1302
  82. {
  83.         uchar i,
  84.         RST=0;
  85.         SCLK=0;
  86.         write_1302(0x8e,0x00); //允許寫,禁止寫保護
  87.         for(i=0;i<7;i++)
  88.                 write_1302(write_rtc_addr[i],D_BCD(time[i]));//寫1302時鐘數(shù)據(jù)
  89.         write_1302(0x8e,0x80); //打開寫保護
  90. }

  91. void read_time()//讀1302時鐘數(shù)據(jù)
  92. {
  93.         uchar i;
  94.         write_1302(0x8e,0x00);
  95.         for(i=0;i<7;i++)
  96.         {
  97.                 time[i]=BCD_D(read_1302(read_rtc_addr[i]));
  98.         }
  99.         write_1302(0x8e,0x80);
  100. }

  101. void data_display()
  102. {
  103.         static uchar temp;
  104.         static uchar i;
  105.         read_time();
  106.         if(temp!=time[0])
  107.         {
  108.                 temp=time[0];
  109.                 flicker=1;
  110.         }
  111.         displaydata[0]=smgduan[time[1]%10];
  112.         displaydata[1]=smgduan[time[1]/10];
  113.         if(flicker)
  114.         {       
  115.                 if(++i>=200)
  116.                 {
  117.                         i=0;
  118.                         flicker=0;
  119.                 }
  120.                 displaydata[2]=smgduan[time[2]%10]&0x7f;//秒閃點
  121.         }
  122.         else displaydata[2]=smgduan[time[2]%10];       
  123.         displaydata[3]=smgduan[time[2]/10];

  124. }
  125. void display()
  126. {
  127.         static uchar i;
  128.         P1&=0xe1;//清位碼、消隱
  129.         P2=displaydata[i];//送段碼
  130.         P1|=0x02<<i;//送位碼
  131.         i=++i%4;//循環(huán)計數(shù)
  132. }

  133. void delay(uint r)
  134. {
  135.         while(r--);
  136. }

  137. void main()
  138. {
  139.         rtc_init();
  140.         while(1)
  141.         {
  142.                 data_display();
  143.                 display();
  144.                 delay(100);
  145.         }
  146. }
復(fù)制代碼



回復(fù)

使用道具 舉報

10#
ID:1091661 發(fā)表于 2023-11-24 22:13 | 只看該作者

不知道為什么讀出的是4545,你的仿真有能運行嗎
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表