7 segment port convsion

Status
Not open for further replies.

sahu

Member
hi every body
pl help me . I'm confused how do it .
my working code as below .
PHP:
/***********************************************************************************

   its ok on oshon soft on 11:04 PM 1/10/2014
                 1 st ver 11:04 PM 1/10/2014




/*        16F72 Configuration    dual I|P
          O = Output, I = Input RIGHT NOW AS DEMO
                    _________
             MCLR   | 1  28 |  RB7 --> (O) == 
(I) ADC1 --> AN0   | 2  27 |  RB6 --> (O) == 
(I) ADC2 --> AN1   | 3  26 |  RB5 --> (O) == 
(I) ADC3 --> AN2   | 4  25 |  RB4 --> (O)
(I) ADC4 --> AN3   | 5  24 |  RB3 --> (O) == 
(O)      <-- RA4   | 6  23 |  RB2 --> (O) == display[1]
(O) ADC4 <-- AN4   | 7  22 |  RB1 --> (O) == display[2]
              Vss   | 8  21 |  RB1 --> (O) == display[3]
          --> OSC1  | 9  20 |  Vdd
          <-- OSC2  |10  19 |  Vss
A == (O) <-- RC0   |11  18 |  RC7 --> (O) ==
B == (O) <-- RC1   |12  17 |  RC6 --> (O) == G
C == (O) <-- RC2   |13  16 |  RC5 --> (O) == F
D == (O) <-- RC3   |14  15 |  RC4 --> (O) == E
                    ---------
*/


**************************************************************************************/

#include <16F72.h>
//ADC resolution
#device ADC=8
//CONFIG words
#USE DELAY( CLOCK=4000000) /* Using a 4 Mhz clock */
#FUSES XT,NOWDT,NOPROTECT,NOPUT
//Clock used for delay routines
//#use delay(crystal=12MHz)
#use FIXED_IO(B_outputs=PIN_B7,PIN_B6,PIN_B5,PIN_B4,PIN_B3,PIN_B2,PIN_B1,PIN_B0)
#use FIXED_IO(C_outputs=PIN_C7,PIN_C6,PIN_C5,PIN_C4,PIN_C3,PIN_C2,PIN_C1,PIN_C0)
//Global Variables
unsigned int8 enablessdx = 0;
unsigned char display[3], SSD1 = 0, SSD2 = 0, SSD3 = 0, displayCounter = 0;
unsigned long dummy = 0;

