找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32+XPT2046觸摸屏帶刷卡識別的程序和教程等資料下載

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:194214 發(fā)表于 2017-8-18 23:04 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
最近做了一個小項目,里面一個小部分,基于STM32刷卡帶觸摸屏,功能可能有點簡單,但是可以繼續(xù)往下編。還有刷卡號的識別要更改。

使用觸摸屏-SPI程序時如果出現(xiàn)觸摸不靈或者誤差大,可以按照下面方法進(jìn)行校正修改,如果使用可以強制校準(zhǔn)程序則不需要,只需通過K_UP按鍵強制校準(zhǔn)即可。

如果下載程序后對觸摸屏劃線,沒有出現(xiàn)線條,可以顯示觸摸值變化,這個是因為沒有對觸摸屏校正,因此只需要在 touch.c 這個文件內(nèi)的函數(shù) void TOUCH_Init(void),將這個函數(shù)內(nèi)的語句

if(TouchAdj.posState != TOUCH_ADJ_OK)
{
     TOUCH_Adjust(); //校正   
}  
改成
if(TouchAdj.posState == TOUCH_ADJ_OK)
{
     TOUCH_Adjust(); //校正   
}
編譯后將HEX下載到開發(fā)板內(nèi)進(jìn)行觸摸屏校正,校正完成后再修改為!=就可以了。   


本帖附件中可下載此壓縮包

