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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3699|回復: 1
打印 上一主題 下一主題
收起左側

單片機+XTP2046芯片DOUT數據為何一開始為1

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

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

  10. typedef unsigned int u16;          //對數據類型進行聲明定義
  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. * 函 數 名         : delay
  19. * 函數功能                   : 延時函數,i=1時,大約延時10us
  20. *******************************************************************************/
  21. void delay(u16 i)
  22. {
  23.         while(i--);        
  24. }

  25. /*******************************************************************************
  26. * 函數名         :datapros()
  27. * 函數功能                 :數據處理函數
  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. * 函數名         :DigDisplay()
  48. * 函數功能                 :數碼管顯示函數
  49. * 輸入           : 無
  50. * 輸出                  : 無
  51. *******************************************************************************/
  52. void DigDisplay()
  53. {
  54.         u8 i;
  55.         for(i=0;i<4;i++)
  56.         {
  57.                 switch(i)         //位選,選擇點亮的數碼管,
  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];//發送數據
  69.                 delay(100); //間隔一段時間掃描        
  70.                 P0=0x00;//消隱
  71.         }               
  72. }

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

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

  2. /****************************************************************************
  3. *函數名:SPI_Write
  4. *輸  入:dat:寫入數據
  5. *輸  出:無
  6. *功  能:使用SPI寫入數據
  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;                        //上升沿放置數據

  17.                 CLK = 1;

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

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

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

  35.                 dat |= DOUT;

  36.         }
  37.         return dat;        
  38. }

  39. /****************************************************************************
  40. *函數名:Read_AD_Data
  41. *輸  入:cmd:讀取的X或者Y
  42. *輸  出:endValue:最終信號處理后返回的值
  43. *功  能:讀取觸摸數據
  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--);         //延時等待轉換結果
  53.         CLK = 1;          //發送一個時鐘周期,清除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的數據為什么一開始就為1,這個的數據從什么地方來的?

xpt2046中文.pdf

1.26 MB, 下載次數: 17

最佳答案

查看完整內容

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲 中文 欧美 日韩 在线观看 | 国产在线精品一区二区三区 | 精品久久国产 | 久久一区 | 久久国产欧美日韩精品 | 一级一级毛片免费看 | 视频三区 | 精品久久久久久18免费网站 | 久久成人人人人精品欧 | 一区欧美 | 国产精品久久久久久久久久软件 | 亚洲精品自拍 | 欧美一区二区三区在线观看 | 在线视频成人 | 国产精品综合视频 | 中国美女撒尿txxxxx视频 | 男女黄网站 | 777zyz色资源站在线观看 | 国产精品久久久久不卡 | 亚洲 欧美 日韩 在线 | 国产午夜久久 | 成人黄色电影免费 | 亚洲精品国产电影 | 视频1区| 亚洲一区国产精品 | 久久亚 | 亚洲一区二区三区在线免费 | ww亚洲ww亚在线观看 | 国产视频久久久 | 91麻豆精品国产91久久久久久久久 | 一级黄色片免费在线观看 | 91精品国产一区二区三区 | 天天躁日日躁狠狠躁2018小说 | 日韩欧美一区二区三区在线播放 | 日韩三级电影在线看 | 成人av一区二区三区 | 久久与欧美 | 国产日韩精品视频 | 日韩成人精品视频 | 亚洲精品免费观看 | 成人小视频在线观看 |