LCD
<LCD硬件体系结构>
LCD控制器:位于ARM核内部,为LCD提供需要显示的数据,控制信息,控制时序
<LCD控制器结构>
REGBANKK : 寄存器组,总共有17个寄存器
LCDCDMA:LCD 中的DMA模块,该模块位于LCD的控制器中,在嵌入式系统中是内存中 有一个内存区域叫做帧缓存区,告诉DMA帧缓存区的起始地址,LCD控制器 的其他控制部件将该数据发给LCD驱动器。
TIMEGEN:用于产生时序信号
<液晶屏种类>
按照驱动类型可以分为:STN, GF,TFT,其中TFT最为常用
LCD驱动芯片:LCD驱动芯片位于液晶显示屏上,作用是为液晶分子提供偏转电压。
LCD显示与信号:
时序
VSYNC:一帧图像显示的时间
HSYNC:显示一行的时间
VCLK: 显示两个点之间的时间间隔
VD[23:0]:LCD像素输出端
VDEN:数据使能信号
LEND:行结束信号
《LCD初始化》
<引脚初始化>
将管脚配置成VD
控制字详情:
<时序初始化>
LCD控制寄存器1
作用分析:
用于设置CLKVAL
控制字详情:
LCD控制寄存器2
作用分析:
用于设置VBPD,LINEVAL,VFPD.VSPW
控制字详情:
控制寄存器3
作用分析:
用于设置HBPD,HOZVAL,HFPD,
控制字详情:
控制寄存器4
作用分析:
用于设置HSPW
控制字详情
各个时序信号的值:
VSPW和VBPD时序信号的计算方式:
用于初始化LINEVAL 和HOZVAL:
<帧缓冲初始化>
在内存中开辟一段空间用于存储一帧的数据,2440开发板中用16位数据表示一个像素点(16bpp),所以总共需要(480*272*2)个字节。
分配:
静态分配
LCD帧缓存地址数据寄存器:
作用分析:
用于存放帧缓存数据的起始地址。
控制字详情:
LCDBANK存放帧缓存地址的高30-22位
LCDBASEU存放帧缓存地址的低22-1位
LCD屏幕种类区分设置寄存器:
作用分析:
用于区分“dual-scan LCD”和“single scan LCD”
控制字详情:
如果屏幕使用 的是single-scan LCD,则该寄存器存放帧缓存地的尾地址的21-1位。
首尾像素点时间间隔控制/行宽度寄存器:
作用分析:
用于设置没行的最后一个像素点和下一行的低一个像素点之间是否有时间间隔。
控制字详情:
像素点时间间隔为0,行宽度取半字节,比如这里480个像素点,每个像素点是两个字节,所以取值为(480*2)/2
动态分配
告知:
将帧缓存数据地址值写入LCDADDR1中
<配置寄存器初始化>
LCD控制寄存器1
作用分析:
用于配置LCD种类,屏幕像素点的真彩色,和LCD控制器数据输出使能。
LCD控制寄存5
作用分析:
用于配置像素的分配,这里使用5:6:5(红绿蓝),和翻转极性控制
控制字详情:
像素真彩
转换极型
半字转换使能
临时调色板配置寄存器:
作用分析:
用于使能和配置临时调色板
使能临时调色板
GPG管脚控制器:
作用分析:
用于将相应管脚设置为LCD的电源
控制字详情:
LCD数据显示:
16bpp显示数据分配图
数据显示
http://www.114la.com/other/rgb.htm
单色显示
void LCD_line()
{
int x;
for(x=0;x<480;x++)
{
void point(x++,150,0xff0000)
}
}
LCD的更多相关文章
- STM32F429 LCD程序移植
STM32F429自带LCD驱动器,这一具有功能给我等纠结于屏幕驱动的程序员带来了很大的福音.有经验的读者一定有过这样的经历,用FSMC驱动带由控制器的屏幕时候,一旦驱动芯片更换,则需要重新针对此驱动 ...
- 分页型Memory LCD显存管理与emWin移植
上一篇随笔整理了一下逐行扫描型Memory LCD的显存管理与emWin移植,这篇就整理一下分页型Memory LCD显存管理与emWin移植. //此处以SSD1306作为实例 //OLED的显存/ ...
- 逐行扫描型Memory LCD显存管理与emWin移植
因为Memory LCD 的特性,不能设置像素坐标,只能用缓存整体刷新. 所以对于Memory LCD来说,emWin移植仅与打点函数有关,这里用Sharp Memory LCD(ls013b7dh0 ...
- Sharp Memory LCD (ls013b7dh03)驱动
网上找不到什么靠谱的资料,甚至我调好了夏普原厂和代理商还来找我要demo, 哎,苦逼的码农. lcd_main.c #include "ls013b7dh03.h" #inclu ...
- AM335x kernel4.4.12 LCD 时钟翻转设置记录
TI AM335x kernel 4.4.12 LCD display 时钟翻转记录 因为公司硬件上已经确定LCD 转LVDS 转换芯片上确认以上升沿时钟为基准,所以只能在软件上调整相关东西. 入口在 ...
- Arduino下LCD1602综合探究(上)——1602的两种驱动方式,如何使LCD的控制编程变得更简单
一.前言: LCD ( Liquid Crystal Display 的简称)液晶显示器,已经逐渐替代CRT成为主流的显示设备之一,因此也成为了单片机发烧友绕不过的话题之一:而LCD1602更是很多单 ...
- jquery模拟LCD 时钟
查看效果网址:http://keleyi.com/keleyi/phtml/jqtexiao/24.htm 以下是HTML文件源代码: <!DOCTYPE html PUBLIC "- ...
- 嵌入式Linux驱动学习之路(十八)LCD驱动
驱动代码: /************************************************************************* > File Name: lcd ...
- LCD接口(转载)
LCD接口分类 1. I8080接口,我觉得应该就是所谓的8080,通常会用在12864屏上面,且有内部sdram,不需要实时的刷新图片,速度有限制, 支持的数据宽度有8/9/16/18bit,接 ...
- LCD底层驱动分析
根据分析的框架,自己写一个LCD驱动程序 1分析LCD硬件原理图 Von和Voff接的是一个电源电路,通过LCD_POWER接的是GPG4来控制LCD电源,高电平表示开启LCD电源 VM接的是CPU的 ...
随机推荐
- vue项目的配置
1.第一首先我们先安装:visual studio code开发环境,可以换成中文版的. 2.安装note.js 下载链接:https://nodejs.org/en/ 3.安装npm使用淘宝镜像 ...
- 20155303 2016-2017-2 《Java程序设计》第九周学习总结
20155303 2016-2017-2 <Java程序设计>第九周学习总结 目录 学习内容总结(Linux命令) 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考 ...
- pytorch梯度裁剪(Clipping Gradient):torch.nn.utils.clip_grad_norm
torch.nn.utils.clip_grad_norm(parameters, max_norm, norm_type=2) 1.梯度裁剪原理(http://blog.csdn.net/qq_29 ...
- Perl6 必应抓取(2):最终版
use HTTP::UserAgent; use URI::Encode; Firefox/52.0>); my $bing_url = 'http://cn.bing.com/search?q ...
- mysql5.7半自动同步设置【转】
mysql的主从复制主要有3种模式: a..主从同步复制:数据完整性好,但是性能消耗高 b.主从异步复制:性能消耗低,但是容易出现主从数据唯一性问题 c.主从半自动复制:介于上面两种之间.既能很好的保 ...
- 80端口被System占用 造成Apache不能启动的解方案
运行netstat -aon | findstr :80 ,发现pid是4的进程占用着80端口,这还是一个系统进程,kill不掉.所以只能另想办法: 1.打开注册表:regedit 2.找到:HKEY ...
- Unix IPC之pipe
pipe创建函数: #include <unistd.h> /* Create a one-way communication channel (pipe). If successful, ...
- C# 图片和二进制之间的转换
1> 图片转二进制 public byte[] GetPictureData(string imagepath){/**/////根据图片文件的路径使用文件流打开,并保存为byte[] Fil ...
- 查询SQL优化
SQL优化的一般步骤 通过show status命令了解各种SQL的执行频率定位执行效率较低的SQL语句,重点select通过explain分析低效率的SQL确定问题并采取相应的优化措施 优化措施 s ...
- pymongo处理正则表达式的情况
在python里使用pymongo处理mongodb数据库,在插入或者查询的时候,我们有时需要使用操作符号,如set,in, 具体操作符的可以参考 https://docs.mongodb.com/ ...