TM1640的驱动及代码

  驱动TM 1640 其实并不困难,我们只需注意1640通讯时的电平变化,及数据传输规律首先我们可以看到1640的数据手册,(完整代码点击文章末分享链接,自行查找)

注意数据的输入条件和结束条件,输入条件是CLK 为高电平时,DIN由低变高,我们以传统51单片机为例,写出TM1640的输入开始函数;

void TM1640_start ()
{

CLK = 0;            //CLK=0,DIN= 0增加代码可靠性
DIN = 1;
CLK = 1;
delay_ms(5);        //5毫秒延时
DIN = 0;
delay_ms (5);
CLK = 0;
delay_ms (5);

}
同样的结束条件是CLK 为高时DIN电平由低变高,写出它的结束函数;
void TM1640_stop ()
{

CLK = 0;             //CLK=0,DIN=0防止传输的最后以为数据于结束指令冲突
DIN = 0;
CLK = 1;
delay_ms (5);
DIN = 1;
delay_ms (5);

}
我们可以看见TM1640其实并不是真正意义上的总线通讯,它只是通过两个IO口的电平变化来实现控制;TM1640是将一个八位数据拆分为单个数据进行单个传输进行传输8次,完成一个数据的传输,注意传输时的电平变化;写出其数据传输函数;
void send_byte (uint num)
{
uint q;

for (q= 8;q>0;q--)
{CLK = 0;if (num&0x01){DIN = 1;delay_ms (5);}else {DIN = 0;delay_ms(5);}
CLK = 1;
num = num>>1;
}
delay_um (5);

}
对于传输函数我们还有很多种写法,就不在这里过多赘述了。
在此以下的代码都以自动加地址为例,TM1640默认地址自加模式,

因其默认为自加模式,所以可不写模式选择函数,但为了大家更好的理解,就写在下方;
可以从第一张图中发现,要TM1640正常显示数码管,数据传输是有顺序要求的,
1,设置数据(我们一般只用 自加模式0x40,固定地址模式0x44)
其函数为;

