基于STM32的常用数码管芯片TM1637驱动

发布者:心连心意最新更新时间:2018-08-14 来源: eefocus关键字:STM32  数码管芯片  TM1637驱动 手机看文章 扫描二维码
随时随地手机看文章

IIC协议这里就不多说了;

使用模拟IIC口 定义B14 B15


#define AnalonSDA_Pin GPIO_PIN_12
#define AnalonSDA_GPIO_Port GPIOB
#define AnalonSCL_Pin GPIO_PIN_13
#define AnalonSCL_GPIO_Port GPIOB

IO配置为输出


  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, AnalonSDA_Pin|AnalonSCL_Pin|BIG_SDA_Pin|BIG_SCL_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pins : PBPin PBPin */
  GPIO_InitStruct.Pin = AnalonSDA_Pin|AnalonSCL_Pin|BIG_SDA_Pin|BIG_SCL_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

驱动程序如下

void TM1637_start(void)
{
 SCLK_H;
 Delay_us(1);
 DIO_H;
 Delay_us(1);
 DIO_L;
 Delay_us(1);
 SCLK_L;
 Delay_us(1);
}
void TM1637_stop(void)
{
 SCLK_L;
 Delay_us(1);
 DIO_L;
 Delay_us(1);
 SCLK_H;
 Delay_us(1);
 DIO_H;
 Delay_us(1);
}

void TM1637_ack(void)
{
 SCLK_L;
 DIO_H;    
 while(HAL_GPIO_ReadPin(GPIOB, BIG_SDA_Pin));
 SCLK_H;     
 DIO_IN;
  
}

void TM1637_Write(unsigned char DATA)   //写数据函数
{
 unsigned char i;   
 for(i=0;i<8;i++)        
  {
   SCLK_L;     
   if(DATA & 0x01)DIO_H;  //SDA
   else DIO_L;
   DATA >>= 1;      
   SCLK_H;
  }  
 TM1637_ack();
}

unsigned char READ_KEY(void)
{
 unsigned char i,temp=0;
 TM1637_start();
 TM1637_Write(READ_COMMAND);
 DIO_IN;
 for(i=0;i<8;i++)
  {
   SCLK_L;
   Delay_us(1);
   temp<<=1;
   SCLK_H;
   if(HAL_GPIO_ReadPin(GPIOB, BIG_SDA_Pin))temp+=1;
   Delay_us(1);
  }
 TM1637_ack();
 TM1637_stop();
 return temp;
}
void display_fix(unsigned char add,unsigned char DispData)  //指定地址写入数据
{
 TM1637_start();          //start signal sent to TM1637 from MCU
 TM1637_Write(ADD_FIX);//
 TM1637_stop();           //
 TM1637_start();          //
 TM1637_Write(ADDR_COMMAND|add);//
 TM1637_Write(DispData);//
 TM1637_stop();            //
}
void display_char(unsigned char add,unsigned char dis_char)
{
 unsigned char point_flag,char_code;
 point_flag=dis_char&0x80;
 dis_char&=0x7f;
 if(dis_char<16)
  char_code=tab[dis_char];
 else switch(dis_char)
  {
   case 'L':char_code=0x38;break;
   case 'H':char_code=0x76;break;
   case 'U':char_code=0x3e;break;
   case 'N':char_code=0x37;break;
   case 'P':char_code=0x73;break;
   case 'J':char_code=0x0e;break;
   case 'O':char_code=0x3f;break;
   case 'o':char_code=0x5c;break;
   case 'n':char_code=0x54;break;
   case 'Y':char_code=0x6e;break;
   case ' ':char_code=0;break;
   default:char_code=dis_char;break;
  }
 display_fix(add,char_code|point_flag);
}
void init_TM1637(void)
{
 unsigned char i;
 TM1637_start();
 TM1637_Write(ADD_AUTO);
 TM1637_stop(); 
 TM1637_start();
 TM1637_Write(ADDR_COMMAND);
 for(i=0;i<6;i++)
 TM1637_Write(0);
 TM1637_stop(); 
 TM1637_start();
 TM1637_Write(BRIGHT);
 TM1637_stop();
}

void Delay_us(unsigned  int i)
{
  for(;i>0;i--);
}

最后在任务中调用

void StartDefaultTask(void const * argument)
{
 unsigned char i,j; 
 init_TM1637();
  for(;;)
  {
   for(i=0;i<16;i++)
  {
   for(j=0;j<4;j++)
   {
    display_char(j,((j+i)%16)|0x80);
   }
   HAL_Delay(500);
  }  
  HAL_Delay(1);
  }
}


关键字:STM32  数码管芯片  TM1637驱动 引用地址:基于STM32的常用数码管芯片TM1637驱动

上一篇:冷启动与热启动在STM32基于RTOS编程中需要注意的地方
下一篇:STM32启动文件的理解

推荐阅读最新更新时间:2024-03-16 16:10

