以下为.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(); }
上一篇:关于STM32驱动点阵的问题整理及科研思维小酌
下一篇:STM32 74HC595驱动程序
推荐阅读
史海拾趣
随着国内市场的日益饱和,博林公司开始积极拓展海外市场。公司制定了详细的国际化战略,通过参加国际展览、建立海外销售渠道等方式,不断提升品牌知名度和影响力。同时,博林公司还积极寻求与国际知名企业的合作机会,通过技术合作和市场共享等方式,实现互利共赢。这些举措使得博林公司的市场份额不断扩大,国际竞争力日益增强。
致强科技深知员工是企业持续发展的关键。因此,公司自成立以来便注重企业文化的建设,积极营造和谐、关爱的工作氛围。公司管理层倡导“尊重人性”的理念,不仅为员工提供具有竞争力的薪酬福利,还通过EAP(员工协助计划)等方式关注员工的心理健康和生活需求。EAP项目的实施不仅帮助员工缓解了工作压力,还从多方面提升了员工的归属感和幸福感,为公司的长期发展奠定了坚实的人才基础。
面对电子行业的快速发展和市场需求的不断变化,致强科技始终保持敏锐的市场洞察力。公司积极寻求与上下游企业的跨界合作,共同推动产业升级和技术创新。通过与知名电子厂商、科研机构及高校等建立紧密的合作关系,致强科技不断引入新技术、新工艺和新材料,为产品的升级换代提供了有力支持。同时,公司还积极拓展新业务领域,如车联网、物联网等新兴领域,为公司的未来发展开辟了更广阔的空间。
冠西电子(COSMO)公司成立于1981年,起初便专注于光电元件产品的制造。公司创始人凭借对电子技术的深刻理解和市场需求的敏锐洞察,逐步将冠西电子打造成光电元件领域的专业制造商。通过不断的技术创新和产品质量提升,冠西电子逐渐在电子行业中崭露头角。
随着中国航空工业的快速发展,Avic公司不断加强在航空电子技术领域的研发和创新。公司成功研制出一系列先进的航空电子系统,这些系统不仅提高了飞机的性能和安全性,也为中国航空工业的国际竞争力奠定了坚实基础。Avic公司在航空电子领域的突破,不仅推动了国内航空工业的发展,也为国际航空市场带来了新的选择。
背景:随着全球经济一体化的加速推进,HCH Co公司意识到必须加快全球化步伐以拓展更广阔的市场空间。公司制定了详细的全球化战略,包括在海外设立研发中心、生产基地和销售网络等。
发展:通过全球化战略的实施,HCH Co公司成功进入了多个国际市场,并与当地的企业和机构建立了紧密的合作关系。公司的品牌影响力不断提升,产品销量也实现了快速增长。同时,全球化战略还为公司带来了更多的技术、人才和市场资源,为公司的长期发展奠定了坚实基础。
TI的DaVinci解决方案可以面向广阔的数字视频应用,这些应用中许多都是现在很热门的产品,包括个人媒体播放器、数码相机、数码相框、IP网络摄像机、视频婴儿监视器等等(如图1所示),所有这些应用都要求低功耗、便携式和高清视频。 TMS320DM355处理 ...… 查看全部问答∨ |
|
ppc2003 开发的程序能在windows Mobile 6下运行吗? 请问各位大侠,我用ppc2003开发的程序,现在需要给用户写运行环境,该如何写呢,我测试过可以在Windows 5.0 下运行,但是可以在Windows Mobile 6.0环境下运行吗,望各位大侠指点?… 查看全部问答∨ |
|
面临毕业,事情很多也很烦。很多东西都不知道怎么办。《就业协议书》、《报到证》(派遣证)到底有啥用。还有既然走上技术这条路,职称评定更是关注了。 现在在公司里我只是一个软件技术员,像助理工程师,工程师这样的,不知道什么时候才能获得。 ...… 查看全部问答∨ |