|
本人参考官方例程,用CH32V103驱动TM1637数码管成功,代码很简单,望各位大佬勿喷。
TM1637.h:
- #ifndef __TM1637_H__
- #define __TM1637_H__
- #include "ch32v10x_conf.h"
- #define TM1637_DIO_H GPIO_SetBits(GPIOA,GPIO_Pin_1) //配置SDA接口高电平
- #define TM1637_DIO_L GPIO_ResetBits(GPIOA,GPIO_Pin_1) //配置SDA接口低电平
- #define TM1637_CLK_H GPIO_SetBits(GPIOA,GPIO_Pin_2) //配置SCL接口高电平
- #define TM1637_CLK_L GPIO_ResetBits(GPIOA,GPIO_Pin_2) //配置SCL接口低电平
- #define TM1637_SDA_READ() GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) //读SDA口线状态
- void TM1637_Init(void); //初始化TM1637引脚
- void TM1637_start(void); // IIC开始
- void TM1637_ack(void); // IIC应答
- void TM1637_stop(void); // IIC停止
- 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, /*0*/
- 0x06, /*1*/
- 0x5B, /*2*/
- 0x4F, /*3*/
- 0x66, /*4*/
- 0x6D, /*5*/
- 0x7D, /*6*/
- 0x07, /*7*/
- 0x7F, /*8*/
- 0x6F, /*9*/
- 0x77, /*10 A*/
- 0x7C, /*11 b*/
- 0x58, /*12 c*/
- 0x5E, /*13 d*/
- 0x79, /*14 E*/
- 0x71, /*15 F*/
- 0x76, /*16 H*/
- 0x38, /*17 L*/
- 0x54, /*18 n*/
- 0x73, /*19 P*/
- 0x3E, /*20 U*/
- };
- void TM1637_Init(void)//初始化TM1637引脚
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;//使用PA1和PA2作为模拟IIC引脚,PA1对应SDA,PA2对应SCL
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //推挽输出模式
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- //IIC_Idle_State();
- }
- void TM1637_start(void) // IIC开始
- {
- TM1637_CLK_H;
- TM1637_DIO_H;
- Delay_Us(2);
- TM1637_DIO_L;
- }
- void TM1637_ack(void) // IIC应答
- {
- 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) // IIC停止
- {
- 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);
- }
- // TM1637_ack();
- }
- 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();
- }
复制代码 完整的项目工程下载网址:
https://wwar.lanzout.com/iimuZ0v27oyj
密码:cwbn |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|