实验七LCD控制实验_第1页
实验七LCD控制实验_第2页
实验七LCD控制实验_第3页
实验七LCD控制实验_第4页
实验七LCD控制实验_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验七 LCD的驱动控制实验08通信(2)班 王文龙 E08680222一、实验目的1了解LCD基本概念与原理。2理解LCD的驱动控制。3熟悉用总线方式驱动LCD模块。4熟悉用ARM内置的LCD控制器驱动LCD。二、实验内容学习LCD显示器的基本原理,理解其驱动控制方法。掌握两种LCD驱动方式的基本原理和方法。并用编程实现:1用总线方式直接驱动带有驱动模块的LCD。2用ARM内置的LCD控制器来驱动LCD。三、实验设备及工具硬件:ARM嵌入式开发平台、用于ARM7TDMI的JTAG仿真器、PC机Pentium100以上。软件:PC机操作系统win98、Win2000或WinXP、ARM SDT

2、 2.51或ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序.四、实验步骤1新建工程,将“Exp7 LCD驱动控制实验”中的文件添加到工程中。2定义有关常量与宏(lcd320.h,lcd320.c)#define LCDWIDTH320#define LCDHEIGHT240U32* pLCDBuffer16=(U32*)0 xc000000; /一级缓存指针U32 LCDBufferLCDHEIGHTLCDWIDTH;/二级缓存将其定义为32位是为了与RGB颜色兼容。lcd320.h文件中的内容:#include def.h#define LCDDisplayPin0 x0010/

3、GPB4#define LCDWIDTH320#define LCDHEIGHT240void LCD_Refresh(void);void LCD_Init(void);void LCDDisplayOpen(U8 isOpen);lcd320.c中的内容:#include #include #include def.h#include 44b.h#include LCD320.h#define LCDCON1_ENVID(1)#define LCDCON1_INVVD(11)#define LCDCON1_INVFRAME(12)#define LCDCON1_INVLINE(13)#de

4、fine LCDCON1_INVCLK(14)#define LCDCON1_MMODE(17)#define L248 (8)#define CLKVAL(20)/ 60Mhz, fr=100Hz (CLKVAL=38.6)/#define M5D(n) (n) & 0 x1fffff)U32* pLCDBuffer16=(U32*)0 xc000000;U32 LCDBufferLCDHEIGHTLCDWIDTH;void LCD_Init()int i;U32 LCDBASEU,LCDBASEL,LCDBANK; LCDDisplayOpen(FALSE); rLCDCON1=(0);

5、/ disablerLCDCON2=(239)|(11910)|(1522;/(U32)LCDBuffer16)22;LCDBASEU=0 x0;/(U32)LCDBuffer16)&0 x3fffff;LCDBASEL=LCDBASEU+(160)*240;rLCDSADDR1= (0 x327) |(LCDBANK1)&0 x7ffffff); / color_mode, LCDBANK, LCDBASEUrLCDSADDR2= (029)|(021)|LCDBASEL;rLCDSADDR3= (320/2)|(09); /No virtual screen. /rREDLUT=0 xfc

