DSP技术及课程设计实验报告三
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
东南大学自动化学院
实验报告
课程名称:DSP原理及C程序开发
第三次实验
实验名称:液晶屏、键盘外设控制实验
院(系):自动化专业:自动化
姓名:学号:
实验室:实验组别:
同组人员:实验时间:2012 年 4 月25 日评定成绩:审阅教师:
实验3:基于DSP系统的实验
——液晶屏、键盘外设控制实验
一.实验目的
通过实验学习使用28335A DSP的扩展端口控制外围设备的方法,了解(1)发光二极管的控制编程方法、(2)液晶显示器编程方法、(3)键盘外设控制编程方法。
二.实验设备
计算机,ICETEK-F28335-EDU 实验箱(或ICETEK 仿真器+ICETEK–F28335-A 系统板+相关连线及电源)。
三.实验原理
1.发光二极管显示阵列(交通灯)控制
TMS320F28335DSP的扩展存储器接口(EMIF)用来与大多数外围设备进行连接,典型应用如连接片外扩展存储器等。这一接口提供地址连线、数据连线和一组控制线。ICETEK-F28335-A 将这些扩展线引到了板上的扩展插座上供扩展使用。
实验箱中ICETEK-CTR板上的发光二极管显示阵列(交通灯)的显示是由扩展端口控制,扩展在EMIF 接口的两个寄存器提供具体控制。
交通灯一共12个,使其顺序亮灭的例程如下所示:
unsigned int uLedmy[12]={ 0x1,0x2,0x04,0x48,0x50,0x60, 0x8, 0x10, 0x20,0x41, 0x42,0x44};
void main(void)
{
int nCount;
InitSysCtrl();
InitXintf16Gpio();
CTRGR=0x80; // 初始化ICETEK-CTR
CTRGR=0x0;
CTRGR=0x80;
CTRLR=0; // 关闭东西方向的交通灯
CTRLR=0x40; // 关闭南北方向的交通灯
nCount=0;
for (;;)
{
*(int *)0x208007=uLedmy[nCount]; // 设置指示灯状态
nCount++; nCount%=12;
Delay(512);
}
}
2.液晶显示器控制显示
液晶显示模块的访问、控制是由28335A DSP 对扩展接口的操作完成。控制口的寻址:命令控制接口的地址为0x208001,数据控制接口的地址为0x208003 和0x208004,辅助控制接口的地址为0x208002。
液晶显示模块中有两片显示缓冲存储器,分别对应屏幕显示的象素,向其中写入数值将改变显示,写入“1”则显示一点,写入“0”则不显示。液晶屏是64*64点阵的,一个基本字符占用8*8点阵。其地址与象素的对应方式如下:
发送控制命令:向液晶显示模块发送控制命令的方法是通过向命令控制接口写入命令控制字,然后再向辅助控制接口写入0。下面给出的是基本命令字、解释和C语言控制语句举例:
●显示开关:0x3f 打开显示;0x3e 关闭显示;
●设置显示起始行:0x0c0+起始行取值,其中起始行取值为0至63;
●设置操作页:0x0b8+页号,其中页号取值为0-7;
●设置操作列:0x40+列号,其中列号为取值为0-63;
写显示数据:在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的数据写入液晶显示模块的缓存。将数据发送到相应数据控制I/O接口即可。
3.键盘输入
键盘的扫描码由DSP 的扩展地址0x208001 给出,当有键盘输入时,读此端口得到扫描码,当无键被按下时读此端口的结果为0。各按键的扫描码排列如下所示(scancode.h)。
#define SCANCODE_0 0x70
#define SCANCODE_1 0x69
#define SCANCODE_2 0x72
#define SCANCODE_3 0x7A
#define SCANCODE_4 0x6B
#define SCANCODE_5 0x73
#define SCANCODE_6 0x74
#define SCANCODE_7 0x6C
#define SCANCODE_8 0x75
#define SCANCODE_9 0x7D
#define SCANCODE_Del 0x49
#define SCANCODE_Enter 0x5A
#define SCANCODE_Plus 0x79
#define SCANCODE_Minus 0x7B
#define SCANCODE_Mult 0x7C
define SCANCODE_Divid 0x4A
#define SCANCODE_Num 0x77
四.实验步骤
1.打开例程“Lab402-Ledarray”工程,编译运行,观察交通灯流水亮灭。
实验程序:
#define LCDDELAY 1
#define LCDCMDTURNON 0x3f
#define LCDCMDTURNOFF 0x3e
#define LCDCMDSTARTLINE 0xc0
#define LCDCMDPAGE 0xb8
#define LCDCMDVERADDRESS 0x40
#define CTRGR *(int *)0x208000
#define CTRLCDCMDR *(int *)0x208001
#define CTRKEY *(int *)0x208001
#define CTRLCDCR *(int *)0x208002
#define CTRCLKEY *(int *)0x208002
#define CTRLCDLCR *(int *)0x208003
#define CTRLCDRCR *(int *)0x208004
#define CTRLA *(int *)0x208005
void main(void)
{
int nCount,nCursorCount;
unsigned int nScanCode,nKeyCode;
unsigned char cKey,cOldKey;
unsigned int nSpeed;
InitSysCtrl();
InitXintf16Gpio();
CTRGR=0x80; // 初始化ICETEK-CTR
CTRGR=0x0;
CTRGR=0x80;
CTRLR=0; // 关闭东西方向的交通灯
CTRLR=0x40; // 关闭南北方向的交通灯
CTRLR=0xc1;
uPort8000=CTRLCDCR; // 清键盘缓冲区
RefreshLEDArray();
nCount=nCursorCount=0;
/****************************************************************************** ********
Task1: 编写一段循环程序,用交通灯实现流水点亮,可利用本程序中的Delay()函数
******************************************************************************* *******/