Embedded C code for Two 7 Segment displays
Sample code for Two 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; }
Highlights
-
List of Projects
Navigate through wide range of projects of 8051. Applications including ADC, DAC, LCD, Matrix LEDs, Keypad, Stepper Motor, DC motor, EEPROM, Relay, Timer, Sensors, RTC and much more.
Pick and Place Robot Temperature & Light Controller Rolling Display Matrix LEDs Person Counter & Password Detector Home Security System Data Logger Greenhouse monitor & control Flow computer Electronic Voting Machine Pick & Place Robot Temperature & Light Controller Rolling Display Matrix LEDs Person Counter & Password Detector Data Logger Home Security System Greenhouse monitor & control Flow computer
Read More