1
2
Title
BLINKING LED
INTERFACING ANALOG-TO-DIGITAL
CONVERTERS
INTERFACING LCDs
ELEVATOR SIMULATOR
Date
Sign
In the scheme presented here, only lower order 4 lines of port P1 are used in the interface. A
number00110011 is placed on port P1 and rotated right when motor is to be rotated in clockwise
directionand rotated left when motor is to rotated in anticlockwise direction. A delay is necessary
betweensteps.
If we use a stepper motor with step angle of 1.8 degrees, then 200 steps will cause a one
completerotation (1.8 X 200 = 360).
INTERFACING LCDs
An LCD communicated with the host (89S51 in our case) via the data bus (D0-D7) and 3
controllines viz. Enable (EN), Register Select (RS) and Read/Wirte (R/W). LCD contains two bytewideregisters.
1. Instruction Register (IR) or Command Register For sending commands. Accessedwhen RS
ispulled Low.
2. Data Register (DR) For sending characters to be displayed. Accesssed when RS is made High.
LCD can be programmed to display characters in various attributes such as character
resolutionwhether 5 x 7 dots/character or 5 x 10 dots/characterm type of cursor whether simple or
block, cursorblinking or no blink, cursor on or off etc. We can also program the LCD to display the
character in sameposition or next character at the next position etc. This is done by sending
various command bytes to theLCD. To send a particular command byte, we have to make RS line
low. However while sendingcharacters to be displayed on the LCD, we have to make this line high.
In our scheme we are using port P1 for data and 3 lines of port P3 for handshaking as follows:P3.3RS, P3.4-R/W, 93.5-EN. Before sending any command to the LCD, it should be checked whetherthe
LCD is busy or not. The routine to check this is named READY. When an LCD is busy the bit 7 ofthe
Command Register is High. As soon as an LCD is ready to accept commands it makes bit 7 low.
void main()
{
lcdcmd (0x38);
lcdcmd (0x0E);
lcdcmd (0x01);
lcdcmd (0x06);
lcddata ('E');
lcddata ('D');
lcddata ('K');
lcddata ('I');
lcddata ('T');
for (;;);
}
voidlcdcmd (unsigned char value)
{
lcdready();
ldata = value;
rs = 0;
rw = 0;
en = 1;
MSDelay(1);
en = 0;
return;
}
10
11
ACALL TRANS
MOV A,#'O' ;transfer 'O'
ACALL TRANS
MOV A,#'M' ;transfer 'M'
ACALL TRANS
MOV A,#'E' ;transfer 'E'
ACALL TRANS
MOV A,#' ' ;transfer ' '
ACALL TRANS
SJMP AGAIN ;keep doing it
;--Serial data transfer subroutine
TRANS: MOV SBUF,A ;load SBUF
HERE: JNB TI,HERE ;wait for last bit to transfer
CLR TI
RET
END
12
13
void signal_2();
void signal_2_yellow();
void signal_3();
void signal_3_yellow();
void signal_4();
void signal_4_yellow();
sbit red_1 = P0^0;
sbit yellow_1 = P0^1;
sbit green_1 = P0^2;
sbit green_left_1 = P0^3;
sbit green_right_1 = P0^4;
sbit red_2 = P0^5;
sbit yellow_2 = P0^6;
sbit green_2 = P0^7;
sbit green_left_2 = P1^0;
sbit green_right_2 = P1^1;
sbit red_3 = P1^2;
sbit yellow_3 = P1^3;
sbit green_3 = P1^4;
sbit green_left_3 = P1^5;
sbit green_right_3 = P1^6;
sbit red_4 = P1^7;
sbit yellow_4 = P2^0;
sbit green_4 = P2^1;
sbit green_left_4 = P2^3;
sbit green_right_4 = P2^4;
void main()
{
red_1 = 0;
yellow_1 = 0;
green_1 = 0;
green_left_1 = 0;
green_right_1 = 0;
red_2 = 0;
yellow_2 = 0;
green_2 = 0;
green_left_2 = 0;
green_right_2 = 0;
red_3 = 0;
yellow_3 = 0;
green_3 = 0;
green_left_3 = 0;
green_right_3 = 0;
red_4 = 0;
yellow_4 = 0;
green_4 = 0;
green_left_4 = 0;
green_right_4 = 0;
while(1)
{
signal_1();
ms_delay(1000);
signal_1_yellow();
ms_delay(100);
signal_2();
ms_delay(1000);
signal_2_yellow();
ms_delay(100);
signal_3();
ms_delay(1000);
signal_3_yellow();
ms_delay(100);
signal_4();
ms_delay(1000);
signal_4_yellow();
ms_delay(100);
14
}
}
void signal_1()
{
red_1 = 0;
yellow_1 = 0;
green_1 = 1;
green_left_1 = 1;
green_right_1 = 1;
red_2 = 1;
yellow_2 = 0;
green_2 = 0;
green_left_2 = 1;
green_right_2 = 0;
red_3 = 1;
yellow_3 = 0;
green_3 = 0;
green_left_3 = 1;
green_right_3 = 0;
red_4 = 1;
yellow_4 = 0;
green_4 = 0;
green_left_4 = 1;
green_right_4 = 0;
return;
}
void signal_1_yellow()
{
red_1 = 0;
yellow_1 = 1;
green_1 = 1;
green_left_1 = 1;
green_right_1 = 1;
red_2 = 1;
yellow_2 = 0;
green_2 = 0;
green_left_2 = 1;
green_right_2 = 0;
red_3 = 1;
yellow_3 = 0;
green_3 = 0;
green_left_3 = 1;
green_right_3 = 0;
red_4 = 1;
yellow_4 = 0;
green_4 = 0;
green_left_4 = 1;
green_right_4 = 0;
return;
}
void signal_2()
{
red_1 = 1;
yellow_1 = 0;
green_1 = 0;
green_left_1 = 1;
green_right_1 = 0;
red_2 = 0;
yellow_2 = 0;
green_2 = 1;
green_left_2 = 1;
green_right_2 = 1;
red_3 = 1;
yellow_3 = 0;
green_3 = 0;
green_left_3 = 1;
15
green_right_3 = 0;
red_4 = 1;
yellow_4 = 0;
green_4 = 0;
green_left_4 = 1;
green_right_4 = 0;
return;
}
void signal_2_yellow()
{
red_1 = 1;
yellow_1 = 0;
green_1 = 0;
green_left_1 = 1;
green_right_1 = 0;
red_2 = 0;
yellow_2 = 1;
green_2 = 1;
green_left_2 = 1;
green_right_2 = 1;
red_3 = 1;
yellow_3 = 0;
green_3 = 0;
green_left_3 = 1;
green_right_3 = 0;
red_4 = 1;
yellow_4 = 0;
green_4 = 0;
green_left_4 = 1;
green_right_4 = 0;
return;
}
void signal_3()
{
red_1 = 1;
yellow_1 = 0;
green_1 = 0;
green_left_1 = 1;
green_right_1 = 0;
red_2 = 1;
yellow_2 = 0;
green_2 = 0;
green_left_2 = 1;
green_right_2 = 0;
red_3 = 0;
yellow_3 = 0;
green_3 = 1;
green_left_3 = 1;
green_right_3 = 1;
red_4 = 1;
yellow_4 = 0;
green_4 = 0;
green_left_4 = 1;
green_right_4 = 0;
return;
}
void signal_3_yellow()
{
red_1 = 1;
yellow_1 = 0;
green_1 = 0;
green_left_1 = 1;
green_right_1 = 0;
red_2 = 1;
yellow_2 = 0;
green_2 = 0;
16
green_left_2 = 1;
green_right_2 = 0;
red_3 = 0;
yellow_3 = 1;
green_3 = 1;
green_left_3 = 1;
green_right_3 = 1;
red_4 = 1;
yellow_4 = 0;
green_4 = 0;
green_left_4 = 1;
green_right_4 = 0;
return;
}
void signal_4()
{
red_1 = 1;
yellow_1 = 0;
green_1 = 0;
green_left_1 = 1;
green_right_1 = 0;
red_2 = 1;
yellow_2 = 0;
green_2 = 0;
green_left_2 = 1;
green_right_2 = 0;
red_3 = 1;
yellow_3 = 0;
green_3 = 0;
green_left_3 = 1;
green_right_3 = 0;
red_4 = 0;
yellow_4 = 0;
green_4 = 1;
green_left_4 = 1;
green_right_4 = 1;
return;
}
void signal_4_yellow()
{
red_1 = 1;
yellow_1 = 0;
green_1 = 0;
green_left_1 = 1;
green_right_1 = 0;
red_2 = 1;
yellow_2 = 0;
green_2 = 0;
green_left_2 = 1;
green_right_2 = 0;
red_3 = 1;
yellow_3 = 0;
green_3 = 0;
green_left_3 = 1;
green_right_3 = 0;
red_4 = 0;
yellow_4 = 1;
green_4 = 1;
green_left_4 = 1;
green_right_4 = 1;
return;
}
voidms_delay(unsigned char itime)
{
int k;
int i;
17
int j;
for(k=0;k<10;k++)
{
for(i=0;i<itime;i++)
{
for(j=0;j<1275;j++);
}
}
return;
ELEVATOR SIMULATOR
18
19
20
out(current_fl);
}
sw2_r = 0;
delay(10);
sw2_r = 1;
}
if(sw3==1)
{
requested_fl = 0x06;
while(current_fl<=requested_fl)
{
out(current_fl);
current_fl++;
}
while(current_fl>requested_fl)
{
current_fl--;
out(current_fl);
}
sw3_r = 0;
delay(10);
sw3_r = 1;
}
if(sw4==1)
{
requested_fl = 0x09;
while(current_fl<=requested_fl)
{
out(current_fl);
current_fl++;
}
while(current_fl>requested_fl)
{
current_fl--;
out(current_fl);
}
sw4_r = 0;
delay(10);
sw4_r = 1;
}
}
}
void out(unsigned char current_fl_temp)
{
ACC = current_fl_temp;
a_7442 = current_fl_0;
b_7442 = current_fl_1;
c_7442 = current_fl_2;
d_7442 = current_fl_3;
delay(100);
return;
}
void delay(unsigned char itime)
{
inti,j;
for(i=0;i<=itime;i++)
for(j=0;j<=1275;j++);
return;
21