久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
STM32 FDC2214手勢識別參考程序
[打印本頁]
作者:
2302789943
時間:
2019-8-8 15:02
標題:
STM32 FDC2214手勢識別參考程序
#include "stm32f10x.h"
#include "sys.h"
#include "led.h"
#include "Beep.h"
#include "delay.h"
#include "stdio.h"
#include "usart.h"
#include "key.h"
#include <fdc2214.h>
#include <oled.h>
#include <niming.h>
#include <text.h>
#include <Menu.h>
#include <SortArr.h>
#include "time5.h"
unsigned char EntryFigerTimes=0;//錄入54321時,所需記錄的次數
unsigned char EntryFistTimes =0;//錄入石頭剪刀布時,所需記錄的次數
//相應標志位
unsigned char Interrupt_Flg=1,InterruptFlg=0;//按下按鍵 產生的相應標志位
unsigned char Train_Figer_Entry_Flg=0,Train_Fist_Entry_Flg=0;//進入猜拳訓練 劃拳訓練 相應標志位
unsigned char Judge_Figer_Flg=0,Judge_Fist_Flg=0;//進入猜拳判決 劃拳判決 相應標志位
//數組排序次數
unsigned char SortTimes=0;//錄入結束后,對數組進行排序的次數
//電容值存放數據
float temp0=0,temp1=0,temp2=0,temp3=0;//四路通道值存放的變量
float Total_Value;//四路通道總值
//待存錄入數組
float ArrayData[10]={0};//錄入手勢時,四路通道總值要存放的數組(在錄入手勢時采集了十次數據,并且采用濾波算法)
float ArrayA[8]={0};//錄入54321時 存放54321數據的數組
float ArrayB[8]={0};//錄入石頭剪刀布時 存放石頭剪刀布數據的數組
//按鍵數據
int Page_New=0;//OLED菜單頁面
int ConfirmKey=0;//確認鍵(確認鍵按下: 1)
int KeyUpDownFlg=0;//記錄上下按鍵相對變化,正常按上鍵加1,按下鍵減1
int KeyRightLeftFlg=0;//按鍵右與左(兩個按鍵采用一個變量 右鍵: 1 左鍵: -1)
//加載中 次數
long int Loding_Times=0;//加載中 相應判斷次數
void GetFouChVal(void);//讀取四路通道值的函數
int main()
{
delay_init(); //延時函數初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置中斷優先級分組2
uart_init(115200); //串口初始化為115200
TIM5_init(79,7199); //10ms中斷
Beep_Init(); //蜂鳴器初始化
IIC_Start(); //IIC初始化
Oled_Init(); //oled初始化
LED_Init(); //led初始化
//Key_Init(); //初始化五向按鍵和開關按鍵,可使用Key_Scan()函數得到返回值
//key_exti_test(); //按鍵檢測
while(FDC2214_Init()); //fdc2214初始化 成功:0 失。1
Beep=0;delay_ms(10);Beep=1; //蜂鳴器提示
UI_TILTLE(); //標題
while(1)
{
Loding_Times=0; //加載中函數的加載次數
//在頁面0 顯示四路通道值
//if(Page_New==0)
//{
Oled_Printf_U32(28,3,(unsigned long int)temp0,0);
Oled_Printf_U32(28,4,(unsigned long int)temp1,0);
Oled_Printf_U32(28,5,(unsigned long int)temp2,0);
Oled_Printf_U32(28,6,(unsigned long int)temp3,0);
//}
/**
**在按鍵按下時 oled菜單界面進行相應的切換
**并且相應標志位被重新賦值
**/
/*if(Interrupt_Flg==1)//按一次方向按鍵'Interrupt_Flg'變量會被置1
{
if(Page_New==0)
{
ConfirmKey=0;
}
OLED_Page_Show(KeyRightLeftFlg, KeyUpDownFlg,ConfirmKey);//此函數為oled菜單顯示函數(參數分別為: 按鍵左右值 按鍵上下值 以及確認鍵)
ConfirmKey=0;
Interrupt_Flg=0;
InterruptFlg =0;
KeyUpDownFlg =0;
KeyRightLeftFlg=0;
}
InterruptFlg=0;//此標志位為 錄入手勢時所需的標志位
/**
** 在進入'Figer'訓練界面時'Train_Figer_Entry_Flg'標志位被置1
** 在此訓練期間,不會跳出此循環 除非強制返回或錄入結束
** 相應標志位在此處被賦值
**/
/*while(Train_Figer_Entry_Flg)
{ SortTimes=0;
Loading();
if(InterruptFlg==1)
{
EntryFiger();
InterruptFlg=0;
}
ConfirmKey=0;
KeyUpDownFlg=2;
Interrupt_Flg=1;
KeyRightLeftFlg=-1;
}
/**
**'Figer'訓練期間如果強制返回則代表錄入失敗
** 相應所存放數據的數組被清零
**/
/* if(EntryFigerTimes!=0)
{
unsigned char i;
for(i=0;i<6;i++)
{
ArrayA[i]=0;
}
EntryFigerTimes=0;//錄入手勢時的次數
KeyUpDownFlg=0;
}
/**
** 在進入'JudgeNum'判決界面時'Judge_Figer_Flg'標志位被置1
** 因為在錄入手勢時不需要按照順序,所以此處用到冒泡排序算法
** oled顯示相應結果
**/
/* if(Judge_Figer_Flg==1)
{
if(SortTimes==0)//錄入一次數據只排序一次
{
SortArr(ArrayA,6);//冒泡排序算法
JudgmentFigerRange();//對手勢范圍進行整定
}
switch(JudgmentFiger())
{
case 0: OLED_ShowCN(52,4,35);OLED_ShowCN(52,5,35); break;
case 1: OLED_ShowStr(52,4,"1",2); break;
case 2: OLED_ShowStr(52,4,"2",2); break;
case 3: OLED_ShowStr(52,4,"3",2); break;
case 4: OLED_ShowStr(52,4,"4",2); break;
case 5: OLED_ShowStr(52,4,"5",2); break;
default: break;
}
SortTimes=1;
}
/**
** 在進入'Fist'訓練界面時'Train_Fist_Entry_Flg'標志位被置1
** 在此訓練期間,不會跳出此循環 除非強制返回或錄入結束
** 相應標志位在此處被賦值
**/
/* while(Train_Fist_Entry_Flg)
{
Loading();
SortTimes=0;
if(InterruptFlg==1)
{
EntryFist();
InterruptFlg=0;
}
ConfirmKey=0;
KeyUpDownFlg=2;//訓練結束,回到上級菜單時,光標直接跳到猜拳判決處
Interrupt_Flg=1;
KeyRightLeftFlg=-1;
}
/**
**'Fist'訓練期間如果強制返回則代表錄入失敗
** 相應所存放數據的數組被清零
**/
/* if(EntryFistTimes!=0)
{
unsigned char i;
for(i=0;i<4;i++)
{
ArrayB[i]=0;
}
EntryFistTimes=0;//錄入手勢時的次數
KeyUpDownFlg=0;
}
/**
** 在進入'JudgeFist'判決界面時'Judge_Fist_Flg'標志位被置1
** 因為在錄入手勢時不需要按照順序,所以此處用到冒泡排序算法
** oled顯示相應結果
**/
/* if(Judge_Fist_Flg==1)
{
if(SortTimes==0)//錄入一次數據只排序一次
{
SortArr(ArrayB,4);
JudgmentFistRange();
}
switch(JudgmentFist())
{
case 0: OLED_ShowCN(48,5,35); OLED_ShowCN(64,5,35);break;//空格
case 1: OLED_ShowCN(48,5,30); OLED_ShowCN(64,5,31);break;//石頭
case 2: OLED_ShowCN(48,5,32); OLED_ShowCN(64,5,33);break;//剪刀
case 3: OLED_ShowCN(48,5,34); OLED_ShowCN(64,5,35);break;//布
default: break;
}
SortTimes=1;
}*/
}
}
/**
**可在此函數中直接采集四路通道值
**/
void GetFouChVal()
{
temp0= Cap_Calculate(0);
temp1= Cap_Calculate(1);
temp2= Cap_Calculate(2);
temp3= Cap_Calculate(3);
Total_Value=(temp0+temp1+temp2+temp3)/10000;
}
/**
**定時器5中斷函數 10ms
**在定時器中采集四路通道值,并計算總值
**/
void TIM5_IRQHandler(void)
{
if(TIM5->SR&0X0001)//溢出中斷
{
temp0= Cap_Calculate(0);
temp1= Cap_Calculate(1);
temp2= Cap_Calculate(2);
temp3= Cap_Calculate(3);
Total_Value=(temp0+temp1+temp2+temp3)/10000;
}
TIM5->SR&=~(1<<0);
}
復制代碼
全部資料51hei下載地址:
Gesture-KEIL.7z
(225.37 KB, 下載次數: 76)
2019-8-8 17:54 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
ylf
時間:
2020-9-24 09:26
請問不同的液晶怎么改代碼呀
作者:
lzwloveqn
時間:
2021-5-30 17:31
請問,有實物圖嗎
作者:
q294877228
時間:
2022-3-8 15:52
問下為什么我的板子時間長了,數值會出現漂移,有好的解決辦法嗎?
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
免费在线看a
|
国产精品123区
|
欧美一区二区三区成人
|
一区二区黄色
|
国产精品免费在线
|
日皮视频在线观看
|
欧美日韩大片
|
欧美精品成人
|
久久精品一
|
高清视频一区二区
|
欧美操操操
|
黄色欧美视频
|
一级在线视频
|
欧美日韩国产中文
|
国产三级网
|
国产做受视频
|
亚洲天天
|
国产一区二区三区四区
|
手机看片欧美
|
国产日韩精品视频
|
久久久久久网
|
国产主播一区二区
|
成人免费小视频
|
黄色片视频网站
|
蜜桃精品噜噜噜成人av
|
日本福利在线
|
亚洲蜜桃av
|
亚洲一区二区三区在线视频
|
一本到av
|
官场少妇尤物雪白高耸
|
a在线播放
|
日本美女一级片
|
日韩中文字幕在线观看
|
www性
|
中文在线一区
|
又黄又爽网站
|
中文在线一区
|
黄色a一级
|
黄色大片免费观看
|
日本在线免费观看视频
|
国产视频一区在线观看
|