DSP课程设计液晶显示器控制显示.docx

上传人:b****7 文档编号:25538649 上传时间:2023-06-09 格式:DOCX 页数:19 大小:447.34KB
下载 相关 举报
DSP课程设计液晶显示器控制显示.docx_第1页
第1页 / 共19页
DSP课程设计液晶显示器控制显示.docx_第2页
第2页 / 共19页
DSP课程设计液晶显示器控制显示.docx_第3页
第3页 / 共19页
DSP课程设计液晶显示器控制显示.docx_第4页
第4页 / 共19页
DSP课程设计液晶显示器控制显示.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

DSP课程设计液晶显示器控制显示.docx

《DSP课程设计液晶显示器控制显示.docx》由会员分享,可在线阅读,更多相关《DSP课程设计液晶显示器控制显示.docx(19页珍藏版)》请在冰豆网上搜索。

DSP课程设计液晶显示器控制显示.docx

DSP课程设计液晶显示器控制显示

一、设计题目:

液晶显示器控制显示

二、设计目的与步骤:

2.1、设计目的

通过实验学习使用VC5416DSP的扩展I/O端口控制外围设备的方法,了解液晶显示器的显示控制原理及编程方法。

2.2、设计步骤

1.实验准备:

⑴连接实验设备:

请参看本书第三部分、第一章、二。

2.设置CodeComposerStudio2.21在硬件仿真(Emulator)方式下运行:

3.启动CodeComposerStudio2.21:

选择菜单Debug→ResetCPU。

4.打开工程文件:

浏览LCD.c文件的内容,理解各语句作用

工程目录:

C:

\ICETEK\VC5416AES61\VC5416AES61\Lab0403-LCD\LCD.pjt。

5.编译、下载程序。

6.运行程序观察结果:

7将内层循环中的“CTRLCDLCR=(nBW==0)?

(ledkey[nCount][i]):

(~ledkey[nCount][i]);”语句改为“CTRLCDRCR=(nBW==0)?

(ledkey[nCount][i]):

(~ledkey[nCount][i]);”,重复步骤5-6,实现在屏幕右侧显示。

8.更改程序中对页、列的设置,实现不同位置的显示。

9.自己设计一些控制语句,实现不同显示效果。

10.结束程序运行,退出CCS。

三、设计原理:

3.1、扩展IO接口:

ICETEK-VC5416-A是一块以TMS320VC5416ADSP为核心的DSP扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备。

3.2、液晶显示模块的访问、控制是由VC5416DSP对扩展接口的操作完成。

控制口的寻址:

命令控制接口的寄存器为CTRLCDCMDR,数据控制接口的寄存器为CTRLCDLCR和CTRLCDRCR,辅助控制接口的寄存器为CTRLCDCR。

3.3、液晶显示模块编程控制:

液晶显示模块的访问、控制是由TMS320VC5416对扩展接口的操作完成。

3.4、控制I/O口的寻址:

命令控制接口CTRLCDCMDR的地址为0x8001,数据控制接口的地址为CTRLCDLCR:

0x8003和CTRLCDRCR:

0x8004,辅助控制接口CTRLCDCR的地址为0x8002。

 

3.5、显示控制方法:

液晶显示模块中有两片显示缓冲存储器,分别对应屏幕显示的象素,向其中写入数值将改变显示,写入“1”则显示一点,写入“0”则不显示。

其地址与象素的对应方式参见表2-3:

表2-3地址与象素的对应方式

左侧显示内存

右侧显示内存

Y=

0

1

···

62

63

0

1

···

62

63

行号

DB0

DB0

DB0

DBO

DBO

DBO

DBO

DBO

DBO

DBO

0

X=0

DB7

DB7

DB7

DB7

DB7

DB7

DB7

DB7

DB7

DB7

7

DB0

DB0

DB0

DB0

DB0

DB0

DB0

DB0

DB0

DB0

8

DB7

DB7

DB7

DB7

DB7

DB7

DB7

DB7

DB7

DB7

55

X=7

DB0

DBO

DBO

DBO

DBO

DBO

DBO

DBO

DBO

DBO

56

DB7

DB7

DB7

DB7

DB7

DB7

DB7

DB7

DB7

DB7

63

-发送控制命令:

向液晶显示模块发送控制命令的方法是通过向命令控制I/O接口写入命令控制字,然后再向辅助控制接口写入0。

由于液晶模块相对于DSP来讲是慢速设备,在命令之间可能需要增加延时语句。

下面给出的是基本命令字、解释和C语言控制语句举例。

.显示开关:

0x3f打开显示;0x3e关闭显示;

CTRLCDCMDR=0x3f;CTRLCDCR=0;//将液晶显示打开