void model (uint k)
{

if (k)
{TM1640_start ();send_byte (0x40);//自动加一TM640_stop ();
}
else
{TM1640_start ();send_byte (0x44);//固定地址TM1640_stop ();

}

2,设置地址,地址有16位,分别对应16位数码管,从上图可以看见地址位从0xc0~0xcf;地址传输并不需要特定函数进行,可用 send_byte ( ) 进行,
例如;

TM1640_start();
send_byte (0xc0);

3,设置传输数据,有十六位,每个数据是相互连续的,中间不需要使用 stop()函数打断;要知道的是16位数码管是循环显示的,就像单片机数据的左移,右移一样

void wite_date () //地址自动加一模式
{

TM1640_start ();
send_byte (0xc0);            //输入首地址
send_byte (num_display[0]);  //输入个数码管的显示数据1~16;
send_byte (num_display[1]);
send_byte (num_display[2]);
send_byte (num_display[3]);
send_byte (num_display[4]);
send_byte (num_display[5]);
send_byte (num_display[6]);
send_byte (num_display[7]);
send_byte (num_display[8]);
send_byte (num_display[9]);
send_byte (num_display[10]);
send_byte (num_display[11]);
send_byte (num_display[12]);
send_byte (num_display[13]);
send_byte (num_display[14]);
send_byte (num_display[15]);
TM1640_stop ();

}
写这么长是为了后期便以更改每一数码管的数值,读者可以进行简练,

4,显示控制,其实就是数码管亮度调节,脉冲宽度越小亮度越高

void led_display (uint f)
{

start ();
send_byte (f);
stop ();

}

对于固定地址模式于地址自动加一模式大致相差不大,但要注意的是固定地址模式同时发生完地址和数据后要用 stop () 函数停止 ,star ()函数开始后在进行下一位地址和数据的传输。

对于TM1640就大致讲解到这里,如有疑问可在后方留言。

链接:https://pan.baidu.com/s/1qGtdUHqLakgTtnLlr6uKiw
提取码:1234

TM1640的驱动及代码相关推荐

  1. Windows过滤驱动 WFP代码基本流程的剖析 bypass前期准备

    今天实际看一下,WFP的Callout驱动的代码.先从DriverEntry开始: 1,在DriverEntry需要创建驱动对象和设备对象,         1.1  由于不是PNP设备,需要设置创建 ...

  2. thinkpad安装linux驱动程序,显卡驱动、代码 - 在ThinkPad上安装Ubuntu的全过程详解_Linux教程_Linux公社-Linux系统门户网站...

    显卡驱动 虽然Ubuntu装好后ATI的显卡已经可以正常工作了,但由于用的是xorg-driver-ati作为驱动,没有3D加速,让人十分不爽.源里的linux-restricted-modules里 ...

  3. Linux驱动(驱动程序开发、驱动框架代码编译和测试)

    目录 什么是驱动: 设备分类: 驱动认知: 字符设备驱动工作原理 字符设备.字符设备驱动与用户空间访问该设备的程序三者之间的关系 驱动程序开发步骤 基于驱动框架的代码开发 驱动模块代码编译和测试 加载 ...

  4. FPGA接口_N25Q128型号的spi flash驱动verilog代码编写

    # N25Q128型号的spi flash驱动verilog代码编写 提示:使用正点原子达芬奇pro做的小例子,由于教程中无flash的读写,因此撰写记录 文章目录 # N25Q128型号的spi f ...

  5. 西数加密linux,Symantec PGP Desktop pgpwded.sys内核驱动任意代码执行漏洞

    发布日期:2012-12-24 更新日期:2012-12-27 受影响系统: Symantec PGP Desktop 10.2.0 Build 2599 描述: ------------------ ...

  6. ai驱动数据安全治理_JupyterLab中的AI驱动的代码完成

    ai驱动数据安全治理 As a data scientist, you almost surely use a form of Jupyter Notebooks. Hopefully, you ha ...

  7. 关于51单片机驱动DS18B20代码的感想

    首先使用单总线驱动DS18B20有三个步骤 DS18B20 器件的初始化 ROM commond Function Command 这里我们经常使用的是初始化和功能命令字,对于第二项,是为了区分多个单 ...

  8. pwm驱动 pca9685 代码简析

    pwm驱动十分常见,这篇博文就以pca9685为例,简单分析一下pwm驱动的常用套路,本文注重重代码逻辑,轻寄存器hack,寄存器hack,请参考datasheet. 代码解析 源码路径drivers ...

  9. linux dma驱动,linux下DMA驱动测试代码

    DMA传输可以是内存到内存.内存到外设和外设到内存.这里的代码通过dma驱动实现了内存到内存的数据传输. /* Function description:When we call dmatest_re ...

  10. FPGA之HDMI驱动控制模块代码编写

            HDMI 驱动控制模块 hdmi_ctrl 是 HDMI 彩条显示的核心模块,功能是将 VGA 控制模块传入的行场同步信号.图像信息转换为 HDMI 能读取的差分信号,其内部实例化若干 ...

最新文章

  1. button按钮大小
  2. 科普:不要对移动机器人有误解
  3. Request对象的主要方法有哪些?
  4. 光盘在电脑上为什么放不出来_铁砂掌这么厉害,为什么上擂台用不出来
  5. cocos 修改层级_cocos creator 场景如何透明,多个canvas层级显示
  6. 数据湖 多维数据集_按汇总分组/多维数据集
  7. 安装python缺少dll_Microsoft.PythonTools.dll
  8. (转载)正则表达式30分钟入门教程
  9. 陈大惠老师:什么叫道德?
  10. 【C】循环淘汰 (用结构体完成; 头文件不要加malloc.h 或 alloc.h)
  11. visio用例图箭头怎么画_visio2010绘制用例图-带图例
  12. python项目:基于OpenCV的学生网课睡意检测系统
  13. DMA控制器 intel237
  14. 当租房成为一种生活方式
  15. 微信公众号开发,微信支付功能开发(网页JSAPI调用)
  16. 计算长方形的周长和面积(类和对象)
  17. -moz、-ms、-webkit, -o各什么意思
  18. 我的Java学习之路(第十九天)------ 数组的复制、反转、查找(线性查找、二分法)
  19. SQL Server 查询分析器使用(性能分析)
  20. html设定列的最小宽度,设置Grid Layout列最小宽度的方法

热门文章

  1. 103000大写加零吗_00支票大写金额该如何?
  2. java分布式开发流程,面试建议
  3. JavaCV调用摄像头
  4. 组播负载分担、静态组播路由和MBGP技术原理
  5. 【15章Java 8 新特性】最全Java 8新特性 详解
  6. java可以编辑 cad吗_MiniCAD 简单的java画图,能画圆、直线、矩形,还能移动,修改颜色等 Develop 238万源代码下载- www.pudn.com...
  7. 计算机地图制图符号制作的心得,计算机地图制图.docx
  8. xampp使用教程方法免费分享
  9. 51单片机模块化编程
  10. GD32F103基础教程—教程简介(一)