找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關(guān)于單片機(jī)DS3231數(shù)據(jù)寫入與讀出后數(shù)碼管卡住的問題

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 6 黑幣 回復(fù)本帖可獲得 6 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:404720 發(fā)表于 2018-11-30 19:06 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
盡量都注釋了,希望各位大佬幫我看看,原本如果沒有讀和寫的話,tm1637數(shù)碼管中間兩個(gè)小點(diǎn)應(yīng)該是要閃的,但是一旦讀/寫了,就會(huì)不閃,卡主,不知道為什么,還是我的語言邏輯錯(cuò)了或者語法錯(cuò)了,麻煩各位大佬幫我看看。

單片機(jī)DS3231源碼:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit SCL=P1^2; //clk
  6. sbit SDA=P1^3; //dio 這是數(shù)碼TM1637的定義引腳
  7. int sec10=0;//十位的秒
  8. int sec=0;//個(gè)位的秒
  9. int min10=0;//十位的分
  10. int min=0;//個(gè)位的分
  11. sbit scl=P1^0;
  12. sbit sda=P1^0;//這是ds3231的定義引腳

  13. void delay10ms()
  14. {
  15. int a,b;
  16. for(a=50;a>0;a--)
  17. for(b=200;b>0;b--);
  18. }
  19. void delay()
  20. {
  21. ;;
  22. }
  23. void nack()//3231空應(yīng)答信號(hào)
  24. {
  25. scl=1;
  26. delay();
  27. sda=1;
  28. scl=0;
  29. delay();
  30. }        
  31. void start()//3231開始信號(hào)
  32. {
  33. sda=1;
  34. scl=1;
  35. delay();
  36. sda=0;
  37. delay();
  38. }
  39. void stop()//3231停止
  40. {
  41. sda=0;
  42. scl=1;
  43. delay();
  44. sda=1;
  45. delay();
  46. }
  47. void ack()//3231管應(yīng)答
  48. {
  49. uchar i;
  50. scl=1;
  51. delay();
  52. while((sda==1)&&i<520)
  53. i++;
  54. scl=0;
  55. delay();
  56. }
  57. void write_byte(uchar date)//3231寫一個(gè)字節(jié)
  58. {
  59. uchar i,temp;
  60. temp=date;
  61. for(i=0;i<8;i++)
  62. {
  63. temp=temp<<1;
  64. sda=CY;
  65. delay();
  66. scl=1;
  67. delay();
  68. }
  69. scl=0;
  70. delay();
  71. sda=1;
  72. }
  73. unsigned char read_byte()//3231讀一個(gè)字節(jié)
  74. {
  75. uchar i,j,k;
  76. scl=0;
  77. delay();
  78. for(i=0;i<8;i++)
  79. {
  80. scl=1;
  81. delay();
  82. j=sda;
  83. k=(k<<1)|j;
  84. scl=0;
  85. delay();
  86. }
  87. return k;
  88. }
  89. void write_at24c32(uchar address,uchar date)//3231指定地址寫
  90. {
  91. start();
  92. write_byte(0x57);
  93. ack();
  94. write_byte(address);
  95. ack();
  96. write_byte(date);
  97. ack();
  98. stop();
  99. }
  100. uchar read_at24c32(uchar address)//3231指定地址讀
  101. {
  102. uchar date;
  103. write_byte(0x56);
  104. ack();
  105. write_byte(address);
  106. ack();
  107. start();
  108. write_byte(0x57);
  109. ack();
  110. date=read_byte();
  111. nack();
  112. stop();
  113. return date;
  114. }
  115. void IIC_delay(void)
  116. {
  117.     unsigned char i;
  118.     for(i=0;i<20;i++) _nop_();
  119. }
  120. void start_IIC(void) //數(shù)碼管開始信號(hào)
  121. {
  122.     SCL=1; //給芯片發(fā)送開始信號(hào)
  123.     SDA=1;
  124.     IIC_delay();
  125.     SDA=0;
  126.     IIC_delay();
  127.     SCL=0; //開始信號(hào)傳送完
  128.     IIC_delay();
  129. }
  130. void stop_IIC(void) //數(shù)碼管結(jié)束信號(hào)
  131. {
  132.     SCL=0;
  133.     IIC_delay();
  134.     SDA=0;
  135.     IIC_delay();
  136.     SCL=1;
  137.     IIC_delay();
  138.     SDA=1;
  139. }

  140. void ack_IIC() //數(shù)碼管應(yīng)答信號(hào)
  141. {
  142.     SCL=0;
  143.     _nop_();_nop_();_nop_();
  144.     while(SDA);
  145.     SCL=1;
  146.     _nop_();_nop_();_nop_();
  147.     SCL=0;
  148. }
  149. void WriteByte(unsigned char WriteData) //數(shù)碼管寫信號(hào)
  150. {
  151.     unsigned char i;
  152.     for(i=0;i<8;i++)//開始傳送8位數(shù)據(jù),每循環(huán)一次傳送一位數(shù)據(jù)
  153.     {
  154.         SCL=0;
  155.         IIC_delay();
  156.         WriteData=WriteData>>1;
  157.         SDA=CY;
  158.         IIC_delay();
  159.         SCL=1;
  160.         IIC_delay();
  161.     }
  162. //8位數(shù)據(jù)傳送完
  163.     ack_IIC(); //判斷芯片發(fā)過來的ACK應(yīng)答信號(hào)
  164. }
  165. void write_LEDSROM(unsigned char addr,unsigned char WData) //數(shù)碼管指定地址
  166. {
  167.     start_IIC(); //調(diào)用開始信號(hào)
  168.     WriteByte(addr); //寫起始地址命令(C0H),地址00H單元。
  169.     WriteByte(WData);//給顯示寄存器寫顯示數(shù)據(jù),值可根據(jù)實(shí)參改變
  170.     stop_IIC(); //調(diào)用結(jié)束信號(hào),一個(gè)字節(jié)命令發(fā)送完畢,可以發(fā)送下一個(gè)命令
  171. }
  172. void xsled(void)
  173. {
  174.     SDA=1;
  175.     SCL=1;
  176.     start_IIC(); //調(diào)用開始信號(hào)
  177.     WriteByte(0x40);//寫命令40H(數(shù)據(jù)設(shè)置)
  178.     stop_IIC(); //調(diào)用結(jié)束信號(hào),一個(gè)字節(jié)命令發(fā)送完畢,可以發(fā)送下一個(gè)命令
  179.     write_LEDSROM(0xC0,min10); //第一個(gè)數(shù)碼管
  180.          write_LEDSROM(0xC1,min|0x80);  //第二個(gè)數(shù)碼管0x80控制中間小點(diǎn)點(diǎn)
  181.         delay10ms();        delay10ms();        delay10ms();//小點(diǎn)閃爍
  182.          write_LEDSROM(0xC1,min);  //第二個(gè)數(shù)碼管
  183.                 delay10ms();        delay10ms();        delay10ms();//小點(diǎn)閃爍
  184.     write_LEDSROM(0xC2,sec10); //第三個(gè)數(shù)碼管
  185.    write_LEDSROM(0xC3,sec);//第四個(gè)數(shù)碼管

  186.     IIC_delay();
  187.     start_IIC(); //調(diào)用開始信號(hào)
  188.     WriteByte(0x8f); //送開屏命令,(8BH),亮度可以根據(jù)低三位調(diào)節(jié)。//顯示亮度
  189.     stop_IIC(); //調(diào)用結(jié)束信號(hào),一個(gè)字節(jié)命令發(fā)送完畢,可以發(fā)送下一個(gè)命令
  190. }

  191. void main()
  192. {
  193. write_at24c32(0x00,1);//將0000 0001寫入3231的0x00(秒位)
  194.      while(1)
  195.     {         sec=read_at24c32(0x00);//讀取賦值給sec
  196.         xsled();
  197.                         
  198.     }
  199. }

