【洋桃一号板】STM32F103CBT6标准库函数驱动TM1640点亮数码管

这篇具有很好参考价值的文章主要介绍了【洋桃一号板】STM32F103CBT6标准库函数驱动TM1640点亮数码管。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、今天介绍如何使用STM32F103CBT6驱动TM1640点亮数码管,硬件用的洋桃开发板,点亮后效果如下,六个数码管依次显示0.1.2.3.4.5.6.7
tm1640,【STM32】STM32F1标准库开发,stm32,单片机,嵌入式硬件
硬件原理图如下,只用到了单片机的两个IO口即可实现上图的效果,该开发板上用的是PA11和PA12两个IO口,用来模拟IIC通信,其中PA11接SCLK,PA12接DIN。另外可以看到TM1640的VDD接的是5V,规格书里面也是说需要接5V电压,但实际我试过了,接3.3V也是可以驱动的。tm1640,【STM32】STM32F1标准库开发,stm32,单片机,嵌入式硬件

二、TM1640介绍
TM1640通信方式其实就是常用的的IIC通信,这点可以在规格书里面看到相关介绍
tm1640,【STM32】STM32F1标准库开发,stm32,单片机,嵌入式硬件
tm1640,【STM32】STM32F1标准库开发,stm32,单片机,嵌入式硬件

tm1640,【STM32】STM32F1标准库开发,stm32,单片机,嵌入式硬件

三、写程序
1、先将重要的一些参数进行宏定义
a.固定地址模式上面分析过了,是0x44,后面进行配置会用到
b.设置亮度,上面也分析过了
c.通过上面的数据通信的过程我们知道需要用到SCLK和DIN两个信号,我们在硬件上接的是PA11和PA12两个脚,所以用TM1640_DIN_HTM1640_DIN_HTM1640_SCLK_LTM1640_SCLK_H来表示DIN和SCLK为高低电平。

#include "TM1640.h"
#include "delay.h"
#define DEL  1   //宏定义 通信速率(默认为1,如不能通信可加大数值)
//地址模式的设置
//#define TM1640MEDO_ADD  0x40   //宏定义	自动加一模式
#define TM1640MEDO_ADD  0x44   //宏定义 固定地址模式(推荐)

//显示亮度的设置
//#define TM1640MEDO_DISPLAY  0x88   //宏定义 亮度  最小
//#define TM1640MEDO_DISPLAY  0x89   //宏定义 亮度
//#define TM1640MEDO_DISPLAY  0x8a   //宏定义 亮度
//#define TM1640MEDO_DISPLAY  0x8b   //宏定义 亮度
#define TM1640MEDO_DISPLAY  0x8c   //宏定义 亮度(推荐)
//#define TM1640MEDO_DISPLAY  0x8d   //宏定义 亮度
//#define TM1640MEDO_DISPLAY  0x8f   //宏定义 亮度 最大
#define TM1640MEDO_DISPLAY_OFF  0x80   //宏定义 亮度 关

#define TM1640_DIN_H    GPIO_WriteBit(TM1640_GPIOPORT,TM1640_DIN,(BitAction)(1))
#define TM1640_DIN_L    GPIO_WriteBit(TM1640_GPIOPORT,TM1640_DIN,(BitAction)(0))

#define TM1640_SCLK_H 	GPIO_WriteBit(TM1640_GPIOPORT,TM1640_SCLK,(BitAction)(1))
#define TM1640_SCLK_L 	GPIO_WriteBit(TM1640_GPIOPORT,TM1640_SCLK,(BitAction)(0))

2、通信的开启和结束代码
tm1640,【STM32】STM32F1标准库开发,stm32,单片机,嵌入式硬件

void TM1640_start()
{ 
	//通信时序 启始
	TM1640_DIN_H; //DIN输出高电平1	
	TM1640_SCLK_H; //SCLK输出高电平1	
	delay_us(DEL);//延时一段时间
	TM1640_DIN_L; //DIN输出低电平0	
	delay_us(DEL);//延时一段时间
	TM1640_SCLK_L; //SCLK输出低电平0	
	delay_us(DEL);//延时一端时间
}
void TM1640_stop()
{ //通信时序 结束
	TM1640_DIN_L; //DIN输出低电平0	
	TM1640_SCLK_L; //SCLK输出低电平0	
	delay_us(DEL);//延时一段时间
	TM1640_SCLK_H; //SCLK输出高电平1	
	delay_us(DEL);
	TM1640_DIN_H; //DIN输出高电平1	
	delay_us(DEL);
}

