dsp课程设计报告

时间:2024.4.21

科信学院

课程设计说明书

(2008/20##学年第二学期)

课程名称 :     DSP控制器及其应用      

题    目 :DSP通用管脚控制LCD公告牌的文字显示

专业班级 :    电子信息工程06-1     

学生姓名 :           陈恒            

学    号 :         068072106          

指导教师 :谢万新李丽宏付佳王鹏  

设计周数 :          2              

设计成绩 :                             

20##年6月17日

                                      

 

设计目的………………………………………………………………………………………...2

系统分析…………………………………………………………………………………….…..2

   2.1设计要求………………………………………………………………………………….…2

   2.2设计思想…………………………………………………………………………………….2

总体设计…………………………………………………………………………………….…..2

   3.1硬件设计………………………………………………………………………………….…2

   3.2总电路图设计……………………………………………………………………………….3

   3.3最小系统图………………………………………………………………………………….3

单元电路设计……………………………………………………………………………….…..3

   4.1按键电路………………………………………………………………………………….…4

   4.2. DSP与LCD接口设计……………………………………………………………………..4

元器件选择………………………………………………………….………………………..…5

   5.1所要元器件……………………………………………………………………………….…5

   5.2主要元器件的描述………………………………………………………………….………5

5.2.1、TPS7333……………………………………………………………………………..5

   5.2.2、 MGLS12864-LCD………………………………………………………………….…5

运行描述……………………………………………………………………………………...…8

软件设计……………………………………………………………………………………...…9

7.1序流程图…………………………………………………………………………….……..9

7.2序代码………………………………………………………………………………………9

设计总结.…………………………………………………………………………..………..…29

参考文献……………………………………………………………….……………………....30

附录…………………………………………………………………………………………..….。31

一、    设计目的

DSP应用的快速发展为数字信息产品带来广阔的发展空间,并将支持通信、计算机和消费类电子产品的数字化融合。在无线领域,DSP遍及无线交换设备、基站、手持终端和网络领域,并涵盖从骨干基础设施到宽带入户的设备,包括VoIP网关和IP电话、DSL和Cable Modem等。面向群体应用,DSP在媒体网关、视频监控、专业音响、数字广播、激光打印等应用中表现出色;面向个人应用,DSP在便携式数字音频和影像播放器、指纹识别和语音识别等应用中表现不俗;针对嵌入式数字控制应用,DSP极大地满足了工业界的需求,如数字变频电力电源设备、工业缝纫机等;DSP也极大地满足了消费电子的需求,如空调、冰箱、洗衣机等。随着DSP生产技术和工艺的进步,新型的DSP产品将会不断涌现,并得到广泛应用。

通过此次课程设计,学习DSPf2812芯片的I/O端口控制方法,熟悉字模的简单构建和使用,熟悉Emulator方式下的程序调试规程,并能最终熟悉掌握在DSP软硬件环境下的程序开发流程,达到学以致用的目的。

二、系统分析

2.1、设计要求

(1)设置DSPf2812芯片为Emulator工作模式;(2)设置GPIO相应管脚为输入或输出模式;(3)DSP芯片外接LCD作为输出,外接n个(数目不底于3个)单按键作为输入;(4)在程序中构建汉字字模,并能够使用查找法提取。

2.2、设计思想

 通过CCS软件开发平台和相应实验箱进行程序调试DSP外设控制设备开发扩展。用独立式控键控制DSP的GPIO管脚,使用DSP芯片控制LCD来显示汉字,用其中一个按键实现LCD的清屏,其它(4个)每个按键实现8汉字的输出控制, 通用DSP管脚控制LCD公告牌的文字显示 

三、总体设计

3.1硬件设计

TMS320F2812作为使用的DSP芯片。它包含33个电源引脚(为使器件正常运行,所有电源引脚必须正确连接且不能悬空),时钟源模块,DSP有六种信号可以使DSP控制器复位。所以在设计的初期,我把它分成了四个模块。它们分别是:电平转换部分、晶振和复位部分、键盘部分和液晶显示。其中复位采用电源复位的方式,由引脚PORESET引起。为了可靠复位,其中高电平的有效时间至少6个CPU时钟周期。硬件设计组成框图如图所示:

  

  

3.2、总体电路图设计

  

其中s1~s5为按键,R1~R5对管脚起保护作用。该键盘为独立式键盘,分别和DSP芯片的GPIO管脚PWM1、PWM2、PMW3、PWM4、PWM5相连接命令控制扩展接口的地址为0X108001,数据控制扩展接口的地址为0X108003、0x108004,辅助控制扩展接口的地址为0X108002。因为DSP芯片的允许电压为3.3V,所以该键盘外接3.3V的电源。设置GPIO相

应管脚为输入或输出模式,DSP芯片外接LCD作为输出,外接5个单按键作为输入。在程序中构建汉字字模,并能够使用查找法提取。

3.3最小系统图

四、单元电路设计

4.1 按键电路

 

该键盘为独立式键盘,分别和DSP芯片的GPIO管脚PWM1、PWM2、PMW3、PWM4、PWM5相连接,因为DSP芯片的允许电压为3.3V,所以该键盘外接3.3V的电源。当开关S断开时,其管脚为高电平;当开关闭合时,其管脚变为低电平;以此来控制DSP芯片的管脚。其中PWM1为轻屏,其余控制LCD显示汉字。

4.2. DSP与LCD接口设计

DSP经常会对读写周期较慢的输入/输出设备(如液晶显示模块、打印机、键盘等)进行访问,通常用以下两种方法来解决DSP与这些慢速设备之间的输入/输出时序匹配问题。

直接访问。直接访问方式是将DSP的读写信号线与慢速设备接口控制板引出的读写信号线直接相连,时序由DSP内部读写逻辑控制。由于慢速外设的读写周期相对DSP较慢,要使两者的时序匹配,还必须进行一些时序方面的控制处理。一种处理方法是软件编程等待状态发生器,将外部总线周期扩展到数个机器周期。由于受硬件条件的限制,这种扩展通常也是有限的。另一种处理方法是利用DSP的READY(外部设备准备就绪)引脚,通过硬件扩展实现外部状态自动等待,从而使DSP与慢速设备之间的时序匹配。虽然可以将总线周期扩展到任意个机器周期,但是需要进行硬件扩展,增加了系统设计的复杂度。

间接访问。用DSP的数字I/0间接控制慢速设备,通过软件控制DSP的I/O口来实现与慢速设备的时序匹配。此种方式无需硬件扩展即可实现与任意时序慢速设备之间的时序匹配。

本设计采用间接访问方式来实现DSP与LCD之间的时序匹配,即在程序中加入大量延时语句。

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

五、元器件选择

5.1 所要元器件

TPS7333电平转换芯片;TMS320F2812 DSP芯片; MGLS12864-LCD;若干导线; 5个开关;5个电阻。

5.2、模块性能分析

  5.2.1、TPS7333

  由于器件所需电压为3.3V,而实际提供电源为5V,所以要有个电平转换模块,我们选择的是TPS7333,原理图如下:

         

   5.2.2、MGLS12864-LCD

字符式液晶显示模块MGLS12864-LCD SM由一块128X64点阵液晶屏和控HD44780及其辅助电路组成。它可以显示字母、数字、符号等;

该液晶显示模块的访问、控制是由F2812DSP对扩展接口的操作来完成的,控制扩展口的寻址:命令控制扩展接口的地址为0X108001,数据控制扩展接口的地址为0X108003、0X108004,辅助控制扩展接口的地址为0X108002。

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

六、运行描述

(1)CS运行环境,进行相应的设置,然后保存设置,在CCS运行环境下打开已编好的程序,进行调试,直至提示0个错误,然后保存调试成功后的文件。

(2)打开DSP试验箱电源,按照先前设计的电路原理图连接电路,其中电源部分应在确定为3.3v或小于3.3v时连接芯片电源,然后拷入刚才运行成功后的程序。

(3) 由键盘作用分别向DSP芯片管脚输入低电平,各管脚分别调用相应程序来控制LCD的显示;

按键1: LCD显示出“梅子金黄杏子肥”

按键2: LCD显示出“麦花雪白菜花稀”

按键3: LCD显示出“日长篱落无人过”

   按键4: LCD显示出“唯有蜻蜓蛱蝶飞”

七、软件设计

  7.1程序流程图

   初始化程序后,f2812一直处在等待判断状态,若有低电平,则调用显示程序,若没有低电平送来(5个按键有其中一个按下)。则根据相应的程序设置地址判断时显示相应按键控制下的汉字还是清屏,如果没有低电平送来,则保持原来等待判断状态。当清屏或显示汉字后,程序会自动回到等待判断状态,以此循环。程序流程图如下:

     

7.2程序代码

#include "DSP281x_Device.h"     // DSP281x Headerfile Include File

#include "DSP281x_Examples.h"   // DSP281x Examples Include File

#include "f2812a.h"

#include "DSP281x_GPio.h"

#include "lcd.h"

#define LCDDELAY 1

#define LCDCMDTURNON 0x3f  //打开LCD

#define LCDCMDTURNOFF 0x3e  //关闭LCD

#define LCDCMDSTARTLINE 0xc0  //起始行

#define LCDCMDPAGE 0xb8  //起始页

#define LCDCMDVERADDRESS 0x40  // 起始地址

int i,j,y=0;

      

//void Delay(unsigned int nTime);        // 延时子程序

void TurnOnLCD();       // 打开显示

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

 //延时

 /*

void Delay(unsigned int nTime)

{

 int ii;

  int jj;

    int kk=0;

     

     

      for(ii=0;ii<nTime;ii++ )

     {

      

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

        { kk++;}

     }

}

*/

unsigned char ledkey1[8][32]=

{

{0x00, 0xfe, 0x02, 0x02, 0x02, 0xfe, 0x02, 0x02, 0xfe, 0x02, 0x02, 0x02, 0x02, 0xfe, 0x00, 0x00,

0x00, 0x7f, 0x28, 0x24, 0x23, 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x22, 0x22, 0x7f, 0x00, 0x00, },

{0x00, 0x00, 0xfc, 0x04, 0x24, 0x24, 0xfc, 0xa5, 0xa6, 0xa4, 0xfc, 0x24, 0x24, 0x24, 0x04, 0x00,

0x80, 0x60, 0x1f, 0x80, 0x80, 0x42, 0x46, 0x2a, 0x12, 0x12, 0x2a, 0x26, 0x42, 0xc0, 0x40, 0x00, },

{0x40, 0x40, 0x44, 0x54, 0x54, 0xd4, 0x74, 0x5f, 0x54, 0x54, 0xd4, 0x54, 0x54, 0x44, 0x40, 0x00,

0x04, 0x04, 0x02, 0x02, 0x7f, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x7e, 0x01, 0x03, 0x06, 0x02, 0x00, },

{0x00, 0x00, 0x00, 0xfe, 0x02, 0x12, 0x22, 0x42, 0x82, 0x7a, 0x12, 0x02, 0xfe, 0x00, 0x00, 0x00,

0x40, 0x20, 0x18, 0x07, 0x10, 0x08, 0x04, 0x02, 0x01, 0x06, 0x1c, 0x00, 0x0f, 0x30, 0x7c, 0x00, },

{0x80, 0x40, 0x20, 0xf8, 0x07, 0x02, 0x00, 0x00, 0xff, 0xc0, 0x60, 0x30, 0x1c, 0x08, 0x00, 0x00,

0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x02, 0x01, 0x3f, 0x40, 0x40, 0x40, 0x40, 0x78, 0x00, 0x00, },

{0x10, 0x98, 0x54, 0x33, 0x1a, 0x00, 0xfe, 0x52, 0x52, 0x7e, 0x52, 0x52, 0x42, 0xfe, 0x00, 0x00,

0x11, 0x11, 0x09, 0x89, 0x49, 0x30, 0x0f, 0x00, 0x1f, 0x09, 0x09, 0x5f, 0x80, 0x7f, 0x00, 0x00, },

{0x20, 0x38, 0xa7, 0x62, 0x18, 0x00, 0x2a, 0x12, 0xbe, 0x40, 0xa6, 0x1a, 0x02, 0x7e, 0x00, 0x00,

0x10, 0x11, 0x11, 0x09, 0x0a, 0x82, 0x95, 0x55, 0x4a, 0x29, 0x24, 0x11, 0x09, 0x02, 0x02, 0x00, },

{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x58, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, },

};

unsigned char ledkey2[8][32]=

{

 {0x00,0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x00,

0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x3C,0x00,},

{0x00,0x10,0x92,0x92,0x56,0x5A,0x32,0xFE,0x11,0x31,0x59,0x95,0x91,0x18,0x10,0x00,

0x01,0x01,0x00,0xFF,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0xFF,0x01,0x01,0x01,0x00, },

{0x24,0x24,0xE4,0xFC,0xA2,0x22,0x22,0x80,0x70,0x00,0xFF,0x40,0x20,0x18,0x00,0x00,

0x02,0x01,0x00,0xFF,0x00,0x83,0x40,0x20,0x18,0x07,0x01,0x06,0x18,0xE0,0x40,0x00, },

{0x02,0x02,0xF2,0x32,0x52,0x92,0x12,0xFE,0x32,0x52,0x92,0x12,0xF2,0x02,0x02,0x00,

0x00,0x00,0xFF,0x01,0x02,0x04,0x00,0x7F,0x01,0x02,0x44,0x80,0x7F,0x00,0x00,0x00, },

{0x10,0x61,0x06,0xF0,0xA0,0x98,0x8E,0x88,0x88,0xFF,0x88,0x88,0x88,0x80,0x80,0x00,

0x04,0x04,0xFF,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x3F,0x40,0x40,0x40,0x70,0x00, },

{0x10,0x61,0x86,0x60,0x08,0xF8,0x08,0x00,0xFC,0x0E,0x35,0x04,0x44,0x7C,0x00,0x00,

0x04,0x7C,0x03,0x04,0x04,0x03,0x0A,0x08,0x09,0x09,0x09,0x09,0x49,0x81,0x7F,0x00, },

{0x10,0x60,0x01,0xC6,0x30,0x20,0x18,0x0F,0xC8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,

0x04,0x04,0xFE,0x01,0x00,0x04,0x06,0x05,0x04,0x04,0x46,0x8C,0x40,0x3F,0x00,0x00, },

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x18,0x24,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, },

};

