Microcontroller › 8051 › LCD
- This topic has 0 replies, 1 voice, and was last updated 11 years, 9 months ago by
V.
-
AuthorPosts
-
June 6, 2013 at 6:17 pm #2470
V
ParticipantHello, I’ve problem with LCD. I use at89c2051
#include <at89x51.h>
#include “lcd.h”
#define PRELOAD01 (65536 – (tWord)(OSC_FREQ / (OSC_PER_INST * 1020)))
#define PRELOAD01H (PRELOAD01 / 256)
#define PRELOAD01L (PRELOAD01 % 256)#define LCD_RS P1_5
#define LCD_EN P1_4
#define LCD_DATA P1void delay_10ms(void)
{
TMOD &=0xF0;
TMOD |=0x01;ET0=0;
TH0=0xDF;
TL0=0x73;while(TF0==0);
TR0=0;
}void delay_70ms(void)
{
TMOD &=0xF0;
TMOD |=0x01;ET0=0;
TH0=0x1C;
TL0=0x23;while(TF0==0);
TR0=0;
}void delay_5ms(void)
{
TMOD &=0xF0;
TMOD |=0x01;ET0=0;
TH0=0xEF;
TL0=0xBA;while(TF0==0);
TR0=0;
}void delay_100u(void)
{
TMOD &=0xF0;
TMOD |=0x01;ET0=0;
TH0=0xFF;
TL0=0xAD;while(TF0==0);
TR0=0;
}void delay_70u(void)
{
TMOD &=0xF0;
TMOD |=0x01;ET0=0;
TH0=0xFF;
TL0=0xC6;while(TF0==0);
TR0=0;
}void delay_10u(void)
{
TMOD &=0xF0;
TMOD |=0x01;ET0=0;
TH0=0xFF;
TL0=0xF8;while(TF0==0);
TR0=0;
}void LCD_STROBE (void);
void lcd_write(unsigned char c)
{
delay_70u();
LCD_DATA = ( ( c >> 4 ) & 0x0F );
LCD_STROBE();
LCD_DATA = ( c & 0x0F );
LCD_STROBE();
}/*
* Clear and home the LCD
*/void lcd_clear(void)
{
LCD_RS = 0;
lcd_write(0x1);
delay_10u();
}/* write a string of chars to the LCD */
void lcd_puts(const char * s)
{
LCD_RS = 1; // write characters
while(*s)
lcd_write(*s++);
}/* write one character to the LCD */
void lcd_putch(char c)
{
LCD_RS = 1; // write characters
lcd_write( c );
}/*
* Go to the specified position
*/void lcd_goto(unsigned char pos)
{
LCD_RS = 0;
lcd_write(0x80+pos);
}/* initialise the LCD – put into 4 bit mode */
void lcd_init()
{
char init_value;init_value = 0x3;
LCD_RS = 0;
LCD_EN = 0;delay_70ms(); // delay for 150ms
delay_70ms();
delay_10ms();
LCD_DATA = 0x3;
LCD_STROBE();delay_5ms();
LCD_DATA = 0x3;
LCD_STROBE();
delay_100u();LCD_DATA = 0x3;
LCD_STROBE();
delay_100u();LCD_DATA = 0x2;
LCD_STROBE();
delay_100u();LCD_DATA = 0x2;
LCD_STROBE();
LCD_DATA = 0x8;
LCD_STROBE();
delay_100u();LCD_DATA = 0x0;
LCD_STROBE();
LCD_DATA = 0x8;
LCD_STROBE();
delay_100u();LCD_DATA = 0x0;
LCD_STROBE();
LCD_DATA = 0x1;
LCD_STROBE();
delay_5ms();LCD_DATA = 0x0;
LCD_STROBE();
LCD_DATA = 0x6;
LCD_STROBE();
delay_100u();LCD_DATA = 0x0;
LCD_STROBE();
LCD_DATA = 0xC;
LCD_STROBE();
delay_100u();LCD_RS = 1;
}void LCD_STROBE(void)
{
LCD_EN = 1;
delay_10u();
LCD_EN= 0;
}void main (void)
{lcd_init();
lcd_goto(0);lcd_puts(“T”);
}
-
AuthorPosts
- You must be logged in to reply to this topic.