欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
基于stm32的車流量統(tǒng)計keil實現(xiàn) 源程序
[打印本頁]
作者:
wangyan232
時間:
2020-11-13 03:19
標(biāo)題:
基于stm32的車流量統(tǒng)計keil實現(xiàn) 源程序
這是基于stm32的通過頻率比較法來進行車流量統(tǒng)計的設(shè)計
單片機源程序如下:
/*********************************************************
脈沖輸入 --> PA0 (TIM8_ETR)
按鍵清零 --> KEY0按鍵,按一下變量SUM清零
程序原理:使用定時器8的ETR測量脈沖的個數(shù),使用滴答定時器1秒精確延時
得出頻率,并和上次的頻率值比較,程序默認是數(shù)值比較,即兩次的頻率絕對值
大于FrqValThr即設(shè)定的1KHZ,則計數(shù)加1,同時液晶顯示上次和當(dāng)前的脈沖頻率
單位HZ,以及顯示不同的字符串"Over"和"Normal";
如果按下了KEY0按鍵,則計數(shù)自動清零;
如果想改成1秒內(nèi)的變化率,則while循環(huán)里改成Check_Frq_Ch(0)即可
即成了兩次測量差值絕對值和當(dāng)前頻率的比值,也就是變化率,如果超出
FrqPerThr 即設(shè)定的0.1,則自動加1
***************************************************/
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "Key.h"
#define FrqValThr 200
#define FrqPerThr 0.1
#define ABS(x) ((x)>=0?(x):(-(x)))
#define BEEP PBout(8) // BEEP,蜂鳴器接口
u16 Sum;
u16 NowFrq;//當(dāng)前的頻率
u16 PrvFrq=65535;//上次的頻率
u8 ErrF;
u8 KeyF;
void TIM8_ETR_GetDropCounts_Configuration(void);
void Check_Frq_Ch(u8 Cmpr);
void Measr_PlusFrq(void);
void Show_Data_LCD(u16 PFrq,u16 NFrq,u16 tSum);
void BEEP_Init(void);
int main(void)
{
delay_init(); //延時函數(shù)初始化
TIM8_ETR_GetDropCounts_Configuration();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
uart_init(115200); //串口初始化為115200
LED_Init(); //LED端口初始化
LCD_Init();
POINT_COLOR=RED;
LCD_Clear(WHITE);
while(1)
{
Measr_PlusFrq();//測量頻率
Show_Data_LCD(PrvFrq,NowFrq,Sum);//顯示數(shù)值
LED0=!LED0;
Check_Frq_Ch(1);//默認數(shù)值比較
KEY_Handle();
delay_ms(1000);
}
}
/*******************************************************************************
* 函數(shù)名 : Show_Data_LCD(float Data1,float Data2,float Data3,float Data4)
* 函數(shù)描述 : 液晶屏顯示數(shù)據(jù) 溫度 濕度 PM2.5
*******************************************************************************/
void Show_Data_LCD(u16 PFrq,u16 NFrq,u16 tSum)
{
char Data1Buff[20]="";
char Data2Buff[20]="";
char Data3Buff[20]="";
LCD_Clear(WHITE);//設(shè)置背景顏色白色
sprintf(Data1Buff,"%s%d%s","PrvF : ",PFrq," HZ"); //顯示上次的HZ
sprintf(Data2Buff,"%s%d%s","NowF : ",NFrq," HZ"); //顯示當(dāng)前的HZ
sprintf(Data3Buff,"%s%d%s","Sum: ",tSum," Tik"); //顯示變量
LCD_ShowString(30,40,210,24,24,Data1Buff);
LCD_ShowString(30,70,200,16,16,Data2Buff);
LCD_ShowString(30,90,200,16,16,Data3Buff);
if( ErrF)
{
LCD_ShowString(30,130,200,12,12,"Over");
BEEP=1;
}
if(!ErrF)
{
LCD_ShowString(30,130,200,12,12,"Normal");
BEEP=0;
}
}
/*******************************************************************************
* 函數(shù)名 : TIM8_ETR
* 函數(shù)描述 : 使8 PA0的外部脈沖計數(shù)
*******************************************************************************/
void TIM8_ETR_GetDropCounts_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_TIM8, ENABLE); //時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PA0 為浮空輸入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); // Time base configuration
TIM_ETRClockMode2Config(TIM8, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0); //不反相
TIM_SetCounter(TIM8, 0);
TIM_Cmd(TIM8, ENABLE);
}
/*******************************************************************************
* 函數(shù)名 : Measr_PlusFrq(void)
* 函數(shù)描述 : 測量當(dāng)前的頻率
*******************************************************************************/
void Measr_PlusFrq(void)
{
TIM_SetCounter(TIM8, 0);
delay_ms(1000);
NowFrq=TIM_GetCounter(TIM8); //獲取計數(shù)值
}
/*******************************************************************************
* 函數(shù)名 : Check_Frq_Ch(void)
* 函數(shù)描述 : 檢查頻率的變化 Cmpr=1 數(shù)值比較 Cmpr=0 比值比較
*******************************************************************************/
void Check_Frq_Ch(u8 Cmpr)
{
if(NowFrq-PrvFrq>=FrqValThr && Cmpr)
{
Sum++;
ErrF=1;
}
if(NowFrq-PrvFrq<FrqValThr && Cmpr)
{
ErrF=0;
}
if(KeyF)
{
KeyF=0;
Sum=0;
}
if(ABS(NowFrq-PrvFrq)/NowFrq>=FrqPerThr && !Cmpr)
{
Sum++;
}
if(ABS(NowFrq-PrvFrq)/NowFrq<FrqPerThr && !Cmpr)
{
ErrF=0;
}
PrvFrq=NowFrq;
}
/*******************************************************************************
* 函數(shù)名 : BEEP_Init(void)
* 函數(shù)描述 : 蜂鳴器初始化
*******************************************************************************/
void BEEP_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB端口時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //BEEP-->PB.8 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度為50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根據(jù)參數(shù)初始化GPIOB.8
GPIO_ResetBits(GPIOB,GPIO_Pin_8);//輸出0,關(guān)閉蜂鳴器輸出
}
復(fù)制代碼
所有資料51hei提供下載:
STM32_MAIN_BEEP.7z
(223.59 KB, 下載次數(shù): 16)
2020-11-13 22:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2020-11-13 22:07
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1