The communication technique with the LCD is the same like the last lesson, and for the current experiment we have added a counter which counts between 0000 and 9999. Our counter increments with 1 second delay.
The connections with LCD is made as follows: D4 with RB0, D5 with RB1, D6 with RB2, D7 with RB3, RS with RB4 and EN with RB5.
Circuit Diagram:
For those who want to build it on their own breadboard or other platform, here is the electronic scheme built in Eagle Cad, free version:
Software:
Here is the C program written for MikroC PRO for PIC 2010 (version v4.15).
/*
'*******************************************************************************
' Lesson nr.16:
' Alphanumeric LCD as counter mode.
' Done by:
' Aureliu Raducu Macovei, 2010.
' Description:
' In this experiment we will work with alphanumeric LCD. Communication
' with LCD will be performed through 4-bits and connections is made as
' follows: D4 with RB0, D5 with RB1, D6 with RB2, D7 with RB3;
' RS with RB4 and EN with RB5.
' To make this project more interesting , a counter is added
' (counts from 0000 to 9999) with a delay of 1 secunde.
' Test configuration:
' MCU: PIC16F628A
' Test.Board: WB-106 Breadboard 2420 dots
' SW: MikroC PRO for PIC 2010 (version v4.15)
' Configuration Word
' Oscillator: INTOSC:I/O on RA.6, I/O on RA.7
' Watchdog Timer: OFF
' Power up Timer: Disabled
' Master Clear Enable: Enabled
' Browun Out Detect: Enabled
' Low Voltage Program: Disabled
' Data EE Read Protect: Disabled
' Code Protect: OFF
'*******************************************************************************
*/
// LCD module connections
sbit LCD_RS at RB4_bit; // LCD_RS assigned to PORT RB4;
sbit LCD_EN at RB5_bit; // LCD_EN assigned to PORT RB5;
sbit LCD_D4 at RB0_bit; // LCD_D4 assigned to PORT RB0;
sbit LCD_D5 at RB1_bit; // LCD_D5 assigned to PORT RB1;
sbit LCD_D6 at RB2_bit; // LCD_D6 assigned to PORT RB2;
sbit LCD_D7 at RB3_bit; // LCD_D7 assigned to PORT RB3;
sbit LCD_RS_Direction at TRISB4_bit; // LCD_RS assigned to TRIS B4;
sbit LCD_EN_Direction at TRISB5_bit; // LCD_EN assigned to TRIS B5;
sbit LCD_D4_Direction at TRISB0_bit; // LCD_D4 assigned to TRIS B0;
sbit LCD_D5_Direction at TRISB1_bit; // LCD_D5 assigned to TRIS B1;
sbit LCD_D6_Direction at TRISB2_bit; // LCD_D6 assigned to TRIS B2;
sbit LCD_D7_Direction at TRISB3_bit; // LCD_D7 assigned to TRIS B3;
// End LCD module connections
char Message1[]="Counter Mode"; // Message for line1;
unsigned int number = 0;
char *digit = "0000";
void Display_init() // define display_init;
{
digit[0] = number/1000 + 48; // thousands digit;
digit[1] = (number/100)%10 +48; // hundreds digit;
digit[2] = (number/10)%10 + 48; // tens digit;
digit[3] = number%10 +48; // unit digit;
Lcd_Out(2,7,digit); // display on LCD from column 2, character 7;
}
void main() // main;
{
CMCON |= 7; // turn off analogue comparator and make PORTA to digital I/O;
Lcd_init(); // LCD Initialization;
Lcd_cmd(_LCD_CLEAR); // Clear LCD;
Lcd_cmd(_LCD_CURSOR_OFF); // Cursor mode, off;
Lcd_out(1,3,Message1); // display message1 from column 1, character 3;
do{
display_init(); // call display_init();
delay_ms(1000); // delay 1s;
number ++; // Increment number;
if (number > 9999u) // if it's more than 9999 go to 0;
number = 0;
} while(1); // infinite loop;
} // end.
very good program
ReplyDeleteThank you....It is working nice........
ReplyDeleteI need this program in picbasic pro,PLEASE,
ReplyDelete