Monday, May 18, 2020

PIC16F887 LED scrolling programming with XC8

When getting started with microcontroller programming, we usually playing with simple LEDs. A common things is LED blinking, chasing, scrolling etc.


Different color of 3 mm LEDs
Five colors of 3 mm LEDs.

In program C, scrolling LEDs made easy by using the binary shift operation. There is no carry bit in this operation. There are two directions of shifting:

  1. shift left "<<"
  2. and shift right ">>"
In this example, I use PortD for outputting the shifting LEDs.

PIC16F887 LED scrolling programming with XC8
PIC16F887 supplied at +5V DC.
External crystal of 4 MHz fed the PIC device.
SW1 uses to hard reset the MCU.
bar graph LED displays the scrolling. 

Source code is written using XC8 C compiler:

#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
/*_XTAL_FREQ use for __delay*/
#define _XTAL_FREQ 4000000
#define blinkRate 100
void main(){
    //Clear PortD
    PORTD=0x00;
    //Set PortD To Output
    TRISD=0x00;
    while(1){
        PORTD=0x01;
        
        while(PORTD!=0){
            __delay_ms(blinkRate);
            PORTD<<=1;
        }
        PORTD=0x80;
        while(PORTD!=0){
            __delay_ms(blinkRate);
            PORTD>>=1;
        }
    }
}

A screen shot of the simulation.

A screen shot of simulation
A screen shot of the simulation.
PortD outputs to bar graph LED display.

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)