STM8控制4位LED数码管显示数字


用4位LED显示数字

#define STB_H         GPIOC->ODR |= (uint8_t)(GPIO_PIN_2)
#define STB_L         GPIOC->ODR &= (uint8_t)(~GPIO_PIN_2)

#define DATA_H         GPIOE->ODR |=(uint8_t)( GPIO_PIN_5)
#define DATA_L         GPIOE->ODR &= (uint8_t)(~GPIO_PIN_5)

#define CLK_H         GPIOC->ODR |=(uint8_t) (GPIO_PIN_1)
#define CLK_L         GPIOC->ODR &= (uint8_t)(~GPIO_PIN_1)

//数码管端口定义
void Init_GPIO(void)
{ 
  //串行接口(CLK,STB,DIN,DOUT)
  GPIO_Init(GPIOE, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST); //DIN
  GPIO_Init(GPIOC, GPIO_PIN_1, GPIO_MODE_OUT_PP_HIGH_FAST); //CLK
  GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST); //STB
}

void tm1616write(u8 wr_date)
{
    u8 i;
    STB_L;
    Delay(10); 
    for(i=0;i<8;i++)
    {
        CLK_L;
        Delay(10);
        if(wr_date&0x01!=0)
        {
                DATA_H;
        }
        else
        {
                DATA_L;
        }
        Delay(10);
        CLK_H;
        Delay(10);
        wr_date=wr_date>>1;
    }        
}

void tm1616show(u8 data1,u8 data2,u8 data3,u8 data4)
{
    u8 j;
    STB_H;
    CLK_H;
    DATA_H;
    tm1616write(0x00);                          
    STB_H;                                                       
    tm1616write(0x44);                          
    STB_H;                                                        
    for(j=0;j<4;j++)                            
    {
        tm1616write(0xC0);                       
        tm1616write(data1);                 
        STB_H;                                                
        tm1616write(0xC2);                        
        tm1616write(data2);                
        STB_H;                                               
        tm1616write(0xC4);                       
        tm1616write(data3);                 
        STB_H;                                                
        tm1616write(0xC6);                        
        tm1616write(data4);                 
        STB_H;                                                
    }
    tm1616write(0x8C);                                
    STB_H;                                                        
}

void main(void)
{
	tm1616show(LEDArray[1],LEDArray[1],LEDArray[1],LEDArray[0x0c]);  //显示111C
}

                                                LED数码管原理

(1)产品封装图

STM8控制4位LED数码管显示数字_第1张图片

STM8控制4位LED数码管显示数字_第2张图片

(2)电路原理图

STM8控制4位LED数码管显示数字_第3张图片

 

你可能感兴趣的:(嵌入式)