这是超声波测距装置,附件里面包含接线图 ,程序源代码,用oled显示
单片机源程序如下:
- /****************************************Copyright (c)****************************************************
- **
- **
- **
- **--------------File Info---------------------------------------------------------------------------------
- ** File name:
- ** Last modified Date:
- ** Last Version:
- ** Descriptions:
- **--------------------------------------------------------------------------------------------------------
- ** Created by: FiYu
- ** Created date: 2017-02-20
- ** Version: 1.0
- ** Descriptions: HC-SR04超声波测距实验
- **--------------------------------------------------------------------------------------------------------
- ** Modified by:
- ** Modified date:
- ** Version:
- ** Descriptions:
- ** Rechecked by:
- **********************************************************************************************************/
- /****-----请阅读ReadMe.txt进行实验-----***********/
- #include "OLED.h"
- /**********************
- 引脚别名定义
- ***********************/
- sbit ECHO=P0^2;
- sbit TRIG=P0^3;
- #define Distance_MAX 700 //HC-SR04模块可检测的最大距离
- unsigned int i;
-
- unsigned int time=0; //测距用时间
- unsigned long S=0; //测距用距离
- bit flag =0; //测距用超出范围标识符
- /**************************************
- 功能描述:计算距离并在LCD1602屏上显示
- 入口参数:无
- 返回值:无
- ***************************************/
- void Conut(void)
- {
- time=TH0*256+TL0;
- TH0=0;
- TL0=0;
-
- //显示汉字
- for(i=0; i<5; i++)
- {
- LCD_P16x16Ch((i+1)*16,0,i);
-
- }
- LCD_P8x16Str(0*16,4,"dance= CM");
- S=(time*1.7)/100; //算出来是CM
- if((S>=Distance_MAX)||flag==1) //超出测量范围显示“-”
- {
- flag=0;
- LCD_P8x16Str(0*16,4,"dance=xxxCM");
-
- }
- else
- {
- OLED_ShowChar(6*8,4,S/100%10+'0');
- OLED_ShowChar(7*8,4,S/10%10+'0');
- OLED_ShowChar(8*8,4,S%10+'0');
-
- }
- }
- /**************************************
- 功能描述:计数器0初始化函数
- 入口参数:无
- 返回值:无
- ***************************************/
- void Timer0Init(void)
- {
- AUXR &= 0x7F; //计数器0为12T模式
- TMOD &= 0xFD; //计数器0为16位不可重装载模式,TL0,TH0全用
- TMOD |= 0x01; //计数器0为16位不可重装载模式,TL0,TH0全用
- TH0=0;
- TL0=0;
- ET0=1; //允许T0中断
- }
- /**************************************
- 功能描述:计数器0中断服务函数
- 入口参数:无
- 返回值:无
- ***************************************/
- void timer0_int (void) interrupt 1
- {
- flag=1; //中断溢出标志
- }
-
- /**************************************
- 功能描述:启动HC-SR04模块
- 入口参数:unsigned char X, unsigned char Y, unsigned char DData
- 返回值:无
- ***************************************/
- void StartModule() //启动模块
- {
- TRIG=1; //启动一次模块
- delay_ms(5);
- TRIG=0;
- }
- /***************************************************************************
- * 描 述 : 主函数
- * 入 参 : 无
- * 返回值 : 无
- **************************************************************************/
- int main(void)
- {
-
- /////////////////////////////////////////////////
- //注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
- // 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
- //相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
- // P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
- /////////////////////////////////////////////////
- P0M1 = 0; P0M0 = 0; //设置P0.0~P0.7为准双向口
- P1M1 = 0; P1M0 = 0; //设置P1.0~P1.7为准双向口
- P2M1 = 0; P2M0 = 0xff; //设置P2.0~P2.7为推挽输出
- P3M1 = 0; P3M0 = 0; //设置P3.0~P3.7为准双向口
- P4M1 = 0; P4M0 = 0; //设置P4.0~P4.7为准双向口
- P5M1 = 0; P5M0 = 0; //设置P5.0~P5.7为准双向口
- delay_ms(500); //上电延时
- OLED_Init(); //对OLED屏初始化
- OLED_Fill(0x00); //清屏
- while(1)
- {
- Timer0Init();
- EA=1; //开启总中断
-
- while(1)
-
- { StartModule();
- while(!ECHO); //当ECHO为零时等待
- TR0=1; //开启计数
- while(ECHO); //当ECHO为1计数并等待
- TR0=0; //关闭计数
- Conut(); //计算
- delay_ms(80); //80ms延时
- }
- }
- }
复制代码
所有资料51hei提供下载:
超声波测距 - oled显示.zip
(1.01 MB, 下载次数: 126)
|