Wednesday, May 20, 2020

Driving a single 8x8 dot matrix display using PIC16F887

Just like multiplexing a multi-digit seven-segment display, driving a dot matrix display does the same thing.
Here, I don't explain more about a dot matrix display due to the other article that I have posted "using ATMega32 to drive a single 8x8 dot matrix display".

In this example, I use PortD to display the matrix pattern, and PortC for controlling the common. The dot matrix display I used is common cathode type.

Driving a single 8x8 dot matrix display using PIC16F887
Schematic diagram.
PortD outputs the character data.
PortC control each common dot.

Source code.

#include<xc.h>
// PIC16F887 Configuration Bit Settings
// CONFIG1
#pragma config FOSC = XT
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = ON
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = ON
#pragma config IESO = ON
#pragma config FCMEN = ON
#pragma config LVP = ON
// CONFIG2
#pragma config BOR4V = BOR40V
#pragma config WRT = OFF
#define _XTAL_FREQ 4000000
char letterA[8]={0x10,0x38,0x6C,0xC6,0xC6,0xFE,0xC6,0xC6};
char dotControl[8]={1,2,4,8,16,32,64,128};
void driveMatrix(){
  for (int i=0;i<8;i++)
  {
   PORTD=0x00;
   PORTC=letterA[i];
   PORTD=dotControl[i];
   __delay_ms(1);
  }
}
void main(){
    /*Clear PortC*/
    PORTC=0x00;
    /*Clear PortD*/
    PORTD=0x00;
    /*PortC output*/
    TRISC=0x00;
    /*PortD output*/
    TRISD=0x00;
    while(1) driveMatrix();
}

Here's a screen shot of running program.

Driving a single 8x8 dot matrix display using PIC16F887
A running simulation.
The matrix display letter 'A'.

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 (54) 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 (46) Master/Slave (1) MAX7221 (1) MCP23017 (5) MCP23S17 (4) Meter (3) MikroC (2) Motor (15) MPLABX (66) 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 (2) SPI (24) STM32 (6) STM32 Blue Pill (6) STM32CubeIDE (6) STM32F103C8T6 (6) SysTick (3) temperature sensor (11) Thermometer (21) Timer/Counter (30) TM1637 (2) UART (7) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (94)