Introduction: 7-Segment Interfacing With 8051 (AT89s52,LM35,ADC0804)
This time i show you to how to use 7 segment with AT89S52 and also interfacing of ADC0804 and temperature sensor with 8051.It is truly simple circuit .let gets started:
Step 1: Hardware Setup:
Component Required:
7 segment LED (4) common Anode
ADC0804.
Resistors 10K.
Temperature sensor LM35.
Micro-controller AT89S52.
Crystal Oscillator(11.0592MHz)
Transistor (BC558 or BC557)
Capacitor 22pf
ULN2803
WHY I AM USING COMMON ANODE LED:
In case of common anode LED internal pin of all LED of 7-segment are internally connected so it can directly connected to 5 volts.The output current provide by 8051 is too low to drive the LED directly. So a current driver ic can be used which is ULN2803. but if we common cathode LED all pins of 7-segment are directly connected to 8051 so it can not provide enough current to drive LED.
NOTE : For Common Anode LED BC557 or BC558 (PNP) transistors are used .
For Common cathode LED BC547 orBC548 (NPN) transistors are used.
Step 2: Software Setup :
All programming done in KEIL4.
Program for common anode LED:
#include <REGX51.h>
#define seg_data P0
sbit cs=P1^0;
sbit rd=P1^1;
sbit wr=P1^2;
sbit intr=P1^3;
sbit seg1=P1^4;
sbit seg2=P1^5;
sbit seg3=P1^6;
void delay();
void display_digit(int);
void main()
{
unsigned int Adcvalue,Adcvalue1,x;
char ch1,ch2,ch3;
seg1=seg2=seg3=1;
{
while(1)
{
cs=0;
rd=1;
wr=0;
wr=1;
if(intr==1)
{
cs=0;
rd=0;
Adcvalue=P2;
for(x=0;x<=100;x++){
if(Adcvalue>9){
ch1=Adcvalue/100;
display_digit(ch1);
P3=0xfe;
delay();
P3=0xff;
delay();
Adcvalue1=Adcvalue%100;
ch2=Adcvalue1/10;
display_digit(ch2);
P3=0xfd;
delay();
P3=0xff;delay();
ch3=Adcvalue1-(ch2*10);
display_digit(ch3);
P3=0xfb;
delay();
P3=0xff;
delay();
}
}
}
}
}
}
void display_digit(int c)
{
switch(c)
{ case 0: P0=0x3f;
break;
case 1: P0=0x06;
break;
case 2: P0=0x5b;
break;
case 3: P0=0x4f;
break;
case 4:P0=0x66;
break;
case 5: P0=0x6d;
break;
case 6:P0=0x7d;
break;
case 7:P0=0x07;
break;
case 8:P0=0x67;
break;
case 9:P0=0x40;
break;
return;
}
}
void delay()
{
unsigned int b;
for (b=0;b<=400;b++);
}
YOU CAN DOWNLOAD CODE FROM HERE :