《DSP课程设计液晶显示器控制显示.doc》由会员分享,可在线阅读,更多相关《DSP课程设计液晶显示器控制显示.doc(20页珍藏版)》请在三一办公上搜索。
1、DSP原理及应用课程设计 学 院 许昌学院 专 业 电子信息工程班 级 09级一班分 组 成 员 郭鹏飞张浩联 系 方 式指 导 教 师 侯照然 2012 年 6 月一、设计题目:液晶显示器控制显示1二、设计目的与步骤:12.1、12.2、1三、设计原理:23.1、扩展IO接口:23.2、液晶显示模块的访问、控制是由VC5416 DSP对扩展接口的操作完成23.3、液晶显示模块编程控制:23.4、控制I/O口的寻址:23.5、显示控制方法:23.6液晶显示器与DSP的连接:43.7、数据信号的传送:4四、 CCS开发环境54.1、54.2、6五、C语言程序8六、实验结果和分析156.1、156
2、.2、166.3、166.4、16七、设计收获及体会17一、设计题目:液晶显示器控制显示二、设计目的与步骤:2.1、设计目的通过实验学习使用VC5416 DSP的扩展I/O端口控制外围设备的方法,了解液晶显示器的显示控制原理及编程方法。2.2、设计步骤1实验准备: 连接实验设备:请参看本书第三部分、第一章、二。2设置Code Composer Studio 2.21在硬件仿真(Emulator)方式下运行:3启动Code Composer Studio 2.21:选择菜单DebugReset CPU。4打开工程文件:浏览LCD.c文件的内容,理解各语句作用工程目录:C:ICETEKVC5416
3、AES61VC5416AES61Lab0403-LCDLCD.pjt。5编译、下载程序。6运行程序观察结果:7将内层循环中的“CTRLCDLCR=( nBW=0 )?(ledkeynCounti):(ledkeynCounti);”语句改为“CTRLCDRCR=( nBW=0 )?(ledkeynCounti):(ledkeynCounti);”,重复步骤5-6,实现在屏幕右侧显示。8更改程序中对页、列的设置,实现不同位置的显示。9自己设计一些控制语句,实现不同显示效果。10结束程序运行,退出CCS。三、设计原理:3.1、扩展IO接口:ICETEK-VC5416-A是一块以TMS320VC54
4、16ADSP为核心的DSP扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备。3.2、液晶显示模块的访问、控制是由VC5416 DSP对扩展接口的操作完成。控制口的寻址:命令控制接口的寄存器为CTRLCDCMDR,数据控制接口的寄存器为CTRLCDLCR和CTRLCDRCR,辅助控制接口的寄存器为CTRLCDCR。3.3、液晶显示模块编程控制:液晶显示模块的访问、控制是由TMS320VC5416对扩展接口的操作完成。3.4、控制I/O口的寻址:命令控制接口CTRLCDCMDR的地址为0x8001,数据控制接口的地址为CTRLCDLCR :0x8003和CTRLCDR
5、CR :0x8004,辅助控制接口CTRLCDCR的地址为0x8002。3.5、显示控制方法:液晶显示模块中有两片显示缓冲存储器,分别对应屏幕显示的象素,向其中写入数值将改变显示,写入“1”则显示一点,写入“0”则不显示。其地址与象素的对应方式参见表2-3: 表2-3 地址与象素的对应方式左侧显示内存右侧显示内存Y=016263016263行号DB0DB0DB0DBODBODBODBODBODBODBO0X=0DB7DB7DB7DB7DB7DB7DB7DB7DB7DB77DB0DB0DB0DB0DB0DB0DB0DB0DB0DB08DB7DB7DB7DB7DB7DB7DB7DB7DB7DB75
6、5X=7DB0DBODBODBODBODBODBODBODBODBO56DB7DB7DB7DB7DB7DB7DB7DB7DB7DB763- 发送控制命令:向液晶显示模块发送控制命令的方法是通过向命令控制I/O接口写入命令控制字,然后再向辅助控制接口写入0。由于液晶模块相对于DSP来讲是慢速设备,在命令之间可能需要增加延时语句。下面给出的是基本命令字、解释和C语言控制语句举例。.显示开关:0x3f打开显示;0x3e关闭显示;CTRLCDCMDR=0x3f; CTRLCDCR=0; /将液晶显示打开CTRLCDCMDR=0x3e; CTRLCDCR=0; /将液晶显示关闭.设置显示起始行:0x0c
7、0+起始行取值,其中起始行取值为0至63;CTRLCDCMDR=0x0c0; CTRLCDCR=0; / 设置从存储器第0行开始显示CTRLCDCMDR=0x0c8; CTRLCDCR=0; / 设置从存储器第8行开始显示.设置操作页:0x0b8+页号,其中页号取值为0-7;CTRLCDCMDR=0x0b0; CTRLCDCR=0; /设置即将操作的存储器第0页CTRLCDCMDR=0x0b2; CTRLCDCR=0; /设置即将操作的存储器第2页.设置操作列:0x40+列号,其中列号为取值为0-63;CTRLCDCMDR =0x40; CTRLCDCR=0; /设置即将操作的存储器第0列CT
8、RLCDCMDR =0x44; CTRLCDCR=0; /设置即将操作的存储器第4列- 写显示数据:在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的数据写入液晶显示模块的缓存。将数据发送到相应数据控制I/O接口即可。由于液晶模块相对于DSP来讲是慢速设备,在命令之间可能需要增加延时语句。C语言语句举例说明:CTRLCDLCR=0x80; CTRLCDCR=0;/向左侧屏幕缓存存入数0x80,/如果显示行、页号和列号均为0/时,屏幕上第8行第1列将显/示黑色象素CTRLCDRCR=0x01; CTRLCDCR=0;/向右侧屏幕缓存存入数据1,如/果显示行、页号和列号均为0/时,屏幕
9、上/第1行第65列将显/示黑色象素3.6液晶显示器与DSP的连接:3.7、数据信号的传送:由于液晶显示模块相对运行在高主频下的DSP属于较为慢速设备,连接时需要考虑数据线上信号的等待问题;电平转换:由于DSP为3.3V设备,而液晶显示模块属于5V设备,所以在连接控制线、数据线时需要加电平隔离和转换设备,如:ICETEK-CTR板上使用了74LS245。开始初始化DSP时钟初始化CTR由0到9循环显示数字清屏,设置显示位置四、 CCS开发环境4.1、CCS是一种针对TMS320系列DSP的集成开发环境,在windows操作系统下,采用图形接口界面,提供环境配置、源文件编辑、程序调试、跟踪和分析等
10、工具,提供了配置、建立、调试、跟踪和分析程序的工具,从而完成编辑、编译、链接、调试和数据分析等工作。利用ccs集成开发软件,用户可以在一个开发环境下完成工程项目创建、程序编辑、编译、链接、调试和数据分析等工作环节。使用ccs开发应用程序的一般步骤为:1.打开或创建一个工程项目文件,包括源程序、目标文件、库文件、链接命令文件和包含文件。2.编辑各类文件。可以使用ccs提供的集成编辑环境,对头文件、链接命令文件和源程序进行编辑。3.对工程项目进行编译。如出现语法错误,将在构建窗口中显示错误信息。用户可以根据显示信息定位错误信息,更改错误。4.对结果和数据进行分析和算法评估。用户可以利用ccs提供的
11、探测点、图形显示、性能评价等工具,对运行结果、输出数据进行分析,评估算法性能。4.2、ICETEK DSP教学实验箱结构图(参见图2-2)步进电机扩展模块电源开关液晶屏幕直流电机实验箱电源开关AD输入键盘交通灯蜂鸣器DSP电源开关测试点图2-2 DSP教学实验箱结构图通用控制模块部分:显示输出:- 液晶显示(LCD):12864像素点阵图形显示屏。- 发光二极管:指示灯(12只,分为红、黄、绿三种颜色)音频输出: D/A输出提供音频插座,可直接接插耳机。键盘:17键数字键盘(标准PS2接口)。步进电机:四相步进电机,步距角5.625,起动频率300PPS,运行频率900PPS,可由DSP I/
12、O端口控制旋转和方向、速度。直流电机:空载转速3050转/分,输出功率1.35W,启动力矩21.3N,可以接收DSP输出的PWM控制信号,实现电机的转速和方向控制。ICETEK DSP教学实验箱的外围接口:外围接口PA:ICETEK-VC5416-A扩展接口P4外围接口PB:ICETEK-VC5416-A扩展接口P3。 五、C语言程序/ 常量定义#define LCDDELAY 1 #define LCDCMDTURNON 0x3f #define LCDCMDTURNOFF 0x3e #define LCDCMDSTARTLINE 0xc0 /起始行为第0行#define LCDCMDPAG
13、E 0xb8 /起始页为第0页#define LCDCMDVERADDRESS 0x40 / 起始列为第0页#define WAITSTATUS (*(unsigned int *)0x28)/ CTR扩展寄存器定义ioport unsigned int port8000;ioport unsigned int port8001;ioport unsigned int port8002;ioport unsigned int port8003;ioport unsigned int port8004;ioport unsigned int port8005;ioport unsigned in
14、t port8007;#define CTRGR port8000#define CTRLCDCMDR port8001#define CTRKEY port8001#define CTRCLKEY port8002#define CTRLCDCR port8002#define CTRLCDLCR port8003 /输出显示在左侧屏幕#define CTRLCDRCR port8004 /输出显示在右侧屏幕#define CTRLA port8005#define CTRLR port8007void Delay(unsigned int nTime);/ 延时函数void TurnOnL
15、CD(); / 打开显示void LCDCLS(); / 清除屏幕显示内容unsigned char ledkey108=0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00, /00x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00, /10x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00,/20x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00, /30x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00, /40x00,0x00,0x4E,0x92,0x92,
16、0x92,0x62,0x00, /50x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00, /60x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00, /70x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00, /80x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00 /9; /主函数main()int i,nCount=0,nBW=0; 定义变量CTRGR=0;/ 初始化ICETEK-CTRCTRGR=0x80; CTRGR=0;CTRLR=0;/ 关闭东西方向的交通灯CTRLR=0x40
17、; / 关闭南北方向的交通灯TurnOnLCD();/ 子函数调用,打开显示LCDCLS();/ 子函数调用,清除显示内存CTRLCDCMDR=LCDCMDSTARTLINE;/ 设置显示起始行CTRLCDCR=0;for (;) /设置无限循环,行列初始化,并输出要显示的内容CTRLCDCMDR=LCDCMDPAGE;/ 设置操作页=0 Delay(LCDDELAY); /延时 CTRLCDCR=0;Delay(LCDDELAY); /延时CTRLCDCMDR=LCDCMDVERADDRESS;/ 起始列=0Delay(LCDDELAY); /延时CTRLCDCR=0;Delay(LCDDE
18、LAY); /延时for ( i=0;i8;i+ ) /设置八次循环,每次循环显示一个数CTRLCDLCR=( nBW=0 )?(ledkeynCounti):(ledkeynCounti);/ 屏幕左侧第1至8行第i列赋值port8002=0;/ (赋值后当前操作列自动加1,所以不需设置) nBW=0则取原数字,十个数显示完nBW取反,则对数据取反Delay(LCDDELAY); /延时CTRLCDCR=0;Delay(LCDDELAY); /延时Delay(512); /延时nCount+; /显示完一个数则加一,显示下一个数if ( nCount=10 )nCount=0; /十个数显示
19、完则对nCount赋值为0,重新开始显示nBW=1-nBW; /nBW为字节定义,十个数显示完则取反 /延时子函数void Delay(unsigned int nDelay)int ii,jj,kk=0;for ( ii=0;iinDelay;ii+ )for ( jj=0;jj1024;jj+ )kk+; /液晶屏打开void TurnOnLCD()CTRLCDCMDR=LCDCMDTURNON; /赋值0x3fDelay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY); CTRLCDCMDR=LCDCMDSTARTLINE; /赋值0x3eDelay(LCDDE
20、LAY);CTRLCDCR=0;Delay(LCDDELAY); /清除液晶屏幕内容void LCDCLS()int i,j;CTRLCDCMDR=LCDCMDSTARTLINE; /从第0行开始Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);for ( i=0;i8;i+ ) /共8页,一页一页的清屏CTRLCDCMDR=LCDCMDPAGE+i; /清完一页进入下一页Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);CTRLCDCMDR=LCDCMDVERADDRESS;Delay(LCDDELAY);CTRLCDC
21、R=0;Delay(LCDDELAY);for ( j=0;j64;j+ ) /每页64列,一列一列清屏CTRLCDLCR=0;Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);CTRLCDCMDR=LCDCMDPAGE+i;Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);CTRLCDCMDR=LCDCMDVERADDRESS;Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);for ( j=0;j64;j+ )CTRLCDRCR=0;Delay(LCDDELAY);CTRLCDCR=
22、0;Delay(LCDDELAY);六、实验结果和分析6.1、原程序实验结果如图一所示图一6.2、将程序中CTRLCDLCR=( nBW=0 )?(ledkeynCounti):(ledkeynCounti);语句改为“CTRLCDRCR=( nBW=0 )?(ledkeynCounti):(ledkeynCounti);”后,数字应该显示在右半屏的第0行、第0列,实验结果如下图二6.3、将LCDCMDSTARTLINE 的值改为0xcf,LCDCMDPAGE 0xbc3, 显示结果如下图所示图三6.4、将主函数中的if语句前添加语句:LCDCMDVERADDRESS +;if (LCDCMDVERADDRESS =63) LCDCMDVERADDRESS =0; 结果显示如下图所示图四七、设计收获及体会通过这次课程设计让我们更多的了解了更多关于DSP的知识和协作的重要,也看清了现代电子科技对我们的生活的影响,同时也巩固了我们的专业知识。此次课程设计也会是我们在大学时期的很好的一次实践和锻炼机会。让我们在以后的学习中更加努力刻苦。