6、a86420;/rGREENLUT=0 xfca86420;/rBLUELUT=0 xfffff840;rREDLUT=0 xfca86420;rGREENLUT=0 xfca86420;rBLUELUT=0 xfffffa50;rLCDCON1=LCDCON1_ENVID|01|02|03|(25)|17|(0 x38)|(0 x310)|(CLKVAL12);/|LCDCON1_MMODE; / enable,8B_SNGL_SCAN,WDLY=16clk,WLH=16clk,CLKVAL=?for(i=0;i80*240;i+)*(pLCDBuffer16+i)=0 x0;Delay(5

7、000);LCDDisplayOpen(TRUE);void LCDDisplayOpen(U8 isOpen)if(isOpen)rPDATB&=LCDDisplayPin;elserPDATB|=LCDDisplayPin;void LCD_Refresh()int i,j;U32 lcddata;U32 pixcolor;/一个像素点的颜色U8* pbuf=(U8*)LCDBuffer0;for(i=0;i=0;j-=8)pixcolor=(pbuf0&0 xe0)|(pbuf13)&0 x1c)|(pbuf26);/变换RGBlcddata|=pixcolorj;pbuf+=4;*(p

8、LCDBuffer16+i)=lcddata;3编写LCD初始化函数(lcd320.c)。 设置各功能寄存器,清空显示缓存区。void LCD_Init()int i;U32 LCDBASEU,LCDBASEL,LCDBANK; LCDDisplayOpen(FALSE); rLCDCON1=(0); / disablerLCDCON2=(239)|(11910)|(1522;/(U32)LCDBuffer16)22;LCDBASEU=0 x0;/(U32)LCDBuffer16)&0 x3fffff;LCDBASEL=LCDBASEU+(160)*240;rLCDSADDR1= (0 x32

9、7) |(LCDBANK1)&0 x7ffffff); / color_mode, LCDBANK, LCDBASEUrLCDSADDR2= (029)|(021)|LCDBASEL;rLCDSADDR3= (320/2)|(09); /No virtual screen. /rREDLUT=0 xfca86420;/rGREENLUT=0 xfca86420;/rBLUELUT=0 xfffff840;rREDLUT=0 xfca86420;rGREENLUT=0 xfca86420;rBLUELUT=0 xfffffa50;rLCDCON1=LCDCON1_ENVID|01|02|03|(

10、25)|17|(0 x38)|(0 x310)|(CLKVAL12);/|LCDCON1_MMODE; / enable,8B_SNGL_SCAN,WDLY=16clk,WLH=16clk,CLKVAL=?for(i=0;i80*240;i+)*(pLCDBuffer16+i)=0 x0;Delay(5000);LCDDisplayOpen(TRUE);void LCDDisplayOpen(U8 isOpen)if(isOpen)rPDATB&=LCDDisplayPin;elserPDATB|=LCDDisplayPin;void LCD_Refresh()int i,j;U32 lcdd

11、ata;U32 pixcolor;/一个像素点的颜色U8* pbuf=(U8*)LCDBuffer0;for(i=0;i=0;j-=8)pixcolor=(pbuf0&0 xe0)|(pbuf13)&0 x1c)|(pbuf26);/变换RGBlcddata|=pixcolor3)&0 x1c)|(pbuf26)。其中,pbuf0、pbuf1、pbuf2是一个象素的32位彩色数据的前24位,分别代表R、G、B。void LCD_Refresh()int i,j;U32 lcddata;U32 pixcolor;/一个像素点的颜色U8* pbuf=(U8*)LCDBuffer0;for(i=0;

12、i=0;j-=8)pixcolor=(pbuf0&0 xe0)|(pbuf13)&0 x1c)|(pbuf26);/变换RGBlcddata|=pixcolorj;pbuf+=4;*(pLCDBuffer16+i)=lcddata;5.编写主函数(main.c)在LCD上显示256色图形的关键是填充二级显示缓冲,将显示象素的24位颜色信息写入LCDBuffer。将RGB三种基本颜色按一定比例混合即可构成更复杂的颜色,每个象素的三种基本颜色分别占一个字节,可以方便的在程序里改写各基本颜色的数值,从而改变该象素的混合颜色。#include 44b.h#includeuhal.h#include o

13、ption.h#includedef.h#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting extern U32 LCDBuffer240320;int main(void)int i,j,k;U32 jcolor;ARMTargetInit();/开发版初始化LCD_Init();/LCD初始化 for (i=0;i9;i+) switch (i) case 0: jcolor=0 x00e0e0e0; /RGB均为0 黑色 break; case 1: jcolor=0 x00

14、0000e0; /R 红色 break; case 2: jcolor=0 x0000d0e0; /R and G 橙色 break; case 3: jcolor=0 x0000e0e0; /R and G 黄 break; case 4: jcolor=0 x0000e000; /G 绿色 break; case 5: jcolor=0 x00e0e000; /G B 青色 break; case 6: jcolor=0 x00e00000; /B 蓝色 break; case 7: jcolor=0 x00e000e0; /R and B 紫色 break; case 8: jcolor=0 x00000000; /RGB 白色 break; for (k=0;k240;k+) for (j=i*32;ji*32+32;j+) LCD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论