stm32單片機源程序如下(主程序):
  1. /*  程序下載進(jìn)去后D1指示燈閃爍,表示程序正常運行,按下按鍵K_UP可以強制觸摸校正  */
  2. #include "stm32f10x.h"
  3. #include "led.h"
  4. #include "system.h"
  5. #include "gui.h"
  6. #include "touch.h"
  7. #include "flash.h"
  8. #include "key.h"
  9. #include "systick.h"
  10. #include "tim.h"
  11. #include "RC522.h"
  12. #include "usart.h"

  13. uint16_t penColor;
  14. unsigned char data2[4]  = {0,0,0,0x01};
  15. unsigned char DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
  16. unsigned char g_ucTempbuf[20];
  17. void kai_display()  //開機顯示
  18. {
  19.         TFT_ClearScreen(BLACK);
  20.     GUI_Show12Char(10,103,"歡迎使用",GREEN,BLACK);
  21.         GUI_Show12Char(10,10,"K_UP:Adjust",GREEN,BLACK);        
  22. }
  23. void lcd_display()           //LCD初始化顯示
  24. {
  25.         TFT_ClearScreen(BLACK);
  26.         TFT_ClearScreen(BLACK);
  27.                         GUI_Show12Char(10,50,"關(guān)門           ",RED,BLACK);        //關(guān)門
  28.                         GUI_Show12Char(10,150,"            ",YELLOW,BLACK);
  29. }
  30. void display_init()  //初始化顯示
  31. {
  32.         TFT_ClearScreen(BLACK);
  33.     GUI_Show12Char(0, TFT_YMAX - 16, "X:", RED, BLACK);
  34.     GUI_Show12Char(56, TFT_YMAX - 16, "Y:", RED, BLACK);
  35.     GUI_Show12Char(TFT_XMAX-8*3, 0, "RST", RED, BLACK);
  36.           GUI_Show12Char(56, TFT_YMAX - 106, "一號存儲:", RED, BLACK);
  37.     GUI_Show12Char(56, TFT_YMAX - 156, "二號存儲:", RED, BLACK);
  38.     GUI_Show12Char(56, TFT_YMAX - 206, "三號存儲:", RED, BLACK);
  39. }

  40. int main(void)
  41. {     
  42.                 unsigned char status,i;
  43.         unsigned int temp;
  44.                   uint8_t touchValue[5] = {0, 0, 0, 0, 0};        

  45. //    uint32_t i;
  46.         penColor = BLUE;
  47.                 RC522_Init();
  48.     /* 初始化 */
  49.         PcdReset();
  50.          PcdAntennaOff();
  51.     TFT_Init();
  52.     FLASH_Init();      
  53.     LED_Config();
  54.         KEY_Config();
  55.     SYSTICK_Config();
  56.         delay_ms(10);
  57.          PcdAntennaOn();
  58.         delay_ms(10);
  59.         tim3_init(1000,7199);
  60.         uart_init(9600);
  61.         kai_display();
  62.         SYSTICK_Delay1ms(1500);   
  63.     TOUCH_Init();
  64.     display_init();

  65.         while(1)
  66.         {
  67.         if(KEY_Scan()==KEY_UP)   //按下K_UP按鍵 強制校準(zhǔn)
  68.                 {
  69.                         TOUCH_Adjust(); //校正        
  70.                         display_init();
  71.                 }

  72.                 if(TOUCH_Scan() == 0)
  73.         {   
  74.             /* 顯示X軸的物理坐標(biāo)值 */
  75.             touchValue[0] = (TouchData.x % 10000 /1000) + '0';
  76.                     touchValue[1] = (TouchData.x % 1000 /100) + '0';
  77.                     touchValue[2] = (TouchData.x % 100 /10) + '0';
  78.                     touchValue[3] = (TouchData.x % 10) + '0';
  79.                     GUI_Show12Char(16, TFT_YMAX - 16, touchValue, RED, BLACK);
  80.             /* 顯示Y軸的物理坐標(biāo)值 */
  81.             touchValue[0] = (TouchData.y % 10000 /1000) + '0';
  82.                     touchValue[1] = (TouchData.y % 1000 /100) + '0';
  83.                     touchValue[2] = (TouchData.y % 100 /10) + '0';
  84.                     touchValue[3] = (TouchData.y % 10) + '0';
  85.             
  86.             GUI_Show12Char(72, TFT_YMAX - 16, touchValue, RED, BLACK);
  87.         }
  88.                                  status = PcdRequest(PICC_REQALL, g_ucTempbuf);//尋卡
  89.          if (status != MI_OK)
  90.          {   
  91.                      PcdReset();
  92.                      PcdAntennaOff();
  93.                      PcdAntennaOn();
  94.                           continue;
  95.          }                     
  96.                  printf("卡的類型:");
  97.             for(i=0;i<2;i++)
  98.                 {
  99.                         temp=g_ucTempbuf[i];
  100.                         printf("%X",temp);
  101.                         
  102.                 }        
  103.          status = PcdAnticoll(g_ucTempbuf);//防沖撞
  104.          if(status != MI_OK)
  105.          {    continue;    }
  106.                   
  107.                 ////////以下為超級終端打印出的內(nèi)容////////////////////////
  108.         
  109.                 printf("卡序列號:");        //超級終端顯示,
  110.                 for(i=0;i<4;i++)
  111.                 {
  112.                         temp=g_ucTempbuf[i];
  113.                         printf("%X",temp);
  114.                 }
  115.                 if(g_ucTempbuf[0]==0x37&&g_ucTempbuf[1]==0x25&&g_ucTempbuf[2]==0xAA&&g_ucTempbuf[3]==0x29)
  116.                 {
  117.                         GUI_Show12Char(10,50,"開門           ",GREEN,BLACK);        //開門
  118.                  GUI_Show12Char(10,10,"姓名:一號           ",RED,BLACK);
  119. //                        GPIO_SetBits(GPIOC, (uint16_t)0xff & 0x00FF);
  120.                                         if((TouchData.lcdx>50)&&(TouchData.lcdx<100))
  121.                  {
  122.                         if((TouchData.lcdy>280)&&(TouchData.lcdy<330))
  123.                         {
  124.                         GPIO_ResetBits(GPIOC, (~(uint16_t)0xfe) & 0x00FF);
  125.                         delay_ms(50000);
  126. //      TouchData.lcdx=0;
  127. //      TouchData.lcdy=0;
  128. //                                delay_ms(10);
  129. //                                         GPIO_SetBits(GPIOC, (uint16_t)0xfe& 0x00FF);     
  130.                         }
  131.                         if((TouchData.lcdy>220)&&(TouchData.lcdy<270))
  132.                         {
  133.                                 GPIO_ResetBits(GPIOC, (~(uint16_t)0xfd) & 0x00FF);
  134.         delay_ms(50000);
  135. //        TouchData.lcdx=0;
  136. //        TouchData.lcdy=0;                                
  137. //                                 delay_ms(10);
  138. //                                         GPIO_SetBits(GPIOC, (uint16_t)0xfd & 0x00FF);     
  139.                         }
  140.                         if((TouchData.lcdy>120)&&(TouchData.lcdy<180))
  141.                         {
  142.                                 GPIO_ResetBits(GPIOC, (~(uint16_t)0xfb) & 0x00FF);
  143.                           delay_ms(50000);
  144. //        TouchData.lcdx=0;
  145. //        TouchData.lcdy=0;                                
  146. //                                         delay_ms(10);
  147. //                                         GPIO_SetBits(GPIOC, (uint16_t)0xfb & 0x00FF);     
  148.                         }
  149.                         if ((TouchData.lcdx > TFT_XMAX-8*3) && (TouchData.lcdy < 16))//215 = TFT_XMAX - 24
  150.                         {
  151.                                   GPIO_SetBits(GPIOC, (uint16_t)0xff & 0x00FF);
  152.                         }
  153.                         delay_ms(50000);
  154.                         GPIO_SetBits(GPIOC, (uint16_t)0xff & 0x00FF);
  155.       TouchData.lcdx=0;
  156.       TouchData.lcdy=0;
  157.                  }
  158.                 }
  159.                 else        
  160.                 {        
  161.                   if(g_ucTempbuf[0]==0x1A&&g_ucTempbuf[1]==0x46&&g_ucTempbuf[2]==0x95&&g_ucTempbuf[3]==0x1E)
  162.                   {
  163. //                        led1=0;
  164.                         GUI_Show12Char(10,50,"開門           ",GREEN,BLACK);        //開門
  165.                  GUI_Show12Char(10,10,"姓名:二號          ",RED,BLACK);
  166. //                                GPIO_SetBits(GPIOC, (uint16_t)0xff & 0x00FF);
  167.                                         if((TouchData.lcdx>50)&&(TouchData.lcdx<100))
  168.                                 {
  169.                                         if((TouchData.lcdy>280)&&(TouchData.lcdy<330))
  170.                                         {
  171.                                         GPIO_ResetBits(GPIOC, (~(uint16_t)0xfe) & 0x00FF);
  172.             delay_ms(50000);
  173.             TouchData.lcdx=0;
  174.             TouchData.lcdy=0;                                                
  175. //                                                delay_ms(10);
  176. //                                                         GPIO_SetBits(GPIOC, (uint16_t)0xfe& 0x00FF);     
  177.                                         }
  178.                                         if((TouchData.lcdy>220)&&(TouchData.lcdy<270))
  179.                                         {
  180.                                                 GPIO_ResetBits(GPIOC, (~(uint16_t)0xfd) & 0x00FF);
  181.             delay_ms(50000);
  182.             TouchData.lcdx=0;
  183.             TouchData.lcdy=0;                                                
  184. //                                                 delay_ms(10);
  185. //                                                         GPIO_SetBits(GPIOC, (uint16_t)0xfd & 0x00FF);     
  186.                                         }
  187.                                         if((TouchData.lcdy>120)&&(TouchData.lcdy<180))
  188.                                         {
  189.                                                          GPIO_ResetBits(GPIOC, (~(uint16_t)0xfb) & 0x00FF);
  190.                delay_ms(50000);
  191.                TouchData.lcdx=0;
  192.                TouchData.lcdy=0;                                                
  193. //                                                         delay_ms(10);
  194. //                                                         GPIO_SetBits(GPIOC, (uint16_t)0xfb & 0x00FF);     
  195.                                         }
  196.                                         if ((TouchData.lcdx > TFT_XMAX-8*3) && (TouchData.lcdy < 16))//215 = TFT_XMAX - 24
  197.                            {
  198.                                                                 GPIO_SetBits(GPIOC, (uint16_t)0xff & 0x00FF);
  199.                            }
  200.                                 }
  201.                         if ((TouchData.lcdx > TFT_XMAX-8*3) && (TouchData.lcdy < 16))//215 = TFT_XMAX - 24
  202.                         {
  203.                                                                 GPIO_SetBits(GPIOC, (uint16_t)0xff & 0x00FF);
  204.                         }
  205.                                 
  206.                   }
  207.                         else
  208.                         {
  209. //                        led1=1;        
  210.                         GUI_Show12Char(10,50,"刷卡無法識別         ",RED,BLACK);
  211.                         }}}}
