Home   Three 7 Segment display


Embedded C code for Three 7 Segment displays


Sample code for Three 7 Segment displays using delay subroutine.
Following code can be using for AVR series ICs like: ATmega8, ATmega16, ATmega32.

 

#include <avr/io.h> #include <util/delay.h> #define DISPLAY_PORT PORTD #define DISPLAY_DDR DDRD #define DISPLAY_CTRL_PORT PORTB #define DISPLAY_CTRL_DDR DDRB #define ZERO 0x77 #define ONE 0x41 #define TWO 0x3B #define THREE 0x6B #define FOUR 0x4D #define FIVE 0x6E #define SIX 0x7E #define SEVEN 0x43 #define EIGHT 0x7F #define NINE 0x6F #define DOT 0x80 #define DIGIT1 4 //(left most) #define DIGIT2 5 #define DIGIT3 6 #define DIGIT4 7 //(right most) #ifndef cbi #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #endif #ifndef sbi #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) #endif int main(void) { int i=0; int d1,d2,d3; int disp1,disp2,disp3; DISPLAY_DDR=0xFF; DISPLAY_PORT=0x00; DISPLAY_CTRL_DDR=0xff; DISPLAY_CTRL_PORT=0x00; _delay_ms(4000); while(1) { for(d1=0;d1<10;d1++) { for(d2=0;d2<10;d2++) { for(d3=0;d3<10;d3++) { for(i=0;i<1000;i++) { switch(d1) { case 0: disp1=~ZERO; break; case 1: disp1=~ONE; break; case 2: disp1=~TWO; break; case 3: disp1=~THREE; break; case 4: disp1=~FOUR; break; case 5: disp1=~FIVE; break; case 6: disp1=~SIX; break; case 7: disp1=~SEVEN; break; case 8: disp1=~EIGHT; break; case 9: disp1=~NINE; break; } switch(d2) { case 0: disp2=~ZERO; break; case 1: disp2=~ONE; break; case 2: disp2=~TWO; break; case 3: disp2=~THREE; break; case 4: disp2=~FOUR; break; case 5: disp2=~FIVE; break; case 6: disp2=~SIX; break; case 7: disp2=~SEVEN; break; case 8: disp2=~EIGHT; break; case 9: disp2=~NINE; break; } switch(d3) { case 0: disp3=~ZERO; break; case 1: disp3=~ONE; break; case 2: disp3=~TWO; break; case 3: disp3=~THREE; break; case 4: disp3=~FOUR; break; case 5: disp3=~FIVE; break; case 6: disp3=~SIX; break; case 7: disp3=~SEVEN; break; case 8: disp3=~EIGHT; break; case 9: disp3=~NINE; break; } sbi(DISPLAY_CTRL_PORT,DIGIT1); cbi(DISPLAY_CTRL_PORT,DIGIT2); cbi(DISPLAY_CTRL_PORT,DIGIT3); DISPLAY_PORT=disp3; _delay_us(200); cbi(DISPLAY_CTRL_PORT,DIGIT1); sbi(DISPLAY_CTRL_PORT,DIGIT2); cbi(DISPLAY_CTRL_PORT,DIGIT3); DISPLAY_PORT=disp2; _delay_us(200); cbi(DISPLAY_CTRL_PORT,DIGIT1); cbi(DISPLAY_CTRL_PORT,DIGIT2); sbi(DISPLAY_CTRL_PORT,DIGIT3); DISPLAY_PORT=disp1; _delay_us(200); } } } } } return 0; }