該文件采用12864實時顯示超聲波測距的距離,超聲波的最大顯示距離為4米,精度可根據實際調節
單片機源程序如下:
- /***********************************************/
- //實驗名稱:超聲波傳感器實驗
- //接線說明:超聲波模塊的J2口接核心板的P3接口。
- //實驗現象:液晶上顯示當前距離。
- /***********************************************/
- #include "sys.h"
- #include "usart.h"
- #include "delay.h"
- #include "led.h"
- #include "12864.h"
- #include "timer.h"
- #include "exti.h"
- #define CSB_TX PAout(8) // PA8 發送超聲波引腳
- #define BEEN PAout(10)
- // 變量
- u32 status=0; // 計數值
- char s2[10],s1[10]; // LCD顯示緩存數組
- u32 real_time; // 讀回值
- float dis; // 距離計算值
- u8 distance[7] = {0};
- void tran(void); // 左發生超聲波函數
- void DisplayDis(float value);
- void Display(u8 Pos);
- int main(void)
- {
- Stm32_Clock_Init(9); // 系統時鐘設置
- delay_init(72); // 延時初始化
- uart_init(72,9600); // 串口初始化
- Timerx_Init(10,71); // 1Mhz的計數頻率,計數到10為10us
- Init_12864(); // 液晶初始化
- EXTIX_Init(); // 外部中斷初始化
- while(1)
- {
- tran();
- if(dis<10 && dis!=0)
- BEEN=1;
- else
- BEEN=0;
- if(dis>80)
- dis=0;
- DisplayDis( dis * 10 );
- dis=0; //無物體
- LED0=!LED0; //指示燈閃爍
- delay_ms(300);
- }
- }
- // 左發生超聲波函數
- void tran(void)
- {
- u8 i;
- TIM3->CR1|=0x01; // 使能定時器3
- TIM3->SR&=~(1<<0); // 清除中斷標志位
- status = 0; // 定時器清零
- for(i=0;i<8;i++) // 發送信號
- {
- CSB_TX = 1;
- delay_us(12);
- CSB_TX = 0;
- delay_us(12);
- }
- delay_ms(10);
- }
- //
- void DisplayDis(float value)
- {
- u32 val = (u32)value;
- distance[0] = (val / 100) + 48;
- distance[1] = (val % 100) /10 + 48;
- distance[2] = '.';
- distance[3] = val % 10 + 48;
- distance[4] = ' ';
- distance[5] = 'c';
- distance[6] = 'm';
- Display(0x9C);
- }
- //****************************************
- //顯示子程序
- //****************************************
- void Display(u8 Pos)
- {
- u8 i;
- write_12864com(Pos);
- for(i=7;i>0;i--)
- {
- write_12864data(distance[7-i]);
- delay_us(10);
- }
- }
復制代碼
所有資料51hei提供下載:
超聲波 12864顯示.rar
(327.07 KB, 下載次數: 154)
2018-7-24 11:18 上傳
點擊文件名下載附件
超聲波測距 下載積分: 黑幣 -5
|