STM32 TM1640芯片驱动程序

2019-11-09来源: eefocus关键字:STM32  TM1640芯片  驱动程序

以下为.h文件:

#ifndef __TM1640_H__

#define __TM1640_H__

#include "stm32f10x.h"  

 

#define   ADDR_START1640        0XC0  

  

#define     DSP1640_DIS     0  

#define     DSP1640_ENB     1  

  

/* 

控制显示 

0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f 分别对应 

1/16,  2/16,  4/16,  10/16, 11/16, 12/16, 13/16, 14/16    

 

设置数据,0x40,0x44分别对应地址自动加一和固定地址模式      

*/  

  

#define SET_DATA_ORDER     0X40  //数据命令设置 地址自动加1  

#define        SET_DISPLAY         0X8F  //显示命令控制  脉冲宽度14/16  

#define SET_DSP1640_DIS          0x80  //显示关控制  

   

  

#define     VT_DLY1640           150//80//10//2000  

#define     VT_DLYNOP            10//80//10  

 

 

 

      

 

#define SCLK_GPIO_PORT      GPIOB              

#define SCLK_GPIO_CLK    RCC_APB2Periph_GPIOB

#define SCLK_GPIO_PIN    GPIO_Pin_7        

 

#define DIN_GPIO_PORT       GPIOB              

#define DIN_GPIO_CLK    RCC_APB2Periph_GPIOB

#define DIN_GPIO_PIN    GPIO_Pin_6

 

 

#define TM1640SLK_LOW      GPIO_ResetBits( SCLK_GPIO_PORT, SCLK_GPIO_PIN )

#define TM1640SLK_HING     GPIO_SetBits( SCLK_GPIO_PORT, SCLK_GPIO_PIN )

#define TM1640DAT_LOW      GPIO_ResetBits( DIN_GPIO_PORT, DIN_GPIO_PIN )

#define TM1640DAT_HING     GPIO_SetBits( DIN_GPIO_PORT, DIN_GPIO_PIN )

 

 

void TM1640_GPIO_Config(void);

void Nop1640(u16 T_Dly);

void TM1640Start(void);

void TM1640Stop(void);

void TM1640WriteByte(u8 date);

void TM1640_Init(u8 InValue);

void TM1640_SendData(u8 Addr1640,u8 *a,u8 DataLong);

 

#endif

 


以下为.c文件:


#include "stm32f10x.h"

#include "stm32f10x_rcc.h"

#include "stm32f10x_gpio.h"

 

#include "TM1640.h"

 

/********  TM1640 GPIO 配置 *************************/

void TM1640_GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd( SCLK_GPIO_CLK | DIN_GPIO_CLK, ENABLE);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Pin = SCLK_GPIO_PIN;

GPIO_Init(SCLK_GPIO_PORT, &GPIO_InitStructure);   // 初始化 SCLK 引脚

GPIO_InitStructure.GPIO_Pin = DIN_GPIO_PIN;

GPIO_Init(DIN_GPIO_PORT, &GPIO_InitStructure);      // 初始化 DIN   引脚

 

    // 引脚初始状态为高,便于产生下降沿

GPIO_SetBits(SCLK_GPIO_PORT, SCLK_GPIO_PIN);  

GPIO_SetBits(DIN_GPIO_PORT, DIN_GPIO_PIN);

}

  

//*************************************  

// 函数名称:_Nopt  

// 函数功能:延时函数  

// 入口参数:延时时间  

// 出口参数:无  

//***************************************/  

void Nop1640(u16 T_Dly)  

{     

        while(T_Dly--);           

        return ;  

}  

//****************************************  

// 函数名称:TM1640Start  

// 函数功能:TM1640起始信号  

// 入口参数:无  

// 出口参数:无  

//***************************************/  

void TM1640Start(void)  

{   

        TM1640DAT_HING;  

        Nop1640(VT_DLYNOP) ;  

        TM1640SLK_HING;  

        Nop1640(VT_DLY1640) ;  

        TM1640DAT_LOW;  

        Nop1640(VT_DLY1640) ;  

        TM1640SLK_LOW;  

        Nop1640(VT_DLY1640) ;  

}  

//*************************************  

// 函数名称:TM1640Stop  

// 函数功能:TM1640结束信号  

// 入口参数:无  

// 出口参数:无  

//***************************************/  

void TM1640Stop(void)  

{  

        TM1640DAT_LOW;  

        Nop1640(VT_DLYNOP) ;  

        TM1640SLK_HING;  

        Nop1640(VT_DLY1640) ;  

        TM1640DAT_HING;  

        Nop1640(VT_DLY1640) ;  

        TM1640SLK_LOW;  

        Nop1640(VT_DLY1640) ;  

          

}  

//*************************************  

// 函数名称:TM1640WriteByte  

// 函数功能:TM1640写一字节数据  

// 入口参数:要写的数据  

// 出口参数:无  

//***************************************/  

void TM1640WriteByte(u8 date)  

