TM1621是一个多功能的LCD驱动器,带有蜂鸣器驱动功能。通讯采用四线串行接口

TM1621的难点在于字节序和显存跟屏幕的映射关系上,下面是写寄存器的代码

void Delay_us(uint8_t us)
{ uint16_t i = 0,z = 0;
for(i = 0; i < us; i++)
{
for(z = 0; z < 50; z++);
}
} /**************************************************************************************
* FunctionName : TM1621_SendBitMsb()
* Description : 发送发送多位[高位在前]
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void TM1621_SendBitMsb(uint8_t dat, uint8_t cnt)
{
for (uint8_t i=0; i<cnt; i++)
{
(dat & 0x80) ? TM1621_DATA_HIG() :
TM1621_DATA_LOW(); dat <<= 1;
TM1621_WR_LOW();
Delay_us(3);
TM1621_WR_HIG();
}
} /**************************************************************************************
* FunctionName : TM1621_SendBitLsb()
* Description : 发送多位[低位在前]
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void TM1621_SendBitLsb(uint8_t dat, uint8_t cnt)
{
for (uint8_t i=0; i<cnt; i++)
{
(dat & 0x01) ? TM1621_DATA_HIG() :
TM1621_DATA_LOW(); dat >>= 1;
TM1621_WR_LOW();
Delay_us(3);
TM1621_WR_HIG();
}
} /**************************************************************************************
* FunctionName : TM1621_SendCmd()
* Description : 发送命令
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void TM1621_SendCmd(uint8_t cmd)
{
TM1621_CS_LOW();
TM1621_SendBitMsb(0x80, 3); // 前面3位命令代码
TM1621_SendBitMsb(cmd, 9); // 后面10位: a5~a0[RAM地址]+d3~d0[RAM数据]
TM1621_CS_HIG();
} /**************************************************************************************
* FunctionName : HTBSendNDat()
* Description : 发送N数据
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void TM1621_SendNDat(uint8_t addr, uint8_t *pDat, uint8_t cnt, uint8_t bitNum)
{
TM1621_CS_LOW();
TM1621_SendBitMsb(0xA0, 3); // 前面3位命令代码
TM1621_SendBitMsb(addr<<2, 6); // a5~a0[RAM地址] for (uint8_t i=0; i<cnt; i++)
{
TM1621_SendBitMsb(*pDat++, bitNum); // RAM数据
}
TM1621_CS_HIG();
} /**
* @brief TM1621 Write CMD.
* @param cmd 指向写入的命令.
* @return void
*/
void TM1621_Write_CMD(uint8_t cmd)
{
TM1621_CS_LOW();
TM1621_SendBitMsb(0x80, 4); // 前面3位命令代码
TM1621_SendBitMsb(cmd, 8); // a5~a0[RAM地址]
TM1621_CS_HIG();
}

有了写寄存器的代码以后,下面我们来看显存跟屏幕的映射关系

从手册上的RAM映象图上可以看出,TM1621一个地址是4bit。SEG0....SEG31是寄存器地址对应SEG0....SEG31管脚,COM0~COM3是TM1621的公共端

假设我们要让屏幕的第一个8显示“0”,(TM1621是共阴的所以采用阴码)阴码的“0”是0x3f,如果我们直接把0x3f给寄存器0~1,显示的效果就是乱码。

从这个表可以看出,如果要正常显示应该把G跟F调换(Lcd_ram是缓存数组,单独擦写每一位太过麻烦。所以建立一个缓存区,一次刷新整屏幕)

uint8_t BIT_Reverse(uint8_t num)
{
uint8_t bit = num; if((bit & 0x10) == 0) bit = bit & 0xf7;
else bit = bit | 0x08; if((bit & 0x80) == 0) bit = bit & 0xfe;
else bit = bit | 0x01; bit = bit << 4;
bit = bit & 0xF0;
return bit;
} void TM1621_display(uint8_t cnt, uint8_t num)
{
Lcd_ram[cnt] = BIT_Reverse(Lcd_table[num] & 0xF0);
Lcd_ram[cnt] |= (Lcd_table[num] & 0x0F);
TM1621_SendNDat(0x00,Lcd_ram,10,8);
}

