店家给的是51或者arduino的,花了点时间移植一下;

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驱动相关推荐

  1. 基于STM32的常用数码管芯片TM1650驱动

    店家给的是51或者arduino的,花了点时间移植一下: IIC协议这里就不多说了: 使用模拟IIC口 定义B12 B13 #define AnalonSDA_Pin GPIO_PIN_12 #def ...

  2. 基于STM32的四位数码管显示编程

    1.四位数码管的简单介绍 因为在学校做项目的时候使用到了数码管显示,所以就编写了一个基于SMT32的数码管显示程序.通过看手册知道这个四位数码管采用TM1637 驱动电路.内部有集成MCU数字电路接口 ...

  3. 【PC工具】更新系统运行库一键安装,常用USB转串口芯片CP210x驱动,CH340G驱动安装有可能遇到的问题及解决办法...

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 最近发现一个不错的项目--VisualCppRedist AIO,一键安装各种系统运行 ...

  4. 【PC工具】常用USB转串口芯片CP210x驱动,CH340G驱动安装有可能遇到的问题及解决办法...

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 首先感谢cr4fun提供CP210x官方驱动下载地址: win8,win10的: ht ...

  5. 【PC工具】更新常用USB转串口芯片MAC驱动,CH340G驱动安装有可能遇到的问题及解决办法...

    最近有个朋友和我要USB转串口芯片的MAC驱动,不是很难找,参考上次cr4fun提供的地址很快能够搜索到,为了便于以后大家使用方便,再将驱动整理一下. CH340G(nodemcu v3使用的转换芯片 ...

  6. 基于STM32的电机--直流有刷电机H桥驱动的不同模式分析

    文章目录 直流电机驱动设计 1.电机驱动硬件配置 2.电机驱动电路分析 简单正向电路 最简单的电机正反转电路 H桥电路分析 受限单极模式 单极模式 双极模式 减速电机的重要参数 直流电机驱动设计 1. ...

  7. 基于STM32系列芯片的 IAP实现的探索

    基于STM32系列芯片的 IAP实现的探索 什么是IAP? 如何实现IAP? 第一步:学习官方源代码 第二步:了解STM32芯片基本硬件参数 第三步.搞清除STM32内置Flash 第四步. STM3 ...

  8. stm32 带通滤波器_带通滤波 - 基于STM32芯片和TFT-LCD的便携式心电图仪设计

    相关推荐 3月10日,纽约州州长安德鲁-库默(Andrew Cuomo)曾在上月宣布,纽约大都市圈的公共交通系... 发表于 2018-04-16 08:50 • 88次阅读 LCD驱动我们只需要写硬 ...

  9. 基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块+DHT11温湿度采集+MQ系列 烟雾及可燃气体+蜂鸣器+步进电机模拟窗帘+OLED液晶显示+

    ## **基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块(阿里云 或ONENET或局域网)+DHT11温湿度采集+MQ系列 烟雾及可燃气体+ ...

最新文章

  1. vue 实践技巧合集
  2. https的那些事儿
  3. (转)使用异步 I/O 大大提高应用程序的性能
  4. qt创建简单的单例模式
  5. xamarin和mysql_Xamarin.Android 使用 SQLiteOpenHelper 进行数据库操作
  6. 618物流压力怎么扛?
  7. 《数学之美》—矩阵运算和文本处理中的两个分类问题
  8. 去除标题_1688如何通过黄金标题引爆流量?
  9. 图书馆借阅系统java参考文献_基于java的图书馆管理系统
  10. Full RangeLimited Range
  11. 61-70作业关系符运算
  12. 常用邮箱的 IMAP/POP3/SMTP 设置
  13. 腾讯人力资源管理体系
  14. mysql: create routin表示的是什么?,关于mysql create routine 权限的一些说明
  15. Oracle打补丁步骤
  16. matlab lm计算方式,lm算法(lm算法原理介绍)
  17. MQ2烟雾传感器模块——stm32f103
  18. Python爬虫:逆向分析酷我音乐请求参数(支持SQ超品音质)
  19. 智能电视也进入消费者重视芯片的时代了
  20. Python mac运行pygame一片空白不显示内容-解决方案

热门文章

  1. 5G应用创新白皮书发布,畅谈5G十大应用领域
  2. 远程桌面连接是什么?如何开启远程桌面连接详细教程
  3. WEB应用容器详细介绍
  4. vue高德地图省市区,区域划分。district.search 一直报no_data
  5. 51定时中断系统控制LED点阵屏显示逐帧动画
  6. 网页导出pdf不完整_怎样将PDF文件中的图片提取出来并保存?
  7. 俞军老师解答职场话题
  8. 大学生实用「自学网站/学习资料」,老学长含泪分享!
  9. 动态修改logback日志级别
  10. Simsci.Pro_II.8.2_USB加密锁,运行稳定全功能版本\