arm编程实验(键盘功能)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

5*4键盘控制实验设备1、硬件:EmbestEDUKIT-II/III实验平台,EmbestARM标准/增强型方针器套件,PC机;2、软件:EmbestIDEPro2004集成开发环境,Windows98/200/NT/XP。实验内容1、使用实验板上5*4用户键盘,编写程序接收键盘中断;2、通过I2C总线读入键值,并讲读到的键值发送到窜口。实验原理1、用户设计行列键盘接口,一般采用3种方法读取键值,分别是中断式、扫描法和反转法。中断式:在按键按下时产生一个外部中断通知CPU,并由中断处理程序通过不同的地址读取数据线上的状态,判断哪个按键被按下。本实验采用中断方式实现用户键盘接口。扫描法:对键盘上的某一行发送低电平,其他为高电平,然后读取列值。若列值中有一位是低,表明该行与低电平对应列的按键被按下,否则扫描下一行。反转法:先将所有行扫描线输出低电平,读取列值。若列值有一位是低,表明有按键按下;接着所有列扫描线输出低电平,再读取行值。根据读到的值组合就可以查到键码。2、使用ZLG7290的键盘电路设计原理(1)、ZLG7290的特点:1)I2C串行接口,提供键盘中断信号,方便与处理器接口;2)可驱动8位共阴极数码管或64只独立LED和64个按键;3)可控制扫描位数,可控制任一数码管闪烁;4)提供数据译码、循环、位移、段寻址等控制;5)8个功能键,可检测任一键的连击次数;6)无需外接元件,即直接驱动LED,可扩展驱动电流和驱动电压;7)提供工业级器件,多种封装形式PDIP24、SO24。(2)、ZLG7290的引脚说明:采用引脚封装,如下图DigADigBDigCDigDDigEDigFDigHDigGVccOSC2OSC1RES2324127891016181715Dig7Dig6Dig5Dig4Dig3Dig2Dig0Dig1SDASCLINTGND13122122456320191411其引脚功能分述如表:引脚号引脚名称引脚属性引脚功能描述3~6、13、12、21、22Dig7~Dig0输入/输出LED显示位驱动及键盘扫描1、2、10~7、24、23SegH~SegA输入/输出LED显示位驱动及键盘扫描20SDA输入/输出I2C总线接口数据/地址线19SCL输入/输出I2C总线接口时钟线14/INT输出中断输出端,低电平有效15/RES输入复位输入端,低电平有效17OSC1输入连接晶体以及产生内部时钟18OSC2输出16Vcc电源电源正(3.3~5.5V)11GND电源电源地(3)ZLG7290的寄存器说明:1)系统寄存器:地址00H,复位值11110000B。系统寄存器保存ZLG7290的系统状态,并可对系统运行状态进行配置。2)KeyAvi置1时表示有效的按键动作,/INT引脚信号有效;清零表示无按键动作,/INT引脚信号无效。有效的按键动作消失后或读Key后,KeyAvi位自动清零。3)键值寄存器(Key):地址01H,复位值00H。Key表示被压按键的键值。当Key=0时,表示没有键被压按。4)连击次数计数器(RepeatCnt):地址02H,复位值00H。RepeatCnt=0时,表示单击键。RepeatCnt0时,表示键的连击次数。连击次数计数器用于区别单击或连击,判断连击次数可以检测被按时间。5)功能键寄存器(FunctionKey):地址03H,复位值0FFH。FunctionKey对应位的值等于0,表示对应功能键被压按(FunctionKey.7~FunctionKey.0对应S64~S57)。6)命令缓冲区(CmdBuf0~CmdBuf1):地址07H~08H,复位值00H~00H,用于传输指令。7)闪烁控制寄存器(FlashOnOff):地址0CH,复位值0111B/0111B。高四位表示闪烁时亮的时间,低4位表示闪烁时灭的时间。改变其值同时也改变了闪烁频率,也能改变亮和灭的占空比。FlashOnOff的1个单位相当于150~250ms(亮和灭的时间范围为1~16,000B相当于1个时间单位),所有像素的闪烁频率和占空比相同。8)扫描位数寄存器(ScanNum):地址0DH,复位值7.用于控制最大的扫描显示位数(有效范围为0~7,对应的显示位数为1~8)。减少扫描位数可以提高每位显示扫描时间的占空比,以提高LED亮度。不扫描显示的缓存起则保持不变。当ScanNum=3时,只显示DpRam0~DpRam3的内容。9)显示缓存寄存器(DpRam0~DpRam7):地址10H~17H,复位值00H~00H。缓存中位置1表示该像素亮。DpRam7~DpRam0的显示内容对应Dig7~Dig0引脚。(4)ZLG7290的通信接口ZLG7290的I2C接口传输速率可达32kb/s,容易与处理器接口通信,并提供键盘中断信号,提高主处理器时间效率。ZLG7290的从地址为70H(01110000B)。从其键值寄存器(01H)中读取按键值(ucChar用于保存读到的键值):Iic_read(0x70,0x1,&ucChar);有效的按键动作都会令系统寄存器的KeyAvi位置1,/INT引脚信号有效(变为低电平)。用户的键盘处理程序可由/INT引脚低电平中断触发,以提高程序效率;也可以不采样/INT引脚信号节省系统的I/O数,而轮询系统寄存器的KeyAvi位。要注意读键值寄存器会令KeyAvi位清零,并会令/INT引脚无效。为确保某个有效的按键动作所有参数寄存器的同步性,用户无须太担心寄存器的同步性问题,因为键参数寄存器变化速度比较缓慢(典型250ms,最快9ms)。ZLG7290内可通过I2C总线访问的寄存器地址范围为00H~17h。任一寄存器都可按字节直接读/写,也可以通过命令接口间接读/写或按位读/写,请参考ZLG7290芯片手册。ZLG7290支持自动增址功能(访问一寄存器后寄存器子地址自动加1)和地址翻转功能(访问最后一寄存器后寄存器子地址翻转为00H)。ZLG7290的控制和转台查询全部都是通过读/写寄存器实现的,哟哦难怪乎只需像读/写24C02内的但愿一样即可实现对ZLG7290的控制。关于I2C总线访问的细节请参考I2C总线范围。实验设计5*4键盘连接电路如图0123456789ABCDEF+-*FUN123456789KEYBOARD54U406R4213K3*43K3R422DIG1DIG2DIG3DIG4DIG5D401D402D403D404SEGASEGBSEGCSEGD键盘控制电路使用芯片ZLG7290控制,如下图。对应的14引脚KEY_INT捕捉由键盘按下产生的中断触发信号。VDD33DIG8DIG7DIG6DIG5DIG4DIG3DIG2DIG1IICSDAIICSCLKEYINTGNDSEGASEGBSEGCSEGDSEGESEGFSEGGDPVDD331817VDD3313122122345620191411232417810169215U405ZLG7290100KR423SEGASEGBSEGCSEGDSEGESEGFSEGGDPVDDOSC2OSC1RESSCLDIG7DIG6DIG5DIG4DIG3DIG2DIG1DIG0SDAGNDINT22pFC40222pFC40312X4018MHz工作过程:键盘动作由芯片ZLG7290检测,当按键按下时,芯片检测到后在INT引脚产生中断触发电平通知处理器,处理器通过I2C总线读取芯片ZLG7290兼职寄存器(01H)中保存的键值。实验操作步骤1、准备实验环境使用Embest仿真器连接目标板,使用EmbestEDUKIT-II/III实验板附带的串口线,连接实验板上的UART0和PC机的串口。2、设置串口接收在PC机上运行Windows自带的超级中断串口通信程序(波特率115200、8位数据位、1位停止位、无奇偶校验位、无硬件流控制),或者使用其他串口通信程序。3、操作实验例程1)使用EmbestIDE,通过EmbestJTAG仿真器连接实验板,打开实验例程EmbestIDE\Examples\Samsung\EduKit2410\5.2_keyboard_test.ews例程,编译、连接工程。2)在IDE下选择菜单项Debug→RemoteConnect,远程连接目标板。3)在IDE下选择菜单项Debug→Downloan,下载调试代码到目标系统的ARM中。4)在“keyboard_test();”设置断电后,选择菜单项Debug→Go运行程序。4、观察实验结果在PC机上观察超级终端程序主串口,可以看到如下内容:EmbestEduKit-IIIEvaluationBoardKeyboardTestExamplePressanykeytoexit…用户可以按下实验系统的5*4键盘,在超级终端上观察结果。实验参考程序1、键盘控制初始化/*******************************************************************************名称:keyboard_test*功能:测试八段数码管*参数:无*返回:无*******************************************************************************voidkeyboard_test(void){UINT8TucChar;UINT8TszBuf[40];uart_printf(″\nKeyboardTestExample\n″);uart_printf(″Pressanykeytoexit…\n″);keyboard_init();g_nKeyPress=0xFE;while(1){F_nKeyPress=0;While(f_nKeyPress==0){If(uart_getkey())//PressanykeyfromUART0toexitReturn;elseif(ucChar==7)//orpress5x4key–7toexitReturn;Elseif(g_nKeyPress!=0xFE)//orSB1202/SB1203toexitReturn;}Iic_read_keybd(0x70,0x1,&ucChar);//getdatafromZLG7290If(ucChar!=0){ucChar=key_set(ucChar);//keymapforEduKitIIif(ucChar16)sprintf(&szBuf,″presskey%d″,ucChar);elseif(ucChar255)sprintf(&zsBuf,″presskey%c″,ucChar);if(ucChar==0xFE)sprintf(&szBuf,″presskeyFUN″);#ifdefBOARDTESTPrint_lcd(200,170,0x1c,&szBuf);#endifuart_printf(szBuf);uart_printf(″\n″);}}Uart_printf(″end.\n″);}2、中断服务程序/*******************************************************************************称:keyboard_int*功能:键盘中断处理程序*参数:无*返回:无*******************************************************************************voidkeyboard_int(void){UINT8TucChar;ClearPending(BIG_EINT1);F_nKeyPress=1;#ifdefBOARDTESTG_nKeyPress=0xFE;#endif}

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功