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

QQ登錄

只需一步,快速開始

搜索

單片機(jī)+lcd12864顯示ds1302程序出現(xiàn)亂碼,卡好幾天了

查看數(shù): 6355 | 評(píng)論數(shù): 10 | 收藏 1
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請(qǐng)稍候......
發(fā)布時(shí)間: 2019-1-16 09:30

正文摘要:

單片機(jī)源碼: #include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit lcd_rs=P3^4; sbit lcd_rw=P3^5; sbit lcd_e=P3^6; sbit lcd_psb=P3^7; sbit ds1 ...

回復(fù)

ID:434977 發(fā)表于 2019-1-18 16:05
xingxing123w 發(fā)表于 2019-1-17 11:06
IIC通訊最好要進(jìn)行ASK 超時(shí)處理,可以仿真一下確定一下具體問題,看看讀取的數(shù)據(jù)不正確,還是顯示部分有問 ...

我剛接觸,不會(huì)仿真......
ID:434977 發(fā)表于 2019-1-18 16:03
shuisheng 發(fā)表于 2019-1-16 15:01
字符占的位子不對(duì),你將帶問號(hào)的地方敲一下空格(英文輸入情況下的空格),再輸入數(shù)字看看。正常情況輸入漢字 ...

我看了一下,顯示函數(shù)沒問題,我懷疑,會(huì)不會(huì)是ds1302原件沒有工作的原因,但我不知道怎么檢測(cè)ds1302是否工作了。
ID:434977 發(fā)表于 2019-1-18 16:02
ahshmj 發(fā)表于 2019-1-17 04:20
你仔細(xì)看看Jason_Jay 給你的程序,關(guān)鍵是 addr & 0x01      
,將地址的二進(jìn)制碼的末位變成“1”,就是80 ...

我讀的地址,是在讀的函數(shù)里把寫的地址每個(gè)后面都加1,這樣應(yīng)該也是可以的吧?
ID:434977 發(fā)表于 2019-1-18 15:54
ahshmj 發(fā)表于 2019-1-16 15:13
ds1302寫和讀不是一個(gè)地址。81、83、85、......91是讀,80、82、84、........90是寫。

我讀函數(shù)里面,地址都加了一,這樣就只定義寫的地址就行了,讀的地址可以在讀函數(shù)里更改
ID:66761 發(fā)表于 2019-1-17 11:06
IIC通訊最好要進(jìn)行ASK 超時(shí)處理,可以仿真一下確定一下具體問題,看看讀取的數(shù)據(jù)不正確,還是顯示部分有問題,
ID:7485 發(fā)表于 2019-1-17 04:20
你仔細(xì)看看Jason_Jay 給你的程序,關(guān)鍵是 addr & 0x01      
,將地址的二進(jìn)制碼的末位變成“1”,就是80變成 81, 82變成 83……,這才是“讀”的地址!
ID:386762 發(fā)表于 2019-1-16 15:57
你的寫入程序有點(diǎn)問題:寫入地址之后直接寫入數(shù)據(jù),你的時(shí)序?qū)е聰?shù)據(jù)沒有寫入,讀出數(shù)據(jù)都為0X7F.