CTRLCDCMDR=0x3e;CTRLCDCR=0;//将液晶显示关闭

.设置显示起始行:

0x0c0+起始行取值,其中起始行取值为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列

CTRLCDCMDR=0x44;CTRLCDCR=0;//设置即将操作的存储器第4列

-写显示数据:

在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的数据写入液晶显示模块的缓存。

将数据发送到相应数据控制I/O接口即可。

由于液晶模块相对于DSP来讲是慢速设备,在命令之间可能需要增加延时语句。

C语言语句举例说明:

CTRLCDLCR=0x80;CTRLCDCR=0;//向左侧屏幕缓存存入数0x80,

//如果显示行、页号和列号均为0

//时,屏幕上第8行第1列将显

//示黑色象素

CTRLCDRCR=0x01;CTRLCDCR=0;//向右侧屏幕缓存存入数据1,如

//果显示行、页号和列号均为0

//时,屏幕上/第1行第65列将显

//示黑色象素

 

3.6.液晶显示器与DSP的连接:

3.7、数据信号的传送:

由于液晶显示模块相对运行在高主频下的DSP属于较为慢速设备,连接时需要考虑数据线上信号的等待问题;

电平转换:

由于DSP为3.3V设备,而液晶显示模块属于5V设备,所以在连接控制线、数据线时需要加电平隔离和转换设备,如:

ICETEK-CTR板上使用了74LS245。

 

 

四、CCS开发环境

4.1、CCS是一种针对TMS320系列DSP的集成开发环境,在windows操作系统下,采用图形接口界面,提供环境配置、源文件编辑、程序调试、跟踪和分析等工具,提供了配置、建立、调试、跟踪和分析程序的工具,从而完成编辑、编译、链接、调试和数据分析等工作。

利用ccs集成开发软件,用户可以在一个开发环境下完成工程项目创建、程序编辑、编译、链接、调试和数据分析等工作环节。

使用ccs开发应用程序的一般步骤为:

1.打开或创建一个工程项目文件,包括源程序、目标文件、库文件、链接命令文件和包含文件。

2.编辑各类文件。

可以使用ccs提供的集成编辑环境,对头文件、链接命令文件和源程序进行编辑。

3.对工程项目进行编译。

如出现语法错误,将在构建窗口中显示错误信息。

用户可以根据显示信息定位错误信息,更改错误。

4.对结果和数据进行分析和算法评估。

用户可以利用ccs提供的探测点、图形显示、性能评价等工具,对运行结果、输出数据进行分析,评估算法性能。

4.2、ICETEKDSP教学实验箱结构图(参见图2-2)

 

 

 

 

图2-2DSP教学实验箱结构图

通用控制模块部分:

显示输出:

-液晶显示(LCD):

128×64像素点阵图形显示屏。

-发光二极管:

指示灯(12只,分为红、黄、绿三种颜色)

音频输出:

D/A输出提供音频插座,可直接接插耳机。

键盘:

17键数字键盘(标准PS2接口)。

步进电机:

四相步进电机,步距角5.625,起动频率≥300PPS,运行频率≥900PPS,可由DSPI/O端口控制旋转和方向、速度。

直流电机:

空载转速3050转/分,输出功率1.35W,启动力矩21.3N,可以接收DSP输出的PWM控制信号,实现电机的转速和方向控制。

ICETEKDSP教学实验箱的外围接口:

外围接口PA:

ICETEK-VC5416-A扩展接口P4

 

外围接口PB:

ICETEK-VC5416-A扩展接口P3。

五、C语言程序

//常量定义

#defineLCDDELAY1

#defineLCDCMDTURNON0x3f

#defineLCDCMDTURNOFF0x3e

#defineLCDCMDSTARTLINE0xc0//起始行为第0行

#defineLCDCMDPAGE0xb8//起始页为第0页

#defineLCDCMDVERADDRESS0x40//起始列为第0页

#defineWAITSTATUS(*(unsignedint*)0x28)

//CTR扩展寄存器定义

ioportunsignedintport8000;

ioportunsignedintport8001;

ioportunsignedintport8002;

ioportunsignedintport8003;

ioportunsignedintport8004;

ioportunsignedintport8005;

ioportunsignedintport8007;

#defineCTRGRport8000

#defineCTRLCDCMDRport8001

#defineCTRKEYport8001

#defineCTRCLKEYport8002

#defineCTRLCDCRport8002

#defineCTRLCDLCRport8003//输出显示在左侧屏幕

#defineCTRLCDRCRport8004//输出显示在右侧屏幕

#defineCTRLAport8005

#defineCTRLRport8007

voidDelay(unsignedintnTime);//延时函数

voidTurnOnLCD();//打开显示

