Tuesday, February 7, 2017

Rotary switch and Seven Segment Display Configuration


This code will wait for the rotary switch to rotate. If it rotate clockwise, the number will increase until 23 and then start with beginning. If the rotary switch rotate counter clockwise, the number will decrease until 0 and then go back to 23.
  • Main

#include <xc.h>
#include "ProcessorConfiguration.h"
#include "MainFunctionPrototypes.h"
#include "definitions.h"
void main(void) {
 unsigned char value;
 portInit();
 sevenSegmentInit();
 value = 0;
 while (1) {
     sevenSegmentDisplay(value);
     if (A == low) {
         if (B == 1) {
            if (value == 23)
               value = 0;
            else
              value++;
    }
    else {
        if (value == 0)
            value = 23;
       else
            value--;
   }

   while (A == low) {
      sevenSegmentDisplay(value);
       }
    }
  } //end of while (1)
}

  •  PortModule

#include <xc.h>
void portInit(void) {
  PCFG3 = 0; // Configure all PORTA inputs as digital I/O.
  PCFG2 = 1;
  PCFG1 = 1;
  TRISD = 0b00000000; // Configure PORTD as output for the 7-segment device.
  TRISE0 = 0; // Configure PORTE0 as output for Digit 2 enable of the 7-segment device.
  TRISE1 = 0; // Configure PORTE1 as output for Digit 1 enable of the 7-segment device.
  TRISE2 = 0; // Configure PORTE2 as output for the decimal point (dp) of the 7-segment device.
  TRISB0 = 1;
  TRISB5 = 1;
}

  • SevenSegment

#include <xc.h>
#include "SevenSegmentDefinitions.h"
unsigned char sevenSegmentLookUp[10]; // 7 segment decoder
void sevenSegmentInit() {

  sevenSegmentLookUp[0] = 0b10010000; // 7-segment value for digit '0'.
  sevenSegmentLookUp[1] = 0b11011110; // 7-segment value for digit '1'.
  sevenSegmentLookUp[2] = 0b10001001; // 7-segment value for digit '2'.
  sevenSegmentLookUp[3] = 0b10001010; // 7-segment value for digit '3'.
  sevenSegmentLookUp[4] = 0b11000110; // 7-segment value for digit '4'.
  sevenSegmentLookUp[5] = 0b10100010; // 7-segment value for digit '5'.
  sevenSegmentLookUp[6] = 0b10100000; // 7-segment value for digit '6'.
  sevenSegmentLookUp[7] = 0b10011110; // 7-segment value for digit '7'.
  sevenSegmentLookUp[8] = 0b10000000; // 7-segment value for digit '8'.
  sevenSegmentLookUp[9] = 0b10000010; // 7-segment value for digit '9'.
  sevenSegment = sevenSegmentLookUp[0]; // Initilize both 7-Segment Displays to zero.
  leftDigit = DIGIT_ON; // Turn on the left digit.
  rightDigit = DIGIT_ON; // Turn off the right digit.
  DP = DP_OFF;
}

void sevenSegmentDisplay(unsigned char value) {

  sevenSegment = sevenSegmentLookUp[value % 10];
  leftDigit = DIGIT_OFF; // Turn off MSD
  rightDigit = DIGIT_ON; // Turn on LSD
  sevenSegment = sevenSegmentLookUp[value / 10];
  rightDigit = DIGIT_OFF; // Turn off MSD
  leftDigit = DIGIT_ON; // Turn on LSD
}

  • ProcessorConfiguration.h

#pragma config BOREN = OFF, CPD = OFF, DEBUG = ON, WRT = OFF, FOSC = EXTRC, WDTE = OFF, CP = OFF, LVP = OFF, PWRTE = OFF

  • definitions.h

#define DIGIT_ON 1
#define DIGIT_OFF 0
#define leftDigit RE0
#define rightDigit RE1
#define sevenSegment PORTD
#define DP RE2
#define DP_ON 0
#define DP_OFF 1
#define DIGIT_ON 1
#define DIGIT_OFF 0
#define TOP_LIMIT 23
#define A RB0
#define B RB5
#define low 0

  • SevenSegmentDefinitions.h

#define DIGIT_ON 1
#define DIGIT_OFF 0
#define leftDigit RE0
#define rightDigit RE1
#define sevenSegment PORTD
#define DP RE2
#define DP_ON 0
#define DP_OFF 1

  • MainFunctionPrototypes.h

extern void sevenSegmentDisplay(unsigned char);
extern void portInit(void);
extern void sevenSegmentInit();

No comments:

Post a Comment