找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32驅(qū)動(dòng)mfrc522源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:313105 發(fā)表于 2018-4-21 18:15 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
stm32驅(qū)動(dòng)mfrc522單片機(jī)源程序如下:
  1. //MDK V3.5編程模板2說明
  2. //基本源文件結(jié)構(gòu)
  3. /*
  4.         在任何地方建一個(gè)與工程名相關(guān)的文件夾,再在這個(gè)文件夾下建立如下結(jié)構(gòu)的文件夾
  5.         User/SysTick文件夾及其它需要用到的用戶文件夾,如LCD等
  6.         Libraries/cmsis startup/arm src inc
  7.         Project/list out及Keil MDK工程文件
  8.         //
  9.         從STM32固件庫v3.5中找出所需文件并復(fù)制到所建立的文件夾中
  10.         1:User\system_stm32f10x.c  stm32f10x_it.c  stm32f10x_it.h  stm32f10x_conf.h
  11.         2:User\SysTick\stm32f10x_systick.c  stm32f10x_systick.h
  12.            在STM32固件庫v3.5沒有提供stm32f10x_systick.c  stm32f10x_systick.h
  13.            可從STM32固件庫v2.0中找到,復(fù)制過來后要對這兩文件修改一下才能用
  14.            方法是:(先把SysTick的只讀屬性去掉)
  15.            (1):對stm32f10x_systick.c中的函數(shù)SysTick_CLKSourceConfig(u32 SysTick_CLKSource)
  16.                          注釋掉。
  17.            (2):對stm32f10x_systick.h中的#define SysTick_CLKSource_HCLK_Div8        ((u32)0xFFFFFFFB)
  18.                                      #define SysTick_CLKSource_HCLK       ((u32)0x00000004)
  19.             注釋掉。
  20.                  (3):#include "stm32f10x_map.h"改為#include "stm32f10x.h"
  21.         3:Libraries/cmsis/core_cm3.c  core_cm3.h  stm32f10x.h  system_stm32f10x.h
  22.         4:Libraries/startup/arm/所有8個(gè)ARM的啟動(dòng)文件
  23.         5:Libraries/src\mise.c和所有外設(shè)C文件
  24.         6:Libraries/inc\mise.h和所有外設(shè)H文件
  25.         //
  26.         添加完文件后用記事本或其它C文件編輯工具編寫一個(gè)名為main.c內(nèi)容如下的文件保存到User中
  27.         //
  28.         #include "stm32f10x.h"
  29.         #include "stm32f10x_systick.h"
  30.         //
  31.         int main(void)
  32.         {
  33.           while (1)
  34.           {
  35.                        
  36.           }
  37.         }
  38.         //
  39. */
  40. //基本工程文件結(jié)構(gòu)
  41. /*
  42.         完成以上工作后,打開Keil新建一個(gè)工程保存到Project中
  43.         選擇CUP確定后在彈出的添加啟動(dòng)文件詢問窗中選擇否,這樣就建好了一個(gè)空的工程文件
  44.         把工程的標(biāo)簽改成與工程名一樣,當(dāng)然也可不同或不改,然后在工程中加入以下文件組
  45.         User
  46.         CMSIS
  47.         StartUp
  48.         StdPeriphDriver
  49.         SysTick
  50.         //
  51.         接下來從源文件中給文件組添加文件
  52.         1:User/main.c  stm32f10x_it.c
  53.         2:CMSIS/core_cm3.c  system_stm32f10x.c
  54.         3:StartUp/startup_stm32f10x.hd.s(這個(gè)文件是根據(jù)所用的CPU來確定的)
  55.         4:StdPeriphDriver/misc.c stm32f10x_rcc.c  stm32f10x_fsmc.c  stm32f10x_gpio.c以及其它選用的外設(shè)C文件
  56.         5:SysTick/stm32f10x_systick.c
  57. */
  58. //接下來要設(shè)置工程文件的一些屬性選項(xiàng)
  59. /*
  60.         打開工程的屬性框
  61.         OutPut選項(xiàng)卡中
  62.         將Select Folder For Object指定到Out文件夾
  63.         勾選Great Hex File(生成Hex文件)
  64.         //
  65.         Listing選項(xiàng)卡中
  66.         將Select Folder For Listings指定到List文件夾
  67.         //
  68.         C/C++選項(xiàng)卡中
  69.         根據(jù)所用CPU選擇下列條目復(fù)制到define欄
  70.         USE_STDPERIPH_DRIVER,STM32F10X_LD
  71.         USE_STDPERIPH_DRIVER,STM32F10X_MD
  72.         USE_STDPERIPH_DRIVER,STM32F10X_HD
  73.         頭文件包含路徑設(shè)定(所有有頭文件的文件夾)
  74.         在include paths添加所有有頭文件的文件夾路徑
  75.         ../../Libraries/inc;
  76.         ../../Libraries/cmsis;
  77.         ../../User
  78.         ../../User/systick
  79.         也可只添加有頭文件的根目錄,此時(shí)必須在包含頭文件前加上一級的文件名
  80.         如:#include "SysTick/stm32f10x_systick.h"  stm32f10x_systick.h的上一級是SysTick
  81.         另外勾選C/C++選項(xiàng)卡中的One ELF Section Per Function后生成的代碼得到優(yōu)化
  82. */
  83. //最后編譯這個(gè)沒有任何功能的工程,看是否有錯(cuò)誤和警告。
  84. //如有則修改直至通過,之后就可以根據(jù)需要添加各種功能函數(shù)了。
  85. /* Includes ------------------------------------------------------------------*/
  86. #include "stm32f10x.h"
  87. #include "TouchPanel/TouchPanel.h"
  88. #include "SysTick/stm32f10x_systick.h"
  89. #include "LCD/LCD.h"
  90. #include "LCD/AsciiLib.h"
  91. #include "LCD/Chinese16Lib.h"
  92. #include "MFRC522/MFRC522.h"
  93. //BEE控制定義(PA.13)當(dāng)x=1時(shí)蜂鳴器響,當(dāng)x=0時(shí)蜂鳴器不響
  94. #define BEE_Cont(x) x ? GPIO_SetBits(GPIOA,GPIO_Pin_13):GPIO_ResetBits(GPIOA,GPIO_Pin_13)
  95. //延時(shí)函數(shù)
  96. void Delay1(u32 nCount)
  97. {
  98.   for(; nCount != 0; nCount--);
  99. }
  100. //蜂鳴器函數(shù)
  101. void SoundBEE(void)
  102. {
  103.         BEE_Cont(1);
  104.         Delay1(20000);
  105.         BEE_Cont(0);
  106. }
  107. //端口初始化函數(shù)
  108. void GPIO_Configuration(void)
  109. {
  110.         GPIO_InitTypeDef GPIO_InitStructure;
  111.         //打開APB2總線上的GPIOA-D時(shí)鐘       
  112.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|
  113.                                                                                                  RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE,
  114.                                                                                                  ENABLE);
  115.         //打開APB2總線上的AFIO時(shí)鐘(IO復(fù)用功能)                                                                                         
  116.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

  117.         //開啟USART2時(shí)鐘
  118.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

  119.         //釋放調(diào)試口為通用IO
  120.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
  121.                        
  122.         //(BEE)PA13
  123.         GPIO_InitStructure.GPIO_Pin  =GPIO_Pin_13;
  124.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  125.         GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
  126.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  127.         //(JOG)PC10=C_key, PC11=R_key, PC12=ENTER_key
  128.         GPIO_InitStructure.GPIO_Pin  =GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
  129.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  130.         GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;
  131.         GPIO_Init(GPIOC, &GPIO_InitStructure);

  132.         //設(shè)置USART2的Tx腳(PA2)為推挽輸出模式
  133.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  134.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  135.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  136.   GPIO_Init(GPIOA , &GPIO_InitStructure);
  137.   
  138.   //設(shè)置USART2的Rx腳(PA3)為浮空輸入腳
  139.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  140.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  141.   GPIO_Init(GPIOA , &GPIO_InitStructure);
  142. }
  143. //串口2初始化函數(shù)
  144. void USART2_Configuration(void)
  145. {
  146.         //定義USART初始化結(jié)構(gòu)體 USART_InitStructure
  147.         USART_InitTypeDef USART_InitStructure;       
  148.         /*       
  149.         *        波特率為9600bps
  150.         *        8位數(shù)據(jù)長度
  151.         *        1個(gè)停止位,無校驗(yàn)
  152.         *        禁用硬件流控制
  153.         *        禁止USART時(shí)鐘
  154.         *        時(shí)鐘極性低
  155.         *        在第2個(gè)邊沿捕獲數(shù)據(jù)
  156.         *        最后一位數(shù)據(jù)的時(shí)鐘脈沖不從 SCLK 輸出
  157.         */
  158.         //如果波特率是9600就用默認(rèn)的值來初始化串口就行了
  159.         USART_StructInit(&USART_InitStructure);                        //獲取默認(rèn)的初始化值
  160.         //如果用其它值則用以下語句
  161.         //USART_InitStructure.USART_BaudRate = 9600;
  162.         //USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  163.         //USART_InitStructure.USART_StopBits = USART_StopBits_1;
  164.         //USART_InitStructure.USART_Parity = USART_Parity_No ;
  165.         //USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  166.         //USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  167.         USART_Init(USART2 , &USART_InitStructure);        //初始化串口2
  168.         //使能接收中斷,用中斷方式接收數(shù)據(jù)
  169.         USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);        //當(dāng)用查詢方式接收數(shù)據(jù)時(shí)不用此句
  170.         USART_Cmd(USART2 , ENABLE);                        //使能USART2
  171. }
  172. //配置USART2中斷
  173. void NVIC_USART2_Configuration(void)
  174. {
  175.         NVIC_InitTypeDef NVIC_InitStructure;
  176.         //
  177.         NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x00);
  178.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);                                                        //選擇中斷分組0       
  179.         NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;                                                //選擇串口2中斷
  180.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;                //搶占式中斷優(yōu)先級設(shè)置為0
  181.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                        //響應(yīng)式中斷優(yōu)先級設(shè)置為0
  182.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                        //使能中斷
  183.         NVIC_Init(&NVIC_InitStructure);
  184. }
  185. //設(shè)SysTick定時(shí)器重裝時(shí)間
  186. void SysTick_Configuration(void)
  187. {
  188.         SysTick_CounterCmd(SysTick_Counter_Disable);                                                //關(guān)閉定時(shí)器
  189.         SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);                                //選擇HCLK為時(shí)鐘源
  190.         SysTick_CounterCmd(SysTick_Counter_Clear);                                                        //定時(shí)器清0
  191.         //主頻為72MHz,配置計(jì)時(shí)值為72000*20可得到20ms的定時(shí)
  192.         SysTick_SetReload(72000*20);       
  193.         SysTick_CounterCmd(SysTick_Counter_Enable);                                                        //啟動(dòng)定時(shí)器
  194. }
  195. //
  196. //數(shù)字的ASCII碼
  197. uc8 numberascii[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  198. //顯示緩沖區(qū)
  199. u8  dispnumber5buf[6];
  200. u8  dispnumber3buf[4];
  201. u8  dispnumber2buf[3];
  202. //MFRC522數(shù)據(jù)區(qū)
  203. u8  mfrc552pidbuf[18];
  204. u8  card_pydebuf[2];
  205. u8  card_numberbuf[5];
  206. u8  card_key0Abuf[6]={0xff,0xff,0xff,0xff,0xff,0xff};
  207. u8  card_writebuf[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
  208. u8  card_readbuf[18];
  209. //SM05-S數(shù)據(jù)區(qū)
  210. u8  sm05cmdbuf[15]={14,128,0,22,5,0,0,0,4,1,157,16,0,0,21};
  211. //extern聲明變量已在外部的C文件里定義,可以在主文件中使用
  212. extern u8  sm05receivebuf[16];        //在中斷C文件里定義
  213. extern u8  sm05_OK;                                                        //在中斷C文件里定義
  214. //
  215. extern u16 myGBlength;                                        //在漢字庫C文件里定義
  216. //觸摸屏數(shù)據(jù)區(qū)
  217. extern Coordinate TouchSample[3];                //3組觸摸坐標(biāo)取樣
  218. extern Coordinate DisplaySample[3];        //3組顯示坐標(biāo)取樣
  219. extern Coordinate dispcoordinate;                //1組顯示坐標(biāo)
  220. extern Matrix     matrix;                                                //坐標(biāo)轉(zhuǎn)換參數(shù)
  221. //16進(jìn)顯示
  222. void GetHexAscii(u8 *buf,u8 dat)
  223. {
  224.         u8  i,buffer[3];
  225.         //
  226.         buffer[0]=numberascii[dat/16];
  227.         buffer[1]=numberascii[dat%16];
  228.         buffer[2]=0;        //結(jié)束標(biāo)志為0
  229.         //
  230.         for(i=0;i<3;i++)
  231.                 buf[i]=buffer[i];
  232. }
  233. //百以內(nèi)10進(jìn)顯示
  234. void GetNumberAscii_3(u8 *buf,u8 dat)
  235. {
  236.         u8  i,buffer[4];
  237.         //
  238.         buffer[0]=numberascii[dat/100%10];
  239.         buffer[1]=numberascii[dat/10%10];
  240.         buffer[2]=numberascii[dat%10];
  241.         buffer[3]=0;        //結(jié)束標(biāo)志為0
  242.         //
  243.         for(i=0;i<4;i++)
  244.                 buf[i]=buffer[i];
  245. }
  246. //萬以內(nèi)10進(jìn)顯示
  247. void GetNumberAscii_5(u8 *buf,u16 dat)
  248. {
  249.         u8  i,buffer[6];
  250.         //
  251.         buffer[0]=numberascii[dat/10000%10];
  252.         buffer[1]=numberascii[dat/1000%10];
  253.         buffer[2]=numberascii[dat/100%10];
  254.         buffer[3]=numberascii[dat/10%10];
  255.         buffer[4]=numberascii[dat%10];
  256.         buffer[5]=0;        //結(jié)束標(biāo)志為0
  257.         //
  258.         for(i=0;i<6;i++)
  259.                 buf[i]=buffer[i];
  260. }
  261. //MFRC522測試函數(shù)
  262. void MFRC522Test(void)
  263. {
  264.         u8 i,j,status,card_size;
  265.         //
  266.         status=MFRC522_Request(0x52, card_pydebuf);                        //尋卡
  267.         //
  268.         if(status==0)                //如果讀到卡
  269.         {
  270.                 status=MFRC522_Anticoll(card_numberbuf);                        //防撞處理                       
  271.                 card_size=MFRC522_SelectTag(card_numberbuf);        //選卡
  272.                 status=MFRC522_Auth(0x60, 4, card_key0Abuf, card_numberbuf);        //驗(yàn)卡
  273.                 status=MFRC522_Write(4, card_writebuf);                                //寫卡(寫卡要小心,特別是各區(qū)的塊3)
  274.                 status=MFRC522_Read(4, card_readbuf);                                        //讀卡
  275.                 //MFRC522_Halt();                                                                                                                        //使卡進(jìn)入休眠狀態(tài)
  276.                 //卡類型顯示
  277.                 GetHexAscii(dispnumber2buf,card_pydebuf[0]);
  278.                 GUI_Text( 82,160, White,Blue,dispnumber2buf);
  279.                 GetHexAscii(dispnumber2buf,card_pydebuf[1]);
  280.                 GUI_Text(102,160, White,Blue,dispnumber2buf);
  281.                 //卡序列號(hào)顯,最后一字節(jié)為卡的校驗(yàn)碼
  282.                 for(i=0;i<5;i++)
  283.                 {
  284.                         GetHexAscii(dispnumber2buf,card_numberbuf[i]);
  285.                         GUI_Text( 82+20*i,144, White,Blue,dispnumber2buf);
  286.                         if(i==4)                //用紅色顯示校驗(yàn)碼
  287.                                 GUI_Text( 82+20*i,144, Red,Blue,dispnumber2buf);
  288.                 }
  289.                 //卡容量顯示,單位為Kbits
  290.                 GetNumberAscii_3(dispnumber3buf,card_size);
  291.                 GUI_Text( 82,128, White,Blue,dispnumber3buf);
  292.                 //讀卡狀態(tài)顯示,正常為0
  293.                 GetHexAscii(dispnumber2buf,status);
  294.                 GUI_Text(82,112, White,Blue,dispnumber2buf);
  295.                 //讀一個(gè)塊的數(shù)據(jù)顯示
  296.                 for(i=0;i<2;i++)                //分兩行顯示
  297.                 {
  298.                         for(j=0;j<9;j++)        //每行顯示8個(gè)
  299.                         {
  300.                                 GetHexAscii(dispnumber2buf,card_readbuf[j+i*9]);        //16進(jìn)顯示
  301.                                 GUI_Text(82+j*20,96-i*16, White,Blue,dispnumber2buf);
  302.                         }
  303.                 }
  304.                 //畫下橫線的數(shù)據(jù)為
  305.                 LCD_DrawLine(220,80,260,80,Green);
  306.                 //
  307.                 SoundBEE();
  308.         }       
  309. }
  310. //寫SM05的指令函數(shù)
  311. void SM05SendCmd(void)
  312. {
  313.         u8  i=0;
  314.         //
  315.         //清除標(biāo)志位,否則第1位數(shù)據(jù)會(huì)丟失
  316.   USART_ClearFlag(USART2,USART_FLAG_TC);
  317.         //
  318.         for(i=0;i<15;i++)
  319.         {
  320.                 USART_SendData(USART2, sm05cmdbuf[i]);
  321.                 //等待發(fā)完一個(gè)字節(jié)
  322.                 while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
  323.         }
  324. }
  325. //顯示接收SM05的數(shù)據(jù)函數(shù)
  326. void DiscSM05ReceiveData(void)
  327. {
  328.         u8  i,j;
  329.         u16 card_number;
  330.         //
  331.         for(i=0;i<2;i++)                //分兩行顯示
  332.         {
  333.                 for(j=0;j<8;j++)        //每行顯示8個(gè)
  334.                 {
  335.                         GetNumberAscii_3(dispnumber3buf,sm05receivebuf[j+i*8]);
  336.                         GUI_Text(82+j*30,32-i*16, White,Blue,dispnumber3buf);
  337.                 }               
  338.         }
  339.         //畫下線的數(shù)據(jù)為卡代碼
  340.         LCD_DrawLine(233,15,286,15,Red);
  341.         //讀卡成功
  342.         if(sm05_OK==1)
  343.         {
  344.                 sm05_OK=0;
  345.                 SoundBEE();
  346.                 //計(jì)算卡代碼并顯示
  347.                 card_number=sm05receivebuf[13]*256+sm05receivebuf[14];
  348.                 GetNumberAscii_5(dispnumber5buf,card_number);
  349.                 GUI_Text(82,0, Green,Blue,dispnumber5buf);
  350.         }               
  351. }
  352. //飛梭連接定義
  353. #define JOG_A             0x40        //JOG動(dòng)態(tài)值1
  354. #define JOG_B                   0x80        //JOG動(dòng)態(tài)值2
  355. #define JOGVAL1            0xc0        //靜態(tài)標(biāo)志1
  356. #define JOGVAL2            0x00        //靜態(tài)標(biāo)志1
  357. #define STATE1             0x55        //動(dòng)態(tài)標(biāo)志1
  358. #define STATE2             0xaa        //動(dòng)態(tài)標(biāo)志2
  359. #define COROTATION        0x55        //JOG正轉(zhuǎn)標(biāo)志
  360. #define REVERSE           0xaa        //JOG反轉(zhuǎn)標(biāo)志
  361. #define JOGPORT           GPIOC        //JOG接口
  362. //HEX 正轉(zhuǎn)40 00 80 C0   反轉(zhuǎn)80 00        40 C0
  363. //(PC11)A:0->0->1->1        1->0->0->1
  364. //(PC10)B:1->0->0->1                    0->0->1->1
  365. //                                0  0  0  0        0  0  0  0
  366. //                                0  0  0  0        0  0  0  0
  367. //旋轉(zhuǎn)輪
  368. u8 JOG_Check(void)
  369. {
  370.         u8  key,jogmode;
  371.   static u8 state_A,state_B,jog_count;
  372.         //根據(jù)JOG的硬件連接情況,把讀入的16位數(shù)據(jù)轉(zhuǎn)成8位數(shù)據(jù)以方便處理(8位CPU不用轉(zhuǎn)換)
  373.   key=(u8)(GPIO_ReadInputData(JOGPORT)>>4)&JOGVAL1;         //讀JOG
  374.   //讀到JOG的靜態(tài)值是0xc0或0x00,讀到JOG旋轉(zhuǎn)動(dòng)態(tài)值是0x80或0x40
  375.   if(key!=JOGVAL1)                   //如果JOG旋轉(zhuǎn)
  376.   {
  377.                 //第一狀態(tài)檢測     
  378.     if(key==JOG_A)                        //當(dāng)為0x40時(shí)     
  379.       state_A=STATE1;                //保存動(dòng)態(tài)標(biāo)志值
  380.                 //第二狀態(tài)檢測
  381.     if(key==JOG_B)                        //當(dāng)為0x80時(shí)
  382.       state_B=STATE2;                //保存動(dòng)態(tài)標(biāo)志值
  383.   }
  384.   //如果是正轉(zhuǎn)           0x80->0xc0                                                                                                                0x40->0x00
  385.         if(((state_B==STATE2)&&(key==JOGVAL1))||((state_A==STATE1)&&(key==JOGVAL2)))
  386.   {
  387.     state_A=0;
  388.     state_B=0;
  389.     jogmode=COROTATION;        //回返正轉(zhuǎn)值
  390.                 //
  391.                 jog_count++;
  392.                 //
  393.                 GetHexAscii(dispnumber2buf,jog_count);
  394.                 GUI_Text(32,218, Green,Blue,dispnumber2buf);
  395.                 //
  396.                 SoundBEE();
  397.   }
  398.         //如果是反轉(zhuǎn)           0x40->0xc0                                                                                                                0x80->0x00
  399.         if(((state_A==STATE1)&&(key==JOGVAL1))||((state_B==STATE2)&&(key==JOGVAL2)))
  400.   {
  401.     state_A=0;
  402.     state_B=0;
  403.     jogmode=REVERSE;                //回返反轉(zhuǎn)值
  404.                 //
  405.                 jog_count--;
  406.                 //
  407.                 GetHexAscii(dispnumber2buf,jog_count);
  408.                 GUI_Text(32,218, Red,Blue,dispnumber2buf);
  409.                 //
  410.                 SoundBEE();                  
  411.   }
  412.         //
  413.         return jogmode;
  414. }
  415. //中間鍵
  416. void KeyEnterFunctional(void)
  417. {
  418.         u8 key;
  419.   static u8 keyscan,entercont=0xaa;       
  420.         //
  421.         key=(u8)(GPIO_ReadInputData(JOGPORT)>>8&0x10);
  422.         //
  423.         if(key!=0x10)
  424.         {
  425.                 if(((key&0x10)==0)&&((keyscan&0x10)!=0))
  426.                 {
  427.                         entercont=~entercont;
  428.                         //
  429.                         if(entercont==0x55)
  430.                         {                               
  431.                                 GUI_Text(2,218, Green,Blue,"開");                               
  432.                         }
  433.                         else
  434.                         {
  435.                                 GUI_Text(2,218, Red,Blue,"關(guān)");
  436.                         }
  437.                         //
  438.                         SoundBEE();
  439.                 }
  440.         }
  441.         //
  442.         keyscan=key;
  443. }
  444. //主函數(shù)
  445. int main(void)
  446. {
  447.         u8  i,j;
  448.         u16 count;
  449.         //
  450.         GPIO_Configuration();                                        //初始化端口
  451.         //
  452.         Delay1(2000);
  453.         BEE_Cont(0);                                                                        //關(guān)BEE
  454.         SysTick_Configuration();                        //SysTick定時(shí)器屏初化       
  455.         Touch_Initializtion();                                //觸摸屏初化
  456.         LCD_Initializtion();                                        //LCD初始化
  457.         MFRC522_Initializtion();                        //初始化MFRC522
  458.         USART2_Configuration();                                //初始化USART2
  459.         NVIC_USART2_Configuration();        //USART2中斷配置
  460.         //
  461.         //TouchPanel_Calibrate();                        //觸摸屏校準(zhǔn)
  462.         //
  463.         LCD_Clear(Blue);                                                        //清屏成藍(lán)色
  464.         Delay1(20000);
  465.         //畫水平線
  466.         LCD_DrawLine(0,180,320,180,Green);
  467.         //畫垂直線
  468.         //LCD_DrawLine(80,0,80,180,Green);
  469.         //
  470.         GUI_Text(88,218, Red,Blue,"STM32+觸摸屏學(xué)習(xí)板");
  471. ……………………

  472. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
MFRC522_Pro.rar (338.01 KB, 下載次數(shù): 87)



評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:592325 發(fā)表于 2019-10-27 14:39 | 只看該作者
請問用的是那個(gè)處理器?
回復(fù)

使用道具 舉報(bào)

板凳
ID:1004914 發(fā)表于 2023-4-3 19:08 | 只看該作者
用得到學(xué)習(xí)下!謝謝樓主共享資料.
回復(fù)

使用道具 舉報(bào)

地板
ID:219610 發(fā)表于 2023-11-2 14:52 | 只看該作者
這是STM32F幾的CPU?
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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