资源描述
. 嵌入式系统 键盘控制实验 日期: 报告分: 一、 实验目的1学习键盘及LED 驱动原理。2.掌握ZLG7289 芯片的使用方法。二、实验内容通过ZLG7289 芯片驱动17 键的键盘和8 个共阴极LED,将按键值在LED 上显示出来。三、实验步骤1新建工程2定义ZLG7289 寄存器(ZLG7289.h) #define ZLG7289_CS (0x20) /GPB5 #define ZLG7289_KEY (0x10) /GPG4 3 编写ZLG7289 驱动函数 图2-2 ZLG7289 复位 图2-3 读取键值 4定义键盘映射表unsigned char KeyBoard_Map= 4,8,11,0,0,0,0,0,5,9,12,15,1,0,0,0,6,10,13,16,2,3,0,0,7,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; /64 键值映射表,通过查找键盘映射表来确定键盘扫描码对应的按键值5 定义键值读取函数,流程图如图2-4 所示精品. 图2-4 键值读取函数 6 编写主函数,将按键值在数码管上显示,流程图如图2-5 所示。 图2-5 主函数四、 实验主要过程截图:精品.添加LCD320.H和lcd320.c文件实验结果拍照:精品.五、实验关键代码(有注释,最好有流程图)#includeuhal.h#includekeyboard.h#includezlg7289.h#include44b.h#includeLCD320.H#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihostingextern int Zlg7289SIOBand;extern int Zlg7289SIOCtrl;int main(void)U32 key;ARMTargetInit();/开发版初始化 LCD_Init();LCD_ChangeMode(DspTxtMode);/转换LCD显示模式为文本显示模式Uart_Printf(nArm Target Init OK.); Zlg7289_Reset();/zlg7289复位 while(1) key=GetKey();/得到按键值if(key=1) LCD_printf(/ n);if(key=2) LCD_printf(* n);if(key=3) LCD_printf(- n);if(key=4) LCD_printf(7 n);if(key=5) LCD_printf(8 n);if(key=6) LCD_printf(9 n);if(key=7) LCD_printf(+ n);if(key=8) LCD_printf(4 n);if(key=9) LCD_printf(5 n);if(key=10) LCD_printf(6 n);精品.if(key=11) LCD_printf(1 n);if(key=12) LCD_printf(2 n);if(key=13) LCD_printf(3 n);if(key=14) LCD_printf(Enter n);if(key=15) LCD_printf(0 n);if(key=0) LCD_printf(NumLock n);Delay(1);ZLG7289_ENABLE();/使zlg7289占有同步串口Delay(10);/延时 WriteSDIO(ZLG7289_CMD_DATA0|0);/数码管以方式0译码,第一个数码管亮WriteSDIO(key%10);/显示个位Delay(3000);/延时if(key9)/键值大于9显示十位WriteSDIO(ZLG7289_CMD_DATA0|1);/发送十位数据WriteSDIO(unsigned char)(key/10);Delay(1);WriteSDIO(ZLG7289_CMD_HIDE);/使一、二两位数码管显示WriteSDIO(3);else/键值小于10不显示十位WriteSDIO(ZLG7289_CMD_HIDE);/使个位数码管显示WriteSDIO(1);ZLG7289_DISABLE();/zlg7289放弃同步串口控制权return 0;六、遇到的问题及解决方法 每次做实验都是要改代码。首先在没有改代码之前,在按键的时候,我按1,出现的不是对应的数字,并且在显示屏上也没有出现数字。所以需要联系实验1中的代码,让按键出来的数字显示在显示屏上。所以一开始就需要把实验1中的LCD320.H和lcd320.c文件加入到本实验里。最后修改完代码后,我去做了试验。我按了一个1数字键,发现屏幕上出现了有7个1,难道是我按的太慢了?我很快地又按了一遍,还是出现了4个。后来发现是因为延时的原因,所以又在代码里加入了延时代码。再试一遍,果然,我按得慢,屏幕上也只出现一个相对应的数字。 如有侵权请联系告知删除,感谢你们的配合!精品
展开阅读全文