东南大学自动化学院
实 验 报 告
课程名称: 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; CTRGR=0x0; CTRGR=0x80; CTRLR=0; nCount=0; for (;;) {
*(int *)0x208007=uLedmy[nCount]; nCount++; nCount%=12;
// 设置指示灯状态
// 关闭东西方向的交通灯 // 关闭南北方向的交通灯
CTRLR=0x40;
// 初始化ICETEK-CTR
}
}
Delay(512);
2. 液晶显示器控制显示
液晶显示模块的访问、控制是由28335A DSP 对扩展接口的操作完成。控制口的寻址:命令控制接口的地址为0x208001,数据控制接口的地址为0x208003 和0x208004,辅助控制接口的地址为0x208002。
液晶显示模块中有两片显示缓冲存储器,分别对应屏幕显示的象素,向其中写入数值将改变显示,写入“1”则显示一点,写入“0”则不显示。液晶屏是64*64点阵的,一个基本字符占用8*8点阵。其地址与象素的对应方式如下:
左侧显示内存 0 0 1 … 7 行 8 9 … 15 … … 63 DB0 DB1 … DB7 DB0 DB1 … DB7 1 DB0 DB1 … DB7 DB0 DB1 … DB7 … 63 DB0 DB1 … DB7 DB0 DB1 … DB7 0 DB0 DB1 … DB7 DB0 DB1 … DB7 列 右侧显示内存 1 DB0 DB1 … DB7 DB0 DB1 … DB7 … 63 DB0 DB1 … DB7 DB0 DB1 … DB7
发送控制命令:向液晶显示模块发送控制命令的方法是通过向命令控制接口写入命令控制字,然后再向辅助控制接口写入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