RSS feed: Daily tech news Daily tech news
  • Scientists just broke a textbook rule of physics
    Scientists have defied a long-standing rule of laser physics by generating X-rays with much higher energies than conventional theory predicts. The surprising discovery reveals how two electrons working together can overcome a previously accepted limit, opening new possibilities for quantum research.
  • New 3D thermal invisibility cloak makes objects disappear from infrared cameras
    Researchers have developed a groundbreaking 3D invisibility cloak that can hide complex objects from infrared cameras while protecting them from extreme heat and cold. Instead of blocking heat, the device guides it around an object, making the object appear invisible to thermal imaging from virtually any direction. Successfully built and tested, the cloak could transform […]
  • Tiny magnetic vortices could help computers work more like your brain
    Scientists have filmed tiny magnetic vortices called skyrmions melting out of an organized lattice for the first time, revealing new ways to manipulate these unusual structures. The breakthrough could help make brain-like computers a reality, potentially enabling dramatically smaller and more energy-efficient technology.
  • A revolutionary new microscope could reveal the hidden machinery of life
    Researchers have developed a revolutionary microscope that uses an incredibly powerful laser to make previously invisible cellular structures easier to see. The technology dramatically improves image clarity, allowing scientists to examine small proteins that conventional electron microscopes struggle to capture. It could eventually reveal how tiny molecular machines interact inside cells, providing an unprecedented look […]
  • Scientists who discovered a third form of magnetism win major physics prize
    Physicists have uncovered a hidden third form of magnetism that challenges more than 100 years of established physics. Called altermagnetism, the discovery could transform future computing and electronics while opening an entirely new frontier in quantum research.
  • Physicists just found the ‘ghost’ of superconductivity
    Physicists have found striking evidence for an unusual form of superconducting behavior in uranium ditelluride, where electron pairs organize into rippling patterns called pair density waves. Even more surprisingly, these patterns appear to survive after ordinary superconductivity disappears, suggesting that the electron pairs responsible for superconductivity may begin forming before the material actually becomes superconducting.

Connecting PIC16F877A with 7-Segment display

by Florius
Featured image of connecting PIC16F877A with 7-segment display

In this tutorial we will see what a 7-Segment display is, how it works and what it is used for. We will continue by connecting it to the PIC16F877A microcontroller, using its GPIO pins.

Introduction to 7-Segment Displays

A 7-segment display is a simple electronic component used to visually represent numbers, letters, and some basic symbols. It consists of seven individual LED segments arranged in the shape of the digit “8,” with an additional eighth segment for displaying the decimal point (DP). The segments are labeled from a to g, with each segment representing a specific part of a digit or character.

Each segment can be independently controlled to turn on or off, allowing you to create various combinations to display different numbers and characters. By selectively activating the appropriate segments, you can create the illusion of displaying digits from 0 to 9, some letters of the alphabet, and other symbols.

The 7-segment display is commonly used in a variety of applications where a simple numeric or alphanumeric display is needed, such as digital clocks, calculators, microwave ovens, digital thermometers, electronic scoreboards, and many other electronic devices. It provides a cost-effective and easy-to-use way to present numerical information to users. There are 2 versions of this component:

Standard notation for a 7-segment display.
Fig 1. Standard notation for a 7-segment display.

Common Anode vs. Common Cathode

In a _Common Anode (CA)_ 7-segment display, all the anodes (positive terminals) of the LEDs are connected together and driven by a positive voltage source. Each individual segment’s cathode (negative terminal) is then connected to a specific pin for control. To light up a segment, you apply a low (ground) voltage to its corresponding control pin. This type of display requires sinking current to light up segments.

Schematic diagram of a common-anode seven-segment LED display.
Fig 2. Schematic diagram of a common-anode seven-segment LED display.

In a _Common Cathode (CC)_ 7-segment display, all the cathodes (negative terminals) of the LEDs are connected together and grounded. Each individual segment’s anode (positive terminal) is connected to a specific pin for control. To light up a segment, you apply a high (positive) voltage to its corresponding control pin. This type of display requires sourcing current to light up segments.

Schematic diagram of a common-cathode seven-segment LED display.
Fig 3. Schematic diagram of a common-cathode seven-segment LED display.

