This week we will bring our Fab-Pic from two weeks ago to life.
What we will need for this:
#include <xc.h>
#include <plib.h>
#define _XTAL_FREQ 32000000 //Only used by the delay-functions
#define onboard_led PORTBbits.RB7
#define onboard_button PORTBbits.RB6
#define led_seg_e PORTCbits.RC0
#define led_seg_d PORTCbits.RC1
#define led_seg_c PORTCbits.RC2
#define led_seg_dp PORTCbits.RC3
#define led_seg_b PORTCbits.RC4
#define led_seg_a PORTCbits.RC5
#define led_seg_f PORTCbits.RC6
#define led_seg_g PORTCbits.RC7
#pragma config FOSC = HS1 //extern oszilator 4-16mhz
#pragma config PLLCFG = ON //PLL enable, CPU=32 MHz
#pragma config PWRTEN = ON //PowerOnTimer on
#pragma config WDTEN = OFF //Watchdog Timer off
#pragma config XINST = OFF //Extended Instruction Set off, no support by free compiler
#pragma config SOSCSEL = DIG //PORTC.0 and PORTC.1 digital I/O, not second oszilator
void delay_one_second (void) //make a break for one second
{
int i;
for(i=0; i<50; i++) {
__delay_ms(20); //inline delay max. 20ms, so repeat it 50 times for one second
}
return;
}
PORTC = 0b01010101;
sets the level of all pins of port c.
void display(char x)
{
switch (x){
case '1': PORTC = 0b00010100; break;
case '2': PORTC = 0b10110011; break;
case '0': PORTC = 0b01110111; break;
case '6': PORTC = 0b11100111; break;
case 'A': PORTC = 0b11110101; break;
case 'B': PORTC = 0b11000111; break;
case 'C': PORTC = 0b10000011; break;
case 'D': PORTC = 0b10010111; break;
case 'E': PORTC = 0b11100011; break;
case 'F': PORTC = 0b11100001; break;
case 'M': PORTC = 0b00100101; break;
case 'Y': PORTC = 0b11010110; break;
case ' ': PORTC = 0b00000000; break;
default: return;
}
return;
}
void main(void) {
//setup Pull-Up for onboard button
INTCON2bits.RBPU = 0;
WPUBbits.WPUB6 = 1;
//config outputs
LATBbits.LATB7 = 0;TRISBbits.TRISB7 = 0; //onboard_led
//Kingbright SC56-11EWA at port c
LATCbits.LATC0 = 0;TRISCbits.TRISC0 = 0; //element e
LATCbits.LATC1 = 0;TRISCbits.TRISC1 = 0; //element d
LATCbits.LATC2 = 0;TRISCbits.TRISC2 = 0; //element c
LATCbits.LATC3 = 0;TRISCbits.TRISC3 = 0; //element DP
LATCbits.LATC4 = 0;TRISCbits.TRISC4 = 0; //element b
LATCbits.LATC5 = 0;TRISCbits.TRISC5 = 0; //element a
LATCbits.LATC6 = 0;TRISCbits.TRISC6 = 0; //element f
LATCbits.LATC7 = 0;TRISCbits.TRISC7 = 0; //element g
//config inputs
LATBbits.LATB6 = 0;TRISBbits.TRISB6 = 1; //onboard_button
while(1){
delay_one_second();
display ('F'); delay_one_second();
display ('A'); delay_one_second();
display ('B'); delay_one_second();
display ('A'); delay_one_second();
display ('C'); delay_one_second();
display ('A'); delay_one_second();
display ('D'); delay_one_second();
display ('E'); delay_one_second();
display ('M'); delay_one_second();
display ('Y'); delay_one_second();
display (' '); delay_one_second();
display ('2'); delay_one_second();
display ('0'); delay_one_second();
display ('1'); delay_one_second();
display ('6'); delay_one_second();
display (' '); delay_one_second();
}
return;
}
INTCON2bits.RBPU = 0;
WPUBbits.WPUB6 = 1;
LATCbits.LATC7 = 0;
. TRISCbits.TRISC7 = 0;
display ('F'); delay_one_second();