unsigned char CA[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
                     // 0    1      2     3     4     5     6    7     8     9  

unsigned char CA_P_o[] = {0xCF, 0xBF, 0x8C};//{0x8C, 0xC0, 0xB7};
                         // I     -    P       // P     o  
unsigned char CA_P_1[] = {0xC0, 0xBF, 0x8C};
                         //  O    -    P     // P     1
                    
//Function Definitions
void turnoffssd(){
      output_low(PIN_b0);  
      output_low(PIN_b1);
      output_low(PIN_b2);  
}
void splitnum(){
      display[0] = (dummy % 10);
      display[1] = (dummy / 10) % 10;
      display[2] = (dummy / 100);
}
//******************* ISR Code starts ******************************************************
//Comment this code if you don't want to use interrupts to display SSD data.
//If this code is commented out then the code in while(1) loop which displays
//SSD data should be uncommented.
#INT_TIMER1
void TIMER1_isr(void)
{   
   if(interrupt_active(int_timer1))
   {
         enablessdx++;
         if(enablessdx == 4)enablessdx = 1;
         turnoffssd();
         switch(enablessdx){
               case 1:
                     output_c(SSD3);
                     output_high(PIN_b0);
                     break;
               case 2:
                     output_c(SSD2);
                     output_high(PIN_b1);        
                     break;
               case 3:
                     output_c(SSD1);
                     output_high(PIN_b2);        
                     break;  
         }  
   }
  
   set_timer1(0xFDA7);
   clear_interrupt(int_timer1);
}
//******************* ISR Code ends ******************************************************
void main()
{
  

  
   float value;
     
   set_tris_b(0x00);
   set_tris_c(0x00);
  
   output_b(0x00);
   output_c(0x00);
  
  // setup_comparator(NC_NC_NC_NC);
  
   setup_adc_ports(ALL_ANALOG);
  // setup_adc_ports(sAN0 | sAN1);
   setup_adc(ADC_CLOCK_INTERNAL);

  // setup_vref(FALSE);
  
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
   set_timer1(0xFDA7);
  
   enable_interrupts(INT_TIMER1);
   enable_interrupts(GLOBAL);  
    
   while(TRUE)
   {
      //TODO: User Code
      
      if((displayCounter == 1) || (displayCounter == 3))
      {
     
            if(displayCounter == 1)set_adc_channel(0);
            else if(displayCounter == 3)set_adc_channel(1);
           
            delay_us(100); 
            read_adc(ADC_START_only);
            delay_us(100);         
            value = read_adc(ADC_read_only) * 30.0 / 1023.0;
           
            splitnum();
           {
            if((value >= 0.0) && (value < 10.0))
            {
                     dummy = (long)(value * 100.0);                  //1.23 becomes 123
                     splitnum();
                     SSD1 = CA[display[0]];
                     SSD2 = CA[display[1]];
                     SSD3 = CA[display[2]];//  & 0x7F;                
            }
            else if((value >= 10.0) && (value < 100.0))
            {
                     dummy = (long)(value * 10.0);                   //12.3 becomes 123
                     splitnum();
                     SSD1 = CA[display[0]];
                     SSD2 = CA[display[1]];// & 0x7F;
                     SSD3 = CA[display[2]];
            }
            else if((value >= 100.0) && (value < 1000.0))
            {             //required if range of measurement is changed to 0 to 999
                     dummy = (long)value;
                     splitnum();
                     SSD1 = CA[display[0]];
                     SSD2 = CA[display[1]];
                     SSD3 = CA[display[2]];
            }
           delay_ms(1000);
           }
      }
      else if(displayCounter == 0){
                SSD1 = CA_P_o[2];
                SSD2 = CA_P_o[1];
                SSD3 = CA_P_o[0]; 
      }
      else if(displayCounter == 2){
                SSD1 = CA_P_1[2];
                SSD2 = CA_P_1[1];
                SSD3 = CA_P_1[0];
      }
     
      delay_ms(500);
     //delay_ms(20);
      displayCounter++;
      if(displayCounter > 3) displayCounter = 0;
     
     
   }
}

now i have need port conversion portc to portb .
those conversion as below.
Code:
/*        16F72 Configuration    dual I|P
          O = Output, I = Input RIGHT NOW AS DEMO
                    _________
             MCLR   | 1  28 |  RB7 --> (O) ==  A
(I) ADC1 --> AN0   | 2  27 |  RB6 --> (O) ==  B
(I) ADC2 --> AN1   | 3  26 |  RB5 --> (O) ==  C
(I) ADC3 --> AN2   | 4  25 |  RB4 --> (O) ==  D
(I) ADC4 --> AN3   | 5  24 |  RB3 --> (O) ==  E
(O)      <-- RA4   | 6  23 |  RB2 --> (O) ==  F
(O) ADC4 <-- AN4   | 7  22 |  RB1 --> (O) ==  G
              Vss   | 8  21 |  RB1 --> (O) == display[3]
          --> OSC1  | 9  20 |  Vdd
          <-- OSC2  |10  19 |  Vss
   == (O) <-- RC0   |11  18 |  RC7 --> (O) == display[1]
   == (O) <-- RC1   |12  17 |  RC6 --> (O) == display[2]
   == (O) <-- RC2   |13  16 |  RC5 --> (O) ==
   == (O) <-- RC3   |14  15 |  RC4 --> (O) ==
                    ---------
*/
 
got it .
solve my problem .
i was do something wrong
1st of all i clear it working function.

3 ssd display
************************************************* FX 1*-************
{PRAT 1}

I - P (500 ms)
xxx (value of ADC1 --> AN0 ) [ 1 sec]
----------------------------------------------------
{PRAT 2}

O - P (500 ms)
xxx (value of ADC2 --> AN1 ) [ 1 sec]
************************************************
**********************FX2**********************************
i want add 1 push to switch { SW --> RA4) .
when i push switch . then 3 ssd display show only {PRAT 1} for 2 minte (2000ms) .
if i agen push switch . then 3 ssd display show only {PRAT 2} for 2 minte (2000ms) .
when i relesh push switch then after 5 minte (5000ms ) FX1 work normaly work.
 
Last edited:
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…