復(fù)制代碼

所有資料51hei提供下載:
觸摸屏刷卡.rar (1.95 MB, 下載次數(shù): 580)



評分

參與人數(shù) 3黑幣 +60 收起 理由
飛餌 + 5 很給力!
dfsdfsddffd + 5 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:229153 發(fā)表于 2017-8-24 17:03 | 只看該作者
謝謝 !~
回復(fù)

使用道具 舉報

板凳
ID:226427 發(fā)表于 2017-8-31 14:58 | 只看該作者
最近在調(diào)試一款屏幕,這個觸屏的驅(qū)動總是有點問題,借鑒樓主的參考看看
回復(fù)

使用道具 舉報

地板
ID:68875 發(fā)表于 2017-9-3 22:11 | 只看該作者
不錯的東西,收藏了
回復(fù)

使用道具 舉報

5#
ID:257535 發(fā)表于 2017-12-5 09:13 | 只看該作者
參考一下
回復(fù)

使用道具 舉報

6#
ID:277458 發(fā)表于 2018-1-18 16:58 | 只看該作者
參考一下看看
回復(fù)

使用道具 舉報

7#
ID:279690 發(fā)表于 2018-1-25 16:39 | 只看該作者
不錯不錯
回復(fù)

使用道具 舉報

8#
ID:285261 發(fā)表于 2018-2-24 19:11 | 只看該作者
來看看校準(zhǔn)怎么寫的。原子的看不懂
回復(fù)

