找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32+DS1302數(shù)碼管顯示時(shí)鐘一直為F?

[復(fù)制鏈接]
ID:342197 發(fā)表于 2019-1-15 16:50 | 顯示全部樓層 |閱讀模式
各位大神,如題:本人使用STM32F103c8t6進(jìn)行DS1302時(shí)鐘程序的編寫,用數(shù)碼管進(jìn)行時(shí)鐘顯示;但是無論怎樣修改時(shí)序、程序,時(shí)間在數(shù)碼管顯示均為F,
說明:硬件電路接線正常。
具體結(jié)果如下圖所示。

DS1302數(shù)碼管顯示F

DS1302數(shù)碼管顯示F

請各位大神幫忙看看,十分感謝!下面為DS1302程序

程序源碼:
  1. #include "DS1302.h"
  2. u8 READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
  3. u8 WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
  4. u8 TIME[7] = {0x00, 0x15, 0x23, 0x01, 0x01, 0x02, 0x13};
  5. //使用PA引腳作為DS1302的控制引腳,控制引腳的初始化
  6. //PA12-DATA   PA13-RST   PA14-CLK
  7. void DS1302_Init(void)
  8. {
  9.          GPIO_InitTypeDef GPIO_InitStructure;
  10.                
  11.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);         //使能PA端口時(shí)鐘
  12.                
  13.          //配置PA12-13-14端口為推挽輸出 ,用于驅(qū)動(dòng)DS1302
  14.          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;                                 
  15.          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  16.          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  17.         
  18.          GPIO_Init(GPIOA, &GPIO_InitStructure);                                
  19.         
  20.          GPIO_ResetBits(GPIOA,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);                        //輸出低

  21. }
  22. void DS1302_WriteCommand(u8 Add,u8 dat)
  23. {
  24.         u8 i=0;
  25.         
  26.         DS1302_RST=0;
  27.         delay_us(4); //延時(shí)
  28.         DS1302_CLK=0;
  29.         delay_us(2); //延時(shí)1us
  30.         
  31.         DS1302_RST=1; //設(shè)置為高電平,開啟寫數(shù)據(jù)
  32.         delay_us(4); //延時(shí)               
  33. //STM32向DS1302 寫入地址
  34.         for(i=0;i<8;i++)
  35.         {
  36.                
  37.                 DS1302_IO_OUT();
  38.                
  39.                 DS1302_DATA_OUT = Add & 0x01;
  40.                
  41.                 Add = Add >> 1;    //右移才對,由低位往高位移動(dòng)
  42.                
  43.                 DS1302_CLK=1; //因?yàn)樯仙財(cái)?shù)據(jù)寫入,所以需要設(shè)置為高電平
  44.                 delay_us(2); //延時(shí)
  45.                         
  46.                 DS1302_CLK=0; //因?yàn)樯仙財(cái)?shù)據(jù)寫入,所以需要設(shè)置為低電平,為下一次上升沿寫入數(shù)據(jù)做準(zhǔn)備
  47.                 delay_us(2); //延時(shí)
  48.                
  49.         }        
  50. //STM32向DS1302 寫入數(shù)據(jù)
  51.                 for(i=0;i<8;i++)
  52.         {
  53.                 DS1302_IO_OUT();
  54.                 DS1302_DATA_OUT = dat & 0x01;
  55.                 dat = dat >> 1;  
  56.                 DS1302_CLK=1;
  57.                 delay_us(2); //延時(shí)
  58.                         
  59.                 DS1302_CLK=0;
  60.                 delay_us(2); //延時(shí)
  61.                
  62.         }
  63.         DS1302_RST=0; //設(shè)置為低電平,結(jié)束數(shù)據(jù)的寫入
  64.         delay_us(4); //延時(shí)
  65.                
  66. }

  67. //MCU從DS1302 對應(yīng) 地址 中讀取相應(yīng)的 數(shù)據(jù)* **********************************************************************
  68. u8 DS1302_ReadByte(u8 Add)
  69. {
  70.         u8 dat=0,i=0,dat1=0;
  71.         DS1302_RST=0;
  72.         delay_us(4); //延時(shí)
  73.         DS1302_CLK=0;
  74.         delay_us(2); //延時(shí)
  75.         DS1302_RST=1; //設(shè)置為高電平,開啟寫數(shù)據(jù)
  76.         delay_us(4); //延時(shí)
  77.                
  78. //STM32向DS1302 寫入地址
  79.         for(i=0;i<8;i++)
  80.         {
  81.                 DS1302_IO_OUT();
  82.                
  83.                 DS1302_DATA_OUT = Add & 0x01;
  84.                
  85.                 Add = Add >> 1;  
  86.                
  87.                 DS1302_CLK=1;
  88.                 delay_us(2); //延時(shí)
  89.                         
  90.                 DS1302_CLK=0;
  91.                 delay_us(2); //延時(shí)
  92.         
  93.         }
  94.                
  95. //STM從DS1302讀取數(shù)據(jù),下降沿有效
  96.         for(i=0;i<8;i++)
  97.         {
  98.                 DS1302_IO_IN();
  99.                
  100.                 dat = dat >> 1;
  101.                 dat1 = DS1302_DATA_IN ;  
  102.                 dat1 = dat1 << 7;
  103.                 dat = dat | dat1;
  104.                 DS1302_CLK=1; //
  105.                 delay_us(2); //延時(shí)
  106.                 DS1302_CLK=0; //
  107.                 delay_us(2); //延時(shí)
  108.         }
  109.         DS1302_RST=0; //設(shè)置為低電平,結(jié)束數(shù)據(jù)的寫入
  110.         delay_us(4);
  111.         DS1302_CLK=1;/
  112.         delay_us(2); //延時(shí)
  113.         DS1302_IO_OUT();
  114.         DS1302_DATA_OUT=0;
  115.         delay_us(1);
  116.         DS1302_DATA_OUT=1;
  117.         delay_us(1);
  118.         return dat;
  119. }
  120. void RTC_DS1302_Init(void)
  121. {
  122.         u8 n=0;
  123.         DS1302_WriteCommand(0x8e,0x00); // 取消寫保護(hù)
  124.         for(n=0;n<7;n++)
  125.         {
  126.                 DS1302_WriteCommand(WRITE_RTC_ADDR[n],TIME[n]);
  127.         }
  128.         DS1302_WriteCommand(0x8e,0x80);//寫保護(hù)生效
  129. }
  130. //實(shí)時(shí)更新DS1302時(shí)鐘***********************************************************************
  131. //秒分時(shí)日月周年
  132. void RTC_DS1302_Time(void)
  133. {
  134.         u8 i=0;
  135.         for(i=0;i<7;i++)
  136.         {
  137.                 TIME[i] = DS1302_ReadByte(READ_RTC_ADDR[i]);
  138.         }
  139. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2019-1-16 08:28 | 顯示全部樓層
1、先搞清楚LED顯示的原理。
2、再單步運(yùn)行調(diào)試,驗(yàn)證顯示是不是按照顯示原理執(zhí)行的。
回復(fù)

使用道具 舉報(bào)

ID:158375 發(fā)表于 2019-1-16 08:45 | 顯示全部樓層
數(shù)碼管先直接顯示數(shù)字(別管DS1302),顯示正確嗎?
回復(fù)

使用道具 舉報(bào)

ID:342197 發(fā)表于 2019-1-16 15:30 | 顯示全部樓層
笨笨兔 發(fā)表于 2019-1-16 08:45
數(shù)碼管先直接顯示數(shù)字(別管DS1302),顯示正確嗎?

數(shù)碼管顯示沒有問題
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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