TM1367驱动数吗管

1 TM1637驱动程序和模拟I2C配置是一样的输出模式配置成开漏输出模式,不然无法是数吗管正常显示。

2 在写程序时一定要细心,不要把移位写成了大于好或小于好,编译器是不会报错或者警告的。发送方式低位在前。

3 TM1637在第八个时钟的下降沿,会产生应答信号。

以下的tm1637程序,任何单片机都可以使用,只要把GPIO配置改一下就可以了。

#include "TM1637.H"

#include "Delay.h"

unsigned char smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

                  0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/***

    @brief TM1637³õʼ»¯

    @param ÎÞ

    @retval ÎÞ

*/

void TM1637_Init(void)

{

    gpio_init_type gpio_init_struct;

    crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);

    gpio_default_para_init(&gpio_init_struct);

    gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;

    gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN  ;

    gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;

    gpio_init_struct.gpio_pins = CLK_PIN|DIN_PIN ;

    gpio_init_struct.gpio_pull = GPIO_PULL_NONE;

    gpio_init(TM1637_GPIO, &gpio_init_struct);

}

/***

    @brief Star

    @param ÎÞ

    @retval ÎÞ

*/

void Star(void)

{

    gpio_bits_set(TM1637_GPIO, DIN_PIN );

    gpio_bits_set(TM1637_GPIO, CLK_PIN );

    delay_us(5);

    gpio_bits_reset(TM1637_GPIO, DIN_PIN );

    delay_us(5);

    gpio_bits_reset(TM1637_GPIO, CLK_PIN );

    delay_us(2);

}

/***

    @brief ·¢ËÍÒ»¸ö×Ö½ÚÊý¾Ý

    @param uint8_t data

    @retval ÎÞ

*/

void Send_Byte(uint8_t data)

{

    uint8_t i;

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

    {

       gpio_bits_reset(TM1637_GPIO, CLK_PIN );

       if(data&(0x01<<i))

       {

           gpio_bits_set(TM1637_GPIO, DIN_PIN );

       }

       else

       {

           gpio_bits_reset(TM1637_GPIO, DIN_PIN );

       }

       delay_us(4);

       gpio_bits_set(TM1637_GPIO, CLK_PIN );

       delay_us(4);

    }

}

/***

    @brief Ó¦´ðACK

    @param ÎÞ

    @retval ÎÞ

*/

void Ack(void)

{

    gpio_bits_reset(TM1637_GPIO, CLK_PIN );

    delay_us(4);

    while(gpio_input_data_bit_read(TM1637_GPIO, DIN_PIN));

    gpio_bits_set(TM1637_GPIO, CLK_PIN );

    delay_us(4);

}

/***

    @brief STOP

    @param ÎÞ

    @retval ÎÞ

*/

void Stop(void)

{

    gpio_bits_reset(TM1637_GPIO, CLK_PIN );

    gpio_bits_reset(TM1637_GPIO, DIN_PIN );

    delay_us(4);

    gpio_bits_set(TM1637_GPIO, CLK_PIN );

    delay_us(4);

    gpio_bits_reset(TM1637_GPIO, DIN_PIN );

    delay_us(4);

}

/***

    @brief ÊýÂë¹ÜÏÔʾ

    @param ÎÞ

    @retval ÎÞ

*/

void Show_Seg(uint16_t number)

{

    Star();

    Send_Byte(0x40);

    Ack();

    Stop();

    Star();

    Send_Byte(0xC0);

    Ack();

    Send_Byte(smgduan[number/1000]);

    Ack();

    Send_Byte(smgduan[number%1000/100]);

    Ack();

    Send_Byte(smgduan[number%1000%100/10]);

    Ack();

    Send_Byte(smgduan[number%10]);

    Ack();

    Stop();

    Star();

    Send_Byte(0x8f);

    Ack();

    Stop();

}

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值