EN / USD
32
of 76
TEP , The Engineering Projects , Image

syedzainnasir

TEP , The Engineering Projects , Rating 7.5 7.5 / 10
TEP , The Engineering Projects , Icon Level: Moderator
TEP , The Engineering Projects , Icon Joined: 20 Mar 2022
TEP , The Engineering Projects , Icon Last Active: 2:21 PM
TEP , The Engineering Projects , Icon Location: TEP , The Engineering Projects , Flag
TEP , The ENgineering Projects , Icon TEP , The ENgineering Projects , Icon TEP , The ENgineering Projects , Icon TEP , The ENgineering Projects , Icon
Interfacing AT89S51 with ultrasonic sensor and LCD
TEP , The Engineering Projects , Calender Question: 07-Mar-2017
TEP , The Engineering Projects , Category In: 8051 Microcontroller Projects
I want to make a project to measure distance the use of ultrasonic sensor HC-S04 and liquid crystal display to display the gap in cm. i exploit AT89S51, the cause pin for ultrasonic sensor is P3.5 and the echo pin is P3.2. The echo pin is attached to P3.2 because i use interrupt so that whenever there may be a excessive it's going to activate timer zero and the length of high condition (in microsecond) can be transformed to cm (divided by fifty nine). I already ensure that the ultrasonic sensor works properly. The hassle is the liquid crystal display usually display output the equal variety forty five. It isn't varying even though the space among item and ultrasonic sensor trade. Can anybody assist me to solve this trouble?
[code]#include<REGX51.h> #include<intrins.h>// for using _nop_() function #define port P2 #define dataport P0 sfr16 DPTR =0x82; sbit trig=P3^5; sbit rs=port^0; sbit rw=port^1; sbit e=port^2; void delay(unsigned int msec) { int i,j; for(i=0;i<msec;i++) for(j=0;j<1275;j++); } void lcd_cmd(unsigned char item) // Function to send command to LCD { dataport = item; rs= 0; rw=0; e=1; delay(1); e=0; return; } void lcd_data(unsigned char item) // Function to send data to LCD { dataport = item; rs= 1; rw=0; e=1; delay(1); e=0; return; } void lcd_data_string(unsigned char *str) // Function to send string to LCD { int i=0; while(str[i]!='\0') { lcd_data(str[i]); i++; delay(1); } return; } void send_pulse(void) //to generate 10 microseconds delay { TH0=0x00;TL0=0x00; trig=1; _nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_(); trig=0; } unsigned int get_range(void) { int range=0; int s; send_pulse(); while(!INT0);// in sake of these lines you can generate a delay of 40 Milli seconds=40000 micro while (INT0);// seconds DPH=TH0;DPL=TL0; TH0=0xFF;TL0=0xFF; lcd_cmd(0x81); delay(2); lcd_data_string("output:"); lcd_cmd(0x8a); if(DPTR<35000) {//actually you need to use 38000 but the sensor may not work at higher levels range=DPTR/59; s=range/100; range=range%100; if(s!=0) { lcd_data(s+48); } else { lcd_cmd(0x06); s=range/10; range=range%10; lcd_data(s+48); lcd_data(range+48); lcd_data(' '); } } else { range=0; // indicates that there is no obstacle in front of the sensor lcd_cmd(0x06); lcd_data(0); } return range; } void main() { lcd_cmd(0x38); lcd_cmd(0x0c); delay(2); lcd_cmd(0x01); delay(2); lcd_cmd(0x81); delay(2); lcd_data_string("start"); delay(20); TMOD=0x09;//timer0 in 16 bit mode with gate enable TR0=1;//timer run enabled TH0=0x00;TL0=0x00; P3=0x04;//setting pin P3.2 while(1) { get_range(); delay(2); } }[/code]
TEP , The Engineering Projects , Icon Answer: 0 TEP , The Engineering Projects , Icon Views: 150 TEP , The Engineering Projects , Icon Followers: 85
Small Bio
TEP , The Engineering Projects , Tags
PLC
Robot
STM32
Arduino
AI
ESP32
Ladder Logic
PLC Projects
Programming
Communicates STM32
PLC Projects
Communicates PLC
Font Style
Alignment
Indenting and Lists
Insert Media
Insert Items

Want to leave an answer!

Word Count :0 Draft Saved at 12:42 am.