Digital segment for all numbers

The segments of a 7-segment display are labeled from “a” to “g” and represent different parts of a digit. By selectively lighting up these segments, you can display the numbers 0 through 9. Here’s how each digit is typically displayed using the segments:

Example of a Common Anode 7-Segment display
Example of a Common Anode 7-Segment display

The truth tables for _Common Anode_ and _Common Cathode_ 7-segment displays outline which segments need to be activated to display each digit from 0 to 9. In these tables, each row represents a digit (0 to 9), and the columns represent the segments (a to g). A value of “1” indicates that the segment is pulled high, while “0” indicates that the segment is pulled low. For both cases (_CA_ and _CC_) the decimal point is set off. In most cases it is not even connected in the circuit, and therefore is not lit up.

Truth Table of a Common Anode 7segment display.
Fig 4. Truth Table of a Common Anode 7segment display.
Truth Table of a Common Cathode 7segment display.
Fig 5. Truth Table of a Common Cathode 7segment display.

Interfacing the 7-Segment display with PIC16F877A

Now we know how 7-Segment displays work, it is time to interface it with the PIC16F877A. The question remains now, how do we connect it; which pin number of the MCU (RD0 to RD7) goes to which pin number of the 7-segment display (a-h). To check that, we have to convert the truth table into binary numbers (and for convenience hexadecimal as well). We will take a look at the _Common Anode_, as this is the most used display, because most PICs are more optimized for sinking current.

From the truth table of the _Common Anode_ 7-segment display, we can use the 7 bits that describe the numbers and the 8th bit for the point and describe them as a binary number as shown here (e.g. for the number 0 we have 0b00000011).

If we’d send all the data directly to PORTD of the microcontroller; we see that the Least Significant Bit (LSB) corresponds to RD0; and that the Most Significant Bit (MSB) corresponds to RD7.

Mapping PIC pins to 7segment pins

From here we can conclude that RD7 is mapped to ‘a’ on the 7-segment display; RD6 to ‘b’, and so forth.

Truth table converted into binary numbers
Fig 6. Truth table of the Common Anode converted into binary numbers.

Circuit diagram

The circuit diagram shows the connections between the PIC16F877A and the _CA_ 7-segment display. As shown in Fig 1, the component has 10 pins, 2 of them are for the common power supply (or ground in case of the CC); and both of them should be connected as shown in this circuit diagram. Furthermore, we should not forget to add the current limiting resistors for each LED in the display. Any resistance around 300 Ohm will suffice.

Circuit schematic of the Common Anode 7-segment display
				
					#define _XTAL_FREQ 20000000 // Define crystal frequency to 20 MHz
#include <xc.h>
#include<pic16f877a.h>

// Configuration bits settings
#pragma config FOSC = HS        // External Oscillator (HS)
#pragma config WDTE = OFF       // Watchdog Timer Disabled
#pragma config PWRTE = ON       // Power-Up Timer Enabled
#pragma config BOREN = OFF      // Brown-out Reset Disabled
#pragma config LVP = OFF        // Low-Voltage Programming Disabled

void main(void) {
    TRISD = 0x00;  // Set PORTD as output
    
    // Numbers taken from Fig 6:       0     1     2     3     4     5     6     7     8     9
    unsigned char binary_pattern[] = {0x03, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01, 0x09}; 
    
    while (1) {
    // Cycle through each element of the binary_pattern array and display on the 7-segment display for 1 second each
        for (int i = 0; i < 10; i++) {
            PORTD = binary_pattern[i];
            __delay_ms(1000);  // 1-second delay
        }
    }
}
				
			

Summary

Within this tutorial, we have acquired knowledge regarding 7-segment displays, the two distinct types – common anode and common cathode – and how we can correctly allocate the 7 pins towards the 10 available digits. Additionally, we have discussed how to utilize truth tables and transition them into binary and hexadecimal data, which can then be applied as output for the microcontroller. We have also learned how to interconnect all the necessary components and we understand how to utilize the program to display the digits sequentially.
Florius

Hi, welcome to my website. I am writing about my previous studies, work & research related topics and other interests. I hope you enjoy reading it and that you learned something new.

More Posts

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.