一:TM1652介绍
二:以下是FPS122 驱动程序 MINI C
#include "extern.h"
UART_Clock => 8000000; //UART时钟,选择1M、2M、4M、8M,其他值默认1M,若使用其他值请咨询FAE
FPPA_Duty => _SYS(INC.FPPA_NUM); // Single FPPA = 1, Mult FPPA = 2 or 4/8/...
Baud_Rate => 19200; //波特率
UART_Out BIT PB.1; //发送端口
/***********************************
* 对应TM1652共阴数码管显示的数字 0~9
* 0 0x77
* 1 0x14
* 2 0x6E
* 3 0x3E
* 4 0x1D
* 5 0x3B
* 6 0x7B
* 7 0x16
* 8 0x7F
* 9 0x3F
* NULL 0x00
***********************************/
BYTE Buffer_Tab[11] = {0x77, 0x14, 0x6E, 0x3E, 0x1D, 0x3B, 0x7B, 0x16, 0x7F, 0x3F};
UART_Delay => ( (UART_Clock / FPPA_Duty) + (Baud_Rate/2) ) / Baud_Rate;
// + (Baud_Rate/2) : to round up or down
Test_V0 => UART_Clock / 1000 * 995;
Test_V1 => UART_Delay * Baud_Rate * FPPA_Duty;
Test_V2 => UART_Clock / 1000 * 1005;
#if (Test_V1 < Test_V0) || (Test_V1 > Test_V2)
.echo %Test_V0 <= %Test_V1 <= %Test_V2
.error Baud_Rate do not match to System Clock
#endif
BYTE cnt_1_buff;
byte SYS_CLKMD;
byte CLKMD_BK;
void Clock_Adjust(void)//时钟调整
{
CLKMD_BK = 0x34;//8M
CLKMD = CLKMD_BK;//将系统时钟修改为设定的UART时钟
nop;//等待
}
//发送程序
void UART_Send (void)
{
BYTE cnt;
BYTE cnt_1; //发送数据 1的个数计数
BYTE UART_Data_Out;
UART_Data_Out = A;
// Start Bit
set0 UART_Out; // 1
// .Delay UART_Delay - 10;
cnt = 8; // 2 ~ 3
cnt_1 = 0;
.Delay 3; // 4 ~ 6
do
{ // Data Bit * 8
.Delay UART_Delay - 10; //延时52us
sr UART_Data_Out; // 7
if (CF)
{
nop; // 10
cnt_1++; //对发送的8位数据中1的位数进行计数 用来奇偶校验
UART_Out = 1; // 1
}
else
{
UART_Out = 0; // 1
.delay 2; // 2 ~ 3
}
} while (--cnt); // 4 ~ 6
.Delay UART_Delay - 5; //延时52us
cnt_1_buff = 0;
cnt_1_buff = (cnt_1 & 0x01); //奇偶校验 当cnt_1_buff & 上1时 为1 则为奇数 否者为偶数
if(cnt_1_buff == 1) //奇数
{
set0 UART_Out; // 0
}
else //偶数
{
set1 UART_Out; // 1
}
.Delay UART_Delay - 2; //延时52us
// Stop Bit
set1 UART_Out; // 1
.Delay 2 * UART_Delay - 2;
}
void UART_HandShake (BYTE SendData) //数据发送
{
Clock_Adjust(); //将系统时钟修改为设定的UART时钟
//发送多组byte
A = SendData;
UART_Send();
.delay 416; //延时52us
CLKMD = SYS_CLKMD; //数据发送结束后,切回原来的系统时钟
nop;//等待
}
void UART_INIT(void)
{
SYS_CLKMD = CLKMD; //初始记录系统时钟,在UART通讯后方便切回系统时钟
$ UART_Out High,Out;//设置UART的通讯脚(发送信号)
.delay 100; //等待
UART_HandShake(0x08);
UART_HandShake(0x7F);
UART_HandShake(0x7F);
UART_HandShake(0x7F);
UART_HandShake(0x7F);
UART_HandShake(0x41);
.delay 1000000; //等待 1s
UART_HandShake(0x18);
UART_HandShake(0xFE); //4F
.delay 1000000; //等待 1s
}
TM1652显示数字格式有两种方式这里只介绍 一种 这种比较常用 为:
UART_HandShake(0x08); 显示地址命令 DATA0
UART_HandShake(0x7F); DATA1 显示第一个数字
UART_HandShake(0x7F); DATA2 显示第二个数字
UART_HandShake(0x7F); DATA3 显示第三个数字
UART_HandShake(0x7F); DATA4 显示第四个数字
UART_HandShake(0x41); DATA5 //这个数据控制图标显示
/**********第DATA5******************
*0x01 第一个 小数点亮
*0x40 第二个 小数点亮
*0x04 电池图标
*0x08 斤图标
*0x10 lb图标
*0x20 kg图标文章来源:https://www.toymoban.com/news/detail-807969.html
************************************/文章来源地址https://www.toymoban.com/news/detail-807969.html
三:完成以上工作TM1652就可以点亮了,亲测有效 !!!
到了这里,关于应广单片机FPS122 驱动TM1652 LED屏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!