找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3717|回復: 1
打印 上一主題 下一主題
收起左側(cè)

單片機+XTP2046芯片DOUT數(shù)據(jù)為何一開始為1

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:590549 發(fā)表于 2019-11-23 21:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
30黑幣
  1. /**************************************************************************************
  2. *                              電位器AD實驗                                                                                                  *
  3. 實現(xiàn)現(xiàn)象:        具體接線操作請參考視頻
  4.                         下載程序后數(shù)碼管前4位顯示電位器檢測的AD值,范圍是0-4095,一般達不到最大,這個受
  5.                         你供電電壓的影響.
  6. 注意事項:                                                                                                                                                                  
  7. ***************************************************************************************/

  8. #include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器
  9. #include"XPT2046.h"        

  10. typedef unsigned int u16;          //對數(shù)據(jù)類型進行聲明定義
  11. typedef unsigned char u8;

  12. sbit LSA=P2^2;
  13. sbit LSB=P2^3;
  14. sbit LSC=P2^4;

  15. u8 disp[4];
  16. u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  17. /*******************************************************************************
  18. * 函 數(shù) 名         : delay
  19. * 函數(shù)功能                   : 延時函數(shù),i=1時,大約延時10us
  20. *******************************************************************************/
  21. void delay(u16 i)
  22. {
  23.         while(i--);        
  24. }

  25. /*******************************************************************************
  26. * 函數(shù)名         :datapros()
  27. * 函數(shù)功能                 :數(shù)據(jù)處理函數(shù)
  28. * 輸入           : 無
  29. * 輸出                  : 無
  30. *******************************************************************************/
  31. void datapros()
  32. {
  33.         u16 temp;
  34.         static u8 i;
  35.         if(i==50)
  36.         {
  37.                 i=0;
  38.                 temp = Read_AD_Data(0x94);                //   AIN0 電位器
  39.         }
  40.         i++;
  41.         disp[0]=smgduan[temp/1000];//千位
  42.         disp[1]=smgduan[temp%1000/100];//百位
  43.         disp[2]=smgduan[temp%1000%100/10];//個位
  44.         disp[3]=smgduan[temp%1000%100%10];               
  45. }


  46. /*******************************************************************************
  47. * 函數(shù)名         :DigDisplay()
  48. * 函數(shù)功能                 :數(shù)碼管顯示函數(shù)
  49. * 輸入           : 無
  50. * 輸出                  : 無
  51. *******************************************************************************/
  52. void DigDisplay()
  53. {
  54.         u8 i;
  55.         for(i=0;i<4;i++)
  56.         {
  57.                 switch(i)         //位選,選擇點亮的數(shù)碼管,
  58.                 {
  59.                         case(0):
  60.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位
  61.                         case(1):
  62.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位
  63.                         case(2):
  64.                                 LSA=0;LSB=1;LSC=0; break;//顯示第2位
  65.                         case(3):
  66.                                 LSA=1;LSB=1;LSC=0; break;//顯示第3位        
  67.                 }
  68.                 P0=disp[i];//發(fā)送數(shù)據(jù)
  69.                 delay(100); //間隔一段時間掃描        
  70.                 P0=0x00;//消隱
  71.         }               
  72. }

  73. /*******************************************************************************
  74. * 函 數(shù) 名       : main
  75. * 函數(shù)功能                 : 主函數(shù)
  76. * 輸    入       : 無
  77. * 輸    出             : 無
  78. *******************************************************************************/
  79. void main()
  80. {        
  81.         while(1)
  82.         {
  83.                 datapros();         //數(shù)據(jù)處理函數(shù)
  84.                 DigDisplay();//數(shù)碼管顯示函數(shù)               
  85.         }               
  86. }