3、底层函数,信号传输,写8位数据

void TM1640_write(u8 date)
	{	//写数据(低层)
		u8 i;
		u8 aa;
		aa=date;
		TM1640_DIN_L; //DIN输出0	
		TM1640_SCLK_L; //SCLK输出0	
		for(i=0;i<8;i++)
		{
			TM1640_SCLK_L; //SCLK输出0		
			delay_us(DEL);

			if(aa&0x01)
			{
				TM1640_DIN_H; //DIN输出1
				delay_us(DEL);
			}
			else
			{
				TM1640_DIN_L; //DIN输出0
				delay_us(DEL);
			}
				TM1640_SCLK_H; //SCLK输出1
				delay_us(DEL);
				aa=aa>>1;//右移一位
		 }
			TM1640_DIN_L; //DIN输出0
			TM1640_SCLK_L; //SCLK输出0
	}

安装上面的代码传输二进制10110001的时序图如下,左边为高位,右边为低位。所以实际是从低位开始传输数据。
tm1640,【STM32】STM32F1标准库开发,stm32,单片机,嵌入式硬件
4、TM1640驱动函数
a、GPIO初始化、配置固定地址,设置亮度

void TM1640_Init(void)
	{ //TM1640接口初始化
		GPIO_InitTypeDef  GPIO_InitStructure; 	
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);       
		GPIO_InitStructure.GPIO_Pin = TM1640_DIN | TM1640_SCLK; //选择端口号(0~15或all)                        
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式       
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)    
		GPIO_Init(TM1640_GPIOPORT, &GPIO_InitStructure);

		GPIO_WriteBit(TM1640_GPIOPORT,TM1640_DIN,(BitAction)(1)); //接口输出高电平1	
		GPIO_WriteBit(TM1640_GPIOPORT,TM1640_SCLK,(BitAction)(1)); //接口输出高电平1	
		
		TM1640_start();
		TM1640_write(TM1640MEDO_ADD); //设置数据,0x40,0x44分别对应地址自动加一和固定地址模式
		TM1640_stop();
		TM1640_start();
		TM1640_write(TM1640MEDO_DISPLAY); //设置亮度
			//控制显示,开显示,0x88,  0x89,  0x8a,  0x8b,  0x8c,  0x8d,  0x8e,  0x8f分别对应脉冲宽度为:
			//------------------1/16,  2/16,  4/16,  10/16, 11/16, 12/16, 13/16, 14/16	 //0x80关显示
		TM1640_stop();					
}

b、TM1638显示函数
tm1640,【STM32】STM32F1标准库开发,stm32,单片机,嵌入式硬件

void TM1640_display(u8 address,u8 date)
	{ //固定地址模式的显示输出
 	const u8 buff[21]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x00};//数字0~9及0~9加点显示段码表
    //---------------   0    1    2    3    4    5    6    7    8    9    0.   1.   2.   3.   4.   5.   6.   7.   8.   9.   无   
   TM1640_start();
   TM1640_write(0xC0+address);//传显示数据对应的地址
   TM1640_write(buff[date]);//传1BYTE显示数据
   TM1640_stop();
}

5、主函数
有了上面的铺垫,主函数就很简单了,只需要初始化TM1640,然后调用显示函数即可文章来源地址https://www.toymoban.com/news/detail-589314.html

int main ()
{
	TM1640_Init(); //TM1640初始化
	while(1)
		{
			TM1640_display(0,0);	
			TM1640_display(1,1);
			TM1640_display(2,2); 
			TM1640_display(3,3);
			TM1640_display(4,4);	
			TM1640_display(5,5);
			TM1640_display(6,6);
			TM1640_display(7,7);
		}
}

