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是国内唯一一家培养测试开发工程师的培 ...
随机推荐
- 了解 Transformers 是如何“思考”的
Transformer 模型是 AI 系统的基础.已经有了数不清的关于 "Transformer 如何工作" 的核心结构图表. 但是这些图表没有提供任何直观的计算该模型的框架表示. ...
- Stochastic Methods in Finance (1)
Bootcamp Topics related to measure theory. 略去,详见测度论专栏中的文章 Expectations 令 \(X\) 为 \((\Omega, \mathcal ...
- Pycharm中图标的含义
Pycharm中图标的含义 问题 有同学问,下面的v,c,f等都是啥意思 这个问题嘛,应该在python学习阶段来问,不过我也只能解释部分,有些也只能靠猜测 按图索骥找了下pycharm的官网doc, ...
- Vue14 条件渲染
转:https://blog.csdn.net/weixin_57519185/article/details/121168426 1 简介 通过指令v-show和v-if可以实现条件渲染. 它们都能 ...
- C#支付宝用户的静默授权
支付宝官方的用户信息授权,具体地址:https://opendocs.alipay.com/open/289/105656 商户/开发者通过以下的 URL 拼接规则拼接用户授权的 URL 地址,该地址 ...
- python判断密码连续,重复,大小写、数字、符号混合密码复杂度要求
一.python 判断密码连续,重复,大小写.数字.符号混合密码复杂度要求 1. 运行环境 python 3.6.8 2. 密码必须包含大小写.数字.特殊符号中的3种且长度为8-16位 def ver ...
- springboot如何在拦截器中拦截post请求参数以及解决文件类型上传问题
我们经常有这样一个场景,比如:在springboot拦截器中想截取post请求的body参数做一些中间处理,或者用到自定义注解,想拦截一些特定post请求的方法的参数,记录一些请求日志. 想到了使 ...
- 另类数据获取法-eax法
有些基址非常难追 所以我们用一个另类的方法来追一下 复杂的汇编代码 ------------------ call 0x****** mov esi,eax; mov ***, dword ptr d ...
- 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(7)-Charles苹果手机手机抓包知否知否?
1.简介 Charles和Fiddler一样不但能截获各种浏览器发出的 HTTP 请求,也可以截获各种智能手机发出的HTTP/ HTTPS 请求. Charles也能截获iOS设备发出的请求,比如 i ...
- Blender插件:水滴生成器(Droplet Generator)
推荐:将 NSDT场景编辑器 加入你的3D开发工具链. 原文地址:https://www.mvrlink.com/droplet-generator/ 1.官方介绍: 适用于Blender 3.1及更 ...