用CH32V103驱动TM1637四位数码管模块
[复制链接]
本帖最后由 新新科技 于 2023-5-10 19:20 编辑
本人参考官方例程,用CH32V103驱动TM1637数码管成功,代码很简单,望各位大佬勿喷。
TM1637.h:
- #ifndef __TM1637_H__
- #define __TM1637_H__
-
- #include "ch32v10x_conf.h"
-
- #define TM1637_DIO_H GPIO_SetBits(GPIOA,GPIO_Pin_1)
- #define TM1637_DIO_L GPIO_ResetBits(GPIOA,GPIO_Pin_1)
-
- #define TM1637_CLK_H GPIO_SetBits(GPIOA,GPIO_Pin_2)
- #define TM1637_CLK_L GPIO_ResetBits(GPIOA,GPIO_Pin_2)
-
- #define TM1637_SDA_READ() GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)
-
- void TM1637_Init(void);
- void TM1637_start(void);
- void TM1637_ack(void);
- void TM1637_stop(void);
- void TM1637_Write(unsigned char DATA);
- void TM1637_SetBRI(unsigned char i);
- void TM1637_display(unsigned char a, unsigned char b,
- unsigned char c, unsigned char d);
-
- #endif
TM1637.c:
- #include "TM1637.h"
- unsigned char tab[] =
- {
- 0x3F,
- 0x06,
- 0x5B,
- 0x4F,
- 0x66,
- 0x6D,
- 0x7D,
- 0x07,
- 0x7F,
- 0x6F,
- 0x77,
- 0x7C,
- 0x58,
- 0x5E,
- 0x79,
- 0x71,
- 0x76,
- 0x38,
- 0x54,
- 0x73,
- 0x3E,
- };
-
-
- void TM1637_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- }
-
- void TM1637_start(void)
- {
- TM1637_CLK_H;
- TM1637_DIO_H;
- Delay_Us(2);
- TM1637_DIO_L;
- }
-
- void TM1637_ack(void)
- {
- u8 i=0;
- TM1637_CLK_L;
- Delay_Us(5);
- TM1637_CLK_H;
- while (TM1637_SDA_READ() == 1 && (i < 250))
- i++;
- TM1637_CLK_H;
- Delay_Us(2);
- TM1637_CLK_L;
- }
-
- void TM1637_stop(void)
- {
- TM1637_CLK_L;
- Delay_Us(2);
- TM1637_DIO_L;
- Delay_Us(2);
- TM1637_CLK_H;
- Delay_Us(2);
- TM1637_DIO_H;
- Delay_Us(2);
- }
-
- void TM1637_Write(unsigned char DATA)
- {
- unsigned char i;
- for (i = 0; i < 8; i++)
- {
- TM1637_CLK_L;
- if (DATA & 0x01)
- TM1637_DIO_H;
- else
- TM1637_DIO_L;
- Delay_Us(2);
- DATA = DATA >> 1;
- TM1637_CLK_H;
- Delay_Us(2);
- }
-
- }
-
-
- void TM1637_display(unsigned char a, unsigned char b, unsigned char c, unsigned char d)
- {
- TM1637_start();
- TM1637_Write(0x40);
- TM1637_ack();
- TM1637_stop();
- TM1637_start();
- TM1637_Write(0xc0);
- TM1637_ack();
-
- TM1637_Write(tab[a]);
- TM1637_ack();
- TM1637_Write(tab[b]);
- TM1637_ack();
- TM1637_Write(tab[c]);
- TM1637_ack();
- TM1637_Write(tab[d]);
- TM1637_ack();
- TM1637_stop();
- }
-
- void TM1637_SetBRI(unsigned char i)
- {
- TM1637_start();
- TM1637_Write(0x87 + i);
- TM1637_ack();
- TM1637_stop();
- }
|