unsigned char ledkey3[8][32]=

{

{0x00, 0xfe, 0x02, 0x02, 0x02, 0xfe, 0x02, 0x02, 0xfe, 0x02, 0x02, 0x02, 0x02, 0xfe, 0x00, 0x00,

0x00, 0x7f, 0x28, 0x24, 0x23, 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x22, 0x22, 0x7f, 0x00, 0x00, },

{0x00, 0x00, 0xfc, 0x04, 0x24, 0x24, 0xfc, 0xa5, 0xa6, 0xa4, 0xfc, 0x24, 0x24, 0x24, 0x04, 0x00,

0x80, 0x60, 0x1f, 0x80, 0x80, 0x42, 0x46, 0x2a, 0x12, 0x12, 0x2a, 0x26, 0x42, 0xc0, 0x40, 0x00, },

{0x40, 0x40, 0x44, 0x54, 0x54, 0xd4, 0x74, 0x5f, 0x54, 0x54, 0xd4, 0x54, 0x54, 0x44, 0x40, 0x00,

0x04, 0x04, 0x02, 0x02, 0x7f, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x7e, 0x01, 0x03, 0x06, 0x02, 0x00, },

{0x00, 0x00, 0x00, 0xfe, 0x02, 0x12, 0x22, 0x42, 0x82, 0x7a, 0x12, 0x02, 0xfe, 0x00, 0x00, 0x00,

0x40, 0x20, 0x18, 0x07, 0x10, 0x08, 0x04, 0x02, 0x01, 0x06, 0x1c, 0x00, 0x0f, 0x30, 0x7c, 0x00, },

{0x80, 0x40, 0x20, 0xf8, 0x07, 0x02, 0x00, 0x00, 0xff, 0xc0, 0x60, 0x30, 0x1c, 0x08, 0x00, 0x00,

0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x02, 0x01, 0x3f, 0x40, 0x40, 0x40, 0x40, 0x78, 0x00, 0x00, },

{0x10, 0x98, 0x54, 0x33, 0x1a, 0x00, 0xfe, 0x52, 0x52, 0x7e, 0x52, 0x52, 0x42, 0xfe, 0x00, 0x00,

0x11, 0x11, 0x09, 0x89, 0x49, 0x30, 0x0f, 0x00, 0x1f, 0x09, 0x09, 0x5f, 0x80, 0x7f, 0x00, 0x00, },

{0x20, 0x38, 0xa7, 0x62, 0x18, 0x00, 0x2a, 0x12, 0xbe, 0x40, 0xa6, 0x1a, 0x02, 0x7e, 0x00, 0x00,

0x10, 0x11, 0x11, 0x09, 0x0a, 0x82, 0x95, 0x55, 0x4a, 0x29, 0x24, 0x11, 0x09, 0x02, 0x02, 0x00, },

{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x58, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, },

};

