Project 2 - Measuring distance of an object using ultrasonic sensor (HC-SR04)
Magna Company
- lcd.c
#include "lcd.h"
#include <avr/io.h>
#define F_CPU 16000000L
#include <util/delay.h>
#include <avr/interrupt.h>
#define rs_high() PORTD |=(1<<0)
#define rs_low() PORTD &= ~(1<<0)
#define en_high() PORTD |= (1<<1)
#define en_low() PORTD &= ~(1<<1)
#define lcdport PORTB
void lcd_command(unsigned char cmd);
void lcd_data(unsigned char data);
void lcd_init();
void cursorpos(char x, char y);
void lcd_out(char x, char y, char *str);
int LCDmain(void)
{
DDRB=0xff;
PORTD|=(1<<6);
DDRB |= (1<<3);
DDRC|=(1<<4); //port C.4 as output
lcd_init();
while(1)
{
lcd_out(1,5,"Skill-lync");
PORTD |= (1<<6);
break;
}
}
void lcd_command(unsigned char cmd)
{
lcdport = cmd;
rs_low();
en_high();
_delay_ms(1);
en_low();
}
void lcd_data(unsigned char data)
{
lcdport = data;
rs_high();
en_high();
_delay_ms(1);
en_low();
}
void lcd_init()
{
lcd_command(0x38);_delay_ms(5);
lcd_command(0x02);_delay_ms(5);
lcd_command(0x01);_delay_ms(5);
lcd_command(0x0c);_delay_ms(5);
lcd_command(0x06);_delay_ms(5);
lcd_command(0x80);_delay_ms(5);
}
void cursorpos(char a, char b)
{
if(a == 1)
{
lcd_command(0x80 + b);
}
if(a == 2)
{
lcd_command(0xc0 + b);
}
}
void lcd_out(char x,char y,char *str)
{
cursorpos(x,y);
while(*str)
{
lcd_data(*str);
str++;
}
}
- lcd.h
#ifndef LCD_H_//This is the header file definition for the lcd file
#define LCD_H_
int LCDmain(void);
#endif
- main.c
//This is the main file. It links all other files and functions
#include <avr/io.h>
#define F_CPU 16000000L
#include <util/delay.h>
#include "lcd.h"
#include "sevenSegment.h"
#include "motor.h"
#include "portSelect.h"
#include "pushButton.h"
int main(void)
{
while(1)
{
portSelect(3, 4);//Select port number(1 for port a, 2 for port b, 3 for port c and 4 for port d) and pin number (0 to 7)
LCDmain();//calling lcd printing function
motorSelect(4,7); //Select port number(1 for port a, 2 for port b, 3 for port c and 4 for port d) and pin number (0 to 7) for the motor
selectPushButton(3, 0);
SevSegDis(1);//Select port number: 1 for port a, 2 for port b, 3 for port c and 4 for port d
_delay_ms(500);
}
}
- motor.c
#include <avr/io.h>
#define F_CPU 16000000L
#include <util/delay.h>
void motorSelect(int portNum, int pinNum)
{
switch(portNum)
{
case 1:
DDRA |= (1<<pinNum);
PORTA |= (1<<pinNum);
break;
case 2:
DDRB |= (1<<pinNum);
PORTB |= (1<<pinNum);
break;
case 3:
DDRC |= (1<<pinNum);
PORTC |= (1<<pinNum);
break;
case 4:
DDRD |= (1<<pinNum);
PORTD |= (1<<pinNum);
break;
}
}
- motor.h
#ifndef MOTOR_H_
#define MOTOR_H_
void motorSelect(int portNum, int pinNum);
#endif /* MOTOR_H_ */
- portselect.c
#include <avr/io.h>
#define F_CPU 16000000L
#include <util/delay.h>
void portSelect(int portNum, int pinNum)//function to select given port as output
{
switch(portNum)
{
case 1:
DDRA |= (1<<pinNum);
PORTA |= (1<<pinNum);
break;
case 2:
DDRB |= (1<<pinNum);
PORTB |= (1<<pinNum);
break;
case 3:
DDRC |= (1<<pinNum);
PORTC |= (1<<pinNum);
break;
case 4:
DDRD |= (1<<pinNum);
PORTD |= (1<<pinNum);
break;
}
}
- portselect.h
#ifndef PORTSELECT_H_
#define PORTSELECT_H_
void portSelect(int portNum, int pinNum);
#endif /* PORTSELECT_H_ */
- pushbutton.c
#include <avr/io.h>
#define F_CPU 16000000L
#include <util/delay.h>
void selectPushButton(int portNum,int inpNum)
{
switch(portNum)
{
case 1:
DDRC |= (1<<3);
DDRA &= ~(1<<inpNum);
PORTA |= (1<<inpNum);
while(1)
{
if(PINA & 0x01)
PORTC |= (1<<3);
else
PORTC &= ~(1<<3);
}
break;
case 2:
DDRC |= (1<<3);
DDRB &= ~(1<<inpNum);
PORTB |= (1<<inpNum);
while(1)
{
if(PINB & 0x01)
PORTC |= (1<<3);
else
PORTC &= ~(1<<3);
}
break;
case 3:
DDRC |= (1<<3);
DDRC &= ~(1<<inpNum);
PORTC |= (1<<inpNum);
while(1)
{
if(PINC & 0x01)
PORTC |= (1<<3);
else
PORTC &= ~(1<<3);
}
break;
case 4:
DDRC |= (1<<3);
DDRD &= ~(1<<inpNum);
PORTD |= (1<<inpNum);
while(1)
{
if(PIND & 0x01)
PORTC |= (1<<3);
else
PORTC &= ~(1<<3);
break;
}
break;
}
}
- pushbutton.h
#ifndef PUSHBUTTON_H_
#define PUSHBUTTON_H_
void selectPushButton(int portNum,int inpNum);
#endif /* PUSHBUTTON_H_ */
- sevensegment.c
#include <avr/io.h>
#define F_CPU 16000000L
#include <util/delay.h>
char seven_seg[10] = {0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F};//Array for displaying values
int SevSegDis(int portNum)//Function for seven segment display
{
int i=0;
switch(portNum)
{
case 1:
DDRA = 0XFF;
for(i=0; i<10; i++)
{
PORTA = seven_seg[i];
_delay_ms(500);
}
break;
case 2:
DDRB = 0XFF;
for(i=0; i<10; i++)
{
PORTB = seven_seg[i];
_delay_ms(500);
}
break;
case 3:
DDRC = 0XFF;
for(i=0; i<10; i++)
{
PORTC = seven_seg[i];
_delay_ms(500);
}
break;
case 4:
DDRD = 0XFF;
for(i=0; i<10; i++)
{
PORTD = seven_seg[i];
_delay_ms(500);
}
break;
}
}
- sevensegment.h
#ifndef SEVENSEGMENT_H_
#define SEVENSEGMENT_H_
int SevSegDis(int portNum);
#endif /* SEVENSEGMENT_H_ */