可以參考以下DS1302程序
  1. //---DS1302寫入和讀取時(shí)分秒的地址命令---////---秒分時(shí)日月周年 最低位讀寫位;-------//uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
  2. uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
  3. //---DS1302時(shí)鐘初始化2016年5月7日星期六12點(diǎn)00分00秒。---////---存儲(chǔ)順序是秒分時(shí)日月周年,存儲(chǔ)格式是用BCD碼---//
  4. uchar TIME[7] = {0, 0, 0x12, 0x07, 0x05, 0x06, 0x16};
  5. /********************************************************************************
  6. 函 數(shù) 名         : Ds1302Write
  7. * 函數(shù)功能         : 向DS1302命令(地址+數(shù)據(jù))
  8. * 輸    入         : addr,dat
  9. * 輸    出         : 無
  10. *******************************************************************************/
  11. void Ds1302Write(uchar addr, uchar dat)
  12. {   
  13. uchar n;   
  14. RST = 0;   
  15. _nop_();   
  16. SCLK = 0;
  17. //先將SCLK置低電平。
  18.    _nop_();   
  19. RST = 1;
  20. //然后將RST(CE)置高電平。   
  21. _nop_();   
  22. for (n=0; n<8; n++)
  23. //開始傳送八位地址命令   
  24. {        
  25. DSIO = addr & 0x01;//數(shù)據(jù)從低位開始傳送        
  26. addr >>= 1;        
  27. SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)      
  28. _nop_();      
  29. SCLK = 0;        
  30. _nop_();   
  31. }   
  32. for (n=0; n<8; n++)//寫入8位數(shù)據(jù)   
  33. {        
  34. DSIO = dat & 0x01;        
  35. dat >>= 1;      
  36. SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)        
  37. _nop_();        
  38. SCLK = 0;        
  39. _nop_();      
  40. }               
  41. RST = 0;//傳送數(shù)據(jù)結(jié)束    _
  42. nop_();}
  43. /********************************************************************************
  44. 函 數(shù) 名         : Ds1302Read
  45. * 函數(shù)功能         : 讀取一個(gè)地址的數(shù)據(jù)
  46. * 輸    入         : addr
  47. * 輸    出         : dat
  48. *******************************************************************************/
  49. uchar Ds1302Read(uchar addr)
  50. {   
  51. uchar n,dat,dat1;   
  52. RST = 0;   
  53. _nop_();   
  54. SCLK = 0;//先將SCLK置低電平。   
  55. _nop_();   
  56. RST = 1;//然后將RST(CE)置高電平。   
  57. _nop_();   
  58. for(n=0; n<8; n++)//開始傳送八位地址命令   
  59. {        
  60. DSIO = addr & 0x01;//數(shù)據(jù)從低位開始傳送        
  61. addr >>= 1;        
  62. SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)        
  63. _nop_();        
  64. SCLK = 0;//DS1302下降沿時(shí),放置數(shù)據(jù)        
  65. _nop_();   
  66. }   
  67. _nop_();   
  68. for(n=0; n<8; n++)//讀取8位數(shù)據(jù)   
  69. {        
  70. dat1 = DSIO;//從最低位開始接收        
  71. dat = (dat>>1) | (dat1<<7);        
  72. SCLK = 1;        
  73. _nop_();        
  74. SCLK = 0;//DS1302下降沿時(shí),放置數(shù)據(jù)        
  75. _nop_();   
  76. }   
  77. RST = 0;   
  78. _nop_();    //以下為DS1302復(fù)位的穩(wěn)定時(shí)間,必須的。   
  79. SCLK = 1;   
  80. _nop_();   
  81. DSIO = 0;   
  82. _nop_();   
  83. DSIO = 1;   
  84. _nop_();   
  85. return dat;
  86. }
  87. /*******************************************************************************
  88. * 函 數(shù) 名         : Ds1302Init
  89. * 函數(shù)功能         : 初始化DS1302.
  90. * 輸    入         : 無
  91. * 輸    出         : 無
  92. *******************************************************************************/
  93. void Ds1302Init()
  94. {   
  95. uchar n;   
  96. Ds1302Write(0x8E,0X00);      //禁止寫保護(hù),就是關(guān)閉寫保護(hù)功能   
  97. for (n=0; n<7; n++)//寫入7個(gè)字節(jié)的時(shí)鐘信號(hào):分秒時(shí)日月周年   
  98. {        
  99. Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);     
  100. }   
  101. Ds1302Write(0x8E,0x80);      //打開寫保護(hù)功能}
  102. /*******************************************************************************
  103. * 函 數(shù) 名         : Ds1302ReadTime
  104. * 函數(shù)功能         : 讀取時(shí)鐘信息
  105. * 輸    入         : 無
  106. * 輸    出         : 無
  107. *******************************************************************************/
  108. void Ds1302ReadTime()
  109. {   
  110. uchar n;   
  111. for (n=0; n<7; n++)//讀取7個(gè)字節(jié)的時(shí)鐘信號(hào):分秒時(shí)日月周年   
  112. {        
  113. TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);   
  114. }      
  115.   }
復(fù)制代碼


評(píng)分

參與人數(shù) 1黑幣 +15 收起 理由
凌凈清河 + 15 贊一個(gè)!

查看全部評(píng)分

ID:7485 發(fā)表于 2019-1-16 15:13
ds1302寫和讀不是一個(gè)地址。81、83、85、......91是讀,80、82、84、........90是寫。
ID:454000 發(fā)表于 2019-1-16 15:01
字符占的位子不對(duì),你將帶問號(hào)的地方敲一下空格(英文輸入情況下的空格),再輸入數(shù)字看看。正常情況輸入漢字沒問題,但輸數(shù)字與英文就會(huì)這樣。要想正常顯示,要重新寫一個(gè)字符顯示函數(shù)。壇子里面有一篇<<12864液晶數(shù)字任意顯示器>>的文章,里面有寫好的函數(shù),可以試一下

評(píng)分

參與人數(shù) 3黑幣 +62 收起 理由
鉆牛尖滴劉尖尖 + 15
Sawardeakar + 35
yoxi + 12 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

ID:434977 發(fā)表于 2019-1-16 13:37
哪位大佬指點(diǎn)一下,十分感謝,卡好幾天了

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

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

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