嵌入式驱动程序(5-3)点灯大师③之TM1650

作为一个嵌入式工程师,“点灯”是必备技能,哈哈哈(手动斜眼笑),除了普通IO口可以控制led灯亮灭之外,还有很多驱动ic,只需要2或3根IO线就可以控制几十盏灯。所以会出一系列“点灯”文章。励志成为一个“点灯”大师。

点灯大师③之TM1650

1. 资料

TM1650.pdf提取码:gik3

2. 基本知识点

  • 两线接口(CLK,DIO)

3. 函数功能

/
//从TM1650读取一个字节
unsigned char TM1650_ReadOneByte(TM1650_CONFIG_t tm)
{unsigned char i;unsigned char data=0;//DAT设置成输入tm.DAT_SET_INPUT();    _Delay_(1);//拉高时钟信号tm.CLK_IO_HIGH();    _Delay_(1); for(i = 0;i<8;i++){   data <<= 1;//拉低时钟,下降沿读取信号tm.CLK_IO_LOW();_Delay_(1);if(tm.DAT_STA()){//高电平data++;}              _Delay_(1);tm.CLK_IO_HIGH();_Delay_(1);}_Delay_(1);_Delay_(1);_Delay_(1);_Delay_(1);return data;
}/
//向TM1650写入一个字节
void TM1650_WriteOneByte(TM1650_CONFIG_t tm, unsigned char dat)
{unsigned char i;//DAT设置成输出tm.DAT_SET_OUTPUT(); _Delay_(1);//拉低时钟信号tm.CLK_IO_LOW();_Delay_(1);for(i=0; i < 8; i++){       if(dat & 0x80)tm.DAT_IO_HIGH();elsetm.DAT_IO_LOW();_Delay_(1);tm.CLK_IO_HIGH();_Delay_(1);      tm.CLK_IO_LOW();_Delay_(1);dat <<= 1;}       _Delay_(1);_Delay_(1);
}/
//开始信号
void TM1650_Start(TM1650_CONFIG_t tm)
{//DAT设置成输出tm.DAT_SET_OUTPUT();//数据脚高电平tm.DAT_IO_HIGH();_Delay_(1);//时钟脚高电平tm.CLK_IO_HIGH();_Delay_(1);//时钟脚为高电平时,数据脚拉低表示IIC启动tm.DAT_IO_LOW();_Delay_(1);//时钟脚低电平    tm.CLK_IO_LOW();_Delay_(1);
}/
//结束信号
void TM1650_Stop(TM1650_CONFIG_t tm)
{//DAT设置成输出tm.DAT_SET_OUTPUT();//时钟脚低电平tm.CLK_IO_LOW();_Delay_(1);//数据脚低电平tm.DAT_IO_LOW();_Delay_(1);//时钟脚高电平tm.CLK_IO_HIGH();_Delay_(1);//时钟脚为高电平时,数据脚拉高表示IIC停止tm.DAT_IO_HIGH();_Delay_(1);//时钟脚低电平tm.CLK_IO_LOW();_Delay_(1);
}/
//等待应答
void TM1650_WaitAck(TM1650_CONFIG_t tm)
{unsigned char temp = 0;//DAT设置成输入tm.DAT_SET_INPUT();  //等待应答do{temp++;}while(temp<200 && tm.DAT_STA());  //时钟脚高电平tm.CLK_IO_HIGH();_Delay_(1);_Delay_(1);//时钟脚低电平 tm.CLK_IO_LOW();_Delay_(1);_Delay_(1);
}/
//应答信号
void TM650_Ack(TM1650_CONFIG_t tm)
{//数据脚设置成输出模式tm.DAT_SET_OUTPUT();//时钟脚低电平tm.CLK_IO_LOW();_Delay_(1);    //数据脚低电平tm.DAT_IO_LOW();_Delay_(1);//时钟脚高电平tm.CLK_IO_HIGH();_Delay_(1);//时钟脚低电平tm.CLK_IO_LOW();_Delay_(1);
}/
//向TM1650写入命令
void TM1650_WriteCommand(TM1650_CONFIG_t tm, unsigned char comm)
{       //开始信号TM1650_Start(tm);//写指令TM1650_WriteOneByte(tm,0x48);//等待应答TM1650_WaitAck(tm);//写指令TM1650_WriteOneByte(tm,comm);//等待应答TM1650_WaitAck(tm);//结束信号TM1650_Stop(tm);
}/
//向TM1650写入显示
void TM1650_Display(TM1650_CONFIG_t tm, unsigned char* data)
{   unsigned char i=0;for(i=0;i<4;i++){  //开始信号TM1650_Start(tm);//写地址TM1650_WriteOneByte(tm,0x68+2*i);//等待应答TM1650_WaitAck(tm);//写数据TM1650_WriteOneByte(tm,*(data+i));//等待应答TM1650_WaitAck(tm);        //结束信号TM1650_Stop(tm);      }
}/
//向TM1650读键值
unsigned char TM1650_KeyScan(TM1650_CONFIG_t tm)
{unsigned char data =0 ;//开始信号TM1650_Start(tm);//写指令TM1650_WriteOneByte(tm,0x49);//等待应答TM1650_WaitAck(tm);//读键值data = TM1650_ReadOneByte(tm);TM650_Ack(tm);//结束信号TM1650_Stop(tm);return data;
}/
//TM1650轮询处理
void TM1650_process(void)
{unsigned char i;//设置8级亮度,8段显示TM1650_WriteCommand(tm1650, PULSE_08_8|B3_8S_4G|B0_DISP_ON);//全亮for(i=0;i<4;i++)drv_tm1650_buf[i] = 0xff;//全灭for(i=0;i<4;i++)drv_tm1650_buf[i] = 0x00;TM1650_Display(tm1650, drv_tm1650_buf);//读取键值key_tm1650_value = TM1650_KeyScan(tm1650);
}void TM1650_init(void)
{   }

4. 说明

  • 代码仅供参考。

5. 代码下载

TM1650代码提取码:vjnq

我的个人博客网址:一个点的频率 希望大家关注一下,谢谢!!!

嵌入式驱动程序(5-3)点灯大师③之TM1650相关推荐

  1. 嵌入式驱动程序(5-5)点灯大师⑤之TM1668

    嵌入式驱动程序(5-5)点灯大师⑤之TM1668 作为一个嵌入式工程师,"点灯"是必备技能,哈哈哈(手动斜眼笑),除了普通IO口可以控制led灯亮灭之外,还有很多驱动ic,只需要2 ...

  2. 如何快速成为点灯大师?

    大家好,我是良许. 随着疫情的平稳,最近全国各地都陆续放开了.但很不幸,我的几个号主朋友不小心中招了,成了「阳过」. 良许在此提醒各位朋友,放开不等于躺平,该做的防护一个都不能少.虽然现在病毒没有刚爆 ...

  3. 吃白菜一样用micropython玩esp32(二)—— 点灯大师

    基础点灯 按上一节一般新建好文件夹选好串口后,输入下面的代码 import time #引入时间模块,才可以用延时函数 from machine import Pin #引入引脚模块,才可以控制esp ...

  4. 嵌入式驱动程序之信号量

    如果要实现驱动程序,在同一时间只能被一个应用程序打开.也可以用信号量. 信号量 信号量(semaphore)是用于保护临界区的一种常用方法,只有得到信号量的进程才能执行临界区代码. 当获取不到信号量时 ...

  5. 炫酷 RGB 之.NET nanoFramework 点灯大师

    前面介绍了 .NET nanoFramework 入门,本文继续以微雪的 ESP32-S2-Pico 为例介绍 .NET nanoFramework 的开发:控制 ESP32 板载 RGB 灯 和 外 ...

  6. 驱动开发(四)——点灯大师

    文章目录 前言 项目需求 问题 如何根据实际需要查看手册 查看原理图 查看参考手册 时钟信息 GPIO信息 查看数据手册 终于可以开始Coding了 头文件 单板相关代码 驱动源码 测试代码 Make ...

  7. 51单片机基础入门(2)点灯大师:单个LED点亮、多个LED点亮、流水灯(附程序代码、解析)

    点亮LED 一.LED基本概念 二.LED工作参数 三.LED原理图分析 四.实践编程 一.LED基本概念 什么是LED LED(light-emitting diode): 发光二极管 是一种常用的 ...

  8. 一个学机械的中年人半年时间入门物联网嵌入式的历程

    2021年因为工作的缘故涉及到物联网,但是刚开始跟我没有什么关系,我是做结构的,也就是外壳,被称为非核心的部分.当我的外壳冷冰冰的躺在那里等着"核心"入住的过程中.那帮操控核心的同 ...

  9. 嵌入式系统开发-学习路线

    嵌入式系统开发 课程链接 随着嵌入式设备的普及,嵌入式应用的需求量也随之增大,本课程将重点培养基于linux系统下的嵌入式应用开发,包括5个阶段,其中课程涵盖了linux系统下的多进程.多线程嵌入式开 ...

最新文章

  1. C语言中的union
  2. 在 Shell 脚本中执行语法检查调试模式
  3. 如何创建一份springboot的docker镜像
  4. 【原】Redis事务管理
  5. 【Python AsciiArt】利用命令行打印出字符图案
  6. oracle调用MySQL函数,Oracle的INSTR函数MySQL实现
  7. 关于Keil中,变量函数跨文件引用报错问题
  8. 伪元素::selection -- CSS ::selection 伪元素,定义用户鼠标已选择内容的样式
  9. win10系统HP打印机驱动程序无法使用
  10. 习题合集-数据结构导论
  11. 内网DNS重要使用作用
  12. 类比 -高速缓存Cache/内存/磁盘读写速度类比
  13. 凉凉!Tumblr 或被 300 万贱卖
  14. matlab锥圆球体_怎么用matlab绘制球缺与圆锥的组合体
  15. python聊天机器人_用 Python 实现聊天机器人
  16. vue Elementui 引入第三方icon(阿里矢量库)
  17. java 字符串掐头去尾_Java 8 Stream 简单介绍
  18. 计算机视觉中的多视图几何<Part0—基础知识:射影几何、变换和估计>(1)
  19. 7个秘诀,带你由数据分析师成长为数据科学家
  20. 许奔创新社-第28问:创新符合用进废退原则吗?

热门文章

  1. android5自动刷,nexus5怎么刷Android5.0 nexus5刷Android5.0教程
  2. 使用TPFanCtrl2 控制 Thinkpad P15v Gen1的风扇噪音
  3. Python整数类型
  4. 卸载WPS后,安装OFFICE2013问题
  5. 安装金山WPS2013造成的HTML5 file.type值异常
  6. mysql怎么判断是否断号_怎么判断孩子是否患上多动症?
  7. verycd电驴免铜光盘下载,verycd资源获取器
  8. i5 10400f参数 i5 10400f可以超频吗
  9. i5 12600k核显相当于什么显卡
  10. D触发器竞赛4人抢答电路