Ni yanfang
Member level 3
- Joined
- Jul 30, 2013
- Messages
- 59
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 6
- Activity points
- 432
#include<at89x51.h> // include at89x51 . h
#define E P22
#define RW P21
#define RS P20
#define LCD_DATA P0
void strobe()
{
E = 1;
delay();
E = 0;
delay();
}
#include <at89x51.h> // include at89x51 . h
#define E [COLOR="#FF0000"]P2_2[/COLOR]
#define RW [COLOR="#FF0000"]P2_1[/COLOR]
#define RS [COLOR="#FF0000"]P2_0[/COLOR]
#define LCD_DATA P0
void strobe()
{
E = 1;
delay();
E = 0;
delay();
}
/*--------------------------------------------------------------------------
AT89X51.H
Header file for the low voltage Flash Atmel AT89C51 and AT89LV51.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __AT89X51_H__
#define __AT89X51_H__
/*------------------------------------------------
Byte Registers
------------------------------------------------*/
[COLOR="#FF0000"]sfr P0 = 0x80;[/COLOR]
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr P1 = 0x90;
sfr SCON = 0x98;
sfr SBUF = 0x99;
sfr P2 = 0xA0;
sfr IE = 0xA8;
sfr P3 = 0xB0;
sfr IP = 0xB8;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
/*------------------------------------------------
P0 Bit Registers
------------------------------------------------*/
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;
/*------------------------------------------------
PCON Bit Values
------------------------------------------------*/
#define IDL_ 0x01
#define STOP_ 0x02
#define PD_ 0x02 /* Alternate definition */
#define GF0_ 0x04
#define GF1_ 0x08
#define SMOD_ 0x80
/*------------------------------------------------
TCON Bit Registers
------------------------------------------------*/
sbit IT0 = 0x88;
sbit IE0 = 0x89;
sbit IT1 = 0x8A;
sbit IE1 = 0x8B;
sbit TR0 = 0x8C;
sbit TF0 = 0x8D;
sbit TR1 = 0x8E;
sbit TF1 = 0x8F;
/*------------------------------------------------
TMOD Bit Values
------------------------------------------------*/
#define T0_M0_ 0x01
#define T0_M1_ 0x02
#define T0_CT_ 0x04
#define T0_GATE_ 0x08
#define T1_M0_ 0x10
#define T1_M1_ 0x20
#define T1_CT_ 0x40
#define T1_GATE_ 0x80
#define T1_MASK_ 0xF0
#define T0_MASK_ 0x0F
/*------------------------------------------------
P1 Bit Registers
------------------------------------------------*/
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
sbit P1_2 = 0x92;
sbit P1_3 = 0x93;
sbit P1_4 = 0x94;
sbit P1_5 = 0x95;
sbit P1_6 = 0x96;
sbit P1_7 = 0x97;
/*------------------------------------------------
SCON Bit Registers
------------------------------------------------*/
sbit RI = 0x98;
sbit TI = 0x99;
sbit RB8 = 0x9A;
sbit TB8 = 0x9B;
sbit REN = 0x9C;
sbit SM2 = 0x9D;
sbit SM1 = 0x9E;
sbit SM0 = 0x9F;
/*------------------------------------------------
P2 Bit Registers
------------------------------------------------*/
[COLOR="#FF0000"]sbit P2_0 = 0xA0;[/COLOR]
[COLOR="#FF0000"]sbit P2_1 = 0xA1;[/COLOR]
[COLOR="#FF0000"]sbit P2_2 = 0xA2;[/COLOR]
sbit P2_3 = 0xA3;
sbit P2_4 = 0xA4;
sbit P2_5 = 0xA5;
sbit P2_6 = 0xA6;
sbit P2_7 = 0xA7;
/*------------------------------------------------
IE Bit Registers
------------------------------------------------*/
sbit EX0 = 0xA8; /* 1=Enable External interrupt 0 */
sbit ET0 = 0xA9; /* 1=Enable Timer 0 interrupt */
sbit EX1 = 0xAA; /* 1=Enable External interrupt 1 */
sbit ET1 = 0xAB; /* 1=Enable Timer 1 interrupt */
sbit ES = 0xAC; /* 1=Enable Serial port interrupt */
sbit ET2 = 0xAD; /* 1=Enable Timer 2 interrupt */
sbit EA = 0xAF; /* 0=Disable all interrupts */
/*------------------------------------------------
P3 Bit Registers (Mnemonics & Ports)
------------------------------------------------*/
sbit P3_0 = 0xB0;
sbit P3_1 = 0xB1;
sbit P3_2 = 0xB2;
sbit P3_3 = 0xB3;
sbit P3_4 = 0xB4;
sbit P3_5 = 0xB5;
sbit P3_6 = 0xB6;
sbit P3_7 = 0xB7;
sbit RXD = 0xB0; /* Serial data input */
sbit TXD = 0xB1; /* Serial data output */
sbit INT0 = 0xB2; /* External interrupt 0 */
sbit INT1 = 0xB3; /* External interrupt 1 */
sbit T0 = 0xB4; /* Timer 0 external input */
sbit T1 = 0xB5; /* Timer 1 external input */
sbit WR = 0xB6; /* External data memory write strobe */
sbit RD = 0xB7; /* External data memory read strobe */
/*------------------------------------------------
IP Bit Registers
------------------------------------------------*/
sbit PX0 = 0xB8;
sbit PT0 = 0xB9;
sbit PX1 = 0xBA;
sbit PT1 = 0xBB;
sbit PS = 0xBC;
sbit PT2 = 0xBD;
/*------------------------------------------------
PSW Bit Registers
------------------------------------------------*/
sbit P = 0xD0;
sbit F1 = 0xD1;
sbit OV = 0xD2;
sbit RS0 = 0xD3;
sbit RS1 = 0xD4;
sbit F0 = 0xD5;
sbit AC = 0xD6;
sbit CY = 0xD7;
/*------------------------------------------------
Interrupt Vectors:
Interrupt Address = (Number * 8) + 3
------------------------------------------------*/
#define IE0_VECTOR 0 /* 0x03 External Interrupt 0 */
#define TF0_VECTOR 1 /* 0x0B Timer 0 */
#define IE1_VECTOR 2 /* 0x13 External Interrupt 1 */
#define TF1_VECTOR 3 /* 0x1B Timer 1 */
#define SIO_VECTOR 4 /* 0x23 Serial port */
#endif
Ok thank youGreetings,
As suggested by bigdogguru, to define port pins use Px^y where x is number of port and y is port pin number.
#define E P2^2
OR you can use
#sbit E = P2^2;
Good Luck
#include<at89x51.h> // include at89x51 . h
#define E P2_2
#define RW P2_1
#define RS P2_0
#define LCD_DATA P0
void delay ();
void strobe()
{
E = 1;
delay (150);
E = 0;
delay (150);
}
This is my full code. kindly check for me. thanks.Post your full code here and do use code syntax.
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #define RS P2_0 #define LCD_DATA P0 void delay(); void strobe() { E = 1; delay (150); E = 0; delay (150); } void data_write(unsigned char X) { LCD_DATA= X; RS=1; RW=0; strobe(); } void control_write(unsigned char X ) { LCD_DATA=X; RS=0; RW=0; strobe(); } void main() { initialise_lcd(); control_write(0*01); data_write(0*48); data_write(0*49); for(;;); }
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #define RS P2_0 #define LCD_DATA P0 void delay(int x) { int a,b; for( a = 0; a < x; a++) for( b = 0; b < 50; b++); } void strobe() { E = 1; delay (150); E = 0; delay (150); } void data_write(unsigned char X) { LCD_DATA= X; RS=1; RW=0; strobe(); } void control_write(unsigned char X ) { LCD_DATA=X; RS=0; RW=0; strobe(); } void main() { initialise_lcd(); control_write(0*01); data_write(0*48); data_write(0*49); for(;;); }
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
{
for(j=0;j<50;j++)
{}
}
}
void initialise_lcd()
{
control_write(0X38);
delay(1);
control_write(0X0E);
delay(1);
control_write(0X01);
delay(1);
control_write(0X06);
delay(1);
control_write(0X80);
delay(1);
data_write('T');
delay(1);
}
void lcdready()
{
busy = 1;
RS = 0;
RW = 1;
while(busy==1)
{
strobe();
}
return;
}
#include <at89x51.h> // include at89x51.h or use #include <reg52.h>
#define LCD_DATA P0
sbit E = P2^2;
sbit RW = P2^1;
sbit RS = P2^0;
sbit busy = P0^7;
void lcdready();
void initialize_lcd();
void delay(unsigned int t);
void delay();
void strobe()
{
E = 1;
delay (150);
E = 0;
}
void data_write(unsigned char X)
{
LCD_DATA= X;
RS=1;
RW=0;
strobe();
}
void control_write(unsigned char X )
{
LCD_DATA=X;
RS=0;
RW=0;
strobe();
}
void main()
{
initialize_lcd(); // LCD initialization
while(1)
{
control_write(0x01); // To send clear command to lcd or to clear lcd screen
data_write(0x48);
data_write(0x49);
data_write('T'); // Display T on lcd
delay(1);
}
}
void initialise_lcd()
{
control_write(0x38); // For 2 Line and 5x7 matrix
delay(1);
control_write(0x0E); // Display on, cursor Blink
delay(1);
control_write(0x01); // Clear display screen
delay(1);
control_write(0x06); // increment cursor(shift cursor to right)
delay(1);
control_write(0x80); // Force cursor to begging of 1st Line or Use 0xc0 to begin from 2nd line
delay(1);
}
void lcdready()
{
busy = 1;
RS = 0;
RW = 1;
while(busy==1)
{
strobe();
}
return;
}
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
{
for(j=0;j<50;j++)
{}
}
}
Greetings,
First things First, Use Code tags for posting codes. Select # from tool pane then write code in between code tags.
Missing statements/Functions are:
#include <at89x51.h> // include at89x51 . h
#define E P2^2
#define RW P2^1
Missing Functions:
1. intialise_lcd();
2. delay()
Here is an example of your missing Function(delay):
Code:void delay(unsigned int t) { unsigned int i,j; for(i=0;i<t;i++) { for(j=0;j<50;j++) {} } }
For lcd initialization you can use:
Code:void initialise_lcd() { control_write(0X38); delay(1); control_write(0X0E); delay(1); control_write(0X01); delay(1); control_write(0X06); delay(1); control_write(0X80); delay(1); data_write('T'); delay(1); }
And it is better if you use ready function:
Code:Code:void lcdready() { busy = 1; RS = 0; RW = 1; while(busy==1) { strobe(); } return; }
Code:#include <at89x51.h> // include at89x51.h or use #include <reg52.h> #define LCD_DATA P0 sbit E = P2^2; sbit RW = P2^1; sbit RS = P2^0; sbit busy = P0^7; void lcdready(); void initialize_lcd(); void delay(unsigned int t); void delay(); void strobe() { E = 1; delay (150); E = 0; } void data_write(unsigned char X) { LCD_DATA= X; RS=1; RW=0; strobe(); } void control_write(unsigned char X ) { LCD_DATA=X; RS=0; RW=0; strobe(); } void main() { initialize_lcd(); // LCD initialization while(1) { control_write(0x01); // To send clear command to lcd or to clear lcd screen data_write(0x48); data_write(0x49); data_write('T'); // Display T on lcd delay(1); } } void initialise_lcd() { control_write(0x38); // For 2 Line and 5x7 matrix delay(1); control_write(0x0E); // Display on, cursor Blink delay(1); control_write(0x01); // Clear display screen delay(1); control_write(0x06); // increment cursor(shift cursor to right) delay(1); control_write(0x80); // Force cursor to begging of 1st Line or Use 0xc0 to begin from 2nd line delay(1); } void lcdready() { busy = 1; RS = 0; RW = 1; while(busy==1) { strobe(); } return; } void delay(unsigned int t) { unsigned int i,j; for(i=0;i<t;i++) { for(j=0;j<50;j++) {} } }
Note:- Always Use pull-up resistors on port P0.
Good Luck
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
{
for(j=0;j<50;j++)
{}
}
}
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?