历史上的今天
返回首页

历史上的今天

今天是:2024年11月09日(星期六)

正在发生

2019年11月09日 | STM32 TM1640芯片驱动程序

2019-11-09 来源:eefocus

以下为.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]);   

        }  

          

        TM1640Stop();   

}


推荐阅读

史海拾趣

Elpac公司的发展小趣事

Elpac公司深知人才是企业发展的核心动力。因此,公司高度重视人才培养和团队建设。公司建立了完善的人才培训体系,为员工提供多样化的培训和发展机会。同时,公司还鼓励员工积极参与各种创新活动和竞赛,激发员工的创新精神和创造力。这种积极向上的企业文化吸引了大量优秀人才加入Elpac公司,为公司的持续发展提供了有力保障。

Amperite Co公司的发展小趣事

在电子产品同质化日益严重的今天,Elpac公司始终坚持品质至上的原则。公司严格把控产品质量,从原材料采购到生产流程再到售后服务,每一个环节都力求做到最好。正是这种对品质的执着追求,让Elpac公司的产品在市场上脱颖而出。许多客户在体验过Elpac公司的产品后,都对其赞不绝口,成为了公司的忠实用户。

CR Magnetics公司的发展小趣事

为了更好地服务全球客户,CR Magnetics积极在全球范围内拓展业务。公司在东亚、欧洲和美洲等地设立了制造和销售办事处,以便更快速地响应市场需求和提供更好的服务。同时,公司还与国际知名厂商建立了合作关系,共同推动电子行业的发展。

CYAN公司的发展小趣事

为了进一步拓展业务领域,CYAN在2015年收购了Polestar的量产车改装部门,获得了其在汽车电子领域的技术积累和市场资源。这次收购使CYAN能够更深入地了解汽车电子系统的需求,同时也为其带来了新的增长点。

Aten International公司的发展小趣事

在电子设备的日益增多的背景下,用户对于高效、便捷的设备管理需求愈发强烈。Aten International凭借其对连接技术的深入理解,成功研发出KVM切换器,该产品能够实现对多台计算机的控制,大大提高了工作效率。随着技术的不断进步,Aten International的KVM切换器不断更新迭代,从最初的简单切换功能,发展到现在的智能管理、远程操控等高级功能,成为了电子行业的一大亮点。

EWC Controls公司的发展小趣事

EWC Controls公司非常重视人才培养和团队建设。公司建立了一套完善的人才培养体系,通过内部培训、外部引进等方式吸引和培养了一批高素质的人才。同时,公司还注重团队合作和文化建设,鼓励员工之间的交流和合作,营造了积极向上的工作氛围。这种人才培养和团队建设的策略为公司的发展提供了有力的保障。

问答坊 | AI 解惑

仪器仪表类题目分析.doc

仪器仪表类题目分析.doc…

查看全部问答>

无线网卡资料

无线网卡资料    无线部分自己做有很大难度 了解一下吧…

查看全部问答>

网卡驱动安装后,网络连接里怎么没有

网卡驱动我用的DDK的例程,isdnwan,编译好后进行安装,可以看到驱动和网卡都安装了,但是在网络连接里怎么没有啊,不懂,求助…

查看全部问答>

急!!!zinc的图形界面可以用VxSim仿真出来吗??

我创建了一个下载型工程,就用zinc中Hello的实例做的,在下载的时候老是出现这个错误: Errors while downloading G:/tornado2.2/target/proj/Project1/SIMNTgnu/Project1.out: _LinkMain__14ZafApplication _Control__14ZafApplicationUi ___1 ...…

查看全部问答>

菜鸟有个关于ADS建立工程的问题,高手指点啊!

以前使用ADS1.2时都是在原有的工程上添加自己的程序,这次自己建了一个工程,发现ARM竟然不会动,程序和以前的程序一样。可能是建工程的时候设置的问题导致不能运行。 哪个好心的大哥能否建立一个工程,每设置一步剪一个图片下来,并加以说明!急 ...…

查看全部问答>

嵌入式人才的发展方向,给从事嵌入式开发的同学指路(转)

     嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家 ...…

查看全部问答>

请问电话线接法??

请问二蕊的电话线如何接?线序怎样?四蕊的电话线如何接?线序怎样? 电话线头分哪些,最好有图片, 谢谢。 …

查看全部问答>

发几个用CORDIC快速求三角函数的定点程序

最近在做FFT,发几个用到的三角函数计算程序 #define DSP32_Q(x) ((int) ((x)*(((unsigned) (1 << (20)))))) const int atanLUT[20] = { DSP32_Q(0.78539816340), DSP32_Q(0.46364760900), DSP32_Q(0.24497866313), DSP32_Q(0. ...…

查看全部问答>

对功放比较熟的朋友看下这个图··

能解析一下这个图吗,画圈部分的管子的作用我不是很明白···问了很多人了都无法完美解释…

查看全部问答>

TMS570LS0432 原理图库

TMS570LS0432 原理图库 环境:99SE …

查看全部问答>