본문 바로가기

컴퓨터/Cortex-M3(STM32F103)

[STM3210B] MFND-100 7-SEGMENT MODULE 구동


/*
제목 : Dr.KIM 4FND모듈(4DIGIT 7-SEGMENT MODULE) MFND-100 구동
보드명 : STM3210B (ARM Cortex-M3 STM32F10X)
*/

#include <stm32f10x.h>
u8 digi[10][8]={
 {1, 1, 1, 1, 1, 1, 0, 0},
 {0, 1, 1, 0, 0, 0, 0, 1},
 {1, 1, 0, 1, 1, 0, 1, 1},
 {1, 1, 1, 1, 0, 0, 1, 1},
 {0, 1, 1, 0, 0, 1, 1, 1},
 {1, 0, 1, 1, 0, 1, 1, 1},
 {0, 0, 1, 1, 1, 1, 1, 1},
 {1, 1, 1, 0, 0, 0, 0, 1},
 {1, 1, 1, 1, 1, 1, 1, 1},
 {1, 1, 1, 0, 0, 1, 1, 1},
};

void SEG(int i, int seg)
{
 GPIOD->ODR |= GPIO_Pin_13;
 GPIOD->ODR |= GPIO_Pin_12;
 GPIOD->ODR |= GPIO_Pin_11;
 GPIOD->ODR |= GPIO_Pin_1;
 
 switch(seg)
 {
 case 1:
  GPIOD->ODR &= ~GPIO_Pin_13;
  break;
 case 2:
  GPIOD->ODR &= ~GPIO_Pin_12;
  break;
 case 3:
  GPIOD->ODR &= ~GPIO_Pin_11;
  break;
 case 4:
  GPIOD->ODR &= ~GPIO_Pin_1;
  break;
 }
 GPIOB->ODR |= (GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
 GPIOD->ODR |= (GPIO_Pin_10|GPIO_Pin_8);
 GPIOB->ODR &= ~((digi[i][7]<<15)|(digi[i][6]<<13)|(digi[i][5]<<10)|(digi[i][4]<<11)|(digi[i][3]<<12)|(digi[i][2]<<14));
 GPIOD->ODR &= ~((digi[i][1]<<8)|(digi[i][0]<<10));
}
int main()
{
 u32  i,j;
 
 GPIO_InitTypeDef GPIO_InitStructure;
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD, ENABLE);
 
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13;
 GPIO_Init(GPIOD, &GPIO_InitStructure);
 
 GPIOB->ODR |=(GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
 GPIOD->ODR |=(GPIO_Pin_8|GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13);
 SEG(0, 3);
 while(1)
 {  
  
  for(i=0;i<10000;i++)
  {
   for(j=0;j<500;j++) {
   SEG(i/10/10/10%10, 1);
   for(vu32 t=0;t<1000;t++);
   SEG(i/10/10%10, 2);
   for(vu32 t=0;t<1000;t++);
   SEG(i/10%10, 3);
   for(vu32 t=0;t<1000;t++);
   SEG(i%10, 4);
   for(vu32 t=0;t<1000;t++);
   }
  }
 }
}