《嵌入式系统实践上机实践报告--数码管和键盘控制.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实践上机实践报告--数码管和键盘控制.docx(12页珍藏版)》请在优知文库上搜索。
1、上机实践成绩: 创新实践成绩: 上机实践日期: 上机实践时间:计算机科学技术系上机实践报告课程名称:嵌入式系统实践年级:指导教师:姓名:上机实践名称:数码管和键盘控制学号:上机实践编号:组号:一实验目的1. 通过实验掌握LED的显示控制方法.2. 巩固实验4.1中所掌握的对存储区进行访问的方法。二、实验设备1. 硬件:EmbestEduKit-III实验平台,EmbestARM标准/增强型仿真器套件,PC机。2. 软件:EmbestIDEProARM集成开发环境,Windows982000NTXP三、实验内容1. 编写程序使实验板上八段数码管循环显示O至的字符。2. 编写程序,获得实验板上5X
2、4键盘输入,并发送到串口显示四、实验原理1. 八段数码管嵌入式系统中,经常使用八段数码管来显示数字或符号,由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。结构八段数码管由八个发光二极管组成,其中七个长条形的发光管排列成“日”字形,右下角一个点形的发光管作为显示小数点用,八段数码管能显示所有数字及部份英文字母。见图4-13。g VCCVCC图4-13八段数码管的结构类型八段数码管有两种不同的形式:一种是八个发光二极管的阳极都连在一起的,称之为共阳极八段数码管;另一种是八个发光二极管的阴极都连在一起的,称之为共阴极八段数码管。工作原理以共阳极八段数码管为例,当控制某段发光二
3、极管的信号为低电平时,对应的发光二极管点亮,当需要显示某字符时,就将该字符对应的所有二极管点亮;共阴极二极管则相反,控制信号为高电平时点亮。电平信号按照dp,g,e.a的顺序组合形成的数据字称为该字符对应的段码,常用字符的段码表如下:表4-16常用字符的段码表字符dpgfedCa共阴极共阳极0001111113FHCOH10000011006HF9H2010110115BHA4H3010011114FHBOH40110011066H99H5011011016DH92H6011111017DH82H70000011107HF8H8011111117FH80H9011011116FH90HA011
4、1011177H88HB011111007CH83HC0011100139HC6HD010111105EHAlHE0111100179H86HF0111000171H8EH0100000040HBFH1000000080H7FH熄灭00000000OOHFFH显示方式八段数码管的显示方式有两种,分别是静态显示和动态显示。静态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管控制信号一直保持有效。动态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管是轮流点亮的,即控制信号按一定周期有效,在轮流点亮的过程中,点亮时间是极为短暂的(约ImS),由于人的视觉暂留现象及发光二极管的
5、余辉效应,数码管的显示依然是非常稳定的。2. 电路原理EMBESTEduKit-III教学电路中,使用的是共阳极八段数码管,数码管的控制通过芯片ZLG7290控制,各段的控制信号是芯片ZLG7290的SEGASEGG引脚控制,需要显示的段码通过HCdTTE4-14八段数码管连接电路U405ZLG7290VDD33图4-15八段数码管控制电路键盘发生动作后CPU获得情报后主动到寄存器中读取键盘中断工作示意图键盘工作原理(8X8)8行8列产生64个信号,支持64个键r12r3r4r5r6r8dc2c3c4c5c6c7c8Dig和Seg,分别用作键盘矩阵的行线和列线13Dig77SegA23QA19
6、TiDigdSegB22_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连接晶体以产生内部时钟180SC2
7、O16VCC电源电源正(3.3S.5V)11GND电源电源地其中ZLG7290系统框图:SegHSegADig7DigOSCLSDAZINTVCCGND五、实验步骤1. 准备实验环境使用Embest仿真器连接目标板,使用EmbeStEdUKit11I实验板附带的串口线,连接实验板上的UARTO和PC机的串口。2. 串口接收设置在PC机上运行WindOWS自带的超级终端串口通信程序(波特率115200、1位停止位、无校验位、无硬件流控制);或者使用其它串口通信程序。3. 打开实验例程1)拷贝光盘CDlSoftwareEduKit44bO文件夹到EmbeStlDEExamplesSamsung目录
8、下;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) .实验系统
9、八段数码管循环显示09字符。5. 完成实验练习题理解和掌握实验后,完成实验练习题调试过程、结果和分析1. 首先分别装载运行了实验6数码管、实验7键盘的示例程序,了解了试验箱上数码管对应的地址,如下表所示:0x130x120x110x100x170x160x150x14接着观察实验7的程序发现从试验箱上的键盘输入的字符是放在UCChar这个变量中,然后通过串口通信显示在超级终端上的;所以只需要将这个变量记录下,同时调用实验6数码管中的全局数组即可将键盘输入在数码管上显示出来。2. 理清楚这个总体思路后,再根据实验要求上的内容逐步实现:初始化数码管的清空还是很容易的,直接将0写入到数码管地址中即可
10、;09、AF情形类似,新输入的值放入在0x14中之前的值全部左移一位,在写左移这部分代码for循环时由于数码管地址有些混乱所以调试花费了不少时间。3. 在显示时需要左移的不再是一位,需要写一个封装的move函数,当判断出UCChar255时分别对输入的+调用m。VC函数后再将输入值放到0x16、0x15、0x14中;其中FUN需要单独判断UCChar是否为OXFF再左移、输入。七、总结1. 这次的实验由于是数码管与键盘两次合并在一起,所以还是给了比较充足的时间来完成。预习时不太清楚怎么将数码管与键盘相联系,在运行了示例程序后了解到变量UCChar和数组CszDigital口起到了桥接的作用。2
11、. 总体来说这次实验还是完成得比较成功的,理解示例程序花费了不少的时间,一旦读懂了程序之后这次实验就可以解决了。(创新)下面代码中用颜色标注的部分是我自己写的代码用来实现题目要求。不过那是一个比较直接的方法,简单易懂。为此我还有一种方法:因为Ll包含03数码管,L2包含47数码管,从左向右分别为3,2,1,0,7,6,5,4。为此数码管上的字符移动起来比较麻烦。我们可以新建一个buffer8o每次我们往相应的数码管写入字符的时候,我们可以先写入buffer里面,字符的移动也可以先在buffer里面执行。然后,我们将buffer与原来数码管的地址数组相对应。这样我们便于理解问题,写的程序也比较简
12、练。八、附件1.程序代码1tfinclude*44b.h*tfinclude44blib.h#include*def.h*#includeiic.hintf_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;i8;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,A