标题:
基于单片机最小系统板的超声波测距程序与PCB原理图
[打印本页]
作者:
1076658053
时间:
2020-10-3 22:26
标题:
基于单片机最小系统板的超声波测距程序与PCB原理图
之前写的超声波波测距,超声波模块是HC-SR04,LCD1602显示。
超声波模块
HC-SR04
简介以及编程
附带PCB板,
程序有一点点小bug,测距时数据变化太快,不能稳定,如果有高手的话希望能给改改!!
Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
51hei.png
(14.22 KB, 下载次数: 39)
下载附件
2020-10-3 23:14 上传
51hei.png
(30.92 KB, 下载次数: 38)
下载附件
2020-10-3 23:14 上传
单片机源程序如下:
main.c
#include "reg52.h"
#include "lcd1602.h"
#include "lcd1602.c"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit trig=P2^0;
sbit echo=P2^1;
uint number,dist,numbtime,ii;
uchar shia,fen,miao;
uchar code lcd[]="0123456789";
uchar code cm[]="cm";
void init() //定时器0初始化
{
TMOD=0x01; //定时器0,工作方式1
TH0=0;
TL0=0;
TF1=0;
EA=1;
ET0=1;
}
void time()
{
trig=1;
delay(1);
trig=0;
while(!echo); //接收到返回波
TR0=1; //开定时器0
while(echo);
TR0=0; //关定时器0
number=TH0*256+TL0;
for(ii=number;ii<=40000;ii++);
TH0=0;
TL0=0;
number=number*12/11.0592; //us
dist=number*0.17; // mm 0.017(cm)
}
void main()
{
uchar i;
lcd_init();
init();
while(1)
{
time();
lcd_com(0x80);
lcd_dat(lcd[dist/1000]);
lcd_dat(lcd[dist%1000/100]);
lcd_dat(lcd[dist%100/10]);
lcd_dat('.');
lcd_dat(lcd[dist%10]);
for(i=0;i<2;i++)
{
lcd_dat(cm[i]);
}
}
}
复制代码
lcd1602.c
#include "reg52.h"
#define uchar unsigned char
sbit lcden=P2^7; //定义lcd1602使能端口
sbit lcdrs=P2^6; //定义lcd1602数据/命令选择端口(H/L)
sbit lcdrw=P2^5; //定义lcd1602读/写端口(H/L)
//sbit lcden=P1^7; //定义lcd1602使能端口
//sbit lcdrs=P1^5; //定义lcd1602数据/命令选择端口(H/L)
//sbit lcdrw=P1^6; //定义lcd1602读/写端口(H/L)
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_com(uchar com) //lcd1602命令发送函数(位)
{
lcdrs=0;
lcdrw=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void lcd_dat(uchar dat) //lcd1602数据发送函数
{
lcdrs=1;
lcdrw=0;
P0=dat;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void lcd_init() //lcd1602初始化
{
lcden=0;
lcd_com(0x38);
lcd_com(0x0c);
lcd_com(0x06);
lcd_com(0x01);
}
复制代码
lcd1602.h
#ifndef __LCD1602_H_
#define __LCD1602_H_
#define uchar unsigned char
void delay(uchar z);
void lcd_init(); //lcd1602初始化
void lcd_com(uchar com); //lcd1602命令发送函数(位)
void lcd_dat(uchar dat); //lcd1602数据发送函数
#endif
复制代码
全部资料51hei下载地址:
超声波电路板.7z
(573.81 KB, 下载次数: 33)
2020-10-3 23:15 上传
点击文件名下载附件
下载积分: 黑币 -5
超声波测距.zip
(29.07 KB, 下载次数: 22)
2020-10-3 22:20 上传
点击文件名下载附件
程序工程文件
下载积分: 黑币 -5
作者:
CcC超
时间:
2020-11-30 19:49
正好要做这个,谢谢大神
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1