STM32中断函数名
和普通的ARm裸板开发不同。使用stm32库函数编程时,中断函数名是固定死的。 具体函数名可以在启动文件startup_stm32fxxx_xd.s的Vector Table Mapped(中断函数向量表)中查看。 启动文件 startup_stm32fxxx_xd.s里面都是汇编代码 ; Vector Table Mapped to Address 0 at Reset AREA RESET, DATA, READONLY EXPORT __Vectors EXPORT __Vectors_End EXPORT __Vectors_Size __V
[单片机]
STM32单片机可以用来做什么?能实现哪些功能?
已从事单片机开发十几年,刚开始接触单片机时,感觉挺有意思。 可以用自己的思维写程序,控制硬件去实现一些智能化的操作。 刚点亮第一个LED,就开始幻想以后能做任何自己想要的产品,那感觉多爽! 但是你会发现学完51单片机、或者STM32单片机以后,还是啥也做不出来。 不是你比较倒霉,每个工程师都是这样过来的。 就像你想写出一篇好作文,光练字和学成语是没用的,你得有思维,有经历。 做产品也是一样,单片机就是工具,思维才是灵魂。 思维怎么来? 答案肯定是多做项目。 所以,想成为一个具备独立开发的工程师,学习单片机只是你成长过程的 冰山一角 。 大部分的时间,应该用来做项目,从简单到复杂。 项目数量决定成长速度,项目质量决定成长高度。
[单片机]
STM32 模拟IIC主设备 非IIC静默模式
//为啥用软件模拟IIC而不用硬件IIC? 除了ST的IIC模块本身问题,还因为硬件IIC移植不方便,在不同的MCU中无法通用。 /****************************Copyright(c)********************************************* **--------------文件信息-------------------------------------------------------------- ** 文 件 名: ** 创 建 人: 温世坚(wenshijian4@163.com) ** 创建日期: 20
[单片机]
STM32单片机学习(6) PWM输出实验
/* * * 软件功能: PWM输出实验 * */ #include stm32f10x.h #include delay.h void RCC_Configuration(void); void GPIO_Configuration(void); void NVIC_Configuration(void); void TIM3_Configuration(u16 arr,u16 psc); /* 函数: int main(void) 功能: main主函数 参数: 无 返回: 无 / int main(void) { u8 led_direction=1; u16 led_brightness=0; RCC_Conf
[单片机]
STM32】ADC的基本原理、寄存器
STM32F1xx官方资料: 《STM32中文参考手册V10》-第11章 模拟/数字转换(ADC) ADC的基本介绍 ADC的基本定义 Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。 典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。 ADC的主要特征 12位逐次逼近型的模拟数字转换器; 最多带3个ADC控制器,可以单独使用,也可以使用双重模式提高采样率; 最多支持23个通道,可最多测量21个外部和2个内部信号源; 支持单次和连续转换模式; 转换结束,注入转换结束,和发生模拟看门狗事件时产生中断;
[单片机]
【<font color='red'>STM32</font>】ADC的基本原理、寄存器
STM32的USB键盘及鼠标例程
STM32的USB键盘及鼠标例程通过网络可以搜到很,但是在同一个设备中集成键盘及鼠标的例程却比较少见(我通过GOOGLE只搜到圈圈的基于51+D12的版本)。以下为我参考圈圈的例程做出来的集成键盘及鼠标的STM32的程序。   程序上除了usb_desc.c及usb_endp.c外,其它部份同单一的键盘鼠标一样。下面着重说一下usb_desc.c及usb_endp.c的不同之处。   单一键盘鼠标跟集成键盘鼠标这区别主要是报告描述符不同。单一键盘鼠标的报告描述符因只有一组报告输入/输出,故没有报告ID,而集成的有两组报告(键盘及鼠标),所以每一组报告都有一个报告ID加以区别。   另外就是在usb_endp.c中对端点的数据
[单片机]
STM32的JTAG、SWD和串口下载的问题
最近有一个项目用到STM32,为了使PCB布线方便一些所以改了一些引脚,占用了JTAG接口的PA15和PB3,所以要禁用一下JTAG,下载采用SWD模式。这样在实际操作中做出一些总结(方法网上都有、这里只是总结记录一下): 1:GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE); 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP) 2:GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDis
[单片机]
单片机驱动LED数码管,按键TM1638芯片学习心得
TM1638是带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。主要应用于冰箱、空调 、家庭影院等产品的高段位显示屏驱动。 因为步进电机实验需要用到按键,但家有婴儿,没用松香铬铁之类的(技术早就还给老师了,也没有条件 ),只好在网上找,找到一个由TM1638做成的成品,感觉做工还不错,就买了一个,但其带的程序一时没看懂,花了些时间进行学习,觉得好精妙,就想分享一下。 绝不是给别人打广告,这程序确实我理解了很久。 附件是它完整的程序。 调用实现程序主要是显示与按键值获取。 1.显示: 为什么是0xc0|add呢? 因为芯片说明有:高位都是11, 就
[单片机]
单片机<font color='red'>驱动</font>LED<font color='red'>数码管</font>,按键TM1638<font color='red'>芯片</font>学习心得
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved