当前位置:文档之家› DSP技术及课程设计实验报告三

DSP技术及课程设计实验报告三

东南大学自动化学院实验报告课程名称: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-CTRCTRGR=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 0x7Cdefine 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 *)0x208005void main(void){int nCount,nCursorCount;unsigned int nScanCode,nKeyCode;unsigned char cKey,cOldKey;unsigned int nSpeed;InitSysCtrl();InitXintf16Gpio();CTRGR=0x80; // 初始化ICETEK-CTRCTRGR=0x0;CTRGR=0x80;CTRLR=0; // 关闭东西方向的交通灯CTRLR=0x40; // 关闭南北方向的交通灯CTRLR=0xc1;uPort8000=CTRLCDCR; // 清键盘缓冲区RefreshLEDArray();nCount=nCursorCount=0;/****************************************************************************** ********Task1: 编写一段循环程序,用交通灯实现流水点亮,可利用本程序中的Delay()函数******************************************************************************* *******/for (;;){CTRLR=uLedmy[nCount]; // 设置指示灯状态nCount++;nCount%=12;Delay(1024);}}2. 打开例程“Lab405-lcd”工程,编译运行,可以观察到液晶屏左侧顶部第一个8*8单元显示从0到9的计数单字符。

实验程序:unsigned char ledkey[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},{0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00},{0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00},{0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00},{0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00},{0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00},{0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00}};for (;;){for(j=0;j<10;j++){CTRLCDCMDR=LCDCMDPAGE; // 设置操作页=0Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);CTRLCDCMDR=LCDCMDVERADDRESS; // 起始列=0Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);for ( i=0;i<8;i++ ){/*********************************************************************** Task: 推算ledkey数组值的含义;给屏幕左侧第1至8行第i列赋值。

另外,可利用变量nBW来控制背景/前景色取反;即:CTRLCDLCR=**********************************************************************/CTRLCDLCR=ledkey[j][i];Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);}Delay(4096); //延时子程序nCount++;if ( nCount==10 ){nCount=0;nBW=1-nBW;}}}3. 打开例程“Lab404-key”工程,编译运行,可以观察到发光二极管阵列显示键盘输入字符。

实验程序:/****************************************************************************** ********Task2: 完善如下一段循环程序,查询小键盘,用按键点亮对应的交通灯,例如按下“1”点亮左交通灯的红灯提示:用cOldKey和cKey变量分别保存上次键值和本次键值******************************************************************************* *******/for (;;){nScanCode=CTRLCDCMDR;nScanCode&=0x0ff;uPort8000=CTRLCDCR;if ( nScanCode!=0 ){cOldKey=cKey;cKey=nScanCode;if(cOldKey!=cKey){CTRLR=0x40; // 关闭南北方向的交通灯CTRLR=0;;CTRLR=uLedmy[cKey];}}Delay(25);}五.问题与思考1. 修改例程“Lab405-lcd”工程,使得液晶屏右侧顶部第一个8*8单元显示从0到9的计数单字符。

相关主题