使用道具 舉報

9#
ID:290556 發(fā)表于 2018-3-11 22:17 | 只看該作者
原子的也看了,不太懂,找這個來看看。
回復(fù)

使用道具 舉報

10#
ID:373 發(fā)表于 2018-4-8 11:46 | 只看該作者
學(xué)習(xí)下,不知道是不是很容易理解
回復(fù)

使用道具 舉報

11#
ID:304662 發(fā)表于 2018-4-10 16:48 | 只看該作者
好棒,感覺好厲害呀。
回復(fù)

使用道具 舉報

12#
ID:232751 發(fā)表于 2018-7-11 09:19 | 只看該作者
謝謝,學(xué)習(xí)下
回復(fù)

使用道具 舉報

13#
ID:149505 發(fā)表于 2018-7-17 09:00 | 只看該作者
謝謝分享!
回復(fù)

使用道具 舉報

14#
ID:384308 發(fā)表于 2018-8-8 17:55 | 只看該作者
多謝分享
回復(fù)

使用道具 舉報

15#
ID:89443 發(fā)表于 2018-9-7 09:19 | 只看該作者
學(xué)習(xí)了,謝謝分享
回復(fù)

使用道具 舉報

16#
ID:101507 發(fā)表于 2018-9-11 23:28 | 只看該作者
不錯,好東西,謝謝分享
回復(fù)

使用道具 舉報

