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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4537|回復(fù): 4
收起左側(cè)

各位大神 DS1302讀數(shù)不對(duì)怎么破?

[復(fù)制鏈接]
ID:365752 發(fā)表于 2018-7-14 01:48 | 顯示全部樓層 |閱讀模式
100黑幣
各位大神  小弟最近在學(xué)習(xí)DS1302和12864時(shí)遇到一個(gè)問(wèn)題實(shí)在解決不了  經(jīng)過(guò)測(cè)試12864能夠正常使用  但是1302讀數(shù)卻不對(duì) 轉(zhuǎn)換成十進(jìn)制數(shù) 顯示的第一秒是1 第二秒是0  第三秒是3  第四秒是0然后我又將二進(jìn)制代碼顯示在12864上  第一秒是00000001  第二秒是00000000 第三秒是00000011  第四秒是00000000  所以我懷疑是1302根本就沒(méi)讀對(duì) 然后換了個(gè)1302芯片  但是結(jié)果是一樣的  查了半天資料  就是不知道是怎么回事   希望大神們不吝賜教  萬(wàn)分感謝  以下是代碼

這是1302的驅(qū)動(dòng)
  1. /*
  2. ********************************************************************************
  3. **
  4. **寫(xiě)一個(gè)字節(jié)
  5. ********************************************************************************
  6. */

  7. void Write_Ds1302_Byte(unsigned  char temp)
  8. {
  9.         uchar i;
  10.         for (i=0;i<8;i++)
  11.         {
  12.                 SCK=0;
  13.                 SDA=temp&0x01;
  14.                 temp>>=1;
  15.                 SCK=1;
  16.         }
  17. }

  18. /*
  19. ********************************************************************************
  20. ** 寫(xiě)入DS1302
  21. ********************************************************************************
  22. */   

  23. void Write_Ds1302( uchar address,uchar dat )     
  24. {
  25.         RST=0;
  26.         _nop_();
  27.         SCK=0;
  28.         _nop_();
  29.         RST=1;       
  30.         _nop_();
  31.         Write_Ds1302_Byte(address);        //發(fā)送地址
  32.         Write_Ds1302_Byte(dat);                //發(fā)送數(shù)據(jù)
  33.         RST=0
  34. }

  35. /*
  36. ********************************************************************************
  37. **
  38. ** 讀數(shù)據(jù)
  39. ********************************************************************************
  40. */

  41. uchar Read_Ds1302 ( uchar address )
  42. {
  43.         uchar i,temp=0x00;
  44.         RST=0;
  45.         _nop_();
  46.         _nop_();
  47.         SCK=0;
  48.         _nop_();
  49.         _nop_();
  50.         RST=1;
  51.         _nop_();
  52.         _nop_();
  53.         Write_Ds1302_Byte(address);
  54.         _nop_();
  55.         _nop_();
  56.         for (i=0;i<8;i++)
  57.         {               
  58.                 temp>>=1;       
  59.                 _nop_();
  60.                
  61.                 SCK=0;
  62.                 _nop_();
  63.                
  64.                 if(SDA)
  65.                         temp|=0x80;       
  66.                                 //óòòÆò»Î»
  67.                
  68.                 SCK=1;
  69.         }
  70.         RST=0;
  71.         _nop_();
  72.         _nop_();
  73.        

  74.         SCK=1;
  75.         _nop_();
  76.         _nop_();

  77.         SDA=1;
  78.         _nop_();
  79.         _nop_();
  80.         return (temp);
  81. }
  82. void Set_RTC(void)                    //設(shè)定日歷
  83. {
  84.         uchar i,tmp;
  85.         for(i=0;i<7;i++)
  86.         {       //BCD處理
  87.                 tmp=l_tmpdate[i]/10;
  88.                 l_tmpdate[i]=l_tmpdate[i]%10;
  89.                 l_tmpdate[i]=l_tmpdate[i]+tmp*16;
  90.         }  
  91.         Write_Ds1302(0x8E,0X00);
  92.        

  93.         for(i=0;i<7;i++)                //7次寫(xiě)入  秒分時(shí)日月周年
  94.         {
  95.                   Write_Ds1302(write_rtc_address[i],l_tmpdate[i]);
  96.                  
  97.          }
  98.          Write_Ds1302(0x8E,0x80);
  99. }
  100. /*
  101. ********************************************************************************
  102. *
  103. ** 讀時(shí)鐘數(shù)據(jù)
  104. ********************************************************************************
  105. */

  106. void Read_RTC(void
  107. {
  108.         uchar i,*p;
  109.         p=read_rtc_address
  110.         for(i=0;i<7;i++)                    //7次讀取 秒分時(shí)日月周年
  111.         {
  112.                 l_tmpdate[i]=Read_Ds1302(*p);
  113.                 p++;
  114.         }
  115. }
復(fù)制代碼

這是各種定義
  1. #define uchar unsigned char
  2. #define uint  unsigned int
  3. sbit LCD_RS=P3^1;
  4. sbit LCD_RW=P3^6;
  5. sbit LCD_E=P3^5;

  6. //1302管腳定義
  7. sbit SCK=P3^4;
  8. sbit SDA=P3^3;
  9. sbit RST=P3^2;
  10. code uchar table1[]={"2018年07月12日"};
  11. code uchar table2[]={"  21: 45: 45"};
  12. code uchar table3[]={"星期四 ,28.9℃"};
  13. code uchar table4[][7]={"一","二","三","四","五","六","日"};
  14. code uchar table5[][2]={"-","."};
  15. code uchar num_tab[][10]={"0","1","2","3","4","5","6","7","8","9"};
  16. code uchar write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //1302寫(xiě)入地址
  17. code uchar read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; //1302讀取地址
  18. uchar l_tmpdate[7]={0,0,23,3,8,11,20};//秒分時(shí)日月周年2011-07-14 12:00:00
  19. uchar l_tmpdisplay[8];


復(fù)制代碼
這是main函數(shù)
  1. #include "reg52.h"
  2. #include "defin.h"
  3. #include "lcd.h"
  4. #include "intrins.h"
  5. #include "ds1302.h"
  6. #include "18b02.h"

  7. void main()
  8. {
  9.         uint i=0,j=0;
  10.         delay(400);
  11.                
  12.         LED_init();
  13.         Set_RTC();
  14.        

  15.                 LED_wldate(0,0,table1);
  16.                 LED_wldate(1,0,table2);
  17.                 LED_wldate(2,0,table3);
  18.                 LED_wldate(3,0,table4);
  19.         delay(1000);
  20.         LED_wshi(23);
  21.         LED_wfen(23);
  22.         LED_wmiao(23);
  23.         LED_wnian(23);
  24.         LED_wyue(23);
  25.         LED_wri(23);
  26.         LED_wday(0);

  27.         while(1)
  28.          
  29.         {
  30.        
  31.                 Read_RTC();
  32.                 //顯示秒的個(gè)位
  33.         /*        setpos(1,5);
  34.     j=l_tmpdate[0]%16;
  35.                
  36.                 LED_wldate(1,5,num_tab[j]);*/
  37.                 //顯示秒的二進(jìn)制
  38.                 for(i=0;i<8;i++)
  39.                 {
  40.                         j=l_tmpdate[0]&0x01;
  41.                         l_tmpdate[0]>>=1;
  42.                         setpos(3,7-i);
  43.                         delay(2);
  44.                         LED_wdate(j+0x30);
  45.                         delay(2);
  46.                 }
  47.        
  48.                 delay(5);
  49.                
  50.         }
  51.        
  52. }
復(fù)制代碼

這是12864驅(qū)動(dòng)
  1. void delay(unsigned int time)
  2. {
  3.   unsigned int i,j;
  4.   for(i=0;i<time;i++)
  5.     for(j=0;j<111;j++);
  6. }

  7. void LED_wcmd(uchar cmd)
  8. {
  9.         LCD_RS=0;
  10.         delay(1);
  11.         LCD_RW=0;
  12.         delay(1);
  13.         LCD_E=1;
  14.         delay(1);
  15.         P2=cmd;
  16.         delay(1);
  17.         LCD_E=0;
  18.         delay(1);
  19. }

  20. void LED_wdate(uchar date)
  21. {
  22.         LCD_RS=1;
  23.         delay(1);
  24.         LCD_RW=0;
  25.         delay(1);
  26.         LCD_E=1;
  27.         delay(1);
  28.         P2=date;
  29.         delay(1);
  30.         LCD_E=0;
  31.         delay(1);
  32. }
  33. void setpos(uchar x,uchar y)
  34. {
  35.         uchar x1;
  36.         switch (x)
  37.         {
  38.                 case 0:x1=0x80;break;
  39.                 case 1:x1=0x90;break;
  40.                 case 2:x1=0x88;break;
  41.                 case 3:x1=0x98;break;
  42.         }
  43.         x1=x1+y;
  44.         LED_wcmd(x1);
  45. }

  46. void LED_wldate(uchar x,uchar y,uchar code *date)
  47. {
  48.         uchar i=0;
  49.         setpos(x,y);
  50.         while(date[i]>=0x20)
  51.         {
  52.                 LED_wdate(date[i]);
  53.                 delay(3)        ;
  54.                 i++;
  55.                        
  56.         }
  57. }
  58.         void LED_wday(uchar x)
  59. {
  60.         uchar i=0;
  61.         setpos(2,2);
  62.         while(table4[x][i]>=0x20)
  63.         {
  64.                 LED_wdate(table4[x][i]);
  65.                 delay(3)        ;
  66.                 i++;
  67.                        
  68.         }
  69. }
  70. void LED_init()
  71. {
  72.         LED_wcmd(0x30);
  73.         delay (5);
  74.        
  75.         LED_wcmd(0x0c);
  76.         delay (5);
  77.         LED_wcmd(0x01);
  78.         delay (5);
  79.         LED_wcmd(0x06);
  80.         delay (5);
  81.        
  82.         delay (5);
  83.        
  84.         delay (5);
  85. }
  86. void LED_wmiao(uchar date)
  87. {
  88.         uchar shi,ge;
  89.         shi=date/10;
  90.         ge=date%10;
  91.         setpos(1,5);
  92.         LED_wdate(shi+0x30);
  93.         LED_wdate(ge+0x30);
  94. }
  95. void LED_wfen(uchar date)
  96. {
  97.         uchar shi,ge;
  98.         shi=date/10;
  99.         ge=date%10;
  100.         setpos(1,3);
  101.         LED_wdate(shi+0x30);
  102.         LED_wdate(ge+0x30);
  103. }
  104. void LED_wshi(uchar date)
  105. {
  106.         uchar shi,ge;
  107.         shi=date/10;
  108.         ge=date%10;
  109.         setpos(1,1);
  110.         LED_wdate(shi+0x30);
  111.        
  112.         LED_wdate(ge+0x30);
  113. }
  114. void LED_wnian(uchar date)
  115. {
  116.         uchar shi,ge;
  117.         shi=date/10;
  118.         ge=date%10;
  119.         setpos(0,1);
  120.         LED_wdate(shi+0x30);
  121.        
  122.         LED_wdate(ge+0x30);
  123. }
  124. void LED_wyue(uchar date)
  125. {
  126.         uchar shi,ge;
  127.         shi=date/10;
  128.         ge=date%10;
  129.         setpos(0,3);
  130.         LED_wdate(shi+0x30);
  131.        
  132.         LED_wdate(ge+0x30);
  133. }
  134. void LED_wri(uchar date)
  135. {
  136.         uchar shi,ge;
  137.         shi=date/10;
  138.         ge=date%10;
  139.         setpos(0,5);
  140.         LED_wdate(shi+0x30);
  141.        
  142.         LED_wdate(ge+0x30);
  143. }
復(fù)制代碼



lcdTEST.zip

40.24 KB, 下載次數(shù): 10

這是代碼

回復(fù)

使用道具 舉報(bào)

ID:365752 發(fā)表于 2018-7-14 09:55 | 顯示全部樓層
問(wèn)題已解決  在1302的三個(gè)引腳上加上10K的上啦電阻就OK了(手頭沒(méi)有電阻  我是直接接在51單片機(jī)的P0口上了)

評(píng)分

參與人數(shù) 1黑幣 +1 收起 理由
NPC-1024 + 1 很給力!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:371423 發(fā)表于 2018-7-14 13:34 | 顯示全部樓層
樓主請(qǐng)問(wèn)一下,DS1302和DS1307以及DS12C887哪一個(gè)在程序編寫(xiě)上更好用啊
回復(fù)

使用道具 舉報(bào)

ID:365752 發(fā)表于 2018-7-14 16:50 | 顯示全部樓層
NPC-1024 發(fā)表于 2018-7-14 13:34
樓主請(qǐng)問(wèn)一下,DS1302和DS1307以及DS12C887哪一個(gè)在程序編寫(xiě)上更好用啊

1307沒(méi)用過(guò),12c887功能比較強(qiáng),因此初始化的時(shí)候操作的寄存器比1302多,但也就多幾行代碼,1302讀的數(shù)據(jù)是bcd碼,需要經(jīng)過(guò)轉(zhuǎn)換才能使用,而12c887不要轉(zhuǎn)換,其實(shí)轉(zhuǎn)換也就是幾行代碼的問(wèn)題,因此從編程角度講,兩個(gè)都差不多,但是從硬件角度,個(gè)人感覺(jué)1302沒(méi)有12887好搞,上面我說(shuō)的問(wèn)題我鼓搗了兩天才搞定,但是1302是串口通訊不得不說(shuō),非常節(jié)省io口,我也是初學(xué),這些是我的一些見(jiàn)解,不對(duì)勿噴
回復(fù)

使用道具 舉報(bào)

ID:371423 發(fā)表于 2018-7-15 11:33 | 顯示全部樓層
q2084054508 發(fā)表于 2018-7-14 16:50
1307沒(méi)用過(guò),12c887功能比較強(qiáng),因此初始化的時(shí)候操作的寄存器比1302多,但也就多幾行代碼,1302讀的數(shù)據(jù) ...

但是我覺(jué)得DS12C887的引腳實(shí)在是太多了,想問(wèn)一下那AD0~7的引腳有沒(méi)有可能通過(guò)某種芯片減少對(duì)IO的占用啊?
另外想求一份DS12C887的操作函數(shù),不知可否呀>v<
今天偶然看見(jiàn)有一個(gè)HT1380據(jù)說(shuō)和DS1302是一樣的引腳定義,操作函數(shù)可以通用,樓主試過(guò)這款芯片嘛?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 人人草人人干 | 亚洲精品大全 | 毛片视频网站 | 日韩 欧美 二区 | 久久久精品综合 | 欧美区在线 | 国产女人叫床高潮大片免费 | 日韩精品在线观看一区二区三区 | 亚洲高清视频在线 | 黄色大片免费观看 | 欧美激情 一区 | 91国内精品久久 | 91亚洲国产成人久久精品网站 | 国产精品久久久久久久岛一牛影视 | 在线视频三区 | 国产一区二区三区四区五区加勒比 | 看片网站在线 | 国产成人在线视频播放 | 91精品国产自产在线老师啪 | 91精品久久久久久久久久入口 | 91动漫在线观看 | 欧美性乱 | 一区二区三区视频 | 日韩高清三区 | 国产精品18hdxxxⅹ在线 | 91精品国产91久久久久游泳池 | 日韩欧美国产综合 | 国产精品日韩一区二区 | 精品国产乱码久久久久久老虎 | 国产精品婷婷 | 国产高清自拍视频在线观看 | 亚洲一区二区三区免费视频 | 日韩视频精品在线 | 91欧美| 欧美淫| 日韩成人影院在线观看 | 久久久久久久久久久久一区二区 | 欧美精品一区二区三 | 国产高清在线精品 | 在线一区二区三区 | 国产羞羞视频在线观看 |