久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
2018年全國電子設計大賽(吉林賽區)B題程序源碼
[打印本頁]
作者:
51hei團團
時間:
2018-9-14 03:55
標題:
2018年全國電子設計大賽(吉林賽區)B題程序源碼
2018年全國電子設計大賽(吉林賽區)B題程序源碼基于STM32F103ZET6,圓盤懸吊裝置8路PWM輸出定時器,編碼器測速,陀螺儀
單片機源程序如下:
#include "touch_key.h"
#include "SysTick.h"
#include "usart.h"
#define Touch_ARR_MAX_VAL 0xffff //最大的ARR值
u16 touch_default_val=0; //為按下觸摸按鍵時的值
/*******************************************************************************
* 函 數 名 : TIM5_CH2_Input_Init
* 函數功能 : TIM5_CH2輸入捕獲初始化函數
* 輸 入 : arr:自動重裝載值
psc:預分頻系數
* 輸 出 : 無
*******************************************************************************/
void TIM5_CH2_Input_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);//使能TIM5時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空輸入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); // PA0
TIM_TimeBaseInitStructure.TIM_Period=arr; //自動裝載值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分頻系數
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //設置向上計數模式
TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInitStructure);
TIM_ICInitStructure.TIM_Channel=TIM_Channel_2; //通道2
TIM_ICInitStructure.TIM_ICFilter=0x00; //濾波
TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;//捕獲極性
TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1; //分頻系數
TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;//直接映射到TI1
TIM_ICInit(TIM5,&TIM_ICInitStructure);
TIM_Cmd(TIM5,ENABLE); //使能定時器
}
/*******************************************************************************
* 函 數 名 : Touch_Reset
* 函數功能 : 觸摸按鍵復位 先放電然后充電并釋放計時器內的值
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Touch_Reset(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);//輸出0,放電
delay_ms(5);
TIM_ClearFlag(TIM5, TIM_FLAG_CC2|TIM_FLAG_Update); //清除標志
TIM_SetCounter(TIM5,0); //歸0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空輸入模式
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/*******************************************************************************
* 函 數 名 : Touch_Get_Val
* 函數功能 : 返回捕獲高電平值
* 輸 入 : 無
* 輸 出 : 捕獲高電平值
*******************************************************************************/
u16 Touch_Get_Val(void)
{
Touch_Reset();
while(TIM_GetFlagStatus(TIM5,TIM_FLAG_CC2)==0) //等待捕獲到高電平標志
{
if(TIM_GetCounter(TIM5)>Touch_ARR_MAX_VAL-500) //超時了直接返回CNT值
{
return TIM_GetCounter(TIM5);
}
}
return TIM_GetCapture2(TIM5); //返回捕獲高電平值
}
/*******************************************************************************
* 函 數 名 : Touch_Key_Init
* 函數功能 : 觸摸按鍵初始化
* 輸 入 : 無
* 輸 出 : 0:正常
1:不正常
*******************************************************************************/
u8 Touch_Key_Init(u8 psc)
{
u8 i;
u16 buf[10];
u8 j;
u16 temp;
TIM5_CH2_Input_Init(Touch_ARR_MAX_VAL,psc);
for(i=0;i<10;i++) //讀取10次為按下時候的觸摸值
{
buf[i]=Touch_Get_Val();
delay_ms(10);
}
for(i=0;i<9;i++) //從小到大排序
{
for(j=i+1;j<10;j++)
{
if(buf[i]>buf[j])
{
temp=buf[i];
buf[j]=buf[j];
buf[j]=temp;
}
}
}
temp=0;
for(i=2;i<8;i++) //取中間6個數值求和 取其平均數
{
temp+=buf[i];
}
touch_default_val=temp/6;
printf("touch_default_val=%d \r\n",touch_default_val);
if(touch_default_val>Touch_ARR_MAX_VAL/2)
{
return 1;//初始化遇到超過Touch_ARR_MAX_VAL/2的數值,不正常!
}
return 0;
}
/*******************************************************************************
* 函 數 名 : Touch_Get_MaxVal
* 函數功能 : 讀取n次,取最大值
* 輸 入 : n:連續獲取的次數
* 輸 出 : n次讀數里面讀到的最大讀數值
*******************************************************************************/
u16 Touch_Get_MaxVal(u8 n)
{
u16 temp=0;
u16 res=0;
while(n--)
{
temp=Touch_Get_Val();//得到一次值
if(temp>res)res=temp;
}
return res;
}
/*******************************************************************************
* 函 數 名 : Touch_Key_Scan
* 函數功能 : 觸摸按鍵掃描
* 輸 入 : 0:不支持連續觸發(按下一次必須松開才能按下一次)
1:支持連續觸發(可以一直按下)
* 輸 出 : 0:沒有按下
1:有按下
*******************************************************************************/
#define TOUCH_GATE_VAL 100 //觸摸的門限值,也就是必須大于tpad_default_val+TOUCH_GATE_VAL,才認為是有效觸摸.
u8 Touch_Key_Scan(u8 mode)
{
static u8 keyen=0; //0,可以開始檢測;>0,還不能開始檢測
u8 res=0;
u8 sample=3; //默認采樣次數為3次
u16 rval;
if(mode)
{
sample=6; //支持連按的時候,設置采樣次數為6次
keyen=0; //支持連按
}
rval=Touch_Get_MaxVal(sample);
if(rval>(touch_default_val+TOUCH_GATE_VAL)&&rval<(10*touch_default_val))//大于touch_default_val+TPAD_GATE_VAL,且小于10倍touch_default_val,則有效
{
if((keyen==0)&&(rval>(touch_default_val+TOUCH_GATE_VAL))) //大于touch_default_val+TOUCH_GATE_VAL,有效
{
res=1;
}
printf("觸摸后捕獲高電平值為:%d\r\n",rval);
keyen=3; //至少要再過3次之后才能按鍵有效
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
光電門測速.rar
(547.93 KB, 下載次數: 14)
2018-9-14 03:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
chengxu.rar
(455.96 KB, 下載次數: 14)
2018-9-14 03:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
51hei團團
時間:
2018-9-14 04:02
本帖作者:
http://www.zg4o1577.cn/bbs/home.ph ... read&from=space
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
在线一区
|
欧美日韩国产精品一区
|
精品亚洲一区二区
|
国产亚洲第一页
|
一区二区三区高清
|
国产精品久久毛片av大全日韩
|
在线看一区二区三区
|
一级a性色生活片久久毛片 一级特黄a大片
|
97国产在线视频
|
成人免费观看男女羞羞视频
|
一本一道久久a久久精品蜜桃
|
久久久久久久久久一区二区
|
超碰欧美
|
日韩激情在线
|
日韩欧美成人一区二区三区
|
一区二区视频在线观看
|
国产一区二区三区四区五区加勒比
|
99这里只有精品视频
|
精品一区二区三区在线观看国产
|
欧美国产免费
|
亚洲成人中文字幕
|
99精品视频一区二区三区
|
狠狠插天天干
|
狠狠操狠狠操
|
毛片免费在线
|
午夜影院视频
|
欧美性吧
|
国产精品视频网
|
久久久123
|
日本不卡一区二区三区在线观看
|
伊大人久久
|
色噜噜色综合
|
国产精品久久久久999
|
亚洲精彩免费视频
|
久久久免费电影
|
久久69精品久久久久久久电影好
|
黄色毛片在线观看
|
免费看欧美一级片
|
亚洲精品日韩一区二区电影
|
欧美精品一二三
|
在线观看av免费
|