17#
ID:429839 發(fā)表于 2019-1-7 12:34 | 只看該作者
學(xué)習(xí)了 謝謝分享
回復(fù)

使用道具 舉報

18#
ID:506197 發(fā)表于 2019-4-7 13:05 | 只看該作者
謝謝 !學(xué)習(xí)一下
回復(fù)

使用道具 舉報

19#
ID:255779 發(fā)表于 2019-5-2 21:40 | 只看該作者
不錯哦,可以仔細(xì)看看
回復(fù)

使用道具 舉報

20#
ID:486936 發(fā)表于 2019-5-14 08:49 | 只看該作者
請問有基于STC89C52的嗎??
回復(fù)

使用道具 舉報

21#
ID:495731 發(fā)表于 2019-6-23 15:31 | 只看該作者
感謝分享!正在找這方面的資料!
回復(fù)

使用道具 舉報

22#
ID:282095 發(fā)表于 2019-6-23 16:44 | 只看該作者
樓上所示里面應(yīng)該包含RFID的相關(guān)技術(shù)吧
回復(fù)

使用道具 舉報

23#
ID:103831 發(fā)表于 2019-6-30 00:37 | 只看該作者

不錯的東西,收藏了
回復(fù)

使用道具 舉報

24#
ID:613895 發(fā)表于 2019-9-20 08:56 | 只看該作者
不錯不錯,收藏了
回復(fù)

使用道具 舉報

25#
ID:229407 發(fā)表于 2019-10-25 15:22 | 只看該作者
項目正好要用到,謝謝分享!
回復(fù)

使用道具 舉報

26#
ID:669869 發(fā)表于 2020-1-8 22:32 | 只看該作者
不錯,收藏了,感謝分享!
回復(fù)

使用道具 舉報

27#
ID:658039 發(fā)表于 2020-1-10 19:29 | 只看該作者
請問刷什么卡的?
回復(fù)

使用道具 舉報

28#
ID:695190 發(fā)表于 2020-2-19 16:07 | 只看該作者
參考一下,真心不錯
回復(fù)

使用道具 舉報

29#
ID:260263 發(fā)表于 2020-2-19 17:15 | 只看該作者
非常好的視頻,謝謝樓主分享
回復(fù)

使用道具 舉報

30#
ID:403336 發(fā)表于 2020-2-25 13:56 | 只看該作者
謝謝,下載學(xué)習(xí)
回復(fù)

使用道具 舉報

31#
ID:561907 發(fā)表于 2020-3-5 11:27 | 只看該作者
正好需要的資料,謝謝分享。
回復(fù)

使用道具 舉報

32#
ID:714544 發(fā)表于 2020-3-24 09:47 | 只看該作者
正好需要的資料,謝謝分享
回復(fù)

使用道具 舉報

33#
ID:194214 發(fā)表于 2020-3-31 16:40 | 只看該作者
shu_007 發(fā)表于 2020-1-10 19:29
請問刷什么卡的?

射頻IC卡
回復(fù)

使用道具 舉報

34#
ID:888567 發(fā)表于 2021-3-5 09:49 | 只看該作者
***x:2065 y:3345 **
***x:2321 y:3345 **
***x:2577 y:3345 **
***x:3089 y:3345 **
***x:3345 y:3345 **
***x:3345 y:3089 **
***x:1121 y:1169 **
這是原始數(shù)據(jù)。。。 需要轉(zhuǎn)換
回復(fù)

使用道具 舉報

35#
ID:576911 發(fā)表于 2021-9-3 15:17 | 只看該作者
謝謝。非常感謝樓主的分享。
回復(fù)

使用道具 舉報

36#
ID:6633 發(fā)表于 2021-9-21 22:58 | 只看該作者
感謝分享   調(diào)試一下看看
回復(fù)

使用道具 舉報

37#
ID:1041608 發(fā)表于 2022-8-13 12:39 | 只看該作者
這個LCD 是怎么接線的
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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