unsigned char ledkey4[8][32]=

{

{0x00, 0xfe, 0x02, 0x02, 0x02, 0xfe, 0x02, 0x02, 0xfe, 0x02, 0x02, 0x02, 0x02, 0xfe, 0x00, 0x00,

0x00, 0x7f, 0x28, 0x24, 0x23, 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x22, 0x22, 0x7f, 0x00, 0x00, },

{0x00, 0x00, 0xfc, 0x04, 0x24, 0x24, 0xfc, 0xa5, 0xa6, 0xa4, 0xfc, 0x24, 0x24, 0x24, 0x04, 0x00,

0x80, 0x60, 0x1f, 0x80, 0x80, 0x42, 0x46, 0x2a, 0x12, 0x12, 0x2a, 0x26, 0x42, 0xc0, 0x40, 0x00, },

{0x40, 0x40, 0x44, 0x54, 0x54, 0xd4, 0x74, 0x5f, 0x54, 0x54, 0xd4, 0x54, 0x54, 0x44, 0x40, 0x00,

0x04, 0x04, 0x02, 0x02, 0x7f, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x7e, 0x01, 0x03, 0x06, 0x02, 0x00, },

{0x00, 0x00, 0x00, 0xfe, 0x02, 0x12, 0x22, 0x42, 0x82, 0x7a, 0x12, 0x02, 0xfe, 0x00, 0x00, 0x00,

0x40, 0x20, 0x18, 0x07, 0x10, 0x08, 0x04, 0x02, 0x01, 0x06, 0x1c, 0x00, 0x0f, 0x30, 0x7c, 0x00, },

{0x80, 0x40, 0x20, 0xf8, 0x07, 0x02, 0x00, 0x00, 0xff, 0xc0, 0x60, 0x30, 0x1c, 0x08, 0x00, 0x00,

0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x02, 0x01, 0x3f, 0x40, 0x40, 0x40, 0x40, 0x78, 0x00, 0x00, },

{0x10, 0x98, 0x54, 0x33, 0x1a, 0x00, 0xfe, 0x52, 0x52, 0x7e, 0x52, 0x52, 0x42, 0xfe, 0x00, 0x00,

0x11, 0x11, 0x09, 0x89, 0x49, 0x30, 0x0f, 0x00, 0x1f, 0x09, 0x09, 0x5f, 0x80, 0x7f, 0x00, 0x00, },

{0x20, 0x38, 0xa7, 0x62, 0x18, 0x00, 0x2a, 0x12, 0xbe, 0x40, 0xa6, 0x1a, 0x02, 0x7e, 0x00, 0x00,

0x10, 0x11, 0x11, 0x09, 0x0a, 0x82, 0x95, 0x55, 0x4a, 0x29, 0x24, 0x11, 0x09, 0x02, 0x02, 0x00, },

{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x58, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, },

};

