文档章节

LCD控制器TM1621/HT1621

h
 houj
发布于 2014/10/22 21:06
字数 570
阅读 1081
收藏 2

LCD控制器TM1621/HT1621

要点

1)由公共输出口COM0-COM3和段输出口SEG0-SEG23控制LCD的段码;
2)3个关键数据口:
  a)CS:片选,低电平有效;
  b)WR:读写控制,上升沿从MCU读取数据;
  c)DATA:数据,命令是大端位序,数据是小端位序;
3)命令结构:3bit标识(LCD_FLAG_CMD)+9bit命令
4)写数据到RAM:3bit标识(LCD_FLAG_DATA)+6bit地址+若干bit数据(数据是小端)

定义

#define LCD_BIAS_1P2 (0<<1) //1/2偏压
#define LCD_BIAS_1P3 (1<<1) //1/3偏压

#define LCD_USE_COM2 (0<<3) //使用2个公共口
#define LCD_USE_COM3 (1<<3) //使用3个公共口
#define LCD_USE_COM4 (2<<3) //使用4个公共口

#define LCD_CMD_BIAS_COM (0x40) //设置公共口和偏压的命令
#define LCD_CMD_ON (0x6)        //打开
#define LCD_CMD_OFF (0x4)       //关闭
#define LCD_CMD_Normal (0x1C6)  //普通模式
#define LCD_CMD_SYS_EN (2)      //打开系统振荡器和LCD偏压发生器
#define LCD_CMD_SYS_DIS (0)     //关闭系统振荡器和LCD偏压发生器
#define LCD_RC256       (0x30)  //系统时钟源片内RC 256K振荡器
#define LCD_XTAL     0x28       //0b1000 0010 1000 外部接时钟
#define LCD_WDTDIS1  0X0A       //0b1000 0000 1010  禁止看门狗

#define LCD_FLAG_CMD (4)   //命令标识100
#define LCD_FLAG_DATA (5)  //数据标识101

一些函数

/**
 * 发送大端数据
 */
static void lcd_sendBeData(LcdStr* ps,u32 n, int nBit) {
   for (int i = nBit; --i >= 0;) {
      LCD_WR_L();
      LCD_WriteBit((n >> i) & 1);
      LCD_DELAY();
      LCD_WR_H();
      LCD_DELAY();
   }
}

/**
 * 发送小端数据
 */
static void lcd_sendLeData(LcdStr* ps,u32 n, int nBit) {
   for (int i = 0; i < nBit; i++) {
      LCD_WR_L();
      LCD_WriteBit((n >> i) & 1);
      LCD_DELAY();
      LCD_WR_H();
      LCD_DELAY();
   }
}


/**
 *写命令
 */
static void lcd_writeCmd(LcdStr* ps, u16 cmd) {
   LCD_CS_SEL();
   lcd_sendBeData(ps, LCD_FLAG_CMD, 3); //100
   lcd_sendBeData(ps, cmd, 9);
   LCD_CS_RELAESE();
   LCD_DELAY();
}

初始化

static void lcd_init(LcdStr* ps) {
   ...//MCU的GPIO初始化
   LCD_CS_RELAESE();//片选脚拉高
   LCD_WR_H();      //读写控制拉高
   LCD_DELAY();
   //---------------
   lcd_writeCmd(ps, LCD_CMD_BIAS_COM | LCD_USE_COM4 | LCD_BIAS_1P3);//1/3偏压 4公共口
   lcd_writeCmd(ps, LCD_RC256);          //内部RC振荡
   lcd_writeCmd(ps, LCD_CMD_SYS_DIS);       //关系统振荡器和LCD偏压发生器
   lcd_writeCmd(ps, LCD_WDTDIS1);
   lcd_writeCmd(ps, LCD_CMD_SYS_EN);       //打开系统振荡器
   lcd_writeCmd(ps, LCD_CMD_Normal);
   lcd_writeCmd(ps, LCD_CMD_ON);           //开LCD偏压
   lcd_clearAll(ps); //清除屏幕数据,就是全部写0
}

显示

/**
 * 显示所有
 */
static void lcd_showAll(LcdStr* ps) {
   LCD_CS_SEL();
   lcd_sendBeData(ps, LCD_FLAG_DATA, 3); //标识101
   lcd_sendBeData(ps, ps->startSeg, 6); //地址
   for (int s = 0; s < 4; s++) {
      lcd_sendLeData(ps, ps->lcds >> (s * 8), 8);
   }
   LCD_CS_RELAESE();
   LCD_DELAY();
}

清除

/**
 *清除屏幕
 */
static void lcd_clearAll(LcdStr* ps) {
   LCD_CS_SEL();
   lcd_sendBeData(ps, LCD_FLAG_DATA, 3);
   lcd_sendBeData(ps, 0, 6); //地址
   for (int s = 0; s < 16; s++) {
      lcd_sendLeData(ps, 0, 8);
   }
   LCD_CS_RELAESE();
   LCD_DELAY();
}

© 著作权归作者所有

h
粉丝 9
博文 81
码字总数 57985
作品 0
长沙
技术主管
私信 提问
arm9 lcd controller

2440的lcd控制器可以驱动 STN LCD 和 TFT LCD 本文以较为常见的 TFT LCD 来讲解使用方法: 基础知识: 首先, 我们来看下2440的 lcd controller 组成框图: REGBANK: LCD控制器的寄存器组, 含有1...

季风_落地窗
2014/05/19
616
0
AT070TN83调试总结(时序)

一、时序问题: 有三个寄存器LCDCON1,LCDTIM1,LCDTIM2设置很重要 寄存器LCDCON1中有二个域BYPASS和CLKVAL,其中如果BYPASS写1代表着LCD屏的像素时钟为LCD内核时钟,也即主控时钟; 如果BYP...

WXXGoodJob
2017/08/01
0
0
WuSiYu/BadApplePi

树莓派+Lcd12864播放Badapple 本项目实现在LCD12864显示屏(st7920控制器)上播放黑白动漫影绘视频:Badapple 在树莓派B+和2B上均能达到30fps(原视频帧数) 适用硬件 树莓派(Raspberry Pi):支...

WuSiYu
2015/08/26
0
0
设备树之LCD实例

一 LCD实例详解 图1 图2 图1和图2构成了一个典型的LCD输出链路。 图1:LCD设备结点,描述了LCD使能引脚以及时序参数。 图2:DSS设备结点,描述主芯片DSS控制器,该控制器输出并行数字信号。 ...

lusimquan
2018/01/31
0
0
全志T3 Linux显示驱动分析

1、总体架构 全志T3处理器的显示框架是基于标准Linux的帧缓冲架构,其结构如图 1.1所示。显示控制器DE的驱动架构如图 1.2所示,包括屏蔽差异的显示管理抽象层,以及显示图层驱动、显示设备驱...

pnsam301
2018/09/26
185
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部