资源描述:
《嵌入式键盘控制实验.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、嵌入式系统键盘控制实验日期:报告分:一、实验目的1.学习键盘及LED驱动原理。2.掌握ZLG7289芯片的使用方法。二、实验内容通过ZLG7289芯片驱动17键的键盘和8个共阴极LED,将按键值在LED上显示出来。三、实验步骤1.新建工程2.定义ZLG7289寄存器(ZLG7289.h)#defineZLG7289_CS(0x20)//GPB5#defineZLG7289_KEY(0x10)//GPG43.编写ZLG7289驱动函数图2-2ZLG7289复位图2-3读取键值4.定义键盘映射表unsignedcharKeyBoard_Map[]={4,8,11,0,0,0,0,0,5,9,
2、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文件实验结果拍照:五、实验关键代码(有注释,最好有流程图)#include"uhal.h"#incl
3、ude"keyboard.h"#include"zlg7289.h"#include"44b.h"#include"LCD320.H"#pragmaimport(__use_no_semihosting_swi)//ensurenofunctionsthatusesemihostingexternintZlg7289SIOBand;externintZlg7289SIOCtrl;intmain(void){U32key;ARMTargetInit();//开发版初始化LCD_Init();LCD_ChangeMode(DspTxtMode);//转换LCD显示模式为文本显示模式Uart_
4、Printf("ArmTargetInitOK.");Zlg7289_Reset();//zlg7289复位while(1){key=GetKey();//得到按键值if(key==1)LCD_printf("/");if(key==2)LCD_printf("*");if(key==3)LCD_printf("-");if(key==4)LCD_printf("7");if(key==5)LCD_printf("8");if(key==6)LCD_printf("9");if(key==7)LCD_printf("+");if(key==8)LCD_pr
5、intf("4");if(key==9)LCD_printf("5");if(key==10)LCD_printf("6");if(key==11)LCD_printf("1");if(key==12)LCD_printf("2");if(key==13)LCD_printf("3");if(key==14)LCD_printf("Enter");if(key==15)LCD_printf("0");if(key==0)LCD_printf("NumLock");Delay(1);ZLG7289_ENABLE();//使zlg7289占有同步串口Del
6、ay(10);//延时WriteSDIO(ZLG7289_CMD_DATA0
7、0);//数码管以方式0译码,第一个数码管亮WriteSDIO(key%10);//显示个位Delay(3000);//延时if(key>9){//键值大于9显示十位WriteSDIO(ZLG7289_CMD_DATA0
8、1);//发送十位数据WriteSDIO((unsignedchar)(key/10));Delay(1);WriteSDIO(ZLG7289_CMD_HIDE);//使一、二两位数码管显示WriteSDIO(3);}else{//键值小于10不显示十位WriteSDIO(ZLG7289_CM
9、D_HIDE);//使个位数码管显示WriteSDIO(1);}ZLG7289_DISABLE();//zlg7289放弃同步串口控制权}return0;}六、遇到的问题及解决方法每次做实验都是要改代码。首先在没有改代码之前,在按键的时候,我按1,出现的不是对应的数字,并且在显示屏上也没有出现数字。所以需要联系实验1中的代码,让按键出来的数字显示在显示屏上。所以一开始就需要把实验1中的LCD320.H和lcd320.c文件加入到本实