/*void Delay(unsigned int nTime)

{

int ii ,jj,kk=0;

for(ii=0;ii<nTime;ii++)

{

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

{       kk++;

}

}

//}*/

      

/*

//r打开液晶显示

void TurnOnLCD()  

{

     *(int *)0x108001=LCDCMDTURNON;

        Delay(LCDDELAY);

     *(int *)0x108002=0;

      Delay(2048);

     *(int *)0x108001=LCDCMDSTARTLINE;

     Delay(LCDDELAY);

     *(int *)0x108002=0;

     Delay(LCDDELAY);

}

   

   

   

void LCDCLS()    //清屏

    int i,j;

    *(int *)0x108001=LCDCMDSTARTLINE;

     Delay(LCDDELAY);

     *(int *)0x108002=0;

     Delay(LCDDELAY);

           

          

          

         for ( i=0;i<8;i++ )

        {  //左屏

           *(int *)0x108001=LCDCMDPAGE+i;

           Delay(LCDDELAY);

           *(int *)0x108002=0;

           Delay(LCDDELAY);

          

          

           *(int *)0x108001=LCDCMDVERADDRESS;  //地址

           Delay(LCDDELAY);

           *(int *)0x108002=0;

           Delay(LCDDELAY);

          

          

           

           for ( j=0;j<64;j++ )

        {

           *(int *)0x108003=0;

            Delay(LCDDELAY);

           *(int *)0x108002=0;

            Delay(LCDDELAY);

          

        }    //右屏

           *(int *)0x108001=LCDCMDPAGE+i;

            Delay(LCDDELAY);

           *(int *)0x108002=0;

            Delay(LCDDELAY);

          

           

            

           *(int *)0x108001=LCDCMDVERADDRESS;

            Delay(LCDDELAY);

           *(int *)0x108002=0;

            Delay(LCDDELAY);

          

          

           

          for ( j=0;j<64;j++ )

        {

           *(int *)0x108004=0;

            Delay(LCDDELAY);

           *(int *)0x108002=0;

            Delay(LCDDELAY);

         }

      }

}*/