復(fù)制代碼



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

使用道具 舉報(bào)

沙發(fā)
ID:424598 發(fā)表于 2018-11-30 21:23 來自觸屏版 | 只看該作者
建議你在論壇搜索TM1637,看看人家的貼子,對(duì)比一下
回復(fù)

使用道具 舉報(bào)

板凳
ID:436165 發(fā)表于 2018-11-30 22:36 | 只看該作者
一般人看完代碼眼睛都累得不行了

建議還是多看看網(wǎng)上的成功例程      加油
回復(fù)

使用道具 舉報(bào)

地板
ID:155507 發(fā)表于 2018-11-30 23:12 | 只看該作者


#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit SCL=P1^2; //clk
sbit SDA=P1^3; //dio 這是數(shù)碼TM1637的定義引腳
int sec10=0;//十位的秒
int sec=0;//個(gè)位的秒
int min10=0;//十位的分
int min=0;//個(gè)位的分
sbit scl=P1^0;
sbit sda=P1^0;//這是ds3231的定義引腳  <----- 紅字這里錯(cuò)了
回復(fù)

使用道具 舉報(bào)

5#
ID:404720 發(fā)表于 2018-12-1 07:28 來自觸屏版 | 只看該作者
angmall 發(fā)表于 2018-11-30 23:12
#include  
#include  
#define uint unsigned int

佩服!
回復(fù)

使用道具 舉報(bào)

6#
ID:404720 發(fā)表于 2018-12-1 21:22 | 只看該作者
angmall 發(fā)表于 2018-11-30 23:12
#include  
#include  
#define uint unsigned int

我能加你個(gè)QQ微信嗎?問你問題方便點(diǎn)QQ1767427476
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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