|
之前寫的超聲波波測距,超聲波模塊是HC-SR04,LCD1602顯示。
超聲波模塊HC-SR04簡介以及編程附帶PCB板,
程序有一點點小bug,測距時數(shù)據(jù)變化太快,不能穩(wěn)定,如果有高手的話希望能給改改!!
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
51hei.png (14.22 KB, 下載次數(shù): 39)
下載附件
2020-10-3 23:14 上傳
51hei.png (30.92 KB, 下載次數(shù): 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; //關(guān)定時器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]);
- }
- }
- }
復(fù)制代碼
lcd1602.c
- #include "reg52.h"
- #define uchar unsigned char
- sbit lcden=P2^7; //定義lcd1602使能端口
- sbit lcdrs=P2^6; //定義lcd1602數(shù)據(jù)/命令選擇端口(H/L)
- sbit lcdrw=P2^5; //定義lcd1602讀/寫端口(H/L)
- //sbit lcden=P1^7; //定義lcd1602使能端口
- //sbit lcdrs=P1^5; //定義lcd1602數(shù)據(jù)/命令選擇端口(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命令發(fā)送函數(shù)(位)
- {
- lcdrs=0;
- lcdrw=0;
- P0=com;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void lcd_dat(uchar dat) //lcd1602數(shù)據(jù)發(fā)送函數(shù)
- {
- 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);
- }
復(fù)制代碼
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命令發(fā)送函數(shù)(位)
- void lcd_dat(uchar dat); //lcd1602數(shù)據(jù)發(fā)送函數(shù)
- #endif
復(fù)制代碼
全部資料51hei下載地址:
超聲波電路板.7z
(573.81 KB, 下載次數(shù): 33)
2020-10-3 23:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
超聲波測距.zip
(29.07 KB, 下載次數(shù): 22)
2020-10-3 22:20 上傳
點擊文件名下載附件
程序工程文件 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|