Saturday, October 9, 2021

AT89C52 and 7-Segments Display Using C in Keil

 A typical digital display device is 7-Segments display. It’s very easy to program and interface to digital IC, or microcontroller for novice learner.

AT89C52 and 7-Segments Display Using C in Keil

They come with different color and digit size. Common cathode and anode is a way to identify it. These two types are complement. Digital data inputs (7-Segments codes) to these two device type are different (complemented).

Voltage and current requirement for each segment are different depending on display’s digit-size. These parameters must be known as they are stated in device’s specification. Typically interfacing between digital controller and this device require a current limiting resistor for each segment.

AT89C52 typically supplied at +5V. So its digital output driving is +5V. We need to add a resistor between digital output pin of this controller and display.

AT89C52 and 7-Segments Display Using C in Keil
Schematic diagram for program simulation

AT89C52 operates at 12MHz from external crystal oscillator. P1.0 is a digital input. Whenever it’s pressed it increase value of counter. Controller counts up to 16. P2 interfaces to a single common anode type 7-Segments display.

C program is written in Keil IDE for 8051 device. Coding is very simple.

#include <REG52.h>
sbit button=P1^0;
// common anode
unsigned char SSD[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
//unsigned char SSD[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
unsigned char cnt=0;
void main(){
P2=0x00;
button=1;
cnt=0;
while(1){
if(button==0){
while(button==0);
cnt++;
if(cnt==16) cnt=0;
}
P2=SSD[cnt];
}
}


Click here to download this example package.


No comments:

Post a Comment

Search This Blog

Labels

25AA010A (1) 8051 (7) 93AA46B (1) ADC (30) Analog Comparator (1) Arduino (15) ARM (6) AT89C52 (7) ATMega32 (56) AVR (57) CCS PICC (28) DAC (1) DHT11 (2) Display (105) Distance Sensor (3) DS18B20 (3) dsPIC (2) dsPIC30F1010 (2) EEPROM (5) Environment Sensor (4) esp8266 (1) I2C (29) Input/Output (67) Interrupt (19) Keil (5) Keypad (10) LCD (47) Master/Slave (1) MAX7221 (1) MCP23017 (5) MCP23S17 (4) Meter (3) MikroC (2) Motor (15) MPLABX (71) Nokia 5110 LCD (3) OLED (2) One-Wire (6) Oscillator (8) PCB (6) PCD8544 (3) PCF8574 (5) PIC (107) PIC12F (2) PIC16F628A (2) PIC16F630 (1) PIC16F716 (3) PIC16F818 (10) PIC16F818/819 (2) PIC16F84A (15) PIC16F876A (1) PIC16F877A (9) PIC16F88 (1) PIC16F887 (60) PIC18 (19) PIC18F1220 (4) PIC18F2550 (3) PIC18F4550 (12) PWM (11) RTC (8) Sensor (10) SH1106 (1) Shift Register (11) Shift Registers (3) SPI (24) STM32 (6) STM32 Blue Pill (6) STM32CubeIDE (6) STM32F103C8T6 (6) SysTick (3) temperature sensor (11) Thermometer (21) Timer/Counter (31) TM1637 (2) UART (7) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (94)