{  

        u8 i;  

        u8 Tmp;  

          

        Tmp=date;  

          

        TM1640DAT_LOW;  

        Nop1640(VT_DLYNOP) ;  

        TM1640SLK_LOW;  

          

        for(i=0;i<8;i++)  

        {  

                TM1640SLK_LOW;  

                Nop1640(VT_DLYNOP) ;  

                if(Tmp & 0x01)  

                {  

                        TM1640DAT_HING;  

                        Nop1640(VT_DLY1640) ;  

                }  

                else  

                {  

                        TM1640DAT_LOW;  

                        Nop1640(VT_DLY1640) ;  

                }  

                TM1640SLK_HING;  

                Tmp = Tmp>>1;  

        }  

          

        TM1640SLK_LOW;  

        Nop1640(VT_DLYNOP) ;  

        TM1640DAT_LOW;  

}  

//*************************************  

// 函数名称:TM1640_Init  

// 函数功能:TM1640设备初始化  

// 入口参数:0 1 代表 显示关 显示开  

// 出口参数:无  

//***************************************/  

void TM1640_Init(u8 InValue)    

{  

        TM1640DAT_HING;  

        Nop1640(VT_DLYNOP) ;                 

        TM1640SLK_HING;  

          

        if(InValue == DSP1640_DIS) //显示关  

        {  

                TM1640Start();//数据写模式设置  

                TM1640WriteByte(SET_DSP1640_DIS);//显示关控制   

                TM1640Stop();         

        }  

        else  

        {  

                TM1640Start();//数据写模式设置  

                TM1640WriteByte(SET_DATA_ORDER);//数据命令设置 地址自动加1  

                TM1640Stop();  

                  

                TM1640Start(); //显示亮度设置  

                TM1640WriteByte(SET_DISPLAY); //显示命令控制  脉冲宽度14/16       

                TM1640Stop();  

        }  

}  

//*************************************  

// 函数名称:TM1640_SendData  

// 函数功能:发送显示缓存  

// 入口参数:1640要写数据的起始地址  

//           显示数据缓存的起始地址 数据长度  

// 出口参数:无  

//***************************************/  

void TM1640_SendData(u8 Addr1640,u8 *a,u8 DataLong)  

{  

        u8 i;    

          

        TM1640Start();  

        TM1640WriteByte(Addr1640); //设置起始地址  

          

        for(i=0;i

        {  

                TM1640WriteByte(a[i]);   

        }  

          

[1] [2]
关键字:STM32  TM1640芯片  驱动程序 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479523.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:关于STM32驱动点阵的问题整理及科研思维小酌
下一篇:STM32 74HC595驱动程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

stm32正点原子学习笔记(29)独立看门狗实验
; IWDG_ReloadCounter(); 9     IWDG_Enable();10     11 }iwdg.h1 #ifndef __IWDG_H2 #define __IWDG_H3 4 #include "stm32f10x.h"5 6 void iwdg_init(uint8_t IWDG_Prescaler,uint16_t Reload);7 8 9 #endifmain.c 1 #include "exti.h" 2 #include "
发表于 2019-11-11
stm32正点原子学习笔记(29)独立看门狗实验
stm32独立看门狗时间设置
//prer:分频数:0~7(只有低 3 位有效!) rlr:自动重装载值,0~0XFFF.//分频因子=4*2^prer.但最大值只能是 256!//rlr:重装载寄存器值:低 11 位有效//时间计算(大概):Tout=((4*2^prer)*rlr)/32 (ms).void IWDG_Init(u8 prer,u16 rlr){IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //取消寄存器写保护IWDG_SetPrescaler(prer); //设置 IWDG 分频系数IWDG_SetReload(rlr); //设置 IWDG 装载值IWDG_ReloadCounter
发表于 2019-11-11
STM32的IWDG(独立看门狗)详细用法
章参考资料:《STM32F4XX 中文参考手册》IWDG 章节。1、IWDG简介:  STM32 有两个看门狗,一个是独立看门狗另外一个是窗口看门狗,独立看门狗号称宠物狗,窗口看门狗号称警犬,本章我们主要分析独立看门狗的功能框图和它的应用。独立看门狗用通俗一点的话来解释就是一个 12 位的递减计数器,当计数器的值从某个值一直减到 0 的时候,系统就会产生一个复位信号,即 IWDG_RESET。如果在计数没减到 0 之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。看门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍能工作。  2 、IWDG功能框图剖析①独立看门狗时钟    独立看门狗的时钟
发表于 2019-11-11
STM32的IWDG(独立看门狗)详细用法
STM32独立看门狗:你看狗都独立了
参考GIT:STM32--软看门口--不需要任何硬件支持--它在IC里面已经集成了。(算是独立看门狗的误解吧)一个倒计数,减减减减减减,减到0就会触发一个系统复位信号也就是单片机重启了。喂狗呢?就是隔一段时间就给这个倒计数重现装载数据,保持它不要到0.头文件:#ifndef _WDG_H_#define _WDG_H_ void watch_dog_init(void);void feed_dog(void); #endif 实现:#include "stm32f10x_iwdg.h"#include "wdg.h"void watch_dog_init
发表于 2019-11-11
stm32f0 hal adc配置
Clock Prescaler:和系统时钟同步并且二分频Sampling Time :采样时间,采样时间是你通过寄存器告诉STM32采样模拟量的时间,设置越长越精确
发表于 2019-11-11
stm32f0 hal adc配置
STM32 MFRC522 IC读卡 程序及原理图
#include "stm32f10x.h" ///////////////////////////////////////////////////////////////////////MF522命令字/////////////////////////////////////////////////////////////////////#define PCD_IDLE              0x00               //取消当前命令#define
发表于 2019-11-11
STM32 MFRC522 IC读卡 程序及原理图
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved