ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:425.34KB ,
资源ID:6628351      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6628351.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(键盘输入控制LED灯设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

键盘输入控制LED灯设计.docx

1、键盘输入控制LED灯设计DSP原理及应用课程设计键盘输入设计 学 院:电气信息工程学院 专 业电子信息工程班 级 电子一班分 组 成 员 联 系 方 式 指 导 教 师 2012 年 6 月摘 要DSP技术一般指将DSP 处理器用于完成数字信号处理的方法与技术。目前的DSP芯片以其强大的数据处理功能在通信和其他信号处理领域得到广泛注意并已成为开发应用的热点技术。许多领域对于数字信号处理器的应用都是围绕美国德州仪器所开发的DSP处理器来进行的。DSP芯片是一种特别适合于进行数字信号处理运算的微处理器。关键词:DSP;TMS320VC5416;键盘;指示灯一设计目的DSP课程设计是对课程所学理论知

2、识的深化和提高。目的是能综合应用所学知识,设计与制造出具有简单功能的小型键盘输入发声装置。 能够较全面地巩固和应用DSP课程中所学的基本理论和基本方法,初步掌握小型DSP系统设计的基本方法,并学会用C语言对DSP系统进行编程及DSP试验箱和相关软件的运用。 培养独立思考、独立收集资料、独立设计规定功能的单片机系统的能力;培养分析、总结及撰写技术报告的能力,本次课程设计目的在于:1、学习用键盘控制 DSP管脚输出,从而控制LED灯的闪亮。2、学习DSP的C语言编程方法。3、学习DSP程序的调试及编写,及运用观察变量的方法查看程序的运行情况。二设计原理1扩展IO接口:ICETEK-VC5416-A

3、是一块以TMS320VC5416DSP为核心的DSP扩展评估板,它通过扩展IO接口与实验箱的显示/控制模块连接,可以控制其各种外围设备,也可以接收外设发送的各种数据、信息。2键盘的扫描码由DSP的扩展寄存器CTRKEY给出,当有键盘输入时,读此端口得到扫描码,当无键被按下时读此端口的结果为0。各按键的扫描码排列如下所示(scancode.h)。#define SCANCODE_1 1#define SCANCODE_2 2#define SCANCODE_3 3#define SCANCODE_4 4#define SCANCODE_5 5#define SCANCODE_6 6#define

4、 SCANCODE_7 7#define SCANCODE_8 8#define SCANCODE_9 93. 控制模块共有8个寄存器如表1-1定义:表1-1 控制和状态寄存器列表名称地址功能属性CTRGRPort8000全局控制寄存器WCTRLCDCRPort8002液晶控制寄存器WCTRLCDCMDRPort8001液晶命令寄存器WCTRLCDLCRPort8003液晶左半屏控制寄存器WCTRLCDRCRPort8004液晶右半屏控制寄存器WCTRLRPort8007辅助控制寄存器WCTRKEYPort8002键盘数据回读寄存器RCTRSPEEDPort8003电机速度回读寄存器R显示控制

5、模块有一个全局控制寄存器CTRGR,地址映射在TMS320VC5416的IO扩展空间上,地址为0x8000。其各位上的定义如表1-2:表1-2 全局控制寄存器CTRGRBit7bit6bit5bit4bit3bit2bit1bit0GS保留保留保留BUZZEPWMEIOPEDCMEGS:全局控制标志位;BUZZE:蜂鸣器使能;PWME:PWM控制使能;IOPE:通用I/O端口(PA-LED)直接控制交通灯北方向红灯使能;DCME:直流电机使能;例如需要使能直流电机,可以用以下C语言语句:CTRGR=1;4、发光二极管编程控制:显示/控制模块上的发光二极管是由连接在5416DSP扩展地址接口上的

6、寄存器EWR和SNR控制的。这两个寄存器均为6位寄存器,其位定义参见表1-3、表1-4: 表1-3 寄存器EWRBit7Bit6bit5bit4bit3bit2bit1bit000东-红东-黄东-绿西-红西-黄西-绿表1-4 寄存器SNRBit7Bit6Bit5bit4bit3bit2bit1bit001南-红南-黄南-绿北-红北-黄北-绿两个寄存器的地址均映射到5416DSP的IO扩展空间,CTRLR地址为0x8007,DSP通过对该地址的写操作来修改两个寄存器上各位的状态,当寄存器某位取1值时,相应指示灯被点亮,取0值则熄灭。当写入CTRLR的数据(8位有效值)的高两位为00时,数据的低6

7、位将写入EWR寄存器;当高两位的值为01时,写入SNR寄存器。例如:需要点亮东、西方向的红灯和南、北方向的绿灯,其它灯均熄灭时,可以用下面C语句完成。对于高速DSP,可能需要在两个语句之间加入延时语句。CTRLR=0x024; CTRLR =0x49; 5、发光二极管显示阵列编程控制:发光二极管显示阵列的显示是由I/O扩展端口控制,DSP须将显示的图形按列的顺序存储起来(88点阵,8个字节,高位在下方,低位在上方),然后定时刷新控制显示。具体方法是,将以下控制字按先后顺序,每两个为一组发送到全局控制寄存器的第6-4位和端口CTRLA,地址是0x8005发送完毕后,隔不太长的时间(以人眼观察不闪

8、烁的时间间隔)再发送一遍。由于位值为“0”时点亮,所以需要将显示的数据取反。000B,第8列数据取反;001B,第7列数据取反;010B,第6列数据取反;011B,第5列数据取反;100B,第4列数据取反;101B,第3列数据取反;110B,第2列数据取反;111B,第1列数据取反。注意:在使用前须在I/O端口CTRLR写入控制字0x0C1,以打开此设备。关闭时写0x0C0。6键盘输入编程控制:键盘的扫描码由DSP的CTRKEY扩展地址0x8001给出,当有键盘输入时,读此端口得到扫描码,当无键被按下时读此端口的结果为0。CTRCLKEY地址为0x8002。读取的方法如下:nScanCode=

9、 CTRKEY; nnn= CTRCLKEY; / nScanCode中为扫描码三设置CCS1、设置CCS(通过ICETEK-5100USB仿真器连接ICETEK-VC5416-A硬件环境进行软件调试和开发)(1)单击桌面上图标:进入CCS设置窗口。(2)在出现的窗口中按标号顺序进行如下设置:(3)接着在下面的窗口中按标号顺序进行如下选择: (4)在出现的窗口按标号顺序进行如下设置:(5)在出现的窗口按标号顺序进行如下设置:以上设置完成后,CCS已经被设置成Emulator的方式(用仿真器连接硬件板卡的方式),并且指定通过ICETEK-5100USB仿真器连接ICETEK-VC5416-A评估

10、板。如果您需要一直使用这一方式就不需要重新进行以上设置操作了。四、实验步骤1启动Simulator方式双击桌面上图标: 2启动Emulator方式(1) 首先将实验箱电源关闭。连接实验箱的外接电源线。(2) 检查ICETEK-5100USB仿真器的黑色JTAG插头是否正确连接到ICETEK-VC5416-A板的J3插头上。注:仿真器的插头中有一个孔加入了封针,与J3插头上的缺针位置应重合,保证不会插错。(3) 检查是否已经用电源连接线连接了ICETEK-VC5416-A板上的POW1插座和实验箱底板上+5V电源插座。(4) 检查其他连线是否符合实验要求。检查实验箱上三个拨动开关位置是否符合实验

11、要求。(5) 打开实验箱上电源开关(位于实验箱底板左上角),注意开关边上红色指示灯点亮。ICETEK-VC5416-A板上指示灯D5和D6点亮。如果打开了ICETEK-CTR的电源开关,ICETEK-CTR板上指示灯L1、L2和L3点亮。如果打开了信号源电源开关,相应开关边的指示灯点亮。(6) 用实验箱附带的USB信号线连接ICETEK-5100USB仿真器和PC机后面的USB插座,注意ICETEK-5100USB仿真器上指示灯Power和Run灯点亮。(7) 双击桌面上仿真器初始化图标:如果出现下面提示窗口,表示初始化成功,按一下空格键进入下一步操作。如果窗口中没有出现“按任意键继续”,请关

12、闭窗口,关闭实验箱电源,再将USB电缆从仿真器上拔出,返回第(2)步重试。如果窗口中出现“The adapter returned an error.”,并提示“按任意键继续”,表示初始化失败,请关闭窗口重试两三次,如果仍然不能初始化则关闭实验箱电源,再将USB电缆从仿真器上拔出,返回第(2)步重试。(8)双击桌面上图标:启动CCS2.21。(9)如果进入CCS提示错误,先选“Abort”,然后用“初始化ICETEK-5100 USB2.0仿真器”初始化仿真器,如提示出错,可多做几次。如仍然出错,拔掉仿真器上USB接头(白色方形),按一下ICETEK-VC5416-A板上S1复位按钮,连接US

13、B接头,再做“初始化ICETEK-5100 USB2.0仿真器”。(10)如果遇到反复不能连接或复位仿真器、进入CCS报错,请打开Windows的“任务管理器”,在“进程”卡片上的“映像名称”栏中查找是否有“cc_app.exe”,将它结束再试。3. 选择菜单DebugReset CPU。4打开工程文件:工程目录:C:ICETEKVC5416AES61VC5416AES61Lab0404-keyKey.pjt。浏览key.c文件的内容,理解各语句作用。5编译并下载程序。6运行程序观察结果:运行程序后,按小键盘上的数字键1到8,可以看到有相应的发光二极管点亮。7.退出程序:在小键盘上按“9”键,

14、程序会退出并停止运行。五、系统程序设计 1.程序流程图 开始初始化:DSP时钟、ICETEK-CTR选通发光二极管显示阵列有键盘输入?适当延时否是输入“9”键?否是点亮相应的指示灯关闭打开的ICETEK-CTR设备结束2.参数变量解读 (1) 函数指针定义:函数类型 (*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:int (*f)(int x);double (*ptr)(double x);在定义函数指针时请注意:函数指针和它指向的函数的参数个数和类型都

15、应该是致的;函数指针的类型和函数的返回值类型也必须是一致的。(2) 访问I/O空间:I/O空间地址声明要在程序中访问io空间地址,必须首先用关键字“ioport”对要访问的地址进行定义。语法:ioport t ype porthex_numioport 声明io空间端口变量的关键字;type 变量类型,可以为char, short, int或unsigned int;porthex_num 端口号,port后面接16进制数字。ioport unsigned int port10;注:声明io空间地址必须在C文件起始声明,不允许在函数中使用ioport声明io空间地址。3.源程序逐段逐句功能解读

16、#include scancode.h#define REGISTERCLKMD (*(unsigned int *)0x58) /定义指REGISTERCLKMD并存放在0x58单元中/ CTR扩展寄存器定义ioport unsigned int port8000; /访问I/O口8000空间ioport unsigned int port8001; /访问I/O口8001空间ioport unsigned int port8002; 访问I/O口8002空间ioport unsigned int port8003; /访问I/O口8003空间ioport unsigned int port

17、8004; /访问I/O口8004空间ioport unsigned int port8005; /访问I/O口8005空间ioport unsigned int port8007; /访问I/O口8006空间#define CTRGR port8000 #define CTRLCDCMDR port8001#define CTRKEY port8001#define CTRCLKEY port8002#define CTRLCDCR port8002#define CTRLCDLCR port8003#define CTRLCDRCR port8004#define CTRLA port80

18、05#define CTRLR port8007void Delay(unsigned int nTime); / 声明延时子程序void RefreshLEDArray(); / 刷新显示void SetLEDArray(int nNumber); / 修改显示内容char ConvertScanToChar(unsigned char cScanCode);/ 将键盘扫描码转换为字符unsigned char ledbuf8,ledx8;/ 字库 0-9unsigned char ledkey108= 0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00, /0

19、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,0x

20、00,0x6C,0x92,0x92,0x92,0x6C,0x00, 0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00;main() unsigned int nKeyCode; /定义无符号整形变量nKeyCode unsigned char tKey; /定义无符号字符变量tKey tKey=0; /初始化tKey REGISTERCLKMD=0; /初始化REGISTERCLKMD CTRGR=0; / 初始化ICETEK-CTR CTRGR=0x80; /开启全局控制标志位 CTRGR=0; /不需要使能直流电机 CTRLR=0; / 关闭东西方向的交通灯

21、CTRLR=0x40; /关闭南北方向的交通灯 CTRLR=0x0c1; /写入控制字0x0C1,以打开I/O设备 tKey=CTRCLKEY; / 清键盘缓冲区 for (;) nKeyCode=CTRLCDCMDR; nKeyCode&=0x0ff; tKey=CTRCLKEY; if ( nKeyCode!=0 & nKeyCode!=0x0ff ) if( nKeyCode=SCANCODE_9) break; /当按9的时候关闭打开的ICETEK-CTR设备,程序结束 else switch(nKeyCode) case 1: CTRLR=0x1; CTRLR=0x40; /当按1时

22、点亮西方的绿灯 break; /退出程序 case 2: CTRLR=0x2; CTRLR=0x40; /当按2时点亮西方的黄灯 break; case 3: CTRLR=0x4; CTRLR=0x40; /当按3时点亮西方的红灯 break; case 4: CTRLR=0x0; CTRLR=0x48; /当按4时点亮南方的绿灯 break; case 5: CTRLR=0x0; CTRLR=0x50; /当按5时点亮南方的黄灯 break; case 6: CTRLR=0x0; CTRLR=0x60; /当按6时点亮南方的红灯 break; case 7: CTRLR=0x8; CTRLR

23、=0x40; /当按7时点亮东方的绿灯 break; case 8: CTRLR=0x10; CTRLR=0x40; /当按8时点亮东方的黄灯 break; Delay(16); /点亮相应的灯后适当延时 CTRLR=0; CTRLR=0x40; /关闭所有的灯 exit(0);void Delay(unsigned int nDelay) /定义的延时函数 int ii,jj,kk=0; /定义三个整形变量,并且kk=0 for ( ii=0;iinDelay;ii+ ) /循环nDelay次 for ( jj=0;jj64;jj+ ) /每一次的nDelay循环中有64次循环 kk+; c

24、har ConvertScanToChar(unsigned char cScanCode) /定义将键盘扫描码转换为字符 char cReturn; /定义一个字符型变量cRerturn cReturn=0; /赋初始值为0 switch ( cScanCode ) case SCANCODE_1: cReturn=1; break; /把键盘“1” 转换为字符型“1” case SCANCODE_2: cReturn=2; break; /把键盘“2” 转换为字符型“2” case SCANCODE_3: cReturn=3; break; /把键盘“3” 转换为字符型“3” case S

25、CANCODE_4: cReturn=4; break; /把键盘“4” 转换为字符型“4” case SCANCODE_5: cReturn=5; break; /把键盘“5” 转换为字符型“5” case SCANCODE_6: cReturn=6; break; /把键盘“6” 转换为字符型“6” case SCANCODE_7: cReturn=7; break; /把键盘“7” 转换为字符型“7” case SCANCODE_8: cReturn=8; break; /把键盘“8” 转换为字符型“8” case SCANCODE_9: cReturn=9; break; /把键盘“9

26、” 转换为字符型“9” return cReturn; /把转换的字符返回到主函数4. 修改程序并实现相应的现象,部分程序如下:main() unsigned int nKeyCode; /定义无符号整形变量nKeyCode unsigned char tKey; /定义无符号字符变量tKey tKey=0; /初始化tKey REGISTERCLKMD=0; /初始化REGISTERCLKMD CTRGR=0; / 初始化ICETEK-CTR CTRGR=0x80; /开启全局控制标志位 CTRGR=0; /不需要使能直流电机 CTRLR=0; / 关闭东西方向的交通灯 CTRLR=0x40

27、; /关闭南北方向的交通灯 CTRLR=0x0c1; /写入控制字0x0C1,以打开I/O设备 tKey=CTRCLKEY; / 清键盘缓冲区for (;) nKeyCode=CTRLCDCMDR; nKeyCode&=0x0ff; tKey=CTRCLKEY; if ( nKeyCode!=0 & nKeyCode!=0x0ff ) if( nKeyCode=SCANCODE_9) break; /当按9的时候关闭打开的ICETEK-CTR设备,程序结束 elseswitch(nKeyCode) case 1: CTRLR=0x09; CTRLR=0x48; /当按1时点亮东西南三方的绿灯

28、break; case 2: CTRLR=0x12; CTRLR=0x50; /当按2时点亮东西南三方的黄灯 break; case 3: CTRLR=0x24; CTRLR=0x60; /当按3时点亮东西南三方的红灯 break; case 4: CTRLR=0x09; CTRLR=0x60; /当按4时点亮南方的红灯 break; case 5: CTRLR=0x24; CTRLR=0x48; /当按5时点亮东西方的红灯 break; case 6: CTRLR=0x07; CTRLR=0x40; /当按6时点亮西方的黄灯 break; case 7: CTRLR=0x38; CTRLR=0x40; /当按7时点亮东方的黄灯 break; case 8: CTRLR=0x00; CTRLR=0

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1