PIC MicroController Volume Adjuster Program(Proteus 8 Stimulation)

Volume Adjuster Program

Hello everyone,
The important aspect of every learning is to induce curiosity and doing something meaningful to satisfy that.With the help of that curiosity, I’m here making a volume adjuster program which resembles the same in most devices but not that much, Here the default volume will be 10.Maximum volume will be 20 as well as the minimum volume will be 5.Volume Adjuster Program

Well, here I’m using Proteus 8 Professional for stimulation and Mikro C Pro Plus 2012 as Embedded Compiler for programming the microcontroller because I’ve already ran out of hardware and money :).

Step 1: Things You will need

Since this is a fully software stimulated program, You will need not more than the following softwares:

1.Proteus 8 (Any build or Version).
2.Mikro C (Any build or Version).

Step 2: The Connections.

Open Proteus. In the Component Mode, select Pick from devices and search and double click the following components:
1.LM016L (16×2 AlphaNumeric Display LCD)
2.PIC16F877A Microcontroller 
(Here i am going with 16F877A as it is the most common PIC Microcontroller)
3.A Resistor or POT(Value = 10k Ohms).
4. SW_ROT_3 switch

Here we’ll use the inbuilt crystal with the default frequency 8MHz.

I have used the SW_ROT_3 switch to avoid floating point errors.

I made a 4-bit connection to LCD as it is more than enough for this program.

Do the Following Connections:
1.Place the PIC16F877A
2.On the right side of it place the LCD Display.
3.In the LCD, connect VSS to gnd, VDD to +5V and RW , D0,D1,D2,D3 to ground(since its a 4 bit connection) . VEE is connected to +5V via a 10K ohms resistor.
4.We are going to use portB in PIC to control LCD. so, connect RB1,RB2,RB4,RB5,RB6,RB7 to RS,E,D4,D5,D6,D7 in the LCD respectively.

5.Connect the SW_ROT_3 switches as shown.

Step 3: The Coding Part(With Mikro C)

The most important part and the most frustrating part is the coding part. This code is no complex . This is a very simple code. Though it appears as more complex, appearances are deceptive:).
Open MikroC. Create a new project and select P16F877A microcontroller with frequency 8Mhz. name the project as ‘Volume Adjuster’ and include all library files in it. If you don’t wanna include all library files, then include <lcd.h> and <lcdconstants.h> in your program.Just copy and paste the code in Mikro C

//Coding BEGIN
//AN ARTICLE BY TheEffectiver.
// specify what pins will be used as what. THis bit of code is necessary.
sbit LCD_RS at RB1_bit;
sbit LCD_EN at RB2_bit;

sbit LCD_D7 at RB7_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D4 at RB4_bit;
// End specification for pins

// specify the pin directions
sbit LCD_RS_Direction at TRISB1_bit;
sbit LCD_EN_Direction at TRISB2_bit;

sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End of LCD Pin direction
int Volume=10;
char Vol[16];
int maxvol=20;
int minvol=5;
void main()

{
TRISC.TRISC1 = 1;   // sets RC1 in input mode (for increasing the volume)
TRISC.TRISC2 = 1;   //sets Rc2 in imput mode(for decreasing the volume)
PORTC = 0x00;       //sets all the input pins to logic low(or zero volt)

Lcd_Init(); //  to initialize the lcd
Lcd_Cmd(_LCD_CLEAR); // Clear  the display of lcd
/*Lcd_Cmd(command);*/
Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off since it appears in the lcd screen
/*Lcd_Out(row number,column number,text);*/
Lcd_Out(1,1,”Volume Adjuster”);//Display the program name
Delay_ms(1000);//give a delay of 1 second
Lcd_Cmd(_LCD_CLEAR); // clear all the rows of lcd screen
Lcd_Out(1,1,”Volume:”); //display volume in first row
intTostr(Volume,Vol);//convert int to string(char array) since Lcd_Out only displays string
Lcd_Out(2,1,Vol); //display the converted string
while(1)//The endless loop begins
{
if(PORTC.RC1==1)    //checks for input
{
while(PORTC.RC1==1);//stays here till the input becomes zero
Volume++; //increases the volume
if(Volume==maxvol)  //checks if volume is maximum volume
{
Lcd_Cmd(_LCD_CLEAR);  //clears the screen
Lcd_Out(1,1,”Volume:”);
Lcd_Out(2,1,”MAX VOLUME”); //displays maximum volume in second row
Delay_ms(1000);   //gives a delay
Lcd_Out(2,1,”                “); //clears the second row(there are 16 blank characters in this string)
Volume–;//Decreases the volume since the volume is maximum
}

}
//The above applies for the remaining section
if(PORTC.RC2==1)
{
while(PORTC.RC2==1);
Volume–;
if(Volume==minvol)
{
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,”Volume:”);
Lcd_Out(2,1,”MIN VOLUME”);
Delay_ms(1000);
Lcd_Out(2,1,”                “);
Volume++;
}

}

//Display the final results
Lcd_Out(1,1,”Volume:”);
intTostr(Volume,Vol);
Lcd_Out(2,1,Vol);
}
}
//Coding ends.

And build the project by pressing ctrl+F9
mikro c will produce the hex file for you.
make sure you save the project and know the path of the hex file.

Read more: PIC MicroController Volume Adjuster Program(Proteus 8 Stimulation)

Leave a Comment

Your email address will not be published. Required fields are marked *