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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4386|回復: 3
收起左側

STM32 FDC2214手勢識別參考程序

[復制鏈接]
ID:595546 發表于 2019-8-8 15:02 | 顯示全部樓層 |閱讀模式
  1. #include "stm32f10x.h"
  2. #include "sys.h"
  3. #include "led.h"
  4. #include "Beep.h"
  5. #include "delay.h"
  6. #include "stdio.h"
  7. #include "usart.h"
  8. #include "key.h"
  9. #include <fdc2214.h>
  10. #include <oled.h>
  11. #include <niming.h>
  12. #include <text.h>
  13. #include <Menu.h>
  14. #include <SortArr.h>
  15. #include "time5.h"
  16. unsigned char EntryFigerTimes=0;//錄入54321時,所需記錄的次數
  17. unsigned char EntryFistTimes =0;//錄入石頭剪刀布時,所需記錄的次數
  18. //相應標志位
  19. unsigned char Interrupt_Flg=1,InterruptFlg=0;//按下按鍵 產生的相應標志位
  20. unsigned char Train_Figer_Entry_Flg=0,Train_Fist_Entry_Flg=0;//進入猜拳訓練 劃拳訓練 相應標志位
  21. unsigned char Judge_Figer_Flg=0,Judge_Fist_Flg=0;//進入猜拳判決 劃拳判決 相應標志位
  22. //數組排序次數
  23. unsigned char SortTimes=0;//錄入結束后,對數組進行排序的次數
  24. //電容值存放數據
  25. float temp0=0,temp1=0,temp2=0,temp3=0;//四路通道值存放的變量
  26. float Total_Value;//四路通道總值
  27. //待存錄入數組
  28. float ArrayData[10]={0};//錄入手勢時,四路通道總值要存放的數組(在錄入手勢時采集了十次數據,并且采用濾波算法)
  29. float ArrayA[8]={0};//錄入54321時 存放54321數據的數組
  30. float ArrayB[8]={0};//錄入石頭剪刀布時 存放石頭剪刀布數據的數組
  31. //按鍵數據
  32. int Page_New=0;//OLED菜單頁面
  33. int ConfirmKey=0;//確認鍵(確認鍵按下: 1)
  34. int KeyUpDownFlg=0;//記錄上下按鍵相對變化,正常按上鍵加1,按下鍵減1
  35. int  KeyRightLeftFlg=0;//按鍵右與左(兩個按鍵采用一個變量 右鍵: 1 左鍵: -1)
  36. //加載中 次數
  37. long int Loding_Times=0;//加載中 相應判斷次數

  38. void GetFouChVal(void);//讀取四路通道值的函數
  39. int main()
  40. {
  41.           delay_init();                                                 //延時函數初始化        
  42.                 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //設置中斷優先級分組2
  43.     uart_init(115200);                                     //串口初始化為115200
  44.     TIM5_init(79,7199);                              //10ms中斷
  45.           Beep_Init();                                     //蜂鳴器初始化
  46.     IIC_Start();                                     //IIC初始化
  47.     Oled_Init();                                     //oled初始化
  48.     LED_Init();                                             //led初始化
  49.     //Key_Init();                                      //初始化五向按鍵和開關按鍵,可使用Key_Scan()函數得到返回值
  50.     //key_exti_test();                                 //按鍵檢測
  51.           while(FDC2214_Init());                           //fdc2214初始化 成功:0 失敗:1
  52.     Beep=0;delay_ms(10);Beep=1;                      //蜂鳴器提示
  53.     UI_TILTLE();                                     //標題
  54.         while(1)
  55. {
  56.                     Loding_Times=0;   //加載中函數的加載次數
  57. //在頁面0 顯示四路通道值
  58.      //if(Page_New==0)
  59.      //{
  60.          Oled_Printf_U32(28,3,(unsigned long int)temp0,0);
  61.          Oled_Printf_U32(28,4,(unsigned long int)temp1,0);
  62.          Oled_Printf_U32(28,5,(unsigned long int)temp2,0);
  63.          Oled_Printf_U32(28,6,(unsigned long int)temp3,0);
  64.      //}
  65. /**
  66. **在按鍵按下時 oled菜單界面進行相應的切換
  67. **并且相應標志位被重新賦值
  68. **/
  69.     /*if(Interrupt_Flg==1)//按一次方向按鍵'Interrupt_Flg'變量會被置1
  70.     {
  71.                                 if(Page_New==0)
  72.                                 {
  73.                                         ConfirmKey=0;
  74.                                 }
  75.         
  76.                                 OLED_Page_Show(KeyRightLeftFlg, KeyUpDownFlg,ConfirmKey);//此函數為oled菜單顯示函數(參數分別為: 按鍵左右值 按鍵上下值 以及確認鍵)
  77.                           ConfirmKey=0;
  78.                           Interrupt_Flg=0;
  79.                           InterruptFlg =0;                  
  80.                           KeyUpDownFlg =0;
  81.                           KeyRightLeftFlg=0;
  82.     }

  83.     InterruptFlg=0;//此標志位為 錄入手勢時所需的標志位

  84. /**
  85. ** 在進入'Figer'訓練界面時'Train_Figer_Entry_Flg'標志位被置1
  86. ** 在此訓練期間,不會跳出此循環 除非強制返回或錄入結束
  87. ** 相應標志位在此處被賦值
  88. **/
  89.                 /*while(Train_Figer_Entry_Flg)
  90.                 {   SortTimes=0;
  91.         Loading();
  92.                         
  93.        if(InterruptFlg==1)
  94.                     {
  95.           EntryFiger();
  96.           InterruptFlg=0;
  97.         }
  98.                                 
  99.                 ConfirmKey=0;
  100.         KeyUpDownFlg=2;
  101.         Interrupt_Flg=1;
  102.                 KeyRightLeftFlg=-1;
  103.     }
  104. /**
  105. **'Figer'訓練期間如果強制返回則代表錄入失敗
  106. ** 相應所存放數據的數組被清零
  107. **/
  108. /*  if(EntryFigerTimes!=0)
  109.     {
  110.                 unsigned char i;
  111.                         
  112.         for(i=0;i<6;i++)
  113.         {
  114.           ArrayA[i]=0;
  115.         }
  116.                                 
  117.         EntryFigerTimes=0;//錄入手勢時的次數
  118.                                 KeyUpDownFlg=0;
  119.     }
  120. /**
  121. ** 在進入'JudgeNum'判決界面時'Judge_Figer_Flg'標志位被置1
  122. ** 因為在錄入手勢時不需要按照順序,所以此處用到冒泡排序算法
  123. ** oled顯示相應結果
  124. **/
  125.          /* if(Judge_Figer_Flg==1)
  126.                 {
  127.         if(SortTimes==0)//錄入一次數據只排序一次
  128.         {
  129.            SortArr(ArrayA,6);//冒泡排序算法
  130.            JudgmentFigerRange();//對手勢范圍進行整定
  131.         }
  132.         switch(JudgmentFiger())
  133.          {
  134.            case 0: OLED_ShowCN(52,4,35);OLED_ShowCN(52,5,35); break;
  135.            case 1: OLED_ShowStr(52,4,"1",2); break;
  136.            case 2: OLED_ShowStr(52,4,"2",2); break;
  137.                         case 3: OLED_ShowStr(52,4,"3",2); break;
  138.                         case 4: OLED_ShowStr(52,4,"4",2); break;
  139.            case 5: OLED_ShowStr(52,4,"5",2); break;
  140.            default: break;
  141.          }
  142.                                        
  143.         SortTimes=1;
  144.     }
  145. /**
  146. ** 在進入'Fist'訓練界面時'Train_Fist_Entry_Flg'標志位被置1
  147. ** 在此訓練期間,不會跳出此循環 除非強制返回或錄入結束
  148. ** 相應標志位在此處被賦值
  149. **/
  150. /*        while(Train_Fist_Entry_Flg)
  151.     {
  152.         Loading();
  153.         SortTimes=0;
  154.         if(InterruptFlg==1)
  155.         {
  156.           EntryFist();
  157.           InterruptFlg=0;
  158.         }
  159.                         
  160.         ConfirmKey=0;
  161.         KeyUpDownFlg=2;//訓練結束,回到上級菜單時,光標直接跳到猜拳判決處
  162.         Interrupt_Flg=1;
  163.                 KeyRightLeftFlg=-1;
  164.     }
  165. /**
  166. **'Fist'訓練期間如果強制返回則代表錄入失敗
  167. ** 相應所存放數據的數組被清零
  168. **/
  169.   /*   if(EntryFistTimes!=0)
  170.     {
  171.                                 unsigned char i;
  172.                                 for(i=0;i<4;i++)
  173.                                 {
  174.             ArrayB[i]=0;
  175.                                 }
  176.                                 
  177.         EntryFistTimes=0;//錄入手勢時的次數
  178.                                 KeyUpDownFlg=0;
  179.      }
  180. /**
  181. ** 在進入'JudgeFist'判決界面時'Judge_Fist_Flg'標志位被置1
  182. ** 因為在錄入手勢時不需要按照順序,所以此處用到冒泡排序算法
  183. ** oled顯示相應結果
  184. **/
  185. /*   if(Judge_Fist_Flg==1)
  186.      {
  187.         if(SortTimes==0)//錄入一次數據只排序一次
  188.         {
  189.            SortArr(ArrayB,4);
  190.            JudgmentFistRange();
  191.          }
  192.          switch(JudgmentFist())
  193.          {
  194.            case 0: OLED_ShowCN(48,5,35); OLED_ShowCN(64,5,35);break;//空格
  195.            case 1: OLED_ShowCN(48,5,30); OLED_ShowCN(64,5,31);break;//石頭
  196.            case 2: OLED_ShowCN(48,5,32); OLED_ShowCN(64,5,33);break;//剪刀
  197.            case 3: OLED_ShowCN(48,5,34); OLED_ShowCN(64,5,35);break;//布
  198.            default: break;
  199.          }
  200.         SortTimes=1;

  201.                 }*/
  202.   }
  203. }
  204. /**
  205. **可在此函數中直接采集四路通道值
  206. **/

  207. void GetFouChVal()
  208. {
  209.                 temp0= Cap_Calculate(0);
  210.     temp1= Cap_Calculate(1);
  211.     temp2= Cap_Calculate(2);
  212.     temp3= Cap_Calculate(3);
  213.     Total_Value=(temp0+temp1+temp2+temp3)/10000;
  214. }
  215. /**
  216. **定時器5中斷函數 10ms
  217. **在定時器中采集四路通道值,并計算總值
  218. **/
  219. void TIM5_IRQHandler(void)         
  220. {
  221.          
  222.         if(TIM5->SR&0X0001)//溢出中斷
  223.         {        
  224.                 temp0= Cap_Calculate(0);
  225.     temp1= Cap_Calculate(1);
  226.     temp2= Cap_Calculate(2);
  227.     temp3= Cap_Calculate(3);
  228.     Total_Value=(temp0+temp1+temp2+temp3)/10000;
  229.                
  230.         }                                                   
  231.   TIM5->SR&=~(1<<0);
  232. }