void main(void)

{

    EALLOW;

    GpioMuxRegs.GPAMUX.all=0x0000;     //管脚定义为I/O口

    GpioMuxRegs.GPADIR.all=0x0000;      //定义管脚为输入口

    EDIS;

   TurnOnLCD();         // 打开显示

   LCDCLS();

  for(;;)

  {

      if(GpioDataRegs.GPADAT.bit.GPIOA0==0)

    {

       LCDCLS();        // 清除显示内存

    }

   

   

      if(GpioDataRegs.GPADAT.bit.GPIOA1==0)          

  {

   //设置起始值

       *(int *)0x108001=LCDCMDSTARTLINE;           // 设置显示起始行

          Delay(LCDDELAY);      //延时 

       *(int *)0x108002=0;      //辅助命令控制字

        Delay(LCDDELAY);  

   

  

      *(int *)0x108001=LCDCMDPAGE;        // 设置操作页=0

          Delay(LCDDELAY);

     *(int *)0x108002=0;         //辅助命令控制字

      Delay(LCDDELAY);

 

 

       *(int *)0x108001=LCDCMDVERADDRESS;     // 起始列=0

       Delay(LCDDELAY);

    *(int *)0x108002=0;

    Delay(LCDDELAY);

   

   

//    TurnOnLCD();            // 打开显示

    y=0;

   

   

   

   for(j=0;j<4;j++)

   {

     *(int *)0x108001=LCDCMDPAGE+2;   //设置页

     Delay(LCDDELAY);

     *(int *)0x108002=0;

     Delay(LCDDELAY);

   

   

     *(int *)0x108001=LCDCMDVERADDRESS+y;   //设置地址

     Delay(LCDDELAY);

     *(int *)0x108002=0;

     Delay(LCDDELAY);

   

   

     for(i=0;i<16;i++)

     {

      *(int *)0x108003=ledkey1[j][i];

      Delay(LCDDELAY);

      *(int *)0x108002=0;

      Delay(LCDDELAY);

     }

   

   

     *(int *)0x108001=LCDCMDPAGE+3;

     Delay(LCDDELAY);

     *(int *)0x108002=0;

     Delay(LCDDELAY);

    

    

    

     *(int *)0x108001=LCDCMDVERADDRESS+y;

     Delay(LCDDELAY);

     *(int *)0x108002=0;

     Delay(LCDDELAY);

    

    

    

     for(i=16;i<32;i++)

     {

      *(int *)0x108003=ledkey1[j][i];

      Delay(LCDDELAY);

      *(int *)0x108002=0;

      Delay(LCDDELAY);

     }

    

    

    

       y+=16;

      

  }

   

   

   

   

      y=0;

     

    } 

    for(j=4;j<8;j++)

    {

       *(int *)0x108001=LCDCMDPAGE+4;

       Delay(LCDDELAY);

       *(int *)0x108002=0;

       Delay(LCDDELAY);

      

      

       *(int *)0x108001=LCDCMDVERADDRESS+y;

        Delay(LCDDELAY);

       *(int *)0x108002=0;

       Delay(LCDDELAY);

      

      

     for(i=0;i<16;i++)

     {

     *(int *)0x108004=ledkey1[j][i];

     Delay(LCDDELAY);

     *(int *)0x108002=0;

     Delay(LCDDELAY);

     }

    

    

    

     *(int *)0x108001=LCDCMDPAGE+5;

     Delay(LCDDELAY);

     *(int *)0x108002=0;

     Delay(LCDDELAY);

    

    

     *(int *)0x108001=LCDCMDVERADDRESS+y;

     Delay(LCDDELAY);

     *(int *)0x108002=0;

     Delay(LCDDELAY);

    

    

     for(i=16;i<32;i++)

     {

      *(int *)0x108004=ledkey1[j][i];

      Delay(LCDDELAY);

      *(int *)0x108002=0;

      Delay(LCDDELAY);

     }

    

    

    

       y+=16;

  }

  

  

  

 

  if(GpioDataRegs.GPADAT.bit.GPIOA3==0)

  {

//设置起始值

    *(int *)0x108001=LCDCMDSTARTLINE;   // 设置显示起始行

       Delay(LCDDELAY);      //延时 

    *(int *)0x108002=0;      //辅助命令控制字

    Delay(LCDDELAY);

  

    

        

    *(int *)0x108001=LCDCMDPAGE;            // 设置操作页=0

       Delay(LCDDELAY);

    *(int *)0x108002=0;         //辅助命令控制字

    Delay(LCDDELAY);

   

   

       *(int *)0x108001=LCDCMDVERADDRESS;     // 起始列=0

       Delay(LCDDELAY);

    *(int *)0x108002=0;

    Delay(LCDDELAY);

   

   

    TurnOnLCD();              // 打开显示

    y=0;

   

   

       for(j=0;j<4;j++)

    {

      *(int *)0x108001=LCDCMDPAGE+2;   //设置页

      Delay(LCDDELAY);

      *(int *)0x108002=0;

      Delay(LCDDELAY);

     

     

      *(int *)0x108001=LCDCMDVERADDRESS+y;   //设置地址

      Delay(LCDDELAY);

      *(int *)0x108002=0;

      Delay(LCDDELAY);

    

    

     for(i=0;i<16;i++)

     {

      *(int *)0x108003=ledkey2[j][i];

      Delay(LCDDELAY);

      *(int *)0x108002=0;

      Delay(LCDDELAY);

     }

   

   

   

      *(int *)0x108001=LCDCMDPAGE+3;

      Delay(LCDDELAY);

      *(int *)0x108002=0;

      Delay(LCDDELAY);

     

     

      *(int *)0x108001=LCDCMDVERADDRESS+y;

      Delay(LCDDELAY);

      *(int *)0x108002=0;

      Delay(LCDDELAY);

     

     

     for(i=16;i<32;i++)

     {

       *(int *)0x108003=ledkey2[j][i];

       Delay(LCDDELAY);

       *(int *)0x108002=0;

       Delay(LCDDELAY);

     }

    

    

    

     y+=16;

  }

   

   

      y=0;

     

     

     for(j=4;j<8;j++)

    {

       *(int *)0x108001=LCDCMDPAGE+4;

       Delay(LCDDELAY);

       *(int *)0x108002=0;

       Delay(LCDDELAY);

      

      

      *(int *)0x108001=LCDCMDVERADDRESS+y;

      Delay(LCDDELAY);

      *(int *)0x108002=0;

      Delay(LCDDELAY);

     

     

     

     for(i=0;i<16;i++)

     {

        *(int *)0x108004=ledkey2[j][i];

        Delay(LCDDELAY);

        *(int *)0x108002=0;

        Delay(LCDDELAY);

     }

    

    

     

       *(int *)0x108001=LCDCMDPAGE+5;

       Delay(LCDDELAY);

       *(int *)0x108002=0;

       Delay(LCDDELAY);

      

      

      

       *(int *)0x108001=LCDCMDVERADDRESS+y;

       Delay(LCDDELAY);

       *(int *)0x108002=0;

       Delay(LCDDELAY);

      

      

      

     for(i=16;i<32;i++)

     {

       *(int *)0x108004=ledkey2[j][i];

       Delay(LCDDELAY);

       *(int *)0x108002=0;

       Delay(LCDDELAY);

     }

    

    

     y+=16;

    

   } 

    }

 

 

 

  if(GpioDataRegs.GPADAT.bit.GPIOA5==0)

  {

//设置起始值

           *(int *)0x108001=LCDCMDSTARTLINE;    // 设置显示起始行

              Delay(LCDDELAY);      //延时 

           *(int *)0x108002=0;      //辅助命令控制字

            Delay(LCDDELAY); 

           

            

              

           *(int *)0x108001=LCDCMDPAGE;              // 设置操作页=0

               Delay(LCDDELAY);

           *(int *)0x108002=0;         //辅助命令控制字

            Delay(LCDDELAY);

          

           

          

              *(int *)0x108001=LCDCMDVERADDRESS;       // 起始列=0

               Delay(LCDDELAY);

           *(int *)0x108002=0;

            Delay(LCDDELAY);

          

          

          

            TurnOnLCD();              // 打开显示

            y=0;

               for(j=0;j<4;j++)

      {

     

            *(int *)0x108001=LCDCMDPAGE+2;   //设置页

             Delay(LCDDELAY);

            *(int *)0x108002=0;

             Delay(LCDDELAY);

           

           

            *(int *)0x108001=LCDCMDVERADDRESS+y;   //设置地址

             Delay(LCDDELAY);

            *(int *)0x108002=0;

             Delay(LCDDELAY);

            

            

     for(i=0;i<16;i++)

     {

        *(int *)0x108003=ledkey2[j][i];

        Delay(LCDDELAY);

       *(int *)0x108002=0;

        Delay(LCDDELAY);

    }

   

   

   

       *(int *)0x108001=LCDCMDPAGE+3;

        Delay(LCDDELAY);

       *(int *)0x108002=0;

        Delay(LCDDELAY);

       

       

         

        *(int *)0x108001=LCDCMDVERADDRESS+y;

         Delay(LCDDELAY);

        *(int *)0x108002=0;

        Delay(LCDDELAY);

       

       

       

     for(i=16;i<32;i++)

     {

        *(int *)0x108003=ledkey2[j][i];

         Delay(LCDDELAY);

        *(int *)0x108002=0;

         Delay(LCDDELAY);

     }

    

    

    

     y+=16;

    

    }

   

      y=0;

     

     

     for(j=4;j<8;j++)

    {

        *(int *)0x108001=LCDCMDPAGE+4;

         Delay(LCDDELAY);

        *(int *)0x108002=0;

         Delay(LCDDELAY);

        

        

        

        *(int *)0x108001=LCDCMDVERADDRESS+y;

         Delay(LCDDELAY);

       *(int *)0x108002=0;

        Delay(LCDDELAY);

       

       

       

     for(i=0;i<16;i++)

     {

        *(int *)0x108004=ledkey2[j][i];

         Delay(LCDDELAY);

        *(int *)0x108002=0;

         Delay(LCDDELAY);

     }

    

    

    

     

         *(int *)0x108001=LCDCMDPAGE+5;

          Delay(LCDDELAY);

         *(int *)0x108002=0;

          Delay(LCDDELAY);

         

         

         

         *(int *)0x108001=LCDCMDVERADDRESS+y;

           Delay(LCDDELAY);

         *(int *)0x108002=0;

           Delay(LCDDELAY);

          

          

          

     for(i=16;i<32;i++)

     {

         *(int *)0x108004=ledkey2[j][i];

          Delay(LCDDELAY);

         *(int *)0x108002=0;

         Delay(LCDDELAY);

     }

    

     y+=16;

    

   }   

  

  }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  if(GpioDataRegs.GPADAT.bit.GPIOA7==0)

  {

//设置起始值

        *(int *)0x108001=LCDCMDSTARTLINE;   // 设置显示起始行

           Delay(LCDDELAY);      //延时 

        *(int *)0x108002=0;      //辅助命令控制字

        Delay(LCDDELAY);

       

           

          *(int *)0x108001=LCDCMDPAGE;            // 设置操作页=0

        Delay(LCDDELAY);

        *(int *)0x108002=0;         //辅助命令控制字

        Delay(LCDDELAY);

        

       

           *(int *)0x108001=LCDCMDVERADDRESS;     // 起始列=0

           Delay(LCDDELAY);

        *(int *)0x108002=0;

        Delay(LCDDELAY);

       

       

       

    TurnOnLCD();              // 打开显示

    y=0;

   

   

   

       for(j=0;j<4;j++)

    {

         *(int *)0x108001=LCDCMDPAGE+2;   //设置页

         Delay(LCDDELAY);

         *(int *)0x108002=0;

         Delay(LCDDELAY);

        

        

         *(int *)0x108001=LCDCMDVERADDRESS+y;   //设置地址

         Delay(LCDDELAY);

         *(int *)0x108002=0;

         Delay(LCDDELAY);

        

        

     for(i=0;i<16;i++)

     {

         *(int *)0x108003=ledkey4[j][i];

         Delay(LCDDELAY);

         *(int *)0x108002=0;

         Delay(LCDDELAY);

    }

   

   

   

         *(int *)0x108001=LCDCMDPAGE+3;

         Delay(LCDDELAY);

         *(int *)0x108002=0; 

         Delay(LCDDELAY);

        

        

         *(int *)0x108001=LCDCMDVERADDRESS+y;

         Delay(LCDDELAY);

         *(int *)0x108002=0;

         Delay(LCDDELAY);

        

        

        

     for(i=16;i<32;i++)

     {

        *(int *)0x108003=ledkey4[j][i];

        Delay(LCDDELAY);

        *(int *)0x108002=0;

        Delay(LCDDELAY);

     }

    

    

     y+=16;

    

    }

   

      y=0;

     

     

     for(j=4;j<8;j++)

    {

        *(int *)0x108001=LCDCMDPAGE+4;

        Delay(LCDDELAY);

        *(int *)0x108002=0;

        Delay(LCDDELAY);

       

       

      *(int *)0x108001=LCDCMDVERADDRESS+y;

      Delay(LCDDELAY);

      *(int *)0x108002=0;

      Delay(LCDDELAY);

     

      

     for(i=0;i<16;i++)

     {

        *(int *)0x108004=ledkey4[j][i];

        Delay(LCDDELAY);

        *(int *)0x108002=0;

        Delay(LCDDELAY);

     }

    

    

    

        *(int *)0x108001=LCDCMDPAGE+5;

        Delay(LCDDELAY);

        *(int *)0x108002=0;

        Delay(LCDDELAY);

       

       

        *(int *)0x108001=LCDCMDVERADDRESS+y;

        Delay(LCDDELAY);

        *(int *)0x108002=0;

        Delay(LCDDELAY);

       

       

       

     for(i=16;i<32;i++)

     {

        *(int *)0x108004=ledkey4[j][i];

        Delay(LCDDELAY);

        *(int *)0x108002=0;

        Delay(LCDDELAY);

     }

    

    

    

     y+=16;

   }

  

   }    

  

                

 

       if(GpioDataRegs.GPADAT.bit.GPIOA3==0)

        {      }

 

 

 

 

 

       if(GpioDataRegs.GPADAT.bit.GPIOA5==0)

       {     }

   

   

   

       if(GpioDataRegs.GPADAT.bit.GPIOA7==0)

       {     } 

      

      

  

}

}

