原理及应用课程设计液晶显示控制显示.docx
《原理及应用课程设计液晶显示控制显示.docx》由会员分享,可在线阅读,更多相关《原理及应用课程设计液晶显示控制显示.docx(12页珍藏版)》请在冰豆网上搜索。
![原理及应用课程设计液晶显示控制显示.docx](https://file1.bdocx.com/fileroot1/2022-10/22/9ed4899d-3bb8-4f9b-8293-a86d71f1ad47/9ed4899d-3bb8-4f9b-8293-a86d71f1ad471.gif)
原理及应用课程设计液晶显示控制显示
DSP原理及应用
课程设计
液晶显示控制显示
学院 电信学院
专业 通信工程
班级 通信一班
分组成员 ********************
联系方式 **************
指导教师 侯兆然
2013年6月
液晶显示器控制显示
一.实验目的
1.1通过实验学习使用VC5416DSP的扩展I/O端口控制外围设备的方法,了解液晶显示器的显示控制原理及编程方法。
1.2了解CCS的开发环境,及硬件设置,并熟悉在硬件环境下的仿真。
1.3了解汇编语句的特点,掌握使用汇编语句实现功能设计。
1.4了解并解释每句汇编语句的作用及功能并加以注释。
1.5.改变页和列让实验结果在另一个位置显示。
1.6然后改变控制语句,实现另一种不同的显示结果。
二.实验设备
计算机,ICETEK-VC5416A-S61实验箱(或ICETEK仿真器+ICETEK-VC5416-A系统板+相关连线及电源)。
三.实验原理
3.1扩展IO接口:
ICETEK-VC5416-A是一块以TMS320VC5416ADSP为核心的DSP扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备。
3.2液晶显示模块的访问、控制是由VC5416DSP对扩展接口的操作完成。
在智能控制系统中越来越多地使用了液晶显示屏LCD,它是一种介于液体和固体之间热力学的中间稳定相,它本身不会发光,是利用外部光的反射原理进行显示,液晶显示功耗小,字形美观,在系统中可用集成电池来供电控制口的寻址:
命令控制接口的寄存器为CTRLCDCMDR,数据控制接口的寄存器为CTRLCDLCR和CTRLCDRCR,辅助控制接口的寄存器为CTRLCDCR。
这几个寄存器的地址和说明请参考第二部分、第二章、五。
3.3显示控制方法:
液晶显示模块中有两片显示缓冲存储器,分别对应屏幕显示的象素,向其中写入数值将改
变显示,写入“1”则显示一点,写入“0”则不显示。
其地址与象素的对应方式如下:
左侧显示内存
右侧显示内存
Y=
0
1
···
62
63
0
1
···
62
63
行号
DB0
DB0
DB0
DB0
DB0
DB0
DB0
DB0
DB0
DB0
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
DB0
DB0
DB0
DB0
DB0
DB0
DB0
DB0
DB0
56
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
DB7
DB7
DB7
DB7
DB7
DB7
DB7
DB7
DB7
DB7
63
-发送控制命令:
向液晶显示模块发送控制命令的方法是通过向命令控制接口写入命令控制字,然后再向辅助控制接口写入0。
下面给出的是基本命令字、解释和C语言控制语句举例:
.显示开关:
0x3f打开显示;0x3e关闭显示;
.设置显示起始行:
0x0c0+起始行取值,其中起始行取值为0至63;
.设置操作页:
0x0b8+页号,其中页号取值为0-7;
.设置操作列:
0x40+列号,其中列号为取值为0-63;
-写显示数据:
在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的数据写入液晶显示模块的缓存。
将数据发送到相应数据控制I/O接口即可。
3.4液晶显示器与DSP的连接:
3.5数据信号的传送:
由于液晶显示模块相对运行在高主频下的DSP属于较为慢速设备,连接时需要考虑数据线上信号的等待问题;
电平转换:
由于DSP为3.3V设备,而液晶显示模块属于5V设备,所以在连接控制线、数据线时需要加电平隔离和转换设备,如:
ICETEK-CTR板上使用了74LS245。
四.实验步骤
4.1实验准备:
⑴连接实验设备:
请参看本书第三部分、第一章、二。
4.2设置CodeComposerStudio2.21在硬件仿真(Emulator)方式下运行:
4.3启动CodeComposerStudio2.21:
选择菜单Debug→ResetCPU。
4.4打开工程文件:
浏览LCD.c文件的内容,理解各语句作用
工程目录:
C:
\ICETEK\VC5416AES61\VC5416AES61\Lab0403-LCD\LCD.pjt。
4.5编译、下载程序。
4.6运行程序观察结果:
4.7将原“CTRLCDLCR=(nBW==0)?
(ledkey[nCount][i]):
(~ledkey[nCount][i]);”改为“CTRLCDRCR=(nBW==0)?
(ledkey[nCount][i]):
(~ledkey[nCount][i]);”,重复步骤5-6,实现在屏幕右侧显示。
4.8更改程序中对页、列的设置,实现不同位置的显示。
4.9自己设计一些控制语句,实现不同显示效果。
结束程序运行,退出CCS。
4.10请参看本书第三部分、第一章、六。
五.C语言程序
/////////////////////////////////////////////////
//ExampleForICETEK-VC5416-EDU//
//CTRVersion:
V4//
//:
Lcd.c//
//Project:
Lcd.pjt//
//Version:
2.00//
//Writeby:
DanielHawk//
//Company:
RealtimedspCo.Ltd.//
////
//AllRightsopened&noOnus2005.06//
/////////////////////////////////////////////////
//常量定义
#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,所以不需设置)
Delay(LCDDELAY);//延时
CTRLCDCR=0;//初始化ICETEK-CTR
Delay(LCDDELAY);//延时
}
Delay(512);//延时
nCount++;//