復制代碼

全部資料51hei下載地址:
Gesture-KEIL.7z (225.37 KB, 下載次數: 76)
回復

使用道具 舉報

ID:818753 發表于 2020-9-24 09:26 | 顯示全部樓層
請問不同的液晶怎么改代碼呀
回復

使用道具 舉報

ID:927138 發表于 2021-5-30 17:31 | 顯示全部樓層
請問,有實物圖嗎
回復

使用道具 舉報

無效樓層,該帖已經被刪除
ID:99858 發表于 2022-3-8 15:52 | 顯示全部樓層
問下為什么我的板子時間長了,數值會出現漂移,有好的解決辦法嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美在线不卡 | 一区二区三区四区在线 | 日韩1区| 国产成人精品一区二区三区在线 | 日韩av一区二区在线观看 | 夜夜爽99久久国产综合精品女不卡 | 在线亚洲欧美 | 精品国产高清一区二区三区 | 日韩a在线 | 色约约视频| 精品一区二区三区四区五区 | 在线一区二区三区 | 国精产品一品二品国精在线观看 | av免费看片 | 久久久久久久久久久丰满 | 黄a网站| 91文字幕巨乱亚洲香蕉 | 日韩a v在线免费观看 | 亚洲一区二区在线 | 日韩www | 最新av在线播放 | 国产黄色小视频在线观看 | 99免费视频| 三级成人在线 | 亚洲精品二三区 | 免费h在线 | 国产精品99视频 | 一区二区在线免费观看 | 成av在线| 羞羞的视频免费在线观看 | 久久久久中文字幕 | 精品毛片 | 亚洲色综合 | 天堂在线中文 | 成人欧美一区二区三区在线观看 | 午夜成人在线视频 | 日韩福利在线观看 | 视频一区中文字幕 | 国产欧美在线播放 | 亚洲国产精品一区 | 国产高清在线精品一区二区三区 |