Here is the code I was eyeballing, From Nuts and Volts Aug 2007, a water heater controller, display section,
Notice the lookup table for the digits.Code:////////////////// Display.c //// for PIC16F684 using MPLAB IDE 7.51 // PICC Compiler with PICSTART Plus programmer // by Dick Aidt 7 Mar 07 // // Program displays the digits sent by the Thermal program #include <pic.h> #include <math.h> __CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS & UNPROTECT &\ UNPROTECT & BORDIS & IESODIS & FCMDIS); const char LEDDigit[ ] = { 0b0000001, // "0" 0b1001111, // "1" 0b0010010, // "2" 0b0000110, // "3" 0b1001100, // "4" 0b0100100, // "5" 0b0100000, // "6" 0b0001111, // "7" 0b0000000, // "8" 0b0001100, // "9" 0b0001000, // "A" 0b1100000, // "B" 0b0110001, // "C" 0b1000010, // "D" 0b0110000, // "E" 0b0111000 }; // "F" int Value=0; int Dig [ 4 ]; int i=0,t=0, x = 0, y = 0, z = 0; int in = 0; // built up inputed data Temp int s = 0; // recieved bit const j[ ]={0,1,0,1}; const k[ ]={0,0,1,1}; main(void) { CMCON0 = 7; // Turn off comparators ANSEL = 0; // disable analog PORTA = 0b00001100; TRISA = 0b00001100; // RA2 & RA3 are inputs PORTC = 0; TRISC = 0b00000000; // PORTC is all outputs ADC: if (!RA3) { in = 0; for ( i = 0; i < 12; i ++) { while ( ! RA3) //wait for HI sync pluse {NOP();} { s = RA2; in = (in | ( s << i));} // get the bit while (RA3) //wait for LO sync pluse {NOP();} } // get next bit while ( ! RA3) // wait for HI sync pluse NOP(); Value = 0; Value = in; // make display numbers array if (Value < 1000) { z = 1; Dig [ 0 ] = 0; goto JUMP1; } else z = 0; NOP(); Dig [ 0 ] = Value/1000; JUMP1: Dig [ 1 ] = Value / 100 - (Dig[0] * 10); Dig [ 2 ] = Value / 10- (( Dig[0] * 100 )+ ( Dig[1] * 10 )); Dig [ 3 ] = Value - (( Dig[0] * 1000 )+ ( Dig[1] * 100 ) +( Dig[2]*10)); } for (y=0; y < 4; y++) // Display the digits { if ( y == 0 & z == 1 ) y = 1;// if F < 100 skip first digit PORTC = LEDDigit [ Dig [ y ] ]; RA5 = LEDDigit [ Dig [ y ] ] >> 6; RA0 = j [ y ]; //select which digit RA1 = k[ y ]; if (y == 2) RA4=0; // turn on decimal point else RA4=1; NOP(); for (t=0; t<327; t++);// display delay NOP(); } // end for PORTC = 0b11111111; RA5 = 1; goto ADC; } // End




Bookmarks