TM1621断码液晶驱动IC的原理、驱动代码的更多相关文章

  1. 所谓的液晶屏驱动IC是单独的IC还是在屏内就集成

    所谓的液晶屏驱动IC是单独的IC还是在屏内就集成 时间:2016-12-05    作者:admin   其实无论什么液晶屏,想要正常工作必须包括两个人:玻璃屏+驱动IC:但是现在有一些液晶厂商他们不 ...

  2. 看Spring源码不得不会的@Enable模块驱动实现原理讲解

    这篇文章我想和你聊一聊 spring的@Enable模块驱动的实现原理. 在我们平时使用spring的过程中,如果想要加个定时任务的功能,那么就需要加注解@EnableScheduling,如果想使用 ...

  3. 老李推荐:第14章9节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-遍历控件树查找控件

    老李推荐:第14章9节<MonkeyRunner源码剖析> HierarchyViewer实现原理-遍历控件树查找控件   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员 ...

  4. 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述

    老李推荐: 第14章2节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer架构概述   HierarchyViewer库的引入让M ...

  5. LED恒流驱动IC汇总

    LED恒流驱动IC汇总 2017年09月22日 11:29:01 阅读数:569 这几天在找LED恒流驱动芯片,无意间在LED网论坛上发现这个帖子,分享给大家! LED恒流IC芯片大盘点        ...

  6. 老调重弹:JDBC系列之<驱动加载原理全面解析) ----转

      最近在研究Mybatis框架,由于该框架基于JDBC,想要很好地理解和学习Mybatis,必须要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来,好好总结一番,作为自己的笔记,也是给读者 ...

  7. jQuery 2.0.3 源码分析Sizzle引擎解析原理

    jQuery 2.0.3 源码分析Sizzle引擎 - 解析原理 声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 先来回答博友的提问: 如何解析 div > p + ...

  8. 老李推荐:第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态

    老李推荐:第14章5节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态   poptest是国内唯一 ...

  9. 老李推荐:第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer

    老李推荐:第14章6节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-启动ViewServer   poptest是国内唯一一家培养 ...

  10. 老李推荐:第14章3节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer实例化

    老李推荐:第14章3节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer实例化 poptest是国内唯一一家培养测试开发工程师的培 ...

随机推荐

  1. java入门与进阶-P1.3+P1.4

    准备一个java编程软件 eclipse官网: Enabling Open Innovation & Collaboration | The Eclipse Foundation 他是一个免费 ...

  2. 创建型模式 - 抽象工厂模式AbstractFactory

    学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 模式的定义与特点 抽象工厂模式.是一种为访问类提供一个创建一组相关或相关一类对象的接口,且访问类无需指定所要的产品的具体类,就能 ...

  3. UBUNTU16.04卸载安装protobuf

    1.卸载 sudo apt-get remove libprotobuf-dev which protoc 然后删除路径即可 2.安装 sudo apt-get install autoconf au ...

  4. 推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统相关算法流程、衡量指标和应用,以及如何使用jieba分词库进行相似推荐

    1. 推荐算法的初步理解 如果说互联网的目标就是连接一切,那么推荐系统的作用就是建立更加有效率的连接,推荐系统可以更有效率的连接用户与内容和服务,节约了大量的时间和成本. 1.1 推荐系统主要解决问题 ...

  5. HDMI转USB视频采集卡(ACASIS 1080P高清视频采集卡)--九五小庞

    ACASIS阿卡西斯是深圳市菲德越科技有限公司旗下数码科技品牌.菲德越是2008年成立的一家专注于采集卡.硬盘盒.集线器等专业3C配件产品,集研发.设计.生产.销售于一体的高新科技公司,我们公司以向客 ...

  6. Error in created hook: "TypeError: Cannot read properties of undefined (reading 'get')"

    写Vue 的时候常遇到的错误之一就是XXXXXX未定义,然后来一个undefined这种问题一般都是创建钩子出错:无法读取未定义的 xxx 属性. 此错误一般多出现在 created() 中, Vue ...

  7. Canvas:绘制失败的问题

    beginPath 绘制路径必须添加 beginPath().它标志着一个画笔在画布中哪个地方开始画起.没有它,新起的画笔位置必定与上一次画笔结束的位置相连. // 第一个半圆 ctx.arc(60, ...

  8. mock模拟数据使用教程

    mock模拟数据,get.post请求: https://blog.csdn.net/dongqian911/article/details/115136566 Mock.js 生成随机数据,拦截 A ...

  9. 富士胶片2105N打印机安装说明

    打开驱动文件,执行软件 自定义安装驱动 手动输入IP地址 下一步安装完成 自定义安装扫描软件 选择print & scan 下一步安装完成

  10. 00.IDEA的使用

    1.IDEA的必备常用快捷键 复制本行到下一行:ctrl D 删除一行代码:ctrl Y 替换文本:ctrl R 根据光标放的位置提供快速修复选择:Alt + Enter 生成返回值:ctrl alt ...