cancel
Showing results for 
Search instead for 
Did you mean: 

Problem displaying numbers in 3 digits seven segment display interfaced with 74HC595 shift register? I am trying to send values from stm8s003f3 to display it in 3 digit seven segment display. I have interfaced Stm8s with 74hc595d for pin reduction.

AMana.2
Associate

The problem faced is that values send from controller is not displayed on 3 digit seven segment. I am attaching the program please tell me where i am doing wrong.

/* MAIN.C file

 * 

 * Copyright (c) 2002-2005 STMicroelectronics

 */

#include "STM8s.h"

void ComPin_Setup(void);

void clock_setup(void);

void GPIO_setup(void);

void TIM2_setup(void);

void delay_ms(int delay);

void SHCP_Clock(void);

void Latch_Enable(void);

void Data_Show(unsigned int Data);

void digit(char digit_in);

 int buttonpressed1=0;

int a2,a3,a4;

 int pressed_confidence1=0;

 int released_confidence1=0;

 int i,j,m;

 unsigned char seg=0x01;

 unsigned char n=0x00;

unsigned char binary_pattern[]={0xC0,0xF9,0xA4,0xB0,0x99,

0x92,0x82,0xF8,0x80,0x90};

/*{0b11111100,//pattern for seven segment display

0b01100000,

0b11011010,

0b11110010,

0b01100110,

0b10110110,

0b10111110,

0b11100000,

0b11111110,

0b11110110};*/

void main(void)

{

bool count=0;

bool temp=0;

char counter=30;

char duty1=20;

   

char duty2=3;

unsigned char duty3=3;

  GPIO_setup();

  TIM2_setup();

ComPin_Setup();

clock_setup();

//digit(duty1);

//delay_ms(1000);

//digit(duty2);

//delay_ms(1000);

digit(duty3);

delay_ms(100);

         

  while(TRUE)

  {

/*if(GPIO_ReadInputPin(GPIOD,GPIO_PIN_4)== FALSE)

{

pressed_confidence1++;

if(pressed_confidence1>100)

{

if(buttonpressed1 == 0)

{

count=1;

buttonpressed1=1;

}

pressed_confidence1=0;

}

else

{

released_confidence1++;

if(released_confidence1>100)

{

buttonpressed1=0;

released_confidence1=0;

}

}

}

if(count==1)

{

if(TIM2_GetCounter() == 976)

{

counter--;

if (counter > 0)

{

GPIO_WriteHigh(GPIOD, GPIO_PIN_3);

//delay_ms(100);

}

else

{

GPIO_WriteLow(GPIOD, GPIO_PIN_3);

counter=30;

count=0;

}

digit(counter);

Data_Show(counter);

}

}*/

}

}

void clock_setup(void)

{

  CLK_DeInit();

         

  CLK_HSECmd(DISABLE);

  CLK_LSICmd(DISABLE);

  CLK_HSICmd(ENABLE);

  while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == FALSE);

         

  CLK_ClockSwitchCmd(ENABLE);

  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8);

  CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);

         

  CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, 

  DISABLE, CLK_CURRENTCLOCKSTATE_ENABLE);

         

  CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI, DISABLE);

  CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C, DISABLE);

  CLK_PeripheralClockConfig(CLK_PERIPHERAL_ADC, DISABLE);

  CLK_PeripheralClockConfig(CLK_PERIPHERAL_AWU, DISABLE);

  CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, DISABLE);

  CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1, DISABLE);

  CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2, ENABLE);

  CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4, DISABLE);

}

void GPIO_setup(void)

{

  GPIO_DeInit(GPIOD);

  GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);

GPIO_Init(GPIOD,GPIO_PIN_4,GPIO_MODE_IN_PU_NO_IT);

GPIO_DeInit(GPIOC);

GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_OD_HIZ_SLOW );//ds

GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);//stcp

GPIO_DeInit(GPIOA);

GPIO_Init(GPIOA, GPIO_PIN_3, GPIO_MODE_OUT_OD_HIZ_SLOW);//shcp

}

void ComPin_Setup(void)