八、设计总结

经过了两周的时间,课程设计结束了。

     首先,做课程设计真的很不容易。在这期间,我一次又一次的告诉自己,不管多难,一定要坚持,这是一个锻炼自己动手能力的好机会,一定要把握并充分利用,两周下来,流了很多汗,但得到更多的是收获的知识。不仅是巩固了先前学的模电、数电的理论知识,而且也培养了我的动手能力,更令我的创造性思维得到拓展。希望今后类似这样课程设计、类似这样的锻炼机会能更多一些。总的来说,这次课程设计确实学到很多,而且也锻炼了我遇到问题解决问题的勇气和能力,以及遇到挫折不达目的不罢休的韧性,这在以后的工作与学习中将会非常重要。

其次,真的要感谢我同组的伙伴。是他们让我真正认识的团队合作的重要性,一个项目分工合作可以大大提高开发的速度,而且对各个模块的精确性更有所保障。各个环节紧密结合才能使工作更好更快的完成。我的伙伴都很优秀,再次感谢他们的帮助和支持。

最后,要特别感谢指导老师的殷勤指导。他们的无私和不厌其烦的讲解让我解决了很多问题,走出了许多误区。

九、参考文献  

[1]万山明,《TMS320F281xDSP原理与应用实例》,北京航空航天大学出版社,2007.7。

