该文件采用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)
|