{

GPIO_DeInit(GPIOC);

GPIO_Init(GPIOC, ((GPIO_Pin_TypeDef)( GPIO_PIN_5 

| GPIO_PIN_6 | GPIO_PIN_7)), GPIO_MODE_OUT_OD_HIZ_FAST);

}

void TIM2_setup(void)

{

  TIM2_DeInit();

  TIM2_TimeBaseInit(TIM2_PRESCALER_2048,1952);

  TIM2_Cmd(ENABLE);

}

void delay_ms(int delay)

{

for(i = 0;i<delay; i++) 

{

   

}

}

void SHCP_Clock(void) // clock for serial register

{

 

GPIO_WriteLow(GPIOA,GPIO_PIN_3);

delay_ms(1000);

GPIO_WriteHigh(GPIOA, GPIO_PIN_3);

delay_ms(1000);

}

void Latch_Enable(void)// Latch pulse for transfering data to parallel register

{

GPIO_WriteHigh(GPIOC,GPIO_PIN_4);

delay_ms(1000);

GPIO_WriteLow(GPIOC, GPIO_PIN_4);

}

void Data_Show(unsigned int Data)

{

for(m=0;m<8;m++)

{

if((Data >> m & 0x01))

{

GPIO_WriteHigh(GPIOC,GPIO_PIN_3); // data

GPIO_WriteHigh(GPIOD, GPIO_PIN_3); // checking wheather for loop is working

}

else

{

GPIO_WriteLow(GPIOC,GPIO_PIN_3);

GPIO_WriteLow(GPIOD, GPIO_PIN_3);

//SHCP_Clock();

}

SHCP_Clock();

}

 Latch_Enable();

}

void digit(unsigned char digit_in)

{

//ComPin_Setup();

// holds 1000's digit

switch(seg)

   {

      case 1:

      {

 n = ((digit_in / 100) % 10);

        Data_Show(binary_pattern[n]);

        GPIO_WriteHigh(GPIOC, GPIO_PIN_5);

//GPIO_WriteLow(GPIOC, GPIO_PIN_6);

//GPIO_WriteLow(GPIOC, GPIO_PIN_7);

        break;

       

      }

                 

      case 2:

      {

n = ((digit_in / 10) % 10);

       Data_Show(binary_pattern[n]);

       // GPIO_WriteLow(GPIOC, GPIO_PIN_5);

GPIO_WriteHigh(GPIOC, GPIO_PIN_6);

// GPIO_WriteLow(GPIOC, GPIO_PIN_7);

        break;

      }

                 

      case 3:

      {

       n = (digit_in % 10);

        Data_Show(binary_pattern[n]);

//GPIO_WriteLow(GPIOC, GPIO_PIN_5);

//GPIO_WriteLow(GPIOC, GPIO_PIN_6);

        GPIO_WriteHigh(GPIOC, GPIO_PIN_7);

        break;

      }

                 

    }

         

    seg++;

    if(seg > 3)

    {

      seg = 1;

    }

    

}

     /*a2 = ((digit_in/100)%10); // holds 100's digit

     a3 = ((digit_in/10)%10); // holds 10th digit

     a4 = (digit_in%10); // holds unit digit value

    

Data_Show(binary_pattern[a4]);

if(a4 <10)

{

GPIO_WriteHigh(GPIOC,GPIO_PIN_7);

GPIO_WriteLow(GPIOC,GPIO_PIN_6);

GPIO_WriteLow(GPIOC,GPIO_PIN_5);

 Latch_Enable();

}

Data_Show(binary_pattern[a3]);

if(a4 <10)

{

GPIO_WriteHigh(GPIOC,GPIO_PIN_7);

GPIO_WriteHigh(GPIOC,GPIO_PIN_6);

GPIO_WriteLow(GPIOC,GPIO_PIN_5);

delay_ms(100);

 Latch_Enable();

}

Data_Show(binary_pattern[a2]);

GPIO_WriteLow(GPIOC,GPIO_PIN_7);

GPIO_WriteLow(GPIOC,GPIO_PIN_6);

GPIO_WriteHigh(GPIOC,GPIO_PIN_5);

//delay_ms(10);*/

0 REPLIES 0