DSP实现液晶显示电子日历画册.docx
《DSP实现液晶显示电子日历画册.docx》由会员分享,可在线阅读,更多相关《DSP实现液晶显示电子日历画册.docx(38页珍藏版)》请在冰点文库上搜索。
DSP实现液晶显示电子日历画册
DSP课程设计
题目DSP实现液晶显示电子日历
英文题目DSPimplementationLCDelectroniccalendar
院系
专业
姓名
班级学号
指导教师
实训地点
摘要
传统的液晶显示往往采用单片机控制。
但在系统有大量高速实时数据的情况下,单片机由于受到处理速度的限制就显得力不从心。
为了解决这些问题,本文提出了一种基于DSP控制的液晶显示屏的设计,有效地解决以上所遇到的问题.
本文提出了一种基于DSP控制的液晶显示数字模拟钟的设计.通过对DSP芯片TMS320LVC5416PGE和液晶模块LCM12864ZK的分析和研究,利用TMS320LVC5416PGE的DSP最小系统板构建了一个时间显示系统,采用LCM12864ZK液晶模块显示时间,用按键调整时间。
该时钟系统包括硬件电路的实现和系统程序设计两部分。
对液晶显示时钟系统的硬件原理和主程序流程图进行了介绍,并给出了定时器的初始化程序和按照液晶显示模块接口读写时序编写的在DSP芯片TMS320LVC5416PGE上的液晶显示初始化程序。
关键词:
DSP;TMS320LVC5416PGE;LCM12864ZK液晶模块
DigitalsimulationclockDSPrealized
Abstract
Thetraditionalliquidcrystaldisplay(LCD)oftenUSESthemonolithiccontrol.Butinthesystemwithalotofhigh—speedreal-timedata,duetoasinglechipprocessingspeedlimitisragged。
Inordertosolvetheseproblems,thispaperputsforwardaDSPcontrolbasedonthedesignoftheLCDscreen,effectivetosolvetheaboveproblems.
ThispaperputforwardbasedonDSPcontrolliquidcrystaldisplay(LCD)digitalsimulationclockdesign。
Throughtothedigitalsignalprocessor(DSP)TMS320LVC5416PGEandLCDmoduleLCM12864ZKanalysisandresearch,usingtheleastTMS320LVC5416PGEDSPsystemboardhasconstructedatimedisplaysystem,adoptingLCM12864ZKLCDmoduleshowtime,withbuttonssettlingtime。
Thisclocksystemincludingtherealizationofhardwarecircuitandsystemprogrammingdesigntwoparts.Onliquidcrystaldisplayclocksystemhardwareprincipleandmainprogramflowchartarepresented,andgivesthetimerandinitialprogramaccordingtoLCDmoduleinterface,speaking,readingandwritingindigitalsignalprocessor(DSP)thetimingwriteTMS320LVC5416PGEonliquidcrystaldisplay(LCD)initialprogram。
Keywords:
DSP;shutTMS320LVC5416PGE;LCM12864ZKLCDmodule
第一章绪论
DSP芯片,也称数字信号处理器,是一种特别适合与数字信号处理运算的微处理器,其主要应用是实时快速地实现各种数字信号处理算法。
既具有高速数字信号处理功能,又具有实时性强、功耗低、集成度高等嵌入式微计算机的特点,所以随着科技的发展,DSP技术在机电控制领域的应用愈加广泛。
LCD可显示字符、汉字和图形,且显示清晰美观、功耗低,现在已成为电子产品中应用最为广泛的显示方式。
近年来,基于DSP的LCD图文显示技术一直受到科技人员的关注。
本文利用DSP芯片TMS320LVC5416PGE的数字I/O口来控制慢速LCM12864ZK液晶显示模块,用软件编程来实现对外设LCM12864ZK液晶显示模块的读写接口时序,并且按照LCM12864ZK液晶显示模块的时序要求加入相应的等待延时来实现高速的DSP芯片和低速的液晶显示模块的工作匹配,从而实现基于DSP的液晶显示时钟设计。
1。
1DSP芯片主要特点
根据数字信号处理的要求,DSP芯片一般具有如下主要特点:
(1)在一个指令周期内可完成一次乘法和一次加法;
(2)程序和数据空间分开,可以同时访问指令和数据;
(3)片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问;
(4)具有低开销或无开销循环及跳转的硬件支持;
(5)快速的中断处理和硬件I/O支持;
(6)可以并行执行多个操作;
(7)具有在单周期内操作的多个硬件地址产生器;
(8)支持流水线操作,使取指,译码和执行等操作可以重叠执行.
1。
2DSP芯片与通用微处理器主要区别
DSP芯片与通用微处理器在应用领域有着很大的不同,主要区别在于:
(1)DSP的速度比MCU快,主频较高;
(2)DSP适合于数据处理,数据处理的指令效率较高;
(3)DSP均为16位以上的处理器,不适合于低档的场合;
(4)DSP可以同时处理的事件较多,系统级成本有可能较低;
(5)DSP的灵活性较好,大多数算法都可以软件实现;
(6)DSP的集成度较高,可靠性较好。
1.3DSP的优点
数字信号处理系统是以数字信号处理为基础的,因此具有数字处理的全部优点:
(1)接口方便
DSP系统与其他以现代数字技术为基础的系统或设备都是兼容的,与这样的系统接口实现某种功能要比模拟系统与这些系统接口要容易得多.
(2)编程方便
DSP系统中的可编程DSP芯片可使设计人员在开发过程中灵活方便地对软件进行修改和升级。
(3)稳定性好
DSP系统以数字处理为基础,受环境温度及噪声的影响较小,可靠性高。
(4)精度高
16位数字系统可以达到10—5的精度,32位数字系统可达到2×10-10的精度。
(5)可重复性好
模拟系统的性能受元器件参数性能影响较大,而数字系统基本不受影响,因此数字系统便于测试,调试和大规模生产。
(6)集成方便
DSP系统中的数字部件有高度的规范性,便于大规模集成。
第二章系统硬件组成
完整系统所需的模块有DSP模块、液晶显示模块、键盘模块。
2.1DSP模块
使用TI公司的TMS320LVC5416PGE型号的DSP芯片构成最小系统板,该系统板是DSP芯片工作的最小系统,主要由DSP芯片TMS320LVC5416PGE、StaticRAM芯片CY7C1021和3.3V电源组成。
DSP芯片的引脚可以在实验中根据需要通过拓展插口引出.最小系统可引出的DSP功能有:
I/O,AD,SPI,SCI,CAN,PWM,Interrupt,AP和电源引脚.根据本系统的需要,从最小系统板拓展插口引出所用到的DSP芯片引脚试验箱上液晶显示模块的访问、控制是由5416DSP对扩展I/O接口的操作完成。
试验箱上液晶显示模块的访问、控制是由5416DSP对扩展I/O接口的操作完成。
2。
1.1TMS320C5416的特点和硬件组成框图
TMS320C5416采用TMS320C54x系列内核,其主要特性如下所示:
●CPU
先进的多总线结构。
40位算术逻辑运算单元(ALU)。
17位×17位并行乘法器与40位专用加法器相连。
比较、选择、存储单元(CSSU)。
指数编码器可以在单个周期内计算40位累加器中数值的指数。
双地址生成器包括8个辅助寄存器和两个辅助寄存器算术运算单元(ARAU)。
●存储器
64K字程序存储器、64K字数据存储器以及64K字I/O空间.
●指令系统
单指令重复和块指令重复操作.
块存储器传送指令。
32位长操作数指令。
同时读入两个或3个操作数的指令.
并行存储和并行加载的算术指令.
条件存储指令。
从中断快速返回指令
●在片外围电路
软件可编程等待状态发生器。
可编程分区转换逻辑电路.
带有内部振荡器.
外部总线关断控制,以断开外部的数据总线、地址总线和控制信号。
数据总线具有总线保持器特性。
可编程定时器。
并行主机接口(HPl)。
●电源
可用IDLEl、IDLE2和IDLE3指令控制功耗,以工作在省电方式。
可以控制关断CLKOUT输出信号.
在片仿真接口
具有符合IEEEll49.1标准的在片仿真接口(JTAG)。
●速度
单周期定点指令的执行时间为25/20/15/12。
5/10-ns(40MIPS/50MIPS/66MIPS/80MIPS/100MIPS)。
2.1。
2TMS320C5416的存储器
TMS320C54x存储器由3个独立的可选择空间组成:
程序空间、数据空间和I/O空间.
程序存储器空间包括程序指令和程序中所需的常数表格;数据存储器空间用于存储需要程序处理的数据或程序处理后的结果;I/O空间用于与外部存储器映象的外设接口,也可以用于扩展外部数据存储空间.其内部存储空间分配如图1所示。
图1.TMS320VC5416存储器分配图
●程序空间
通过MP/和OVLY位的设置,可以实现对片内存储器(ROM、RAM)的配置,即哪些片内存储器映象在程序存储器空间。
器件复位时,复位、中断和陷阱中断的向量映象在地址FF80H开始的程序存储器空间。
然而,复位后这些向量可以被重新映象在程序存储器空间任何128字页的开始。
这样,可以把向量表移出引导ROM,并重新配置其地址.
●数据空间
通过对处理器方式状态寄存器PMST的DROM位的设置,将片内ROM配置在数据存储器空间(DROM=1),这样,可以用指令将片内ROM作为数据存储器中的数据ROM来读取.复位时,DROM位被清0。
64K字的数据存储器空间包括数据存储器映象寄存器,0000H~001FH是常用的CPU寄存器地址,0020H~005FH是片内外设寄存器的地址.
●I/O空间
除程序存储器空间和数据存储器空间外,C54x系列器件还提供了I/O存储器空间,利用I/O空间可以扩展外部存储器。
I/O存储器空间为64K字(0000h~FFFFh),有两条指令PORTR和PORTW可以对I/O存储器空间操作,读写时序与程序存储器空间和数据存储器空间有很大不同。
2.2液晶显示模块
LCM12864ZK液晶模块用于字符、数字和汉字的显示,该模块有128×64个像素,可以显示4行汉字,每行8个,共计32个汉字;或者4行半角字符,每行16个,共计64个半角字符。
通过各点亮灭的组合,即可显示出文字、图片的信息。
需要强调的是,LCM12864ZK液晶模块的VR和VO引脚端需要串连一个10
的可调电阻,且在初次使用时要微调10
电阻,使得液晶屏的字符显示清晰明亮.
系统中的液晶显示单元采用LCM128645ZK型中文液晶显示模块。
该模块电源操作范围宽(2。
7Vto5。
5V),其低功耗设计可满足产品的省电要求;同时,模块与微控器的接口界面灵活(三种模式:
并行8位/4位,串行3线/2线),可实现汉字、ASCII码、点阵图形的同屏显示,支持所有的主流液晶操作指令,预留多种控制线(复位/串并选择/亮度调整)供用户灵活使用。
液晶显示模块的访问、控制是由5416DSP对扩展I/O接口的操作完成.
控制I/O口的寻址:
命令控制I/O接口的地址为0x8001,数据控制I/O接口的地址为0x8003和0x8004,辅助控制I/O接口的地址为0x8002.
2。
2.1显示数据控制方法:
液晶显示模块中有两片显示缓冲存储器,分别对应屏幕显示的象素,向其中写入数值将改变显示,写入“1”则显示一点,写入“0”则不显示.其地址与象素的对应方式如图2所示:
图2。
液晶数据显示格式
2.2。
2发送控制命令:
向液晶显示模块发送控制命令的方法是通过向命令控制I/O接口写入命令控制字,然后再向辅助控制接口写入0。
下面给出的是基本命令字、解释和C语言控制语句举例。
。
设置液晶显示开关:
0x3f打开显示;0x3e关闭显示;
Port8001=0x3f;port8002=0;//将液晶显示打开:
00111111
Port8001=0x3e;port8002=0;//将液晶显示关闭:
00111110
.设置显示起始行:
0x0c0+起始行取值,其中起始行取值为0至63;
Port8001=0x0c0;port8002=0;//设置从存储器第0行开始显示
Port8001=0x0c8;port8002=0;//设置从存储器第8行开始显示
。
设置操作页:
0x0b8+页号,其中页号取值为0—7:
10111000+页号
Port8001=0x0b8;port8002=0;//设置即将操作的存储器第0页
Port8001=0x0ba;port8002=0;//设置即将操作的存储器第2页
.设置操作列:
0x40+列号,其中列号为取值为0-63:
01000000
Port8001=0x40;port8002=0;//设置即将操作的存储器第0列
Port8001=0x44;port8002=0;//设置即将操作的存储器第4列
2.2.3写显示数据:
在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的数据写
入液晶显示模块的缓存。
将数据发送到相应数据控制I/O接口即可。
液晶显示器的硬件电路上有自动移到下列的功能.发送到下列的数据,不必先设置其列号.由于液晶模块相对于DSP来讲是慢速设备,在命令之间可能需要增加延时语句。
举例说明:
Port8003=0x80;port8002=0;//向左侧屏幕缓存存入数据0x80,如果显示行、页号和列号均//为0时,屏幕上第8行第1列将显示黑色象素(数据位从高到低,//显示在一列的从下到上)。
Port8004=0x01;port8002=0;//向右侧屏幕缓存存入数据0x01,如果显示行、页号和列号均//为0时,屏幕上第1行第65列将显示黑色象素(数据位从高到低,//显示在一列的从下到上)。
2。
2。
4其它问题:
数据信号的传送:
由于液晶显示模块相对运行在8MHz主频下的DSP属于较为慢速设备,连接时需要考虑数据线上信号的等待问题;
电平转换:
由于DSP为3。
3v设备,而液晶显示模块属于5v设备,所以在连接控制线、数据线时需要加电平隔离和转换设备.
液晶显示器与DSP的连接:
图3。
液晶显示器与DSP的连接
2.3键盘模块
ICETEK-VC5416—A是一块以TMS320VC5416DSP为核心的DSP扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备,也可以接收外设发送的各种数据、信息。
键盘的扫描码由DSP的I/O扩展地址0x8001给出,当有键盘输入时,读此端口得到扫描码,
当无键被按下时读此端口的结果为0。
读取的方法如下:
nScanCode=port8001;temp=port8002;//nScanCode中为扫描码先读,然后清零。
第三章程序设计
3.1设计思路
本次设计采用C语言编程,通过编程实现在液晶的左侧显示图片,在液晶的右侧从上到下依次显示“电子日历"、“x月x日”、“星期x"、及时间。
其主程序流程图如下:
图4.主程序流程图
整个系统软件设计主要包括程序、中断服务程序、显示程序等几个部分。
各个模块均写成函数形式,便于结构化程序设计。
各个模块之间可能需要交换数据,我们采取定义公共变量的方法来实现,这样就不必通过形参和实参方式来交换数据,简化了程序设计。
主程序主要完成系统初始化,中断初始化和构建一个循环不得地显示当前时间。
本系统采用的是显示芯片来实现系统显示的。
显示时主要根据LCD芯片时序要求,模拟产生相应的时序,选中芯片,向LCD芯片送相应的控制字设定其工作方式,再送相应数据完成显示工作。
当“秒"计至60时,“分”加1,当“分”计到60时,“时”加1,当“时”计到24时,“时"清0,”星期”加1完成一天计时。
3.2主程序
Clock。
h
#include"top.h”//包含宏定义和函数声明
#include"scancode。
h”//包含键码
unsignedcharcKey,W_flag;
unsignedchartimebuf[8]={20,11,6,17,5,8,1,30};//空年月日周时分秒
main()
{
Init_LCD();//LCD初始化
Init_Timer();//定时器初始化
while
(1)
{dis_clock(timebuf[2],timebuf[3],timebuf[4],timebuf[5],timebuf[6],timebuf[7]);
cKey=ScanKey();//按键扫描
if(cKey〉='0'&&cKey<='7')
W_flag=cKey;
w_clock();//修改数据
};
}
/********************************************************
函数名:
键盘扫描
输入:
无
输出:
unsignedcharcKey
功能:
扫描键盘,并将转换后的键码通过cKey返回
********************************************************/
unsignedcharScanKey()
{
unsignedintnScanCode;
unsignedcharcKey,temp;
cKey=0;
nScanCode=port8001;//读键盘扫描码,然后取出低八位
nScanCode&=0xff;
temp=port8002;
temp=temp;
//根据扫描码的值作出相应的动作
Delay(1500);
if(nScanCode!
=0&&nScanCode!
=0xff)//如果按下
{
cKey=ConvertScanToChar(nScanCode);//扫描码转化为相应的数字
}
returncKey;
}
/********************************************************
函数名:
键码转换函数
输入:
unsignedcharcScanCode
输出:
charcReturn
功能:
键码转换
********************************************************/
charConvertScanToChar(unsignedcharcScanCode)
{
charcReturn;
cReturn=0;
switch(cScanCode)
{
caseSCANCODE_0:
cReturn='0';break;
caseSCANCODE_1:
cReturn='1’;break;
caseSCANCODE_2:
cReturn=’2';break;
caseSCANCODE_3:
cReturn='3’;break;
caseSCANCODE_4:
cReturn='4';break;
caseSCANCODE_5:
cReturn='5';break;
caseSCANCODE_6:
cReturn='6';break;
caseSCANCODE_7:
cReturn=’7’;break;
caseSCANCODE_8:
cReturn=’8’;break;
caseSCANCODE_9:
cReturn=’9’;break;
caseSCANCODE_Del:
cReturn=’。
';break;
caseSCANCODE_Enter:
cReturn=’=';break;
caseSCANCODE_Plus:
cReturn='+';break;
caseSCANCODE_Minus:
cReturn='—’;break;
caseSCANCODE_Mult:
cReturn='*';break;
caseSCANCODE_Divid:
cReturn=’/';break;
caseSCANCODE_Num:
cReturn='N';break;//NumLock
}
returncReturn;
}
/********************************************************
函数名:
数据修改函数
输入:
无
输出:
无
功能:
判断并修改对应位数据
********************************************************/
voidw_clock()
{
if(W_flag==’2’)
{
if(cKey==’+’)
{
timebuf[2]++;
if(timebuf[2]==13)
timebuf[2]=1;
}
if(cKey==’—')
{
timebuf[2]—-;
if(timebuf[2]==0)
timebuf[2]=12;
};
}
if(W_flag==’3’)
{
if(cKey=='+’)
{
timebuf[3]++;
if(timebuf[3]==32)
timebuf[3]=1;
}
if(cKey=='-’)
{
timebuf[3]--;
if(timebuf[3]==0)
timebuf[3]=31;
};
}
if(W_flag==’4')
{
if(cKey