復制代碼
  1. #include"XPT2046.h"

  2. /****************************************************************************
  3. *函數(shù)名:SPI_Write
  4. *輸  入:dat:寫入數(shù)據(jù)
  5. *輸  出:無
  6. *功  能:使用SPI寫入數(shù)據(jù)
  7. ****************************************************************************/

  8. void SPI_Write(uchar dat)
  9. {
  10.         uchar i;
  11.         CLK = 0;
  12.         for(i=0; i<8; i++)
  13.         {
  14.                 DIN = dat >> 7;          //放置最高位
  15.                 dat <<= 1;
  16.                 CLK = 0;                        //上升沿放置數(shù)據(jù)

  17.                 CLK = 1;

  18.         }
  19. }
  20. /****************************************************************************
  21. *函數(shù)名:SPI_Read
  22. *輸  入:無
  23. *輸  出:dat:讀取 到的數(shù)據(jù)
  24. *功  能:使用SPI讀取數(shù)據(jù)
  25. ****************************************************************************/

  26. uint SPI_Read(void)
  27. {
  28.         uint i, dat=0;
  29.         CLK = 0;
  30.         for(i=0; i<12; i++)                //接收12位數(shù)據(jù)
  31.         {
  32.                 dat <<= 1;

  33.                 CLK = 1;
  34.                 CLK = 0;

  35.                 dat |= DOUT;

  36.         }
  37.         return dat;        
  38. }

  39. /****************************************************************************
  40. *函數(shù)名:Read_AD_Data
  41. *輸  入:cmd:讀取的X或者Y
  42. *輸  出:endValue:最終信號處理后返回的值
  43. *功  能:讀取觸摸數(shù)據(jù)
  44. ****************************************************************************/
  45. uint Read_AD_Data(uchar cmd)
  46. {
  47.         uchar i;
  48.         uint AD_Value;
  49.         CLK = 0;
  50.         CS  = 0;
  51.         SPI_Write(cmd);
  52.         for(i=6; i>0; i--);         //延時等待轉(zhuǎn)換結(jié)果
  53.         CLK = 1;          //發(fā)送一個時鐘周期,清除BUSY
  54.         _nop_();
  55.         _nop_();
  56.         CLK = 0;
  57.         _nop_();
  58.         _nop_();
  59.         AD_Value=SPI_Read();
  60.         CS = 1;
  61.         return AD_Value;        
  62. }
復制代碼
  1. #ifndef          __XPT2046_H_
  2. #define   __XPT2046_H_

  3. //---包含頭文件---//
  4. #include<reg52.h>
  5. #include<intrins.h>

  6. //---重定義關鍵詞---//
  7. #ifndef uchar
  8. #define uchar unsigned char
  9. #endif

  10. #ifndef uint
  11. #define uint  unsigned int
  12. #endif

  13. #ifndef ulong
  14. #define ulong  unsigned long
  15. #endif

  16. //---定義使用的IO口---//
  17. sbit DOUT = P3^7;          //輸出
  18. sbit CLK  = P3^6;          //時鐘
  19. sbit DIN  = P3^4;          //輸入
  20. sbit CS   = P3^5;          //片選

  21. uint Read_AD_Data(uchar cmd);
  22. uint SPI_Read(void);
  23. void SPI_Write(uchar dat);

  24. #endif





復制代碼



1.#include"XPT2046.h"中的DOUT的數(shù)據(jù)為什么一開始就為1,這個的數(shù)據(jù)從什么地方來的?

xpt2046中文.pdf

1.26 MB, 下載次數(shù): 17

最佳答案

查看完整內(nèi)容

因為芯片未工作時輸出就是高阻態(tài)(未選中)。 而你讀它是通過IO口的,IO口可入可出,將它置1,不會影響XPT2046.DOUT的輸出(無論它輸出是0是1),而置0,則會將這根線強行拉低,無法再讀到1信號,因為:當信號兩端一1一0時,1干不過0。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:123289 發(fā)表于 2019-11-23 21:18 | 只看該作者
因為芯片未工作時輸出就是高阻態(tài)(未選中)。
而你讀它是通過IO口的,IO口可入可出,將它置1,不會影響XPT2046.DOUT的輸出(無論它輸出是0是1),而置0,則會將這根線強行拉低,無法再讀到1信號,因為:當信號兩端一1一0時,1干不過0。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表