Bổn thiết kế
51 đơn phiến cơSóng siêu âm trắc cựMang giọng nói bá báo ( nguyên trình tự +Nguyên lý đồ+ nguyên lý đồ giảng giải )
Nguyên lý đồ:Altium Designer
Trình tựBiên dịch khí:keil 4
Biên trình ngôn ngữ: C ngôn ngữ
Đánh số S0004
Công năng thuyết minh:
1. Bổn thiết kế chọn dùngSTC89C51/52 ( cùng AT89S51/52,AT89C51/52 thông dụng, nhưng nhậm tuyển ) đơn phiến cơ làm chủKhống chế khí;
2.LCD1602Tinh thể lỏng biểu hiện đo lường khoảng cách cùng độ ấm;
3. Có chứa độ ấm bồi thường công năng (DS18B20Truyền cảm khí);
4. Đo lường phạm vi 0.02m~4m, độ chặt chẽ vì 0.01m;
5. Mang thật khi giọng nói bá báo công năng;
6. Ấn phím công năng: Ấn phím 2: Thêm báo nguy giá trị ấn phím 3: Giảm báo nguy giá trị ấn phím 1: Thiết trí ấn phím ( chỉ có ở ấn xuống thiết trí thời điểm mới có thể thêm giảm báo nguy giá trị ), ở chưa ấn xuống ấn phím 1 khi, ấn xuống ấn phím 3 bá báo đo lường khoảng cách.
Sử dụng phương pháp:
Khởi động máy có thể thí nghiệm, phía trước chướng ngại vật tận lực không cần quá loạn, tận lực san bằng ( như vách tường ). Chỉ có ở thiết trí thời điểm mới có thể thêm giảm báo nguy giá trị thủy tính giờ
Nguyên lý đồ:
Trình tự:
Phục chế đến trình duyệt https://docs.qq /sheet/DS0xIa0llTmtNakRW
// hoành định nghĩa
#define uchar unsigned char
#define uint unsigned int
#define ULint unsigned long int
// độ ấm linh thượng cùng âm tiêu chí vị
char flag=0;
// sóng siêu âm
char flags=0;
// sóng siêu âm khoảng cách
char flag1s=0;
// tính toán định thời gian
uint time=0;
// tính toán khoảng cách
ULint L_=0;
// độ ấm
uint t_=0;
// biểu hiện hình thức 0 bình thường 1 cực đại điều chỉnh 2 nhỏ nhất giá trị điều chỉnh
uchar mode=0;
uint Max=490;
uint Min=10;
// ấn phím tiêu chí
uchar k=0;
// trị số có lầm
uchar FW=0;
// đầu hàm số
#include <reg52.h>
#include <intrins.h>
#include "BJ_Key.h" // báo nguy ấn phím
#include "display.h" // biểu hiện đầu hàm số
#include "ultrasonic_wave.h" // sóng siêu âm đầu hàm số
#include "DS18B20.h" //Độ ấm truyền cảm khíĐầu hàm số
uchar ONE1[6]={0x7E,0x04,0x03,0x00,0X0D,0xEF};// hiện tại khoảng cách vì
uchar ONE2[6]={0x7E,0x04,0x03,0x00,0X0C,0xEF};// mễ
uchar ONE3[6]={0x7E,0x04,0x03,0x00,0X0B,0xEF};// điểm
uchar ONE4[6]={0x7E,0x04,0x03,0x00,0X00,0xEF};// trăm vị
uchar ONE5[6]={0x7E,0x04,0x03,0x00,0X00,0xEF};// mười vị
uchar ONE6[6]={0x7E,0x04,0x03,0x00,0X00,0xEF};// hàng đơn vị
void delayms(uint ms)
{
uchar i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
/********UARTKhởi động lạiPotter suất:9600 ******/
void UART_init(void)
{
SCON = 0x50; // 10 vị uart, cho phép xuyến hành tiếp thu
TMOD= 0x20; //Đúng giờ khí1 công tác ở phương thức 2 ( tự động trọng trang )
TH1 = 0xFD;
TL1 = 0xFD; // thiết trí Potter suất vì 9600
TR1 = 1;
}
/*
* UART gửi đi một chữ tiết
Nhập khẩu tham số uint8 số liệu loại hình tức muốn gửi đi số liệu
*/
void UART_send_byte(uchar dat)
{
SBUF = dat;
while (TI == 0);
TI = 0;
}
/*
* UART gửi đi tự phù xuyến
Cái thứ nhất tham số muốn gửi đi tự phù xuyến hoặc số liệu đầu địa chỉ
Cái thứ hai tham số là muốn gửi đi số liệu hoặc tự phù xuyến chiều dài
*/
void UART_send_string(uchar *buf,uchar len)
{
uchar i;
for(i=0;i<len;i++)
UART_send_byte(*buf++);
}
// chủ hàm số
void main()
{
UART_init();
Init_ultrasonic_wave();
// màn hình khởi động lại
Init1602();
// độ ấm khởi động lại
tmpchange();
t_=tmp();
tmpchange();
t_=tmp();
tmpchange();
t_=tmp();
// tuần hoàn biểu hiện
while(1)
{
Key();
if(yuyin_flag==1)
{
yuyin_flag=0;
ONE4[4]=L_/100;
ONE5[4]=L_/10%10;
ONE6[4]=L_%10;
if(ONE4[4]==0)ONE4[4]=0x0A;
if(ONE5[4]==0)ONE5[4]=0x0A;
if(ONE6[4]==0)ONE6[4]=0x0A;
UART_send_string(ONE1,6);
delayms(1);
UART_send_string(ONE4,6);
delayms(1);
UART_send_string(ONE3,6);
delayms(1);
UART_send_string(ONE5,6);
delayms(1);
UART_send_string(ONE6,6);
delayms(1);
UART_send_string(ONE2,6);
delayms(1);
}
// bình thường biểu hiện
if(mode==0)
{
StartModule();// khởi động sóng siêu âm
while(!RX); // đương RX bằng không khi chờ đợi
TR0=1; // mở ra đếm hết
while(RX); // đương RX vì 1 đếm hết cũng chờ đợi
TR0=0; // đóng cửa đếm hết
delayms(20); //20MS
tmpchange(); // độ ấm thay đổi
t_=tmp(); // độ độ ấm
Conut(t_/10); // tính toán khoảng cách
if(L_>Max||L_<Min)
{
Feng_Start();
}
else
{
if(FW!=1)
Feng_Stop();
}
Display_1602(t_/10,L_);
}
// điều chỉnh biểu hiện
else if(mode!=0)
{
// lớn nhất nhỏ nhất giá trị
Init_MaxMin();
while(mode!=0)
{
Key();
if(k==1&&mode==1)
{
Init_MaxMin();
write_com(0x8d);// thiết trí vị trí
}
else if(k==1&&mode==2)
{
Init_MaxMin();
write_com(0x8d+0x40);// thiết trí vị trí
}
k=0;
}
// giao diện khởi động lại
Init1602();
}
}
}
//T0 gián đoạn dùng đểMáy đếmTràn ra, vượt qua trắc cự phạm vi
void CJ_T0() interrupt 1
{
flags=1; // gián đoạn tràn ra tiêu chí
}
BaiduVân chia sẻ download liên tiếp: