久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
STM32超聲波測距程序原理圖PCB資料
[打印本頁]
作者:
景清
時間:
2021-3-11 10:18
標題:
STM32超聲波測距程序原理圖PCB資料
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
51hei.png
(42.55 KB, 下載次數: 77)
下載附件
2021-3-11 21:17 上傳
51hei.png
(11.13 KB, 下載次數: 64)
下載附件
2021-3-11 21:17 上傳
單片機源程序如下:
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "HCSR04.h"
#include "led.h"
#include "beep.h"
#include "key.h"
#include "lcd1602.h"
#include "stmflash.h" //包含頭文件
unsigned long S=0; //定義超聲數據
#define FLASH_SAVE_ADDR 0X0800FF00 //設置FLASH 保存地址(必須為偶數,且其值要大于本代碼所占用FLASH的大小+0X08000000)
extern unsigned long Clock_time;
unsigned char Send_flag=0;
extern u8 TIM3CH1_CAPTURE_STA; //輸入捕獲狀態
extern u16 TIM3CH1_CAPTURE_VAL; //輸入捕獲值
u16 fls[4];
u8 k=0;
u32 TL=50;
u8 beep1;
u8 t=0;
void key() //按鍵函數
{
k=KEY_Scan(1); //按鍵掃描的值給K
if(k == KEY0_PRES) //如果K等于 KEY0_PRES,就說明是按下加按鍵
{
TL++; //數據加一,如果大于400,則減一,保持最大400
if(TL>400)
TL--;
fls[0]=TL;
STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)fls,1); //存儲
}
if(k == KEY1_PRES)//同上,不過是減
{
TL--;
if(TL<5)
TL++;
fls[0]=TL;
STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)fls,1);
}
}
void ceju()
{
Trig=1;
delay_us(20);
Trig=0; //啟動信號
S=0; //清零距離數據
Clock_time=0;
TIM_Cmd(TIM3, DISABLE); //關定時器,清零計時變量
while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)); //等待檢測到高電平
Clock_time=0;
TIM_Cmd(TIM3, ENABLE); //開定時器
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==1&&Clock_time<47058); //只要是高,一直算時間,如果時間計數超過 47058,所說有問題,直接跳過,47058不一定精確,是一個大概值,
S=((Clock_time*2)*340/10000)/2; //時間變量是2us加一,乘以速度,因為時間是us,換成秒是除以1000000,保留兩位小數,所以除以 10000,然后除以二得到單方面距離
TIM_Cmd(TIM3, DISABLE); //關定時器
Clock_time=0; //清零數據
printf("Distance:%d cm\r\n",S);//打印總的高點平時間
}
void show()
{
LCD1602_Show_Str(0,0,"Distance:"); //顯示
if(S>=100&&S<=400) LCD1602_Write_Dat(S/100%10+0x30); //這里是測速數據
else LCD1602_Show_Str(9,0," ");
if(S>=10) LCD1602_Write_Dat(S/10%10+0x30);
else LCD1602_Show_Str(10,0," ");
LCD1602_Write_Dat(S%10+0x30);
LCD1602_Show_Str(12,0,"cm ");
LCD1602_Show_Str(0,1,"alarm :"); //這里開始顯示報警數據,下面這三段,其實就是判斷閾值數據是百位數還是十位數還是個位數,如果是個位數,顯示個位數據,百位十位顯示空
if(TL>=100&&TL<=400)
{
LCD1602_Write_Dat(TL/100%10+0x30);
LCD1602_Write_Dat(TL/10%10+0x30);
LCD1602_Write_Dat(TL%10+0x30);
LCD1602_Show_Str(12,1,"cm ");
}
if(TL>=10&&TL<100)
{
LCD1602_Show_Str(9,1," ");
LCD1602_Write_Dat(TL/10%10+0x30);
LCD1602_Write_Dat(TL%10+0x30);
LCD1602_Show_Str(12,1,"cm ");
}
if(TL>0&&TL<10)
{
LCD1602_Show_Str(9,1," ");
LCD1602_Show_Str(10,1," ");
LCD1602_Write_Dat(TL%10+0x30);
LCD1602_Show_Str(12,1,"cm ");
}
}
void problem() //報警函數
{
if(S<TL) //小于閾值,蜂鳴器開始響,對應指示燈亮,否則蜂鳴器不響
{
beep1=1;
LED1=1;
}
else
{
beep1=0;
LED1=0;
LED0=1;
}
}
int main(void)
{
u16 datatemp[1];
BEEP_Init();
KEY_Init();
delay_init(); //延時函數初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
uart_init(115200); //串口初始化為115200
LED_Init(); //LED端口初始化
UltrasonicWave_Configuration(); //初始化超聲IO
TIM3_Cap_Init(1,72-1); //以1Mhz的頻率計數,第一個選項,最小只能是1
LCD1602_Init();
STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)datatemp,1);
TL=datatemp[0];
if(TL<5||TL>400)
TL=50;
ceju();
printf("Distance"); //串口打印一下,調試用
while(1)
{
if(beep1==1) //如果蜂鳴器標志等于1,則開始滴滴叫,指示燈也是閃爍
{
BEEP=!BEEP;
LED0=!LED0;
}
else
BEEP=0;
show(); //調用顯示函數
key(); //調用按鍵函數
problem();//調用報警處理函數
t++; //變量自加,加到5的時候,對5取余會等于0,則啟動一次測距函數
if(t%5==0)
{
t=0;
ceju();
}
}
}
復制代碼
全部資料51hei下載地址:
STM32 超聲波測距完整資料.7z
(343.7 KB, 下載次數: 116)
2021-3-11 21:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
一只靈
時間:
2023-6-28 20:41
只有初始距離0和鬧鐘5cm,超聲波無作用
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产91丝袜在线播放
|
免费看黄色一级片
|
日韩精品一区二区在线
|
超碰福利在线
|
黄色三级在线
|
国产精品免费在线
|
深夜福利网
|
福利色导航
|
日本黄色中文字幕
|
色av导航
|
久久综合99
|
久久久国产视频
|
免费一级a毛片
|
久久国产一区
|
成人黄色大片
|
国产一级黄色录像
|
精品视频99
|
欧美大片黄
|
日本一级一片免费视频
|
国产精品一区二区不卡
|
久久一级视频
|
国产精品黄
|
亚洲免费久久
|
羞羞网站入口
|
国产黄色精品视频
|
四虎在线播放
|
黄色片视频免费
|
午夜视频一区
|
四级黄色片
|
亚洲成人动漫在线观看
|
久久大
|
久久一区二区视频
|
av在线播放免费
|
午夜免费观看视频
|
超碰成人免费
|
在线观看日韩视频
|
jizz中国女人高潮
|
欧美日韩免费看
|
国产乱人乱偷精品视频
|
夜夜操影院
|
日韩黄色大片
|