到了这里,关于【洋桃一号板】STM32F103CBT6标准库函数驱动TM1640点亮数码管的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F103 KEIL 标准库直接添加DSP库

    近期由于比赛需要,想要在STM32上移植DSP库进行FFT变换,找了很多资料都是利用CUBEMX进行导入的方法,本人使用的是标准库,对HAL库并不熟悉,所以考虑到移植的方便采用直接在项目文件中移植DSP库的方法,可以使用标准库编程,亲测有效 blog.csdnimg.cn/291099e0402f46439160e2cf9b92f

    2024年02月16日
    浏览(33)
  • STM32F103标准外设库—— 新建工程与库函数(四)

     个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755@qq.com 🦉个人WeChat:Vir2021GKBS 🐼 本文由妄北y原创,首发CSDN 🎊🎊🎊 🐨座右铭:大多数人想要改造这个世界,但却罕有人想改造自己。 专栏导

    2024年01月19日
    浏览(35)
  • STM32F103标准库函数驱动max30102心率血氧模块

    实际接线图, 1.VIN 3v-5v都可以 2.SDA SCL 是两根依据IIC传输的线(具体看你想用哪两个IO口) 代码里面iicStart.c有解释 3.GND接地 4.其余的端口,我没接,最后是可以接受到数据的。 (想更详细了解模块的朋友,可以看该模块手册)手册放下面了 ----------------------------------------------

    2023年04月15日
    浏览(37)
  • 【单片机】STM32单片机的各个定时器的定时中断程序,标准库,STM32F103

    高级定时器和普通定时器的区别(https://zhuanlan.zhihu.com/p/557896041): TIM1是高级定时器,使用的时钟总线是RCC_APB2Periph_TIM1,和普通定时器不一样。 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用

    2024年02月07日
    浏览(49)
  • STM32F103ZET6【标准库函数开发】------04五个串口的详细配置

    正点原子战舰开发板 STM32F103ZET6有5个串口,查看引脚图可以找到对应的IO口分别如下 串口 USART1 USART2 USART3 UART4 UART5 输入/输出方式 USARTx_TX PA9 PA2 PB10 PC10 PC12 复用推挽输出 USARTx_RX PA10 PA3 PB11 PC11 PD2 浮空输入 USART1挂在APB2下 USART2,USART3,USART4,USART5挂在APB1下 串口调试助手设置波特率

    2024年02月03日
    浏览(105)
  • STM32F103基于标准库+I2C SSD1306仿数码管RTC时钟显示

    ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取。 🍁对于文中所提供的相关资源链接将作不定期更换。 📺显示效果: 🌿工程基于正点原子标准库3.5版本RTC例程作为模板。 🌿使用IIC SSD1306 OLED 双色屏幕软件IIC驱动显示。 ⛳时钟说明

    2023年04月22日
    浏览(36)
  • 【STM32】使用RTE ,从 0 开始创建一个 (keil) ARM MDK工程(纯keil,标准库,以STM32F103C8T6为例)

    学习相关的基础知识请阅读本专栏其他文章,一定有你想要的。 https://blog.csdn.net/weixin_43764974/category_11021363.html 本文软硬件: STM32F103C8T6 ARM MDK 5.38 ARM complier 6 ST-Link v2 StdPeriph Drivers(标准库) 文章开始前,我想再次说一下: keil 、 μvision 、 ARM MDK 这几个名词(尽管前面的额文

    2024年02月16日
    浏览(31)
  • 大彩串口屏与STM32G070CBT6通讯调试

    本文主要讲解如何将大彩提供的DEMO移植到自己项目的工程文件中。首先通过STM32CubeMX生成基于STM32G070CBT6的Hall库程序;然后将大彩的程序移植到生成的Hall库程序中。 对串口屏基本功能不作过多介绍。主要讲解一下指令格式和硬件连接。 对串口屏基本功能不作过多介绍。主要

    2024年02月16日
    浏览(33)
  • stm32f103VET6和stm32f103c8t6有什么区别?

    我来终结下这个问题。 这两款单片机我都用过,其中无际单片机特训营其中一款wifi报警主机项目就是用了stm32f103c8t6。  stm32f103VET6和stm32f103c8t6都是STMicroelectronics公司推出基于ARM Cortex-M3内核的单片机。 它们在硬件规格和性能上存在一些差异,下面我详细讲解下它们的差异之处

    2024年02月15日
    浏览(43)
  • STM32F103RC

    ·多参考手册 ·协议USART、I2C、SPI 嵌入式系统跟ARM处理器 嵌入式系统: 专用计算机系统,以应用为中心,软硬件可裁减 组成: 硬件:(MPU)微处理器、存储器、I/O接口、输入输出设备。 软件:Embedded RTOS、应用软件。 最小系统:微控制器(MCU)、微处理器(MPU)、电源模块、

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包