LCD学习
来源:互联网 发布:js 滚动字幕特效 编辑:程序博客网 时间:2024/06/09 22:32
1.硬件体系架构
1. LCD硬件体系
1.1 液晶
液晶属于一种有机化合物,分子形状为长棒状,在不同的电流作用下,分子会做有规律的旋转,这样对光线(背光灯产生)产生了一定的控制,形成一个像素,而很多像素又可构成完整图象。
1.2 LCD~液晶屏
LCD是Liquid Crystal Display的简称。液晶显示器按驱动方式可分为STN,GF,TFT等种类,其中TFT屏在嵌入式开发中经常使用。
1.3 LCD驱动芯片
LCD驱动芯片是控制液晶分子发生变化的模块,它为液晶分子的偏转提供电压。通常情况下,LCD驱动芯片都与液晶屏面板做到一个电路板上。
1.4 LCD控制器
液晶要能正确的显示图像,除了要有LCD驱动芯片,还要有LCD控制器来给LCD驱动芯片提供必要的数据和控制信号.多数ARM处理器内部都集成有LCD控制器。
拥有四个寄存器,如图:
1. REGBANK: 由17个可编程的寄存器组和一块256*16的调色板内存组成,通过这些寄存器,可以配置LCD控制器.
2.1图解LCD图形显示过程
1. 显示从屏幕左上角第一行的第一个点开始,一个点一个点地在LCD上显示,当显示到屏幕的最右边就结束这一行(Line)。
2. 接下来显示指针又回到屏幕的左边从第二行开始显示,显示指针在从第一行的右边回到第二行的左边是需要一定的时间的,我们称之为行切换。
3. 以此类推,显示指针就这样一行一行的显示至矩形的右下角才把一幅图像(帧:frame)显示完成。
2.2时序信号
VSYNC:垂直同步信号
HSYNC:水平同步信号
VCLK:象素时钟信号
VD[23:0]:LCD像素数据输出端口
VDEN:数据使能信号?LEND:行结束信号
2.2 显示过程与时序
1. 显示从屏幕左上角第一行的第一个点开始,一个点一个点地在LCD上显示,点与点之间的时间间隔为VCLK(像素时钟信号);当显示到屏幕的最右边就结束这一行(Line),这一行的显示对应时序图上的HSYNC(水平同步信号)
3.编写代码
1. LCD硬件体系
1.1 液晶
液晶属于一种有机化合物,分子形状为长棒状,在不同的电流作用下,分子会做有规律的旋转,这样对光线(背光灯产生)产生了一定的控制,形成一个像素,而很多像素又可构成完整图象。
1.2 LCD~液晶屏
LCD是Liquid Crystal Display的简称。液晶显示器按驱动方式可分为STN,GF,TFT等种类,其中TFT屏在嵌入式开发中经常使用。
1.3 LCD驱动芯片
LCD驱动芯片是控制液晶分子发生变化的模块,它为液晶分子的偏转提供电压。通常情况下,LCD驱动芯片都与液晶屏面板做到一个电路板上。
1.4 LCD控制器
液晶要能正确的显示图像,除了要有LCD驱动芯片,还要有LCD控制器来给LCD驱动芯片提供必要的数据和控制信号.多数ARM处理器内部都集成有LCD控制器。
拥有四个寄存器,如图:
1. REGBANK: 由17个可编程的寄存器组和一块256*16的调色板内存组成,通过这些寄存器,可以配置LCD控制器.
2. LCDCDMA: 一个专用的DMA,它能自动地把在帧内存中的视频数据传送到LCD驱动器,通过使用这个DMA通道,视频数据在不需要CPU的干预的情况下显示在LCD屏上.
3. VIDPRCS: 接收来自LCDCDMA的数据,将数据转换为合适的数据格式,比如说4/8位单扫,4位双扫显示模式,然后通过数据端口VD[23:0]传送视频数据到LCD驱动器;
4.TIMEGEN: 由可编程的逻辑组成,他生成LCD驱动器需要的控制信号,比如VSYNC、HSYNC、VCLK和LEND等,而这些控制信号又与REGBANK寄存器组中的配置密切相关,通过不同的配置,TIMEGEN就能产生这些信号的不同值,从而支持不同的LCD驱动器(即不
同的STN/TFT屏)。
2.LCD显示与信号2.1图解LCD图形显示过程
1. 显示从屏幕左上角第一行的第一个点开始,一个点一个点地在LCD上显示,当显示到屏幕的最右边就结束这一行(Line)。
2. 接下来显示指针又回到屏幕的左边从第二行开始显示,显示指针在从第一行的右边回到第二行的左边是需要一定的时间的,我们称之为行切换。
3. 以此类推,显示指针就这样一行一行的显示至矩形的右下角才把一幅图像(帧:frame)显示完成。
2.2时序信号
VSYNC:垂直同步信号
HSYNC:水平同步信号
VCLK:象素时钟信号
VD[23:0]:LCD像素数据输出端口
VDEN:数据使能信号?LEND:行结束信号
2.2 显示过程与时序
1. 显示从屏幕左上角第一行的第一个点开始,一个点一个点地在LCD上显示,点与点之间的时间间隔为VCLK(像素时钟信号);当显示到屏幕的最右边就结束这一行(Line),这一行的显示对应时序图上的HSYNC(水平同步信号)
2. 接下来显示指针又回到屏幕的左边从第二行开始显示,显示指针在从第一行的右边回到第二行的左边是需要一定的时间的,我们称之为行切换。
3. 以此类推,显示指针就这样一行一行的显示至矩形的右下角才把一幅图像(帧:frame)显示完成,这一帧的显示时间在时序图上表示为VSYNC(垂直同步信号)。
3.编写代码
- /*
- * lcd.c
- *
- * Created on: 2016-10-8
- * Author: root
- */
- #define GPCCON (*(volatile unsigned long*) 0x56000020)
- #define GPDCON (*(volatile unsigned long*) 0x56000030)
- #define GPGCON (*(volatile unsigned long*) 0x56000060)
- #define LCDCON1 (*(volatile unsigned long*) 0X4D000000)
- #define LCDCON2 (*(volatile unsigned long*) 0X4D000004)
- #define LCDCON3 (*(volatile unsigned long*) 0X4D000008)
- #define LCDCON4 (*(volatile unsigned long*) 0X4D00000C)
- #define LCDCON5 (*(volatile unsigned long*) 0X4D000010)
- #define LCDSADDR1 (*(volatile unsigned long*) 0X4D000014)
- #define LCDSADDR2 (*(volatile unsigned long*) 0X4D000018)
- #define LCDSADDR3 (*(volatile unsigned long*) 0X4D00001C)
- #define TPAL (*(volatile unsigned long*) 0X4D000050)
- #define CLKVAL 4 //10 = 100/((CLKVAL+1)*2)
- #define VSPW 9 //1+9 =10
- #define VBPD 1 //1+1 = 2
- #define LINEVAL 271
- #define VFPD 1 //1+1 = 2
- #define HSPW 40 //40+1 = 41
- #define HBPD 1
- #define HOZVAL 479
- #define HFPD 1
- unsigned short LCDBUFFER[272][480];
- void lcd_port_init()
- {
- //引脚初始化
- GPDCON = 0xaaaaaaaa;
- GPCCON = 0xaaaaaaaa;
- }
- void lcd_control_init()
- {
- //时序初始化
- LCDCON1 = (CLKVAL<<8)|(0x3<<5)|(0xc<<1)|(0<<0);
- LCDCON2 = (VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW<<0);
- LCDCON3 = (HBPD<<19)|(HOZVAL<<8)|(HFPD<<0);
- LCDCON4 = (HSPW);
- LCDCON5 = (1<<11)|(1<<9)|(1<<8);//|(1<<0);
- //帧缓冲初始化
- LCDSADDR1 = (((unsigned long)LCDBUFFER>>22)<<21)|(((unsigned long)LCDBUFFER>>1)&0x1fffff);
- LCDSADDR2 = (((unsigned long)LCDBUFFER +272*480*2)>>1&0x1fffff);
- LCDSADDR3 = (0<<11)|(480*2/2);
- TPAL = 0;
- }
- void lcd_init()
- {
- lcd_port_init();
- lcd_control_init();
- //打开LCD电源
- GPGCON |= 0b11<<8;
- LCDCON5 |= (1<<3);
- LCDCON1 |= 1;
- }
- void point(unsigned int x,unsigned int y,unsigned int color)
- {
- unsigned int red, green, blue;
- red = (color>>19) & 0x1f;
- green = (color>>10) & 0x3f;
- blue = (color>>3) & 0x1f;
- LCDBUFFER[y][x] = (unsigned short)(red<<11)|(green<<6)|(blue<<0);
- }
- void Paint_Bmp(unsigned short x0,unsigned short y0,unsigned short wide,unsigned short high,const unsigned char *bmp)
- {
- unsigned short x,y,c;
- unsigned long p = 0;
- for(y = y0; y < y0+high;y++)
- {
- for(x = x0; x < x0+wide;x++)
- {
- c = bmp[p] | (bmp[p+1]<<0);
- if ((x <480) && (y < 272))
- LCDBUFFER[y][x] = c;
- p = p +2;
- }
- }
- }
- void clearSrc(unsigned int color)
- {
- TPAL = (1<<24)|(color&0xffffff);
- }
- const unsigned char bmp[90208];
- void lcd_test()
- {
- int x;
- for(x=0; x<480; x++)
- {
- point(x++,150,0xFF0000);
- }
- Paint_Bmp(0,0,220,220,bmp);
- clearSrc(0xff0000);
- }
0
上一篇:设置使Linux下双击文件夹时不要每次都打开一个新窗口
下一篇:触摸屏学习
相关热门文章
- SHTML是什么_SSI有什么用...
- 查看linux中某个端口(port)...
- 卡尔曼滤波的原理说明...
- shell中字符串操作
- 关于java中的“错误:找不到或...
给主人留下些什么吧!~~
评论热议
阅读全文
0 1
- LCD学习
- 学习LCD
- LCD学习
- lcd驱动学习
- LCD驱动学习笔记
- Qt学习-->LCD.Sild
- 驱动学习笔记-lcd
- LCD驱动学习
- wince LCD 学习
- LCD驱动学习
- LCD驱动学习
- TFT LCD 学习笔记
- STN-LCD屏学习
- JZ2440 LCD学习笔记
- 学习LCD显示的笔记
- LCD驱动 学习笔记(一)
- ARM学习之LCD实验
- arm的LCD的学习
- Memcached ++++ exception thrown while trying to get object from cache for key
- DMA学习
- 像素深度BPP
- 设置使Linux下双击文件夹时不要每次都打开一个新窗口
- 大学IT类社团主页
- LCD学习
- 触摸屏学习
- spring boot environmentaware接口实现环境变量读取和属性对象的绑定
- GDB和coredump
- Linux应用程序地址布局
- 静态函数库、动态链接库设置
- css技巧—图片配文字
- linux应用编程学习(6)信号
- 通过自定义属性添加样式(css+js,动态判断背景颜色)
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
不锈钢板式换热器厂家
管壳式换热器系列标准
管式换热器计算软件
板式换热器有限公司
板式换热器生产厂家
管式换热器生产厂家
板式换热器厂家排名
板式换热器换热面积计算
可拆式板式换热器厂家
热交换
过水热交换器
热交换设备
板翅式热交换器
空气热交换器厂家
板式热交换器厂家
全热交换器价格
热交换器通风系统
热交换器哪家好
空冷式热交换器
板式热交换器生产厂家
热交换器清洗
热交换器报价
螺旋式热交换器
立式热交换器
全热热交换器
壳式热交换器
水气热交换器
卧式热交换器
工业用热交换器
热交换器品牌
暖风热交换器
叉流板式热交换器
河北换热机组
换热站设备
管壳式换热机组
管式换热器换热效率
牙桩价格
氧化锆牙桩
牙桩
二氧化锆牙桩价格
纤维牙桩价格