Monday, October 19, 2009

Interfacing 7-segment Display

we want to run the display with the AT89C51 microcontroller. We will use Port 0 to run the display. Connect the AT89C51 to the 7 segment display as follows.


#include
void display_digit(unsigned char);
void delay();

#define dis_a P0_1 /*a segment*/
#define dis_b P0_0 /*b segment*/
#define dis_c P0_6 /*c segment*/
#define dis_d P0_5 /*d segment*/
#define dis_e P0_4 /*e segment*/
#define dis_f P0_2 /*f segment*/
#define dis_g P0_3 /*g segment*/

void main(void)
{
unsigned char i;
while(1){ /*Repeat fowever*/
for(i=0;i<10;i++)
{
display_digit(i); /*Display 0-9*/
delay(); /*delay*/
}
}
}

/*---------------------------------------------------
Display the data passed to this function
----------------------------------------------------*/
void display_digit(unsigned char digg)
{
if (digg==0x00) /*Display 0*/
{
dis_a=0;
dis_b=0;
dis_c=0;
dis_d=0;
dis_e=0;
dis_f=0;
dis_g=1;
}
else if (digg==1)
{
dis_a=1;
dis_b=0;
dis_c=0;
dis_d=1;
dis_e=1;
dis_f=1;
dis_g=1;
}
else if (digg==2)
{
dis_a=0;
dis_b=0;
dis_c=1;
dis_d=0;
dis_e=0;
dis_f=1;
dis_g=0;
}
else if (digg==3)
{
dis_a=0;
dis_b=0;
dis_c=0;
dis_d=0;
dis_e=1;
dis_f=1;
dis_g=0;
}
else if (digg==4)
{
dis_a=1;
dis_b=0;
dis_c=0;
dis_d=1;
dis_e=1;
dis_f=0;
dis_g=0;
}
else if (digg==5)
{
dis_a=0;
dis_b=1;
dis_c=0;
dis_d=0;
dis_e=1;
dis_f=0;
dis_g=0;
}
else if (digg==6)
{
dis_a=0;
dis_b=1;
dis_c=0;
dis_d=0;
dis_e=0;
dis_f=0;
dis_g=0;
}
else if (digg==7)
{
dis_a=0;
dis_b=0;
dis_c=0;
dis_d=1;
dis_e=1;
dis_f=1;
dis_g=1;
}
else if (digg==8)
{
dis_a=0;
dis_b=0;
dis_c=0;
dis_d=0;
dis_e=0;
dis_f=0;
dis_g=0;
}
else if (digg==9)
{
dis_a=0;
dis_b=0;
dis_c=0;
dis_d=0;
dis_e=1;
dis_f=0;
dis_g=0;
}
}
/*---------------------------------------------------
Delay Program
----------------------------------------------------*/
void delay()
{
TMOD=0x01; /*Timer 0, mode 1*/
TL0=0xFE;
TH0=0xFE;
TR0=1;
while(TF0==0);
TR0=0;
TF0=0;
}

0 comments:

Post a Comment