2020-09-09 01:43 AM
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);*/