[2]DSP乐园,www.dspland.com

[3] 李宏、张家田,《液晶显示器件应用技术》,机械工业出版社,2005.3

[4]郑红、王鹏、董云凤、吴冠,《DSP应用系统设计实践》,北京航空航天大学出版社,2006.4。

附录:

更多相关推荐:
DSP课程设计报告

郑州航空工业管理学院电子通信工程系DSP原理及应用课程设计报告设计题目:基于TMS320F2812DSP处理器的FIR滤波器的设计与实现学号:...姓名:....专业:电子信息工程设计日期:20XX年6月13日…

DSP课程设计报告

一绪论数字图像处理DigitalImageProcessing是指将图像信号转换成数字信号并利用计算机对其进行处理的过程图像处理中输入的是质量低的图像输出的是改善质量后的图像图像处理方法有图像增强复原编码压缩等...

dsp课程设计实验报告总结

DSP课程设计总结(20XX-20XX学年第2学期)题目:专业班级:电子1103学生姓名:学号:指导教师:设计成绩:20XX年6月一、设计目的设计一个功能完备,能够独立运行的精简DSP硬件系统,并设计简单的DS…

DSP课程设计报告

DSP课程设计总结(20XX-20XX学年第2学期)题目:数据采集处理和控制系统设计班级:电子091班学生姓名:XX学号:XX指导教师:XX20XX年6月目录一设计目的通过对基于TMS320VC5416的信号采…

