课程设计报告
课程设计名称: DSP原理与应用
系 : 三系
学生姓名:
班 级:
学 号:
成 绩:
指导教师: 田爱君
开课时间: 20##-2011 学年 2 学期
一.设计题目
基于TMS320VC5509 DSP的语音信号FIR滤波器设计
二.主要内容
本课程设计主要完成软件平台的设计,在现有的TMS320VC5509 DSP硬件平台上,按照要求设计FIR滤波器,编写相应的源程序和链接命令程序,使整个系统能够滤除含噪语音信号中的高频噪声。
三.具体要求
设计需要完成几个内容:
(1)首先自己参照指导书完《语音信号的FIR滤波实验》,认真阅读实验中的源程序,深刻理解语音信号FIR滤波的原理及具体实现方法,包括含噪语音信号的读取,滤波后信号的输出,语音编解码器的设置(AIC23),重点理解FIR滤波器的实现(循环寻找的实现)。
(2)在理解原理的基础上,设计自己的滤波器。
①录制自己的语音,长度为4-6个字,如“宿迁学院”,录制完成并命名后,保存在相应的位置。用MATLAB命令,给语音信号加噪声,形成噪声文件。
②设计一定参数的滤波器
要求: 已知信号的采样频率为8000hz,设计一个30阶低通滤波器,滤波器的通带截止频率为3000hz,阻带截止频率为3400hz。
③得到滤波器的系数后,按照循环寻址的原理,参照给出的实验程序,编写具体的滤波器实现程序。
④调试程序,测试平台的性能。在输入生成的噪声语音条件下,听滤波后的语音,试听能否滤除噪声;并观察相应得含噪语音信号波形及去噪后的语音信号波形,滤波器的波形。
(3)撰写课程设计报告。
四.进度安排
五.成绩评定
1、考核方法:总成绩由平时成绩、设计成绩两部分组成,各部分比例为30%,70%.
2、成绩评定:
(1)平时成绩:无故旷课一次,平时成绩减半;无故旷课两次平时成绩为0分,无故旷课三次总成绩为0分。迟到15分钟按旷课处理
(2)设计成绩:根据实际的设计过程及最终的实现结果,同时参考提交报告的质量,给出综合的设计成绩。
基于TMS320VC5509 DSP的FIR滤波器设计
一、实践的目的和要求
五号字,500字左右
二、实践原理:
理论原理,流程均要求给出
三、实践步骤
在理解课程设计的基础上,写出自己设计的过程
1.
2.
3.
………….
四 心得体会
参考文献:
1.
2.
3.
第二篇:dsp课程设计报告
科信学院
课程设计说明书
(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。
附录: