TM1621断码液晶驱动IC的原理、驱动代码
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的原理、驱动代码的更多相关文章
- 所谓的液晶屏驱动IC是单独的IC还是在屏内就集成
所谓的液晶屏驱动IC是单独的IC还是在屏内就集成 时间:2016-12-05 作者:admin 其实无论什么液晶屏,想要正常工作必须包括两个人:玻璃屏+驱动IC:但是现在有一些液晶厂商他们不 ...
- 看Spring源码不得不会的@Enable模块驱动实现原理讲解
这篇文章我想和你聊一聊 spring的@Enable模块驱动的实现原理. 在我们平时使用spring的过程中,如果想要加个定时任务的功能,那么就需要加注解@EnableScheduling,如果想使用 ...
- 老李推荐:第14章9节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-遍历控件树查找控件
老李推荐:第14章9节<MonkeyRunner源码剖析> HierarchyViewer实现原理-遍历控件树查找控件 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员 ...
- 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述
老李推荐: 第14章2节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer架构概述 HierarchyViewer库的引入让M ...
- LED恒流驱动IC汇总
LED恒流驱动IC汇总 2017年09月22日 11:29:01 阅读数:569 这几天在找LED恒流驱动芯片,无意间在LED网论坛上发现这个帖子,分享给大家! LED恒流IC芯片大盘点 ...
- 老调重弹:JDBC系列之<驱动加载原理全面解析) ----转
最近在研究Mybatis框架,由于该框架基于JDBC,想要很好地理解和学习Mybatis,必须要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来,好好总结一番,作为自己的笔记,也是给读者 ...
- jQuery 2.0.3 源码分析Sizzle引擎解析原理
jQuery 2.0.3 源码分析Sizzle引擎 - 解析原理 声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 先来回答博友的提问: 如何解析 div > p + ...
- 老李推荐:第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态
老李推荐:第14章5节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态 poptest是国内唯一 ...
- 老李推荐:第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer
老李推荐:第14章6节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-启动ViewServer poptest是国内唯一一家培养 ...
- 老李推荐:第14章3节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer实例化
老李推荐:第14章3节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer实例化 poptest是国内唯一一家培养测试开发工程师的培 ...
随机推荐
- java 进阶P-3.7
HASH表 Java 集合框架 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射. HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的 ...
- Boost线程处理机制
采自文章:https://www.cnblogs.com/renyuan/p/6613638.html 大多数共享数据的线程均采用 boost::mutex mtx; boost::condition ...
- 聊一聊js中元素定位的方法
在做selenium web自动化的时候,有时通过selenium定位不到,或无法操作元素,这个时候就需要通过js来 定位/操作元素,然后通过selenium自带的execute_script()方法 ...
- 【一句话】:first-child 伪类解释
关键词 不起作用 选不到 失败 解释 input:first-child 要求既是input元素,而且是兄弟节点中的第一个 如果要找第一个input元素,那么用input:first-of-type ...
- Zstack私有云平台运行实践
很高兴昨天加了大名鼎鼎的杰杰站长的微信,系统运行的怎么样,一定不能只是给力两个字完事,下面就上具体的: 经过这几年的运行费和预研经费的支持,组里除了在线的几台服务器外,慢慢离线也积攒了几台用作调试和做 ...
- kali linux 使用教程
kali linux使用教程 前言:Kali Linux 是专门用于渗透测试的linux操作系统,它由BackTrack发展而来,在整合了IWHAX.WHOPPIX和Auditor这三种渗透测试专用L ...
- 欧拉函数和遗忘自动机 SX 的故逝
欧拉函数 \(\varphi(n)\) 定义为小于 \(n\) 与 \(n\) 互质的数字,炒个例子,\(\varphi(10) = 4\),因为 \(1,3,7,9\) 与 \(10\) 互质. 怎 ...
- VueRouter 报错:inject() can only be used inside setup() or functional components
单独创建的一个文件,封装了登录函数的业务逻辑,出现了一个警告,紧接着就是报错:说不能读取到路由的 push 函数.路由必须在组件里面使用,不能在 ts 或 js 文件中使用. 还要注意的点是,在使用路 ...
- windows pwn(一)
前言 前几天因为看CS shellcode装了一个win10虚拟机,然后正好因为逆向课老师要装一系列工具.于是就想起来之前一直想看的windows pwn,就顺便装了一下相关工具并且入门了一下. 工具 ...
- AirTest
1.环境 直接安装AirTest IDE 就可以了 2.连接手机 打开开发者模式,允许Usb调试,手机在电脑界面显示出来即可 3.Airtest辅助窗 4.Poco辅助窗 新建一个air文件 在poc ...