版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、:专业:电气工程及其自动化 姓名:溯尸乂唆实验报告地点:课程名称:微机原理(实验)指导老师:徐习东成绩:实验名称:键盘控制与显示实验类型:软件实验同组学生姓名:一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得【实验目的】1. 通过实验掌握TMS320F2812通用输入/输岀管脚直接控制外围设备的方法2. 了解发光二极管的控制编程方法。3. 了解SPI的使用。4. 了解如何使用GpioA 口进行数据的锁存5. 通过实验掌握TMS320F2812的扩展端口接收外围设备信息的方法6. 了解
2、键盘的使用原理及编程方法【实验内容】1. 按键显示程序,对按键记录次数,以二进制显示在16个LED o2. 定时器编程,并用按键控制各位时分秒,使其能完成加减操作【实验仪器】TMS320F2812数字信号处理器与学生用集成板。【实验步骤】1. 撰写代码2. 调试代码3. 实现功能【实验代码】、定时器 宏定义和全局变量定义键盘控制时钟#include DSP28lx_Device h几按键对应值OxFFFEOxFFFDOxFFFB0xFFF7OxFFEFOxFFDFOxFFBF0xFF7FOxFEFFOxFDFFOxFBFF0xF7FFOxEFFFOxDFFFOxBFFF0x7FFF#defin
3、e KI #define K2 #define K3 #define K4 #define K5 #define K6 #define K7 #define K8 define K9 #define K10 #define Kll define K12 #define K13 define K14 #define K15 #define K16UintlbLEDReg;Uint16KeyReg 1;Uint32i = 0;UintlbCtrl;int16Sec=0;int16Min=O;int16Hor=0;Uintl6Light8;分析:这段代码是初始宏定义,用于定义按键对应的编码与地址,然
4、后同时定义了全局变量,包括时、分、 秒,按键编码,LED编码和控制位。 共阳字形码Uintl6LEDCode30 = OxcOOOzbxf9O0,0xA4OOz0xBDOOr0x99OO,0x9200.08200,OxF800r 0x8000 z 0x9000 z 0x03000x8300,0xc600,0xa100,08600,0x8e00r 0x8c00 z OxbfOO,0sa700z0zff00,0x4000,0x7900,0x2400,0x3000r 0x1900z0x1200,020200,027800,0x0000,Ox 1000;分析:由于这次实验要用到数码管,所以我们要定义一
5、个数码管共阳端字形码,使每一个代码对应一种显 示状态。 SPI初始化子程序void spi_intial ()SpioRegs.SPICCR.oll - 0?:0047; 便虽于复位玄式.手薩洛八位数毎SpiaRgg.SPICTL.all = OzOOOb:主控樸式.飯旳钟模式快能关闭栄丫中跻.SpiaRegs.SPIBRR - Oz007F;公但波特率SpioRegs.SPICCR.oll = SpiaRegs .SPICCR.oil | 0x0080; 退出變位状态EALLOW;GpioMuxRgs .GPFl/iLEC.a 11 = OxOOOF;谅蛊通用引脚为锁脚EDIS;M分析:这一
6、段是本次实验的重点,就是SPI初始化。1) SPICCR :用于控制SPI的状态,上下降沿发送,还有几位的数据其中第7位,即SPICCR.6是控制SPI 在上下沿发送,1代表下降沿,2代表上升沿;第8位,即SPICCR.7是控制复位的,0代表为复位状态; 低4位控制数据长度,长度等于n+1。2) SPICTL :SPICTL.3用来设定时钟是否延迟半个周期,此程序中此位为0,即不延迟半个周期,其中SPICTL.2 是控制主从模式的,然后2为主设备,0为从设备.SPICTL.1是设置Talk功能,1为使能。3) SPIBRR :配置波特率,即控制串行外设发送和接受的速度,然后,将GPIO的F 口
7、低四位设置为专门外设引脚,即为SPI引脚。设置MUX控制是否为专门外设。 GPIO初始化void gpio_init()EALLOW;GpioMuxpGgG . GPA14UZ. bi t .TDIPJi.GP 10A11 =0 ;.GPT*门设道为一股T/Q口GploMuPegs .GPADIR.bit .GPIOAT1 = 1 :八把GPTOA门没査倉碌出将負配理为一般巾烷岀作皿译蕊GpioMuxRegs .GPE14U:.dll = GpioMuxReg5-GPEMUX.all &GpioMuxRegs.OPEDIR.al1 - OpioMusRegs.GPEDIR.all | 0000
8、7;宀将GRICE旷GPFOEl烦翌为一般.CO口GpLoMuxPgs .GPESMUX.all = GpioMuzRog兮.GPEMUX adEDIS;GpioDatdRegs .GPADAT.bit .GPI0A11 = 0;l茨谎口为丹战595綴存信号分析:此部分为为GPIO初始化,即设置GPIO的功能,此部分里All设置为通用I/O,在实际电路中是 为了连接锁存口。另外GPIOE与B的设置见注释,分别作为片选和红灯的控制。 键扫描程序int Keyscan 2(void iEALLOW;人块GPfOE旷GFMB 1亚直为输入加7GpioMuxRegs.OPBDIR.all - Qpio
9、MuxRegs.OPBDIR.all & 0x0Off; EDIS:GpioDataRegs.GPEDAT.olL = 0xfff9; 选通 KEY高&位 for (i=0; i100; i+4)延时判畑绍力是否按下if (Gp1oDataRegs.GPBDAT.a11 | OxOOff) != Oxffff)1 for (i-0; i30000; i十巧,卞延肘潭鏗if (GpioDataRegs.GPBDAT.all | OxCOff) 1= Oxffff)KeyRegl = GpioDotaRegs .GPBDAT.all 读縫燻while (GpioDataR9gs .GPBDAI .
10、all | OzOOff)! =Uzf f tf ) 列焙玫j b是否松开 GpioDdtaRegs.GPDDAT.bit.GPIOD1 = iGpioDotdRegs.GPDDAT.blt .GPrDDl: for (1=0; i1000; i+)return (1);return ();分析:键扫描程序为int类型,所以必须返回整形数据,此程序中返回1或者0表示是否检测到键被按下。 首先通过E 口控制选通的是低8位还是高8为。然后后面的If和for语句为延时消抖,这是检测程序中的 关键、就是检测B 口是否有低电平出现,如果有说明有键被按下,但是我们无法判断,这个键是否被误按 下,所以要进行
11、一个空循环,如果再检测到,说明这个键按下不是因为按键自身的抖动。另外,这段代码 里还有一个细节,就是D 口的出现,这句话只是为了进行一个空操作,进行检测按键是否松开。 控制调时子程序分析:KEYFUNCTION程序是为了做一个控制时钟的功能,按下一个键对应一个功能选项。由于选择项比 较多,所以用switch比较好。然后CTRL代表选定的位,是时,还是分,还是秒。然后通过三位的数值到 LEDCODE中查表获得数码管显示的值,其中上调或者下降哪一位要根据CTRL的值判断。LIGHT代表数码 管的代号。voidKeyFunction2(unsigned int KeyReg 1)switch (Ke
12、yReg 1)case K14:Ctrl=KL4:谪伙选定,按键刁break;caso K15:Ctrl =K 15;宀调分钟选定,佚瞥break;case K16:Ctrl=K16;宀调小时选定,彼纏Fbreak;case Kll:下渥,按妙if(Ctrl=K14)Sgc;i(Soa=-l)Sec-59;宀诵秒旳,爪砂下渥变成E附Light 7 =LEDCode SeclO;宀第B位数码笆显示秒个位Light61=LEDCodeSec/10; 八第7位数码恃显示砂十位 if(Ctrl=K15)Mm;i (Mm=-1)Mm-S9;&嘀分烘时,皿分卞询熒成吕吩费Light 4 =LEDCode
13、MinJilO;宀第5位数码&显示吩紳个位Light c =LEDCodeMinziO;宀簞4位数禍管显示分钟十位if(Ctrl=K16)Hot;if(Hcr=-1)(Hor=?3:“谓/卜时肘,卜时 下凋克成2溺Light l=LEDCode HorlO;几緖2位数码笞显示肘个位Light 0=LEDCodGHor/10; 心第位数语皆显示旳十位 )broak;case K12:上鳳捋綽5*if(CtrL=K14)Sec+:if(Sgc=60)S?c=0;灣砂約 趣上调询史成煦抄Light 7 =LEDCode SecXIC :八傑&位数袒管晁示秒个仓LLght6 =LEDCodG Sgc/
14、LO ;“弟 7垃数码管云示秒+过if (CtrlK15)Mm+;if (Min=60)Mm-0;宀调分钟时,$吩上询遍变成煦分 AmAb A *# dLight 4=LEDCode MinXIO;篤E付数码晉显示分钟个付Light 3 =LEDCode Min/10;宀第4付数码管显示分钟十付i(CtrlK16)Hor+;if(Hor=24)Hcr=0;调小时时,氏小时上调殳成曲时L ight 1 =LEDCod Horl0 ; 工,第2伎数码瞥辰示时个付 Light 0 =LEDCode HorZl0 ; 第直数码管显示訐斗社break; default: break: 显示模块void
15、display ()GpioDataRegs.GPADAT.bit.GPIOA11 - 0;乂给LAWK信号一个低电平for(i=0;1:BUF = SpidRegs .SPTRXBUF:宀给数码官送数GpioDotnREgs.GPADAT.bit.GPIOAU - 1; 宀给侶号一个禺屯平为乍更存7好总站5 for(i-0;i10;i+)延时分析:显示程序中就要用到SPI的串行功能了,需要先对数据进行锁存,然后是上升沿有效,即上升沿时 将数据送到数码管的引脚上。如何发送数据即通过SPI,先将数据写入SPITXBUF,即发送缓存器中,然后 发送缓存器会将数据传送过去。SPISTS.bitJNT
16、.FLAG代表中断标志位,如果数据从SPIDAT移出后,这个 中断标志位会置lo此时while语句的功能就是说如果数据没有被发送出去,则一直会进行空操作,直到 数据被发送出去为止。 中断分析:此时的中断是进行定时器的自增过程,即实现时钟功能。interrupt void cpu_timerO_isr(void)CpuTimerO.IntGrruptCount+;if (CpuTimerO .IntGrruptCount=10)/当寄存器为 1。时,PO, lslO=lsSec+;砂力R1CpuTimerO .IntGrruptCount=0;宀寄存器j青零 if(Sec=60)当秒增加到6耐,
17、分加b秒清零Min+;Sc=0; if(Min=60)当分加到60时,小时加芬 分清零Hor+;Min=0;当小时加到24时,小时清零Hor=0;Light 1 =LEDCode HorZIO数码管第2付显示小时个付 Light 0 =LEDCodeHorZ10数码管第直显示小訂F备 Light 4 =LEDCode MinXIO;数码管第5付显示分个付 Light3=LEDCodeMinZ10数码管第4位显示分+位Light7=LEDCode SecZIO;数码管第E伎辰示秒个付 Light6=LEDCode SecZlO;数码管第沿显宗秒斗H display():/数码瞥匾示PieCtrl
18、Regs.PIEACK.all=PIE至CK_GROUP1;二、键盘显示定义编码 int LEDCodo 30 =(OCOO0,O2iF9OD,CA40O,0vBOOOr0-19900,09200,08200,02800,028000,0x9000, ta 908300,O83O0,OC60O,0xAlOOr086OOrOK8EOOr曲 b C d E F0x8c00r0xb00,0xd700,OxffOOzOH4O0Or0x79OOr0s24OOxOx3OOO, 0x1900,0x1200,0z0200,0x7800z00000r0xl000分析:此向量表与第一个程序相同,即作为索引用,编入
19、数码管可显示内容的编码。main函数分析:首先初始化程序,然后就不断得执行一个while循环,就是检测有没有按键被按下,如果被按下就 继续执行显示程序。然后LEDOUT函数与前几次程序一样,作为点灯模块,作为计数的显示。Uintl6 keyNuni = 0x0030;III辻SysCtrl ():dog.enable EVA. SPT cloaksDIOT;二咲中顒spi_intial();3pio_iiitial ();IER = 0x0000;IFP = 00000:LedOut(keyNum);for(i=0;i8;i+4-)SpioRegs.SPITXEUF = LEDCcdeU;wh
20、il(SpiaR9gs.SPISTS.bit ,INTT_FLAG != 1)SpioRegs SPITXEUF =SpiaRegs.SPIIXBUF;GpioDatoRegs-GPADAT.bit.GPI0All=l;f or (i=0;i10;i *+)while(l)if f RGyecan1()=1)kAyNIum+:KeyFunction1(KeyReg 1);display(LEDReg);LedOut(keyNum);if(KGyscan2()=1)keyNfun+:KeyFunction2(KeyReg2);display(LEDReg);LodOut(koyNum);三、总结编程要点 可删语句1) SpiaRegs.SPIRXBUF 二 SpiaRegs.SPIRXBUF;2) if(GpioDataRegs.GPBDAT.all|0x00FF) != OxFFFF)for(i二0;i3000;i + +); 依据你需要防抖延时的时间根据.此语句的多少。 A, E, F, B对应端口1) All的通用接口用于连接锁存器2) E 口的低三位为74LVC138的控制信号,进行片选3) F的第四位专用外设对应于
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业照顾老人服务合同模板
- 中美高新技术合同(五)
- 中小学教师任职合同协议
- 临时展馆租赁合同
- 业务员合作合同范本
- 一图读懂:房地产合同交易全流程
- 中外合同建筑新材料研发与生产基地
- 专业夫妻离婚合同样本大全
- LED照明系统工程合同
- XX公司消防系统维保服务合同
- 医共体人财物管理系统需求说明
- 四年级数学下册口算天天练45
- 雕塑采购投标方案(技术标)
- 演艺项目投资计划书
- 医疗器械耗材售后服务承诺书
- 北京房地产典当合同书
- 文学类文本阅读 高一语文统编版暑假作业
- 文明施工考核标准
- 《雾都孤儿人物分析4000字(论文)》
- MZ/T 039-2013老年人能力评估
- GB/T 6329-1996胶粘剂对接接头拉伸强度的测定
评论
0/150
提交评论