TM1637显示补充

问题:

上篇文章写了TM1637显示数字,本次补充小数点和字符串输入自由显示程序,最终的API。

解决:

1.修改.c文件

static uint8_t number[] = 
{
    //0    1    2    3    4    5    6    7   8    9   
    0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,
	//0.   1.   2.   3.   4.   5.   6.   7.  8.   9.
	0xFD,0x61,0xDB,0xF3,0x67,0xB7,0xBF,0xE1,0xFF,0xF7,
	//NULL
	0x0
};

2.显示程序

/**
  * 函数功能: 数码管显示.
  * 输入参数: 字符串
  * 返 回 值: 无
  * 说    明:例如"1.234"
  */
void TM1637_Display(char data[6])
{
    /* 字符串处理 */
	char data_lenth = strlen((const char *)data);
	uint8_t point_flag = 0;  //该元素为'.'标志
    char tube[4] = {0};      //编码序号:number[tube[x]]
	char number_count = 3;   //数码管位序0-3
	
	for(uint8_t i = data_lenth;i > 0;i--)
    {
        if(data[i - 1] == '.')  //该字符为'.'
		    point_flag = 1;
		else
		{
			switch(data[i - 1])  //获取该字符编码序号
			{
			    case '0': tube[number_count] = 0; break;
			    case '1': tube[number_count] = 1; break;
				case '2': tube[number_count] = 2; break;
				case '3': tube[number_count] = 3; break;
				case '4': tube[number_count] = 4; break;
				case '5': tube[number_count] = 5; break;
				case '6': tube[number_count] = 6; break;
				case '7': tube[number_count] = 7; break;
				case '8': tube[number_count] = 8; break;
				case '9': tube[number_count] = 9; break;
				default : break;
			}
		    if(point_flag == 1)  //该元素右侧数据为'.'
		    {
			    point_flag = 0;
				tube[number_count] += 10;  //小数点
			}
		    number_count--;  //-1:0位空XXXX,0:1位空_XXX,1:2位空_ _XX,2:3位空_ _ _X。
		}
    }	
	switch(number_count)  //不显示的位
	{
		case 0: tube[0] = 20; break;
		case 1: tube[0] = 20;tube[1] = 20; break;
		case 2: tube[0] = 20;tube[1] = 20;tube[2] = 20; break;
		default : break;
	}
	
    /* 数码管显示 */
    TM1637_Start();
    TM1637_Send_Command(0x40);  //数据控制(0x44--固定地址,0x40--地址自增),固定地址需另写程序
	TM1637_Stop();
	TM1637_Start();
	TM1637_Send_Command(0xC0);    //地址控制(0xC0--C3:数码管1-4)
	TM1637_Send_Data(number[tube[0]]);  //数码管1
	TM1637_Send_Data(number[tube[1]]);  //数码管2
	TM1637_Send_Data(number[tube[2]]);  //数码管3
	TM1637_Send_Data(number[tube[3]]);  //数码管4

	TM1637_Stop();
	TM1637_Start();
	TM1637_Send_Command(0x8C);  //显示控制(0x88/89/8B/8C/8D/8E/8F亮度从低到高,0x87关闭显示)
	TM1637_Stop();
}

总结:

  至此,该数码管软硬件设计结束,有了5个好看的数码管。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值