320x240的lcd的坐标是怎样易语言 自定义坐标的

点亮LCD液晶屏_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
6页免费9页免费10页免费2页免费35页免费11页免费29页免费24页免费10页7下载券1页免费
喜欢此文档的还喜欢70页7下载券50页1下载券60页1下载券31页7下载券39页免费
点亮LCD液晶屏|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢 |  | 招贤纳士 |  | 学习资料 |  | 
培训咨询专线:400-654- 企业院校洽谈专线:010--803
学院地址:北京市海淀区永泰庄北路40号 景泰聚合商务综合楼二层 传真:010-
皖ICP备号-1 京公网安备55号1、LCD控制器
&&&&& 打开S3C2440数据手册可以看到LCD控制器硬件组成框图如下
2、LCD时序图
&&&&&&& 对此图做简单描述:LCD控制器主要由REGBANK,LCDCDMA,VIDPRCS,TIMEGEN等寄存器组成,如果不是用的三星的LCD,LPC3600和LCC3600就不用管它,它们专门为三星的LCD设计的。
&&&&&&& REGBANK由17个可编程的寄存器和一个256X16调色板内存组成,他们用来配置LCD控制器
&&&&&&& LCDCDMA是一个专用的DMA,它能自动将帧内存中的数据传送到LCD驱动器,通过这个DMA通道,数据不需要CPU干涉就能传送到LCD上显示。
&&&&&&& VIDPRCS接收来自LCDCDMA的数据,并转换成合适的数据格式再送到LCD驱动器中。
&&&&&&& TIMEGEN由可编程的逻辑组成,生成LCD驱动器的控制信号。
&&&&&&& 我们在LCD上显示的一幅图像称为一帧图像。在LCD上显示一帧图像的原理:从第一行的最左边开始扫描,一行结束后跳到下一行继续扫描。当显示完一幅图像后,从新
&&&&&&& 第一行接着扫描。扫描的时候就像一个“Z”字形。扫描图像必须在控制信号下进行,下面讲解一下控制信号。在mini2440开发板上用的是W35的TFT屏。TFT屏工作时序如下图所示
对上面对参数解释一下
VSYNC:垂直同步信号
VSPW:表示垂直同步脉冲的宽度,用行数计算
VBPD:表示新一帧图像的开始,垂直同步信号以后无效的行数
VFPD:表示新一帧图像结束后,垂直同步信号以前的无效的行数
HSYNC:水平同步信号,表示新的一行的开始,即跳到最左边开始行的一行数据的扫描。
HSPW:表示水平同步信号的宽度,用VCLK计算
HBPD:表示水平同步信号从开始到一行的有效数据开始之间VCLK的个数
HFPD:表示一行有限数据结束到下一个水平同步信号开始之间VCLK的个数
VCLK:像素时钟信号
VD[23:0]:LCD像素数据输出端口
VDEN:数据使能信号
LEDN:行结束信号
&&&&&& 显示图像的时候会看到图像四周有黑色边框,结合时序图解释一下:当我们发出VSYNC信号后,要经过(VSPW+1+VBPD+1)这么长时间,那么这么长时间所扫面的行是无效的,这对应着我们图像的最上边的黑框,接下来是扫描LINEVAL+1行有效数据,最后经过(VFPD+1)个无效行,这对应着图像下面的黑框。对于每一行图像数据,HSYNC信号发出后,经过(HSPW+1+HBPD+1)个无效像素,这对应着我们图像左边黑框,接下来显示HOZVAL+1个有效像素,接着扫描(HFPD+1)个无效像素,这对应着我们图像的右边黑框。
&&&&&&& VSYNC信号的出现表示一帧图像的开始,我们把1s内能显示图像的帧数称为显示器频率,也叫做场频率或者垂直频率。显示分辨率又称屏幕分辨率,指显示器屏幕上显示的有效像素点的数目。这是不同的概念。
&3、LCD操作
& & &&&& 下面讲解如何操作LCD来显一帧图像:
&&&&&&&& 一个像素点的颜色是由三种颜色(红,绿,蓝)按照一定比例配置得到的,每种颜色由几位二进制来表示,到底是由几位来表示需要我们设置LCD寄存器来配置。LCD支持单色(1BPP),4级灰度(2BPP),16级灰度(4BPP),256级灰度(8BPP)调色板显示模式和16BPP和24BPP的非调色板显示模式。BPP:bit&& per & Pixel & 即& 位/像素。& 我们的LCD就是选择的16BPP显示模式,16BPP有两种表示方式,分别为5:5:5:1显示模式和5:6:5显示模式。我的LCD选择的是5:6:5显示模式,5:6:5表示的就是前5位二进制表示的事红色,中间6位表示绿色,最后5位表示的是蓝色。16BPP显示模式图如下所示
&&&&&&&& 我们先了解下有关帧内存的概念,所谓的帧内存就是图像数据的存放地址,我们将图像数据放入到帧内存中,然后自动通过LCDDMA将数据送到LCD上显示。
&&&&&&&& 我们主要要对一下几个寄存器进行操作:LCDCON1,LCDCON2,LCDCON3,LCDCON4,LCDCON5,LCDSADDR1,LCDSADDR2,LCDSADDR3
&&&&&&&& LCDCON1寄存器如下图所示
&&&&&&&&& 第0位是LCD信号输出使能位,[4:1]位是选择BBP模式,[6:5]位是选择显示模式,我们LCD是TFT屏,故此处应该设置为3,[7]用不到暂时不管,[17:8]位用来设置像素信号始终,这个要根据具体的LCD数据手册来设置,[27:18]没用到暂时不管。
&&&&&&&& LCDCON2寄存器如下图所示&
&&&&&& 此处的各参数的含义前面已经解释过了,我们需要查看LCD的数据手册进行设置,其中LINEVAL设置为239,因为我们LCD是320X240的屏
&&&&&& LCDCON3寄存器如下图所示
&&&& 参考数据手册对上图进行配置,其中HOZVAL为319
&&&& LCDCON4寄存器如下图所示
&&& 我们只需用到[7:0]位参考数据手册对HSPW进行设置
&&& LCDCON5寄存器如下图所示
第0、1位用来设置数据存储方式,我们ARM上电默认的方式是小端模式,即数据的低位放在低地址处,数据的高位放在高地址处。第3位用来设置给LCD供电,我们LCD有两种供电方式,一种是外接电源,一种是我们io口输出高电平供电,mini2440采用的是io口供电,采用IO供电的好处是当我们不用LCD的时候可以通过软件来设置LCD的开启与关闭。第8、9位是设置信号极性的。所谓信号极性入下图所示
上面一个波形是正极性,下面一个为负极性。参考我们的LCD时序图可以看出,我们在时钟信号的下降沿采集数据,故应该设置为负极性信号,第10位设置为1。第11位用来设置显示模式,我们采用的的是5:6:5模式。谈到数据存储,我们接下来讲一讲帧内存的概念,所谓帧内存就是图像数据在内存中的存储地址,我们将数据存放在帧内存中,然后将帧内存的地址告诉LCD控制器,LCD会自动通过DMA读取数据并显示。因此,我们在编程的时候应该事先声明一个数组用来保存图像数据,然后将内存地址告诉LCd控制器。
下面介绍一下帧内存地址寄存器
【29:21】位用来保存帧内存地址的高9位【30:22】,【20:0】用来保存LCD的帧缓冲区开始地址的【21:1】位
用来保存LCD的帧缓冲区的结束地址的【21:1】位。它的计算方法应经给出来了,LCDBASEL=((the frame end address)&&1)+1=LCDBASEU+(PAGEWID+OFFSIZE)x(LINEVAL+1)
我们用到【10:0】位,这里用来设置视口的宽度,半字位单位,我们一个像素就是半字,LCD的宽度为320个像素,故应该设置为320,其他位置0即可。
下面给出几个例子
1、我们在LCD上显示一个蓝色的点。程序如下:
#include &2440addr.h&
//根据数据手册设置配置参数,W35的屏的收据手册可能参数上有点老了,反正我按照上面的配置就是不对,然后参照开发板自带的程序进行配置
//LCDCON1配置
#define CLKVAL 4
#define BPPMODE 12
#define PNRMODE 3
//LCDCON2配置
#define HEIGHT 240
#define VBPD 10
#define VFPD 4
#define VSPW 1
//LCDCON3,4配置
#define WIDTH 320
#define HBPD 0x44
#define HFPD 0x04
#define HSPW 0x01
//LCDCON5配置
#define FRM565 1
#define INVVCLK 1
#define INVLINE 1
#define INVVFRAME 1
#define PWREN 1
#define BSWP 0
#define HWSWP 1
//此宏定义就是为了获取LCD的帧缓冲区的起始地址的【21:1】位
#define Low21Bits(n) ((n)&0x1fffff)
//声明一个帧内存用于保存帧图像数据
volatile unsigned short Lcd_Buffer[240][320];
//LCD控制寄存器初始化
void Lcd_Init(void)
rGPCCON=0xaaaa02a9;
//先将GPC和GPD的管教配置为LCD下的功能。
rLCDCON1=(CLKVAL&&8)|(PNRMODE&&5)|(BPPMODE&&1);
rLCDCON2=(VBPD&&24)|((HEIGHT-1)&&14)|(VFPD&&6)|(VSPW);
rLCDCON3=(HBPD&&19)|((WIDTH-1)&&8)|(HFPD);
rLCDCON4=HSPW;
rLCDCON5=(FRM565&&11)|(INVVCLK&&10)|(INVLINE&&9)|(INVVFRAME&&8)|(BSWP&&1)|(HWSWP);
rLCDSADDR1=(((unsigned int)Lcd_Buffer&&22)&&21)|Low21Bits((unsigned int)Lcd_Buffer&&1);
rLCDSADDR2=Low21Bits(((unsigned int)Lcd_Buffer+(240*320*2))&&1);
rLCDSADDR3=(0&&11)|(WIDTH);
void Lcd_PowerEnable(int powerEnable)
&& &rGPGCON&=~(3&&8)|(2&&8);
&& &rGPGDAT|=1&&4;
&& &rLCDCON5&=~(1&&3)|(powerEnable&&3);
void PutPixel(unsigned int x,unsigned int y,unsigned short c)
&& &if((x&320)&&(y&240))
&& &&& &Lcd_Buffer[y][x]=c;
void Lcd_ClearScr(unsigned int c)
&& &unsigned int x,y;
&& &for(y=0;y&240;y++)
&& &&& &for(x=0;x&320;x++)
&& &&& &&& &Lcd_Buffer[y][x]=c;
int Main()
&& &Lcd_Init();
&& &Lcd_PowerEnable(1);
&& &rLCDCON1|=1&&0;
&& &Lcd_ClearScr(0xffff);
&& &while(1)
&& &&& &PutPixel(100,100,569);
&& &return 0;
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4277次
排名:千里之外
(1)(1)(4)(9)LCD stm32驱动320x240单色LCD,控制器是8835。 Other systems 其他 182万源代码下载-
&文件名称: LCD
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 1183 KB
&&上传时间:
&&下载次数: 58
&&提 供 者:
&详细说明:stm32驱动320x240单色LCD,控制器是8835。-stm32 drive 320x240 color LCD, the controller is 8835.
文件列表(日期:~)(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&LCD320&&......\ExtDll.iex&&......\&&......\&&......\&&......\lcd_drv.crf&&......\&&......\lcd_drv.o&&......\&&......\main.crf&&......\&&......\main.o&&......\Micrium-uCOS-II-V286.ZIP&&......\stm32f10x.h&&......\STM32F10x.lst&&......\STM32F10x.o&&......\&&......\STM32_Init.c&&......\stm32_init.crf&&......\&&......\&&......\stm32_init.o&&......\&&......\STMLCD320.axf&&......\STMLCD320.htm&&......\&&......\&&......\STMLCD320.Opt&&......\STMLCD320.plg&&......\&&......\&&......\&&......\STMLCD320_Opt.Bak&&......\&&......\STMLCD320_Uv2.Bak&&......\table.crf&&......\table.d&&......\&&......\table.o&&......\
&相关搜索:
&输入关键字,在本站182万海量源码库中尽情搜索:
&[] - 以前给一个公司制作的程控交换机计费系统,支持多种计分方式,可生成各种计费报表
&[] - MCU驱动HX8346操作TFT屏程序,MCU-driven procedures TFT screen
&[] - ucGUI在stm32F103R8T6移植 智林 stm32开发板 IAR
&[] - 完成了用低成本ARM处理器stm32,搭配12864液晶做出的示波器源码
&[] - stm32 fsmc 驱动320*240 TFT代码例子
&[] - stm32采样波形同时在液晶上显示出来 并计算出频率
&[] - stm32 驱动库的中文使用说明,非常好呀,我就是看这个学会STM32的
&[] - stm32 原理与实践PDF,快速进入STM32世界
&[] - stm32电子书,好不容易找到的,一起分享吧
&[] - 单片机直接驱动TFT液晶显示320x240图像不需要lcd驱动IC树莓派打造视频监控机器人Verybot...
根据自己的一些从业经验,将这些系统设计时针对波特率自适应问题做一些阐述和分享..
STM32驱动2.4TFT液晶问题(8位数据接口,ILI9325驱动芯片)
<em style="color:#999;font-size:12 margin-left:10" id="authorposton14-6-2 22:48:21&nbsp
本人初学STM32,想尝试点亮2.4TFT,程序是从C51转换过来的,编译没有问题,但是下载STM32中始终是一片白板,弄了一整天也没点起色,实在是解决不了,所以想请哪位前辈帮我看看我的代码!指点指点,非常感谢!
//GPIO配置
void GPIO_Configuration(void)
& & & & GPIO_InitTypeDef GPIO_InitS //定义GPIO(结构体)
& & & & RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);
& & & & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_A
& & & & GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
& & & & GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
& & & & GPIO_Init(GPIOA, &GPIO_InitStructure);
& & & & GPIO_Init(GPIOB, &GPIO_InitStructure);&&
& & & & GPIO_Init(GPIOC, &GPIO_InitStructure);&&
& & & & GPIO_Init(GPIOD, &GPIO_InitStructure);
& & & & GPIO_SetBits(GPIOA,GPIO_Pin_All);
& & & & GPIO_SetBits(GPIOB,GPIO_Pin_All);
& & & & GPIO_SetBits(GPIOC,GPIO_Pin_All);
int main()
& & & & RCC_Configuration();
& & & & GPIO_Configuration();
& & & & delay_init(72);& & & &&&//72M晶振
& & & & ILI9325_Initial(); //初始化LCD
& & & & while(1)
& & & & & & & & CLR_Screen(Red); //用背景色清屏& & & &
& & & & & & & & CLR_Screen(Green); //用背景色清屏
& & & & & & & & CLR_Screen(Blue); //用背景色清屏& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & && && & & & & & & &
& & & & }& & & & & & & &
#include&9325tp.h&
/*----------------------------------------------------------------
& && && && && && && && && &定义硬件端口
----------------------------------------------------------------*/
#define RW PAout(12)//读写
#define RS PAout(11)//数据命令
#define RES PBout(7)//复位
#define CS PBout(8)//片选
unsigned char pic[];
/*----------------------------------------------------------------
& && && && && && && && && &清屏函数
输入参数:bColor 清屏所使用的背景色
----------------------------------------------------------------*/
void CLR_Screen(unsigned int bColor)
& & & & unsigned int i,j;
& & & & LCD_SetPos(0,240,0,320);//320x240
& & & & for (i=0;i&320;i++)
& & & & {& & & &
& & & & & & & & for (j=0;j&240;j++)
& & & & & & & & Write_Data_U16(bColor);& & & &
/*----------------------------------------------------------------
& && && && && && && && & 写命令、写数据
输入参数:x 需要输入的命令 16位
& && && & y 需要输入的数据 16位
----------------------------------------------------------------*/
void&&Write_Cmd_Data (unsigned char x,unsigned int y)
& & & & unsigned char m,n;
& & & & m=y&&8;
& & & & n=y;
& & & & Write_Cmd(0x00,x);
& & & & Write_Data(m,n);
/*----------------------------------------------------------------
& && && && && && && && & 写16位数据
----------------------------------------------------------------*/
void&&Write_Data_U16(unsigned int y)
& & & & unsigned char m,n;
& & & & m=y&&8;
& & & & n=y;
& & & & Write_Data(m,n);
/*----------------------------------------------------------------
& && && && && && && && && &写命令
----------------------------------------------------------------*/
void Write_Cmd(unsigned char DH,unsigned char DL)
& & & & u16
& & & & CS=0;
& & & & RS=0;
& & & & temp=GPIOA-&ODR&0xff00+(u16)DH;//不能改变高位的数据
& & & & GPIO_Write(GPIOA, temp);
& & & & RW=0;
& & & & RW=1;
& & & & temp=GPIOA-&ODR&0xff00+(u16)DL;//不能改变高位的数据& & & &
& & & & GPIO_Write(GPIOA, temp);
& & & & RW=0;
& & & & RW=1;
& & & & CS=1;
/*----------------------------------------------------------------
& && && && && && && && && &写数据 双8位
----------------------------------------------------------------*/
void Write_Data(unsigned char DH,unsigned char DL)
& & & & u16
& & & & CS=0;
& & & & RS=1;
& & & & temp=GPIOA-&ODR&0xff00+(u16)DH;//不能改变高位的数据
& & & & GPIO_Write(GPIOA, temp);
& & & & RW=0;
& & & & temp=GPIOA-&ODR&0xff00+(u16)DL;//不能改变高位的数据
& & & & GPIO_Write(GPIOA, temp);
& & & & RW=0;
& & & & RW=1;
& & & & CS=1;
/*----------------------------------------------------------------
& && && && && && && && && & 液晶初始化
----------------------------------------------------------------*/
void ILI9325_Initial(void)
& & & & CS=1;
& & & & delay_ms(5);
& & & & RES=0;
& & & & delay_ms(5);
& & & & RES=1;
& & & & delay_ms(5);
& & & & delay_ms(50);
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x7);&&
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x000A,0x0000);
& & & & Write_Cmd_Data(0x000C,0x0000);
& & & & Write_Cmd_Data(0x000D,0x0000);
& & & & Write_Cmd_Data(0x000F,0x0000);
& & & & //power on sequence VGHVGL
& & & & Write_Cmd_Data(0x0);& &
& & & & Write_Cmd_Data(0x7);&&
& & & & Write_Cmd_Data(0x0);&&
& & & & Write_Cmd_Data(0x0);
& & & & //vgh
& & & & Write_Cmd_Data(0x0);& &
& & & & Write_Cmd_Data(0x7);
& & & & //delay_ms(100);
& & & & //vregiout
& & & & Write_Cmd_Data(0xd); //0x001b
& & & & //delay_ms(100);
& & & & //vom amplitude
& & & & Write_Cmd_Data(0x0);
& & & & //delay_ms(100);
& & & & //vom H
& & & & Write_Cmd_Data(0x8);
& & & & Write_Cmd_Data(0x002B,0x000D);
& & & & //gamma
& & & & Write_Cmd_Data(0x4);
& & & & Write_Cmd_Data(0x7);
& & & & Write_Cmd_Data(0x2);// 0006
& & & & Write_Cmd_Data(0x6);
& & & & Write_Cmd_Data(0x8);
& & & & Write_Cmd_Data(0x7);
& & & & Write_Cmd_Data(0x4);//0200
& & & & Write_Cmd_Data(0x7);
& & & & Write_Cmd_Data(0x003C,0x0405);// 0504
& & & & Write_Cmd_Data(0x003D,0x0F02);
& & & & //ram
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0xEF);
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0xF);&&
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x1);
& & & & Write_Cmd_Data(0x006A,0x0000);
& & & & //
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x0);
& & & & //
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x3);
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x0);
& & & & Write_Cmd_Data(0x3);& & & &
//& & & & Write_Cmd_Data(0x0022);//& & & & & & & &
/*----------------------------------------------------------------
& && && && && && && && & 设置坐标
----------------------------------------------------------------*/
static void LCD_SetPos(unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1)
&&Write_Cmd_Data(WINDOW_XADDR_START,x0);
&&Write_Cmd_Data(WINDOW_XADDR_END,x1);
&&Write_Cmd_Data(WINDOW_YADDR_START,y0);
&&Write_Cmd_Data(WINDOW_YADDR_END,y1);
&&Write_Cmd_Data(GRAM_XADDR,x0);
&&Write_Cmd_Data(GRAM_YADDR,y0);
&&Write_Cmd (0x00,0x22);//LCD_WriteCMD(GRAMWR);
帮顶下,以前我也遇到过这个问题,但是好久了
我也很想解决这个问题。
我也很想解决这个问题。
怎么和我一样一样的
站长推荐 /4
Powered by

我要回帖

更多关于 易语言 自定义坐标 的文章

 

随机推荐