欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    嵌入式系统实践上机实践报告--数码管和键盘控制.docx

    • 资源ID:850477       资源大小:189.39KB        全文页数:12页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    嵌入式系统实践上机实践报告--数码管和键盘控制.docx

    上机实践成绩: 创新实践成绩: 上机实践日期: 上机实践时间:计算机科学技术系上机实践报告课程名称:嵌入式系统实践年级:指导教师:姓名:上机实践名称:数码管和键盘控制学号:上机实践编号:组号:一实验目的1. 通过实验掌握LED的显示控制方法.2. 巩固实验4.1中所掌握的对存储区进行访问的方法。二、实验设备1. 硬件:EmbestEduKit-III实验平台,EmbestARM标准/增强型仿真器套件,PC机。2. 软件:EmbestIDEProARM集成开发环境,Windows982000NTXP三、实验内容1. 编写程序使实验板上八段数码管循环显示O至的字符。2. 编写程序,获得实验板上5X4键盘输入,并发送到串口显示四、实验原理1. 八段数码管嵌入式系统中,经常使用八段数码管来显示数字或符号,由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。结构八段数码管由八个发光二极管组成,其中七个长条形的发光管排列成“日”字形,右下角一个点形的发光管作为显示小数点用,八段数码管能显示所有数字及部份英文字母。见图4-13。g VCCVCC图4-13八段数码管的结构类型八段数码管有两种不同的形式:一种是八个发光二极管的阳极都连在一起的,称之为共阳极八段数码管;另一种是八个发光二极管的阴极都连在一起的,称之为共阴极八段数码管。工作原理以共阳极八段数码管为例,当控制某段发光二极管的信号为低电平时,对应的发光二极管点亮,当需要显示某字符时,就将该字符对应的所有二极管点亮;共阴极二极管则相反,控制信号为高电平时点亮。电平信号按照dp,g,e.a的顺序组合形成的数据字称为该字符对应的段码,常用字符的段码表如下:表4-16常用字符的段码表字符dpgfedCa共阴极共阳极0001111113FHCOH10000011006HF9H2010110115BHA4H3010011114FHBOH40110011066H99H5011011016DH92H6011111017DH82H70000011107HF8H8011111117FH80H9011011116FH90HA0111011177H88HB011111007CH83HC0011100139HC6HD010111105EHAlHE0111100179H86HF0111000171H8EH0100000040HBFH1000000080H7FH熄灭00000000OOHFFH显示方式八段数码管的显示方式有两种,分别是静态显示和动态显示。静态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管控制信号一直保持有效。动态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管是轮流点亮的,即控制信号按一定周期有效,在轮流点亮的过程中,点亮时间是极为短暂的(约ImS),由于人的视觉暂留现象及发光二极管的余辉效应,数码管的显示依然是非常稳定的。2. 电路原理EMBESTEduKit-III教学电路中,使用的是共阳极八段数码管,数码管的控制通过芯片ZLG7290控制,各段的控制信号是芯片ZLG7290的SEGASEGG引脚控制,需要显示的段码通过HCdTTE4-14八段数码管连接电路U405ZLG7290VDD33图4-15八段数码管控制电路键盘发生动作后CPU获得情报后主动到寄存器中读取键盘中断工作示意图键盘工作原理(8X8)8行8列产生64个信号,支持64个键r12r3r4r5r6"r8dc2c3c4c5c6c7c8Dig和Seg,分别用作键盘矩阵的行线和列线13Dig77SegA23QA19TiDigdSegB22_Di 4p3OCgL/ p774i Q5 _inDegr96DIgl r; rMgU10DlgUcg20QP1619oUAVUlz1814oLL /IbJTUbLzCaCl1711GND/RES5引牌号引脚名引脚属性引脚描述13,12,21,22,3-6Dig7-0I/OLED显示位驱动及键盘扫描线10-7,2, 1,24,23SegH-AI/OLED显示段驱动及键盘扫描线20SDAI/O12C总线接口数据/地址线19ScLI/OI2C总线接口时钟线14/INTO中断输出端,低电平有效15/RESI复位输入端,低电平有效17OSClI连接晶体以产生内部时钟180SC2O16VCC电源电源正(3.3S.5V)11GND电源电源地其中ZLG7290系统框图:SegHSegADig7DigOSCLSDAZINTVCCGND五、实验步骤1. 准备实验环境使用Embest仿真器连接目标板,使用EmbeStEdUKit11I实验板附带的串口线,连接实验板上的UARTO和PC机的串口。2. 串口接收设置在PC机上运行WindOWS自带的超级终端串口通信程序(波特率115200、1位停止位、无校验位、无硬件流控制);或者使用其它串口通信程序。3. 打开实验例程1)拷贝光盘CDlSoftwareEduKit44bO文件夹到EmbeStlDEExamplesSamsung目录下;2)使用EmbeStIDE通过EmbeStJTAG仿真器连接实验板,打开实验例程目录4.6_8led_test子目录下的8led_test.pjf例程,编译链接工程成功;3)点击IlsE的DebUg菜单,½RemoteConnect项或F8键,远程连接目标板;4)点击IDE的DebUg菜单,选择DoWnload下载调试代码到目标系统的RAM中;5)点击DebUg菜单的Go或F5键运行程序。4. 观察实验结果1),在PC机上观察超级终端程序主窗口,可以看到如下界面:bootsuccess.8-segmentDigitLEDTestExample(PleaselookatLED)2) .实验系统八段数码管循环显示09字符。5. 完成实验练习题理解和掌握实验后,完成实验练习题调试过程、结果和分析1. 首先分别装载运行了实验6数码管、实验7键盘的示例程序,了解了试验箱上数码管对应的地址,如下表所示:0x130x120x110x100x170x160x150x14接着观察实验7的程序发现从试验箱上的键盘输入的字符是放在UCChar这个变量中,然后通过串口通信显示在超级终端上的;所以只需要将这个变量记录下,同时调用实验6数码管中的全局数组即可将键盘输入在数码管上显示出来。2. 理清楚这个总体思路后,再根据实验要求上的内容逐步实现:初始化数码管的清空还是很容易的,直接将'0'写入到数码管地址中即可;09、AF情形类似,新输入的值放入在0x14中之前的值全部左移一位,在写左移这部分代码for循环时由于数码管地址有些混乱所以调试花费了不少时间。3. 在显示时需要左移的不再是一位,需要写一个封装的move函数,当判断出UCChar<255时分别对输入的'+调用m。VC函数后再将输入值放到0x16、0x15、0x14中;其中'FUN'需要单独判断UCChar是否为OXFF再左移、输入。七、总结1. 这次的实验由于是数码管与键盘两次合并在一起,所以还是给了比较充足的时间来完成。预习时不太清楚怎么将数码管与键盘相联系,在运行了示例程序后了解到变量UCChar和数组CszDigital口起到了桥接的作用。2. 总体来说这次实验还是完成得比较成功的,理解示例程序花费了不少的时间,一旦读懂了程序之后这次实验就可以解决了。(创新)下面代码中用颜色标注的部分是我自己写的代码用来实现题目要求。不过那是一个比较直接的方法,简单易懂。为此我还有一种方法:因为Ll包含03数码管,L2包含47数码管,从左向右分别为3,2,1,0,7,6,5,4。为此数码管上的字符移动起来比较麻烦。我们可以新建一个buffer8o每次我们往相应的数码管写入字符的时候,我们可以先写入buffer里面,字符的移动也可以先在buffer里面执行。然后,我们将buffer与原来数码管的地址数组相对应。这样我们便于理解问题,写的程序也比较简练。八、附件1.程序代码1tfinclude*44b.h*tfinclude'44blib.h"#include*def.h*#include"iic.h"intf_nKeyPress;unsignedcharf_szDigital=0xFC,0x60,OxDA,0xF2,0x66,0xB6,OxBE,OxEO,OxFE,0xF6,/O9OxEE,OxFF,0x9C,OxFD,0x9E,0x8E,/A8.CO.EFOxl,0x2,0x0,0x92,0x90;/,-close三二voidkeyboard_test(void);voidkeyboard_int(void):UINT8Tkey.set(UINT8TucChar);voidkeyboard_test(void)(i11ti,j,k;UINT8TucChar,t;iic_init();for(i=0;i<8;i+)iic_write(0x70,0xl0+i,0);/setEINT2interrupthandlerpISR_EINT2=(int)keyboard_int;for(;)f_nKeyPress=0;/ enable EINT2 intrINTMSK=rINTMSK&C(BIT.GLOBALBIT_EINT2);while(f_nKeyPress=0);iic_read(0x70,0xl,AucChar);*if(ucChar!=0)(ucChar=key_set(UCChar);if(ucChar<10)ucChar+=0x30;elseif(ucChar<16)ucChar+=0x37;if(ucChar<255)uart_printf("presskey%cn”,ucChar);if(ucChar=OxFF)(Uart-Printf("presskeyFUN(exitnow)nr*);return;)*/if(ucChar!=0)chart;ucChar=key_set(ucChar);if(ucChar<16)for(j=3;j>0;j)(i=j-l;iic_read(0x70,0xl0+i,&t);iic_write(0x70,0xl0+j,t);iic_read(0x70,0x10+7,&t);iic_write(0x70,0x10,t);for(j=7;j>4;j)(k=j-l;iic_read(0x70,0xl0+k,缸);iic_write(0x70,OxlO+j,t);iic_write(0x70,0x10+4,f_szDigitalucChar);delay(500);elseif(ucChar<255)(if(ucChar=三,+,)move_three0;iic_write(0x70,0x16,OxEE);iic_write(0x70,0x15,OxFD);iic_write(0x70,0x14,OxFD);if(UCChar='-')move_three();iic_write(0x70,0x16,0xB7);iic_write(0x70,0x15,0x7C);iic_write(0x70,0x14,OxFF);)if(UCChar='*')(move-two();iic_write(0x70,0x14,Oxlc);iic_write(0x70,0x15,0x7C);)elseif(ucChar=OxFF)move-three();iic-write(0x70,0x16,0x8E);iic_write(0x70,0x15,0x7C);iic_write(0x70,0x14,OxEC);)while(l);)voidmove_three(void)inti,j;chart;iic_read(0x70,0x10,&t)iic_write(0x70,0x13,t);for(i=5i<8i)iicjread(0x70,0xl0+i,&t);j=i-5;iic_write(0x70,OxlO+j,t);iic_read(0x70,0x14,&t)iic_write(0x70,0x17,t);void move_two(void)char t;iic_read(0x70,0xll,&t);iic_write(0x70,0x13,t);iic_read(0x70,0x10,&t)iic_write(0x70,0x12,t);iic_read(0x70,0x17,&t);iic_write(0x70,0xll,t);iic_read(0x70,0x16,&t);iic_write(0x70,0x10,t);iic_read(0x70,0x15,&t);iic_write(0x70,0x17,t);iic_read(0x70,0x14,&t);iic_write(0x70,0x16,t);)* name:keyboard_int* func:keyboardinterrupthandler* para:none* ret:none* modify:* comment:/voidkeyboard_int(void)UINT8TucChar;delay(1000);/ disable EINT2 intrINTMSK=rINTMSKBIT_EINT2;rl.ISPC=BIT_EINT2;f-nKeyPress=1;*田中中44f*什*中*中*田* name:key_set* func:keyboardsetting* para:none* ret:none* modify:* comment:*r*和*f*r*/UINT8Tkey_set(UINT8TucChar)switch(ucChar)case 1:case 2:case 3:case 4:case 5:UcChar-=I;break;case 9:case 10:case 11:case 12:case 13:ucChar-=4;break;case 17:case 18:case 19:case 20:case 21:ucChar-=7;break;case 25: ucChar=OxF;break;case26:ucChar=,+,;break;case27:ucChar=;break;case 28: ucChar=,;break;case 29: ucChar=OxFF;break;default:ucChar=OxFE;returnucChar;学号姓名第?次实验实验名称

    注意事项

    本文(嵌入式系统实践上机实践报告--数码管和键盘控制.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开