****大学 ***********学院
《课程设计报告》
题 目:基于DSP芯片的键盘控制LCD显示 专 业: 通信工程 班 级: 一班 姓 名: ******* 学 号: ************ 指导教师: ******
年 月 日
信息与电气工程学院 课程设计任务书
20 15 —20 16 学年第 一 学期
专业: 学号: 姓名: 课程设计名称: DSP原理与应用 设计题目: 基于DSP芯片的键盘控制LCD显示
完成期限:自 2015 年 12 月 21 日至 2015 年 12 月 25 日共 1 周 设计依据、要求及主要内容(可另加附页):
一、设计依据
通过4 * 4的行列式键盘,TMS320F2407的8个I / O口与之相连,用扫描法来进行按键识别。使行线一直处于高电平,在某一时刻只让一条列线处于低电平,而其余列线处于高电平。那么按下键的那列电平就会拉成低电平,判断出哪列为低电平就可以判断出按键号码。 二、设计要求
1.要求正确掌握CCS2000的安装和调试方法,以及DSP实验箱下载调试的步骤; 2.要求正确掌握键盘信号的输入和DSP I/O的使用; 3.要求键盘信号之间的时序能正确识别和引入。 三、主要内容
1.根据行列式键盘的特点,进行键盘控制系统的整体研究与设计;
2.熟练掌握CCS2000软件的使用,并能够按要求对设计的电路进行仿真,实现相应的功能; 3.LCD液晶显示屏实时显示按键的信息;
4.采用软件编程的方法实现按键信息的提取和显示。
指导教师(签字): 批准日期: 年 月 日
2
摘要
随着21世纪的到来,电子信息行业将是人类社会的高科技行业之一,式设施现代化的基础,也是人类通往科技巅峰的直通路。电子行业的发展从长远来看很重要,但最主要的还是科技问题。
行列式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。是它能准时、实时、高效地显示按键信息,以提高工作效率和资源利用率。
行列式键盘乃是当今使用最为广泛的键盘模式之一,该系统以8个端口连接控制4*4个按键,即时在LCD数码管上。单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是插上2407主控板的DSP实验箱和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。4*4矩阵式键盘采用插上2407主控板的DSP实验箱为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用汇编语言编程。单片机将检测到的按键信号转换成数字量,显示于LCD显示器上。
该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。 关键字:插上2407主控板的DSP实验箱;行列式;LCD;键盘
3
目录
一、实验目的.................................................5
二、实验设备.................................................5
三、实验原理.................................................6
四、实验步骤.................................................7
五、程序.....................................................8
六、实验总结.................................................25
七、参考文献.................................................25
4
基于DSP芯片的键盘控制LCD显示
一、实验目的
1.掌握CCS2000的安装和调试方法,以及DSP实验箱下载调试的步骤; 2.掌握键盘信号的输入,DSP I/O口的使用; 3.掌握键盘信号之间时序的正确识别和引入。
二、实验设备
1. 一台装有CCS2000软件的计算机;
CCS2000具有以下特性:TI编译器的完全集成的环境:CCS2000目标管理系统,内建编辑器,所有的调试和分析能力集成在一个Windows环境中。对c和DSP汇编文件的目标管理:目标编辑器保持对所有文件及相关内容的跟踪。它只对最近一次编译中改变过的文件重新编译,以节省编译时间。高集成的编辑器调整C和DSP汇编代码:CCS2000的内建编辑器支持C和汇编文件的动态语法加亮显示。使用户能很容易地阅读代码和当场发现语法错误,对编辑和调试时的后台编辑:用户在使用编译器和汇编器时没有必要退出系统到DOS环境中,因为CCS2000会自动将这些工具装载在它的环境中。在其窗口中,错误会加亮显示只要双击错误就可以直接到达出错处。PDM允许将命令传播给所有的或所选择的处理器。在任何算法点观察信号的图形窗口探针,图形显示窗口使用户能够观察时域或频域内的信号。
2. 插上2407主控板的DSP实验箱;(仿真器模块,显示控制模块,DSP评
估板模块,行列式键盘模块)
ICETEK-LF2407-A板是一块很的目标板,它非常适合检验LF2407DSP的性能,此外,本目标板提供了LF240x系列芯片进行扩展和运行软件的标准平台。
ICETEK-LF2407-A板使用了TMS320LF2407DSP芯片,兼容所有LF2407的使用代码,它具有2.5K字节的片上数据存储器,128K板上存储器,片上UART,DAC7625模数转换器。此EVM板还提供了DSP的扩展引脚,方便了用户外搭所需电路。
许多用户接口可利用简单的代码进行扩展,从而缩短了调试时间。 ICETEK-LF2407-A 板功能:
它主要的接口包括目标存储器接口、模拟接口、CAN总线接口、并口、用户指示灯和开关、外部扩展接口。
LF2407提供了128K的静态存储器,外部I/O口支持相应的k I/O
5
端口,片上的CAN总线和RS232端口可用做扩展连接。
3. DSP硬件仿真器。
三、实验原理
实验箱上提供一个4x4的行列式键盘。2407的8个I/O口与之相连,这里按键的识别方法是扫描法。
键被按下时,与此键相连的行线电平将由与此键相连的列线电平决定,而行线的电平在无按键按下时处于高电平状态。如果让所有的列线也处于高电平,那么键按下与否不会引起行线电平的状态变化,始终为高电平。所以,让所有的列线处于高电平是无法识别出按键的。现在反过来,让所有的列线处于低电平,很明显,按键所在的行电平将被拉成低电平。根据此行电平的变化,便能判断此行一定有按键被按下,但还不能确定是哪个键被按下。假如是5键按下,为了进一步判定是哪一列的键被按下,可在某一时刻只让一条列线处于低电平,而其余列线处于高电平。那么,按下键的那列电平就会拉成低电平,判断出哪列为低电平就可以判断出按键号码。
读者可以通过下面的键位去加深理解其含义
6
实验流程图:
由图可知,插上2407主控板的DSP实验箱的主芯片扫描矩阵键盘模块,矩阵键盘按键返回数据给实验箱主控制芯片,再由DSP芯片控制液晶显示模块,输入数据到液晶显示模块,然后完成实验流程,按下矩阵键盘的任意一个按键都能显示相对应的数据。 四、实验步骤
1.把2407模块小板插到大板上电脑显示会要安装驱动,按照流程安装好驱动;打开液晶模块的电源开关;
2.在CCS2000环境中打开本实验的工程编译(.\\key\\zkey.pjt) 成输出文件,通过仿真器把执行代码(.out的文件)下载到DSP芯片;
,生
2. 运行
;按下键盘按键,液晶会显示所按键的号码。
4.调试及性能分析
点击“运行”按键,进行仿真,点击右边4*4按键,则数码管显示0~F,仿真结果符合实验要求。
5.系统实现的功能
基本功能:通过键盘输入,在LCD液晶显示屏上显示相应的数值; 功能优势:键盘输入,插上2407主控板的DSP实验箱控制,LCD液晶显示屏显示。
7
五、程序
r16 .set 280h r17 .set 282h r18 .set 284h r21 .set 286h
r22 .set 288h ;r22 为调用显示一次的列数 r23 .set 28ah ;r24显示起始页 r24 .set 28ch ;r24显示起始列 r25 .set 28eh ;r25显示结束页 r26 .set 290h
keydata .set 292h ;存放键值 rowdata .set 294h ;存放行数 scandata .set 296h ;存放扫描值 keybuffer .set 298h ;读写键值缓冲 dp_user .set 5h keydata1 .set 29ah lcdtab .set 29ch lcddata .set 29eh
pbdatdir .set 709ah dp_pf2 .set 0e1h padatdir .set 7098h pcdatdir .set 709ch mcra .set 7090h mcrb .set 7092h mcrc .set 7094h pedatdir .set 7095h pfdatdir .set 7096h
;;;;;;以F口的低四位为输出,C口的7,6,5,0为输入,调试以通 .data tab00:
;-- 文字: E --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,000H,007H,006H,004H,004H,004H,004H,004H,004H,004H,007H,007H,004H,004H,000H .word 000H,0C0H,080H,000H,01FH,007H,002H,002H,002H,002H,002H,0FFH,0FFH,000H,000H,000H .word 000H,006H,001H,000H,0C0H,000H,000H,000H,000H,000H,000H,0FFH,0FFH,000H,000H,000H .word 000H,000H,0C0H,0C0H,040H,040H,040H,040H,040H,040H,040H,0C0H,0C0H,040H,040H,000Htab01:
;-- 文字: 0 --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,000H,000H,001H,003H,006H,004H,004H,004H,006H,003H,001H,000H,000H,000H,000H .word 000H,01FH,0FFH,0C0H,000H,000H,000H,000H,000H,000H,000H,0E0H,0FFH,01FH,000H,000H .word 000H,0F0H,0FEH,007H,001H,000H,000H,000H,000H,000H,001H,00FH,0FEH,0F0H,000H,000H .word 000H,000H,000H,000H,080H,0C0H,040H,040H,040H,0C0H,080H,000H,000H,000H,000H,000H tab02:
8
;-- 文字: F --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,007H,006H,006H,004H,004H,004H,004H,004H,004H,004H,007H,007H,004H,004H,000H .word 0C0H,080H,000H,01FH,007H,002H,002H,002H,002H,002H,002H,0FFH,0FFH,000H,000H,000H .word 000H,000H,000H,0C0H,000H,000H,000H,000H,000H,000H,000H,0FFH,0FFH,000H,000H,000H .word 000H,000H,000H,000H,000H,000H,000H,000H,000H,040H,040H,0C0H,0C0H,040H,040H,000H tab03:
;-- 文字: D --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,000H,000H,001H,003H,002H,006H,004H,004H,004H,004H,007H,007H,004H,004H,000H .word 000H,01FH,0FFH,0E0H,000H,000H,000H,000H,000H,000H,000H,0FFH,0FFH,000H,000H,000H .word 000H,0F0H,0FCH,00FH,001H,000H,000H,000H,000H,000H,000H,0FFH,0FFH,000H,000H,000H .word 000H,000H,000H,000H,080H,080H,0C0H,040H,040H,040H,040H,0C0H,0C0H,040H,040H,000H tab04:
;-- 文字: 7 --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,000H,006H,007H,006H,006H,006H,006H,006H,006H,006H,007H,007H,001H,000H,000H .word 000H,000H,000H,000H,0C0H,030H,00CH,003H,000H,000H,000H,000H,080H,0E0H,000H,000H .word 000H,000H,000H,000H,000H,000H,000H,080H,07FH,00FH,000H,000H,000H,000H,000H,000H .word 000H,000H,000H,000H,000H,000H,000H,000H,0C0H,0C0H,000H,000H,000H,000H,000H,000H tab05:
;-- 文字: 8 --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,000H,000H,001H,003H,006H,004H,004H,004H,004H,006H,003H,001H,000H,000H,000H .word 000H,000H,0F0H,0F8H,00CH,003H,003H,003H,003H,006H,00FH,01DH,0F8H,0F0H,000H,000H .word 000H,000H,03EH,07FH,0E1H,0C0H,080H,000H,000H,000H,000H,080H,0C1H,07FH,03EH,000H .word 000H,000H,000H,000H,080H,080H,040H,040H,040H,040H,040H,080H,080H,000H,000H,000H tab06:
;-- 文字: 9 --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,000H,000H,000H,001H,002H,004H,004H,004H,004H,004H,002H,003H,001H,000H,000H .word 000H,000H,03FH,0FFH,083H,001H,000H,000H,000H,000H,000H,000H,081H,0FFH,07EH,000H .word 000H,000H,0E0H,0FCH,01EH,083H,081H,040H,040H,040H,040H,0C0H,083H,003H,000H,000H .word 000H,000H,000H,000H,000H,000H,080H,0C0H,040H,040H,040H,040H,080H,080H,000H,000H tab07:
;-- 文字: C --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,000H,007H,003H,002H,004H,004H,004H,004H,006H,002H,001H,000H,000H,000H,000H .word 000H,060H,080H,000H,000H,000H,000H,000H,000H,000H,000H,080H,0E0H,07FH,00FH,000H .word 000H,00CH,003H,001H,000H,000H,000H,000H,000H,000H,000H,001H,00FH,0FEH,0F0H,000H .word 000H,000H,000H,080H,080H,040H,040H,040H,040H,040H,080H,080H,000H,000H,000H,000H tab08:
;-- 文字: 4 --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
9
.word 000H,000H,000H,000H,007H,007H,003H,000H,000H,000H,000H,000H,000H,000H,000H,000H .word 000H,000H,000H,000H,0FFH,0FFH,0FFH,080H,060H,018H,00CH,003H,000H,000H,000H,000H .word 000H,010H,010H,010H,0FFH,0FFH,0FFH,010H,010H,010H,010H,010H,090H,070H,010H,000H .word 000H,020H,020H,020H,0E0H,0E0H,0E0H,020H,020H,020H,000H,000H,000H,000H,000H,000H tab09:
;-- 文字: 5 --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,000H,006H,006H,006H,006H,006H,006H,006H,006H,006H,007H,000H,000H,000H,000H .word 000H,000H,000H,003H,006H,00CH,008H,008H,008H,008H,004H,0C2H,03FH,000H,000H,000H .word 000H,000H,0FCH,0FFH,003H,000H,000H,000H,000H,000H,000H,000H,00CH,00FH,000H,000H .word 000H,000H,000H,000H,080H,080H,040H,040H,040H,040H,040H,040H,080H,000H,000H,000H tab10:
;-- 文字: 6 --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,000H,001H,003H,004H,004H,004H,004H,006H,002H,001H,000H,000H,000H,000H,000H .word 000H,000H,081H,083H,006H,004H,004H,004H,004H,002H,003H,0E1H,07FH,00FH,000H,000H .word 000H,0FCH,0FFH,001H,000H,000H,000H,000H,000H,000H,001H,087H,0FEH,0F8H,000H,000H .word 000H,000H,000H,080H,080H,040H,040H,040H,040H,0C0H,080H,000H,000H,000H,000H,000H tab11:
;-- 文字: B --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,000H,001H,003H,003H,006H,004H,004H,004H,004H,004H,007H,007H,004H,004H,000H .word 000H,000H,0F0H,0F9H,00DH,006H,002H,002H,002H,002H,002H,0FFH,0FFH,000H,000H,000H .word 000H,03EH,0FFH,081H,000H,000H,000H,000H,000H,000H,000H,0FFH,0FFH,000H,000H,000H .word 000H,000H,000H,080H,0C0H,040H,040H,040H,040H,040H,040H,0C0H,0C0H,040H,040H,000H tab12:
;-- 文字: 1 --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,000H,000H,000H,000H,000H,000H,007H,003H,001H,001H,001H,001H,000H,000H,000H .word 000H,000H,000H,000H,000H,000H,000H,0FFH,0FFH,000H,000H,000H,000H,000H,000H,000H .word 000H,000H,000H,000H,000H,000H,000H,0FFH,0FFH,000H,000H,000H,000H,000H,000H,000H .word 000H,000H,000H,040H,040H,040H,0C0H,0C0H,0C0H,0C0H,040H,040H,040H,000H,000H,000H tab13:
;-- 文字: 2 --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,000H,000H,003H,003H,006H,004H,004H,004H,004H,004H,002H,001H,000H,000H,000H .word 000H,000H,0F8H,0FCH,006H,001H,000H,000H,000H,000H,000H,000H,030H,0F0H,000H,000H .word 000H,000H,00FH,001H,000H,000H,080H,040H,020H,010H,008H,004H,002H,001H,000H,000H .word 000H,000H,000H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,000H,000H tab14:
;-- 文字: 3 --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,000H,000H,000H,003H,003H,006H,004H,004H,004H,004H,002H,003H,001H,000H,000H .word 000H,000H,000H,0F0H,0F9H,00DH,007H,002H,002H,002H,000H,000H,0E0H,0E0H,000H,000H
10
.word 000H,000H,03CH,0FFH,081H,000H,000H,000H,000H,000H,000H,000H,00FH,00FH,000H,000H .word 000H,000H,000H,000H,080H,080H,040H,040H,040H,040H,040H,080H,080H,000H,000H,000H tab15:
;-- 文字: A --
;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --
.word 000H,000H,000H,000H,000H,000H,000H,00FH,007H,007H,000H,000H,000H,000H,000H,000H .word 000H,000H,000H,000H,000H,007H,07FH,0F8H,000H,0C0H,07CH,007H,000H,000H,000H,000H .word 000H,000H,000H,003H,07FH,0FCH,0C0H,040H,040H,040H,040H,0C0H,07CH,007H,000H,000H .word 000H,040H,040H,0C0H,0C0H,040H,000H,000H,000H,000H,000H,040H,040H,0C0H,0C0H,040H .include \"240xa.inc\" .def _c_int0 .text _c_int0
setc INTM clrc SXM clrc OVM clrc CNF ldp #0e0h
splk #0e8h,WDCR ldp #0 splk #0h,IMR splk #0ffffh,IFR ldp #dp_user
splk #0FFFH,r22
out r22,WSGR ldp #dp_pf2 lacl #00h
sacl mcra ;初始化mcra,定义a的0,1口为i/o lacl mcrb lacl #0ff00h
sacl mcrb ;初始化mcrb,定义c 的2,3,4口为i/o lacl #000h
sacl mcrc ;初始化mcrc,定义e口为i/o nop ldp #5 lacl #0 sacl lcdtab sacl keydata
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; long1:
lacl #0ff00h ldp #0e1h
sacl PADATDIR ;a的0,1口输出且为0 rpt #20 ;延时
11
nop
lacl #0ff00h
sacl PCDATDIR ;c的2,3,4口输出且为0 rpt #20 nop
lacl #0ff00h
sacl pedatdir ;c的2,3,4口输出且为0 rpt #20 nop
ldp #dp_user
splk #3eh,r16 ;关液晶显示3e call write_ins0 rpt #100 nop rpt #100 nop rpt #100 nop
ldp #dp_user
splk #3fh,r16 ;开液晶显示3f call write_ins0 call write_ins1 rpt #100 nop rpt #100 nop
; B long100 l1: ldp #dp_user
splk #0c0h,r16 ;起始行对应行 call write_ins0 nop
long2: ldp #dp_user
splk #0bfh,r16 ;确定初始页;call write_ins0 call write_ins0 ldp #dp_user
splk #40h,r16 ;确定初始列 call write_ins0 ldp #dp_user call display_cs0 call display_cs1 ;;;键盘扫描开始 long100: ;call display_cs0 scan_again:
call scan_key ;调用函数,得到对应数的(数)*16作地址偏移用
12
lacl keydata bcnd long100,eq lacl #0ff00h ldp #0e1h
sacl PADATDIR ;a的0,1口输出且为0 rpt #20 ;延时 nop
lacl #0ff00h
sacl PCDATDIR ;c的2,3,4口输出且为0 rpt #20 nop
lacl #0ff00h
sacl pedatdir ;c的2,3,4口输出且为 ;call display_cs0 lacl #0h ldp #5h
sacl lcdtab ;lcdtab的作用是放取数的地址值 lacc #0 mar *,ar5 ldp #5h lacl keydata sub #01h sacl keydata lar ar5,keydata lar ar0,#00h ;sacl lcdtab lacl #00 lay1: LACL lcdtab add # sacl lcdtab sbrk #1h nop cmpr 00
bcnd lay1,NTC sacl lcdtab
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;显示一个数 long35: ldp #dp_user
splk #10h,r22 ;r22 为调用显示一次的列数 ldp #dp_user
splk #0beh,r23 ;r23显示起始页 ldp #dp_user
splk #70h,r24 ;r24显示起始列 ldp #dp_user
13
splk #0bbh,r25 ;r25显示结束页 lacc lcdtab
add #tab00 ;取第一行的地址数 sacl lcdtab
call display4 ;显示第一个字 ldp #dp_user ;*************** ldp #dp_user
splk #10h,r22 ;r22 为调用显示一次的列数 ldp #dp_user
splk #0beh,r23 ;r23显示起始页 ldp #dp_user
splk #60h,r24 ;r24显示起始列 ldp #dp_user
splk #0bbh,r25 ;r25显示结束页 lacc lcdtab
add #tab00 ;取第一行的地址数 sacl lcdtab
call display4 ;显示第一个字 ldp #dp_user
;*********************** ******** long4: b scan_again ;;扫描程序;;
scan_key: lacl #0ff00h ldp #0e1h
sacl pfdatdir ;a的0,1口输出且为0 rpt #20 ;延时 nop
lacl #000h
sacl pcdatdir ;c的2,3,4口输出且为0 rpt #20 nop
lacl #0ff00h
sacl pedatdir ;c的2,3,4口输出且为 ldp #dp_user lacl #00h
sacl keydata ;初始化键值 lacl #04h
sacl rowdata ;初始化行数 ;lacl #0ffefh
lacl #0fff7h ;;;;;;;;;;;;; sacl scandata ;初始化扫描值 LDP #0e1h
mmm: lacl #0ff00h ;;;;;;;;;;;;;;
14
sacl pfdatdir ;高8位送全0 nop
lacl pcdatdir nop
ldp #5h sacl keybuffer and #0ffh ;屏蔽高4位 or #1eh
xor #0ffh ;检查是否有键按下 bcnd scanout ,eq ;无键按下则退出扫描 scan:
ldp #5h ;输出扫描值 lacl scandata ldp #0e1h sacl pfdatdir nop
lacl pcdatdir nop
and #0ffh ;屏蔽高4位 or #1eh
xor #0ffh ;检查该列是否有键按下 bcnd scannext,eq ldp #dp_user bit keybuffer,15
bcnd key1,tc ;判断是否该行的第一个键 ldp #5h lacl keydata add #01h sacl keydata b scanout key1: bit keybuffer,10 bcnd key2,tc
lacl keydata ;;判断是否该行的第二个键 add #02h sacl keydata b scanout
key2: bit keybuffer,9 ;;判断是否该行的第三个键 bcnd key3,tc lacl keydata add #03h sacl keydata nop b scanout
15
key3: bit keybuffer,8 ;判断是否该行的第四个键 bcnd scanout,tc lacl keydata add #04h sacl keydata
b scanout scannext:
ldp #dp_user
lacl scandata ;scandata左移一位放到acc sfr ldp #5h sacl scandata lacl keydata add #04h sacl keydata lacl rowdata
sub #01h ;看行数减1是否为0 sacl rowdata
bcnd scan,neq ;行数不为0则继续扫描下一行 scanout: ret ;;;;;;;;;
;可以调用的在任何位置显示一个数 ;入口参数:
;r22 为调用显示一次的列数 ;r24显示起始页 ;r24显示起始列 ;r25显示结束页 ;;;;;;;;; display4:
ldp #dp_user
lacl r22 ;保存r22,即写第一次的总列数 sacl r21 ldp #dp_user page_cycle4:
ldp #dp_user
lacl r24 ;r24显示起始列 sacl r16 call write_ins0 ldp #dp_user
lacl r23 ;r23显示起始页 sacl r16 call write_ins0 ;写初始化字 ldp #dp_user
16
lacl #0c0h ;显示起始行 sacl r16 call write_ins0 arrange_cycle4:ldp #dp_user lacl lcdtab ldp #dp_user tblr lcddata lacl lcddata ldp #dp_user
;lacl #0ffh ; 测试输出值函数 sacl r16 call write_data0 ldp #dp_user lacl lcdtab add #1 sacl lcdtab ldp #dp_user lacl r22 sub #1 sacl r22 lar ar0,#0 ldp #dp_user lar ar6,r22 mar *,ar6 cmpr 00
bcnd arrange_cycle4,NTC ;call delay LDP #dp_user lacl r21 sacl r22 ldp #dp_user
lar ar0,r23 ldp #dp_user
lar ar7,r25 ;r25显示结束页 lacl r23 sub #1h ldp #dp_user
sacl r23 mar *,ar7 cmpr 00
bcnd page_cycle4,NTC ;call delay ret display5:
17
ldp #dp_user
lacl r22 ;保存r22,即写第一次的总列数 sacl r21 ldp #dp_user page_cycle5:
ldp #dp_user
lacl r24 ;r24显示起始列 sacl r16 call write_ins1 ldp #dp_user
lacl r23 ;r23显示起始页 sacl r16 call write_ins1 ;写初始化字 ldp #dp_user
lacl #0c0h ;显示起始行 sacl r16 call write arrange_cycle5:ldp #dp_user lacl lcdtab ldp #dp_user tblr lcddata lacl lcddata ldp #dp_user
;lacl #0ffh ; 测试输出值函数 sacl r16 call write_data1 ldp #dp_user lacl lcdtab add #1 sacl lcdtab ldp #dp_user lacl r22 sub #1 sacl r22 lar ar0,#0 ldp #dp_user lar ar6,r22 mar *,ar6 cmpr 00
bcnd arrange_cycle5,NTC ;call delay LDP #dp_user lacl r21 sacl r22
18
ldp #dp_user
lar ar0,r23 ldp #dp_user
lar ar7,r25 ;r25显示结束页 lacl r23 sub #1h ldp #dp_user
sacl r23 mar *,ar7 write_ins1: cmpr 00
bcnd page_cycle5,NTC ;call delay
ret ldp #dp_pf2 lacl #03fch ;a的0,1口输出且为0,e先变低 sacl padatdir nop lacl #1c08h ;lacl #1c18h
sacl pcdatdir ;c的4, 3 ,2 口输出且为0, 1,0;其中c的4,3,2代表rs,cs2,cs rpt #20 nop
ldp #0e1h lacl #0301h
sacl padatdir ;a的1,0口输出且为0,1 ,e变高 ;rpt #10 nop
ldp #dp_user lacl r16 or #0ff00h ldp #0e1h
sacl pedatdir ; 输出初始化信号 rpt #50 nop ldp #0e1h
lacl #03fch ;a的0,1口输出且为0,e先变低 sacl padatdir ;e变低锁存 rpt #5 nop
ldp #0e1h lacl #0302h
sacl padatdir ;rw变高
19
ldp #dp_pf2 lacl #1c0ch
sacl pcdatdir ;c的4, 3 ,2 口输出且为0, 1,1;其中c的4,3,2代表rs,cs2,cs1 ldp #dp_user rpt #5 nop ret write_ins0:
ldp #dp_pf2
lacl #03fch ;a的0,1口输出且为0,e先变低 sacl padatdir nop lacl #1c04h ;lacl #1c18h
sacl pcdatdir ;c的4, 3 ,2 口输出且为0, 1,0;其中c的4,3,2代表rs,cs2,cs1 rpt #20 nop
ldp #0e1h lacl #0301h
sacl padatdir ;a的1,0口输出且为0,1 ,e变高 ;rpt #10 nop
ldp #dp_user lacl r16 or #0ff00h ldp #0e1h
sacl pedatdir ; 输出初始化信号 rpt #50 nop ldp #0e1h
lacl #03fch ;a的0,1口输出且为0,e先变低 sacl padatdir ;e变低锁存 rpt #5 nop
ldp #0e1h lacl #0302h
sacl padatdir ;rw变高 ldp #dp_pf2 lacl #1c0ch
sacl pcdatdir ;c的4, 3 ,2 口输出且为0, 1,1;其中c的4,3,2代表rs,cs2,cs1 ldp #dp_user rpt #5 nop
ret
20
write_data1:
ldp #0e1h
lacl #0ff00h ;a的0,1口输出且为0,e先变低 sacl padatdir nop ldp #0e1h lacl #1c18h
sacl pcdatdir ;c的4, 3 ,2 口输出且为1, 1,0;其中c的4,3,2代表rs,cs2,cs1 rpt #10 nop
ldp #0e1h lacl #0ff01h
sacl padatdir ;a的1,0口输出且为0,1 ,e变高 ;rpt #10 nop
ldp #dp_user lacl r16 or #0ff00h ldp #0e1h
sacl pedatdir ; 输出初始化信号 rpt #5 nop ldp #0e1h
lacl #0ff00h ;a的0,1口输出且为0,e先变低 sacl padatdir ;e变低锁存 rpt #5 nop
ldp #0e1h lacl #0ff02h
sacl padatdir ;rw变高 ldp #dp_pf2 lacl #1c0ch
sacl pcdatdir ;c 的4, 3 ,2 口输出且为0, 1,1;其中c的4,3,2代表rs,cs2,cs1 ldp #dp_user rpt #5 nop ret write_data0:
ldp #0e1h
lacl #0ff00h ;a的0,1口输出且为0,e先变低 sacl padatdir nop ldp #0e1h lacl #1c14h
21
sacl pcdatdir ;c的4, 3 ,2 口输出且为1, 1,0;其中c的4,3,2代表rs,cs2,cs1 rpt #10 nop
ldp #0e1h lacl #0ff01h
sacl padatdir ;a的1,0口输出且为0,1 ,e变高 ;rpt #10 nop
ldp #dp_user lacl r16 or #0ff00h ldp #0e1h
sacl pedatdir ; 输出初始化信号 rpt #5 nop ldp #0e1h
lacl #0ff00h ;a的0,1口输出且为0,e先变低 sacl padatdir ;e变低锁存 rpt #5 nop
ldp #0e1h lacl #0ff02h
sacl padatdir ;rw变高 ldp #dp_pf2 lacl #1c0ch
sacl pcdatdir ;c 的4, 3 ,2 口输出且为0, 1,1;其中c的4,3,2代表rs,cs2,cs1 ldp #dp_user rpt #5 nop ret display_cs0: ldp #5h
splk #0c0h,r16 call write_ins0 ldp #5h
splk #0b8h,r17 ;确定初始行 arrange00: ldp #5h
splk #040h,r18 ;确定初始列 ldp #5h lacl r17
sacl r16 ;写初始行 call write_ins0 ldp #5h
lacl r18 ;写初始列 sacl r16
22
call write_ins0 arrange01: ldp #5h splk #00h,r16 call write_data0 ; call delay ldp #5h lacl r18
add #1h ;列自动加1,且人为设置的加一,起控制作用 sacl r18 ; call delay ldp #5h mar *,ar6 lar ar6,r18 lar ar0,#128 cmpr 01
bcnd arrange01,TC;列的数未加到个跳出 ldp #5h lacl r17 add #1h sacl r17 call delay lar ar5,r17 lar ar0,#0c0h mar *,ar5 cmpr 01
bcnd arrange00,tc ;未到8页循环 ret display_cs1: ldp #5h
splk #0c0h,r16 call write_ins1 ldp #5h
splk #0b8h,r17 ;确定初始行 arrange10: ldp #5h
splk #040h,r18 ;确定初始列 ldp #5h lacl r17
sacl r16 ;写初始行 call write_ins1 ldp #5h
lacl r18 ;写初始列 sacl r16 call write_ins1 arrange11: ldp #5h splk #00h,r16
23
call write_data1 ; call delay ldp #5h lacl r18
add #1h ;列自动加1,且人为设置的加一,起控制作用 sacl r18 ; call delay ldp #5h mar *,ar6 lar ar6,r18 lar ar0,#128 cmpr 01
bcnd arrange11,TC;列的数未加到个跳出 ldp #5h lacl r17 add #1h sacl r17 call delay lar ar5,r17 lar ar0,#0c0h mar *,ar5 cmpr 01
bcnd arrange10,tc ;未到8页循 ret delay:
mar *,ar3 lar ar3,#0fffh lar ar0,#00h delay1: sbrk #1h nop cmpr 00
bcnd delay1,NTC ret end
六、实验总结
通过本次CCS2000环境下矩阵键盘扫描LCD显示的仿真实验,让我了解并熟悉了CCS2000软件的安装和调试方法,DSP实验箱下载调试的步骤以及CCS环境下的DSP的汇编语言程序编写方法,对于液晶显示模块控制程序的编写和矩阵键盘的信号识别原理也有了更深的认识,对今后DSP的进一步学习奠定了应用基
24
础。
运行程序后,在按下键盘上的按键时,会显示相对应的键号(键号为:0-9、A-D、#、* 共十六的键号),其显示是通过液晶显示器显示出来。了解了4*4矩阵键盘的设定及其IO口的配置方式,进一步掌握用汇编语言编写DSP程序的方法,及编译、除错能力。
七、参考文献
【1】 张永祥、宋宇、袁慧梅;《TMS320C54系列DSP原理与应用》;清华大学出版社,2012年1月;
【2】 《RC-DSP-II实验指导书》;北京融创教学仪器设备有限公司; 【3】高海林、钱满义;《DSP技术及其应用讲义》;2005年10月; 【4】彭启宗等;《DSP技术的发展与应用》;2002年6月;
25
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo7.cn 版权所有 湘ICP备2022005869号-9
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务