voidLCDCLS();//清除屏幕显示内容

unsignedcharledkey[10][8]=

{

{0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00},//0

{0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00},//1

{0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00},//2

{0x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00},//3

{0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00},//4

{0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00},//5

{0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00},//6

{0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00},//7

{0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00},//8

{0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00}//9

};

//主函数

main()

{

inti,nCount=0,nBW=0;定义变量

CTRGR=0;//初始化ICETEK-CTR

CTRGR=0x80;

CTRGR=0;

CTRLR=0;//关闭东西方向的交通灯

CTRLR=0x40;//关闭南北方向的交通灯

TurnOnLCD();//子函数调用,打开显示

LCDCLS();//子函数调用,清除显示内存

CTRLCDCMDR=LCDCMDSTARTLINE;//设置显示起始行

CTRLCDCR=0;

for(;;)//设置无限循环,行列初始化,并输出要显示的内容

{

CTRLCDCMDR=LCDCMDPAGE;//设置操作页=0

Delay(LCDDELAY);//延时

CTRLCDCR=0;

Delay(LCDDELAY);//延时

CTRLCDCMDR=LCDCMDVERADDRESS;//起始列=0

Delay(LCDDELAY);//延时

CTRLCDCR=0;

Delay(LCDDELAY);//延时

for(i=0;i<8;i++)//设置八次循环,每次循环显示一个数

{

CTRLCDLCR=(nBW==0)?

(ledkey[nCount][i]):

(~ledkey[nCount][i]);//屏幕左侧第1至8行第i列赋值port8002=0;//(赋值后当前操作列自动加1,所以不需设置)

nBW=0则取原数字,十个数显示完nBW取反,则对数据取反

Delay(LCDDELAY);//延时

CTRLCDCR=0;

Delay(LCDDELAY);//延时

}

Delay(512);//延时

nCount++;//显示完一个数则加一,显示下一个数

if(nCount==10)

{

nCount=0;//十个数显示完则对nCount赋值为0,重新开始显示

nBW=1-nBW;//nBW为字节定义,十个数显示完则取反

}

}

}

//延时子函数

voidDelay(unsignedintnDelay)

{

intii,jj,kk=0;

for(ii=0;ii

{

for(jj=0;jj<1024;jj++)

{

kk++;

}

}

}

 

//液晶屏打开

voidTurnOnLCD()

{

CTRLCDCMDR=LCDCMDTURNON;//赋值0x3f

Delay(LCDDELAY);

CTRLCDCR=0;

Delay(LCDDELAY);

CTRLCDCMDR=LCDCMDSTARTLINE;//赋值0x3e

Delay(LCDDELAY);

CTRLCDCR=0;

Delay(LCDDELAY);

}

//清除液晶屏幕内容

voidLCDCLS()

{

inti,j;

CTRLCDCMDR=LCDCMDSTARTLINE;//从第0行开始

Delay(LCDDELAY);

CTRLCDCR=0;

Delay(LCDDELAY);

for(i=0;i<8;i++)//共8页,一页一页的清屏

{

CTRLCDCMDR=LCDCMDPAGE+i;//清完一页进入下一页

Delay(LCDDELAY);

CTRLCDCR=0;

Delay(LCDDELAY);

CTRLCDCMDR=LCDCMDVERADDRESS;

Delay(LCDDELAY);

CTRLCDCR=0;

Delay(LCDDELAY);

for(j=0;j<64;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;j<64;j++)

{

CTRLCDRCR=0;

Delay(LCDDELAY);

CTRLCDCR=0;

Delay(LCDDELAY);

}

}

}

六、实验结果和分析

 

6.1、原程序实验结果如图一所示

图一

6.2、将程序中CTRLCDLCR=(nBW==0)?

(ledkey[nCount][i]):

(~ledkey[nCount][i]);语句改为“CTRLCDRCR=(nBW==0)?

(ledkey[nCount][i]):

(~ledkey[nCount][i]);”后,数字应该显示在右半屏的第0行、第0列,实验结果如下

图二

 

6.3、将LCDCMDSTARTLINE的值改为0xcf,LCDCMDPAGE0xbc3,显示结果如下图所示

图三

6.4、将主函数中的if语句前添加语句:

LCDCMDVERADDRESS++;

if(LCDCMDVERADDRESS==63)LCDCMDVERADDRESS=0;

结果显示如下图所示

图四

 

七、设计收获及体会

通过这次课程设计让我们更多的了解了更多关于DSP的知识和协作的重要,也看清了现代电子科技对我们的生活的影响,同时也巩固了我们的专业知识。

此次课程设计也会是我们在大学时期的很好的一次实践和锻炼机会。

让我们在以后的学习中更加努力刻苦。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1