超声波测距实验解析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验7 超声波测距实验
(1)实验目的
掌握超声波测距的原理
掌握超声波测距的软件编程
(2)实验器材
电源POWER模块、测距&振动&压力&角度模块、主控制器模块、LCD1602、超声波模块、连接线
(3)实验程序
ceju
#include
#include "1602.h"
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int
//#define Trig P2^6
//#define Echo P2^7
void Time0_Init()
{
TMOD |=0X01; //定时0,工作方式1,16位定时器TH0=0;
TL0=0;
ET0=1; //允许T0中断
EA=1; //开启总中断
}
sbit Trig=P2^6;
sbit Echo=P2^7;
double t;
int s;
int ge;
int shi;
int bai;
void main(void)
{
Time0_Init();
lcd_init();
while(1)
{
Trig=0;
Trig=1;
delay_ms(1);
Trig=0;
while(Echo==0);
{
}
TR0=1;
while(Echo==1)
{
}
TR0=0;
t=(double)(TH0*256+TL0)*12.0/11.0592; TH0=0;
TL0=0;
s=(int)340*t/20000;
ge=s%10;
s=s/10;
shi=s%10;
s=s/10;
bai=s;
delay_ms(100);
lcd_display_str(0,0,"s=");
lcd_1602_display_num(1,1,bai);
lcd_1602_display_num(2,1,shi);
lcd_1602_display_num(3,1,ge);
}
}
(4)测试步骤
1. 将超声波模块插入测距&振动&压力&角度传感器模块J5,按表1的连线关系连好线。给模块上电。
2. 编写程序,并下载到主控制器。
3. 用物体挡住超声波模块,观察液晶显示的距离。移动物体,观察液晶显示的距离是否与实际吻合。
(5)实验结果
液晶显示屏上显示超声波模块距离阻挡物的距离(直线距离),最大可到400cm左右。
实验8 PWM直流电机调速实验
(1)实验目的
了解单片机硬件PWM的配置方法
掌握直流电机速度的控制方法
(2)实验器材
电源POWER模块、CPU_51模块、速度&加速度度传感器模块、LCD1602、超声波模块、连接线
(3)实验程序
main.c
#include "1602.h"
#include "delay.h"
#include
int ge,shi,bai,age,ashi;
sbit KEY1=P1^4;
int i=0;
int a;
//定时器初始化
void Time0_Init()
{
TMOD |= 0X01; //定时0,工作方式1,16位定时器
TH0 = (65536-46080)/256; //定时时间:50ms,50ms后进入中断
TL0 = (65536-46080)%256;
ET0 = 1; //允许T0中断
TR0 = 1; //启动定时器0
EA = 1; //开启总中断
}
void Time1_Init()
{
TMOD |= 0x50; //定时器1,工作方式1,16位计数器
TH1 = 0; //计数器赋初值
TL1 = 0;
TR1 = 1; //启动计数器
}
int count,speed = 100 ;
/*定时器0中断函数
count用于计数,计满即是1s,speed变量存1s内得到的脉冲数。
*/
void Time0_Int() interrupt 1
{
count++;
//lcd_1602_display_num(1,0,2);
if(count > 19)
{
speed = TH1*256+TL1; //取得1s,计数器1得到的脉冲数count = 0;
TH1 = 0;
TL1 = 0;
}
TH0 = (65536-46080)/256; //定时器0,重新赋初值
TL0 = (65536-46080)%256;
}
/*PWM初始化
PWM的频率是11.0592/256 MHZ,通过改变CCAP0H和CCAP0L的值,可以改变PWM的占空比。
*/