实验七LCD控制实验.doc
《实验七LCD控制实验.doc》由会员分享,可在线阅读,更多相关《实验七LCD控制实验.doc(7页珍藏版)》请在装配图网上搜索。
实验七 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.51或ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序.四、实验步骤1新建工程,将“Exp7 LCD驱动控制实验”中的文件添加到工程中。2定义有关常量与宏(lcd320.h,lcd320.c)#define LCDWIDTH320#define LCDHEIGHT240U32* pLCDBuffer16=(U32*)0xc000000; /一级缓存指针U32 LCDBufferLCDHEIGHTLCDWIDTH;/二级缓存将其定义为32位是为了与RGB颜色兼容。lcd320.h文件中的内容:#include def.h#define LCDDisplayPin0x0010/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)#define LCDCON1_INVCLK(14)#define LCDCON1_MMODE(17)#define L248 (8)#define CLKVAL(20)/ 60Mhz, fr=100Hz (CLKVAL=38.6)/#define M5D(n) (n) & 0x1fffff)U32* pLCDBuffer16=(U32*)0xc000000;U32 LCDBufferLCDHEIGHTLCDWIDTH;void LCD_Init()int i;U32 LCDBASEU,LCDBASEL,LCDBANK; LCDDisplayOpen(FALSE); rLCDCON1=(0); / disablerLCDCON2=(239)|(11910)|(1522;/(U32)LCDBuffer16)22;LCDBASEU=0x0;/(U32)LCDBuffer16)&0x3fffff;LCDBASEL=LCDBASEU+(160)*240;rLCDSADDR1= (0x327) |(LCDBANK1)&0x7ffffff); / color_mode, LCDBANK, LCDBASEUrLCDSADDR2= (029)|(021)|LCDBASEL;rLCDSADDR3= (320/2)|(09); /No virtual screen. /rREDLUT=0xfca86420;/rGREENLUT=0xfca86420;/rBLUELUT=0xfffff840;rREDLUT=0xfca86420;rGREENLUT=0xfca86420;rBLUELUT=0xfffffa50;rLCDCON1=LCDCON1_ENVID|01|02|03|(25)|17|(0x38)|(0x310)|(CLKVAL12);/|LCDCON1_MMODE; / enable,8B_SNGL_SCAN,WDLY=16clk,WLH=16clk,CLKVAL=?for(i=0;i80*240;i+)*(pLCDBuffer16+i)=0x0;Delay(5000);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&0xe0)|(pbuf13)&0x1c)|(pbuf26);/变换RGBlcddata|=pixcolorj;pbuf+=4;*(pLCDBuffer16+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=0x0;/(U32)LCDBuffer16)&0x3fffff;LCDBASEL=LCDBASEU+(160)*240;rLCDSADDR1= (0x327) |(LCDBANK1)&0x7ffffff); / color_mode, LCDBANK, LCDBASEUrLCDSADDR2= (029)|(021)|LCDBASEL;rLCDSADDR3= (320/2)|(09); /No virtual screen. /rREDLUT=0xfca86420;/rGREENLUT=0xfca86420;/rBLUELUT=0xfffff840;rREDLUT=0xfca86420;rGREENLUT=0xfca86420;rBLUELUT=0xfffffa50;rLCDCON1=LCDCON1_ENVID|01|02|03|(25)|17|(0x38)|(0x310)|(CLKVAL12);/|LCDCON1_MMODE; / enable,8B_SNGL_SCAN,WDLY=16clk,WLH=16clk,CLKVAL=?for(i=0;i80*240;i+)*(pLCDBuffer16+i)=0x0;Delay(5000);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&0xe0)|(pbuf13)&0x1c)|(pbuf26);/变换RGBlcddata|=pixcolor3)&0x1c)|(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;i=0;j-=8)pixcolor=(pbuf0&0xe0)|(pbuf13)&0x1c)|(pbuf26);/变换RGBlcddata|=pixcolorj;pbuf+=4;*(pLCDBuffer16+i)=lcddata;5.编写主函数(main.c)在LCD上显示256色图形的关键是填充二级显示缓冲,将显示象素的24位颜色信息写入LCDBuffer。将RGB三种基本颜色按一定比例混合即可构成更复杂的颜色,每个象素的三种基本颜色分别占一个字节,可以方便的在程序里改写各基本颜色的数值,从而改变该象素的混合颜色。#include 44b.h#includeuhal.h#include option.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=0x00e0e0e0; /RGB均为0 黑色 break; case 1: jcolor=0x000000e0; /R 红色 break; case 2: jcolor=0x0000d0e0; /R and G 橙色 break; case 3: jcolor=0x0000e0e0; /R and G 黄 break; case 4: jcolor=0x0000e000; /G 绿色 break; case 5: jcolor=0x00e0e000; /G B 青色 break; case 6: jcolor=0x00e00000; /B 蓝色 break; case 7: jcolor=0x00e000e0; /R and B 紫色 break; case 8: jcolor=0x00000000; /RGB 白色 break; for (k=0;k240;k+) for (j=i*32;ji*32+32;j+) LCDBufferkj=jcolor; jcolor=0x000000ff; for (i=0;i240;i+) if (i=80|i=160) jcolor=8; for (j=288;j320;j+) LCDBufferij=jcolor; LCD_Refresh() ; while(1);return 0;五、实验心得了解了LCD基本概念与原理。理解了LCD的驱动控制。熟悉了用总线方式驱动LCD模块。熟悉了用ARM内置的LCD控制器驱动LCD。- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 LCD 控制
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文