DSP课程设计报告

一、课程设计的目的和要求1.1课程设计目的:本课程是DSP技术类课程配套的课程设计,要求学生通过高级语言或汇编语言编程实现较复杂的功能。通过课程设计,使学生加深对DSP芯片TMS320C54x的结构、工作原理的…

DSP课程设计报告

DSP原理及应用课程设计报告FFT的DSP实现姓名专业班级学号指导老师设计日期DSP原理及应用课程设计一设计目的1加深对DFT算法原理和基本性质的理解2了解并学习使用FFT算法以及其在TMS320C54X上的运...

dsp课程设计报告

DSP课程设计总结20xx20xx学年第2学期题目数据采集处理和控制系统设计专业班级学生姓名学号指导教师设计成绩20xx年7月目录一设计目的1二系统分析111设计要求112主要任务1三硬件设计231硬件总体结构...

DSP课程设计报告正弦波的实现

太原理工大学DSP原理及应用课程设计报告专业班级通信0802姓名邢剑卿学号20xx00131620xx年12月30日一设计目的学会用ccs集成开发软件在开发环境下完成工程项目创建程序编辑编译链接调试和数据分析二...

dsp课程设计报告

DSP课程设计实验报告语音噪声滤波院系电子信息工程学院指导教师杨恒小组成员郝嘉然082120xx王廓08283023语音噪声滤波目录一绪论1二设计任务书3三设计方案算法原理说明4四程序设计调试与结果分析15五感...

DSP课程设计报告

摘要本次课程设计介绍了数字信号处理的最小系统的整个设计过程该最小系统的硬件由主控芯片TWS320VC5402电源电路时钟电路复位电路JTAG接口外部存储器构成DSP芯片是一种独特的微处理器是以数字信号来处理大量...

DSP短学期课程设计报告

DSP短学期课程设计报告课程名称:DSP芯片应用系统设计专业:电气工程及其自动化班级:10自动化(2)设计者:学号:指导教师:宁波大学信息科学与工程学院一、设计目的通过矩阵键盘的输入,利用F2812的事件管理模…

DSP课程设计报告(优)

DSP课程设计报告多波形信号发生器目录一实验目的2二实验内容2三实验原理31产生连续的波形的方法311查表法312计算法32TLV320AIC23B的内部结构及工作原理3四程序设计4五程序调试101编译过程10...

dsp课程设计报告(27篇)