以前在单片机学习中,驱动数码管是直接将数码管连接单片机,在单片机上需要编写很复杂的程序,并且对数码管需要实时扫描。在实际项目开发中,一般使用数码管专用控制芯片来驱动数码管,提高开发效率。
TM1640是一种LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU数字接口、数据锁存器、LED驱动等电路。主要应用于电子产品LED显示屏驱动。采用SOP28封装形式。TM1640只是数码管驱动芯片的一种,还有很多其他的驱动芯片,具体芯片选择需要根据项目需求及预算来决定。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200420201404211.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4OTU4NzA0,size_16,color_FFFFFF,t_70)
可驱动16位数码管。 有共阴极与共阳极两种电路图,根据开发板上的数码管实际连接来决定使用哪个。 这两个引脚分别与单片机的两个GPIO相连。
8位数码管 这八个共阴极的LED灯相当于一个数码管,可以当成一个数码管来处理。
驱动代码如下:
main函数
#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"
#include "rtc.h"
#include "TM1640.h"
int main (void)
{
u8 c=0x01;
RCC_Configuration(); //系统时钟初始化
RTC_Config(); //RTC初始化
TM1640_Init(); //TM1640初始化
while(1)
{
if(RTC_Get()==0) //读出RTC时间
{
TM1640_display(0,rday/10); //天
TM1640_display(1,rday%10+10); //+10是为了显示后面的小数点
TM1640_display(2,rhour/10); //时
TM1640_display(3,rhour%10+10);
TM1640_display(4,rmin/10); //分
TM1640_display(5,rmin%10+10);
TM1640_display(6,rsec/10); //秒
TM1640_display(7,rsec%10);
TM1640_led(c); //与TM1640连接的8个LED全亮
c
GPIO_WriteBit(TM1640_GPIOPORT,TM1640_DIN,(BitAction)(0)); //接口输出0
GPIO_WriteBit(TM1640_GPIOPORT,TM1640_SCLK,(BitAction)(1)); //接口输出高电平1
delay_us(DE
|