Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

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.

Latest threads

New Articles From Microcontroller Tips

Back
Top