您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 嵌入式独立键盘检测控制实验
昆明理工大学信息工程与自动化学院学生实验报告(2013—2014学年第2学期)课程名称:嵌入式技术及应用开课实验室:信自楼5042014年5月25日年级、专业、班2011级计科111学号201110405138李冠芬成绩实验项目名称独立键盘检测控制实验指导教师江虹教师评语该同学是否了解实验原理:A.了解□B.基本了解□C.不了解□该同学的实验能力:A.强□B.中等□C.差□该同学的实验是否达到要求:A.达到□B.基本达到□C.未达到□实验报告是否规范:A.规范□B.基本规范□C.不规范□实验过程是否详细记录:A.详细□B.一般□C.没有□教师签名:年月日一、实验目的掌握单片机系统中独立键盘的编程控制方法,学会实时程序的调试技巧。二、实验原理键盘是单片机应用中常用的输入设备,在应用系统中,操作人员可通过键盘向系统输入指令、地址和数据,实现简单的人机通信。键盘实际上是一组按键开关的集合,平时总是处于断开状态,当按下键时它才闭合。按键在闭合和断开时,触点会存在抖动现象,抖动时间一般为5-10ms,键盘的处理主要涉及以下3个方面的内容:按键的识别所接I/O口线是高还是低电平(根据连接情况)抖动的消除硬件消抖软件消抖(延时)判断键值实验板电路原理图如下:三、实验内容利用TX-1C实验板上的数码管前三位显示一个跑表,从000到999之间以1%秒速度运行,当按下独立键盘的S2时跑表停止,松开手后跑表继续运行。(用定时器设计表)。在上面的基础上,用另外三个独立键盘(S3、S4、S5)实现按下S3时计时停止,按下S4时计时开始,按下S5时计数值清零从头开始。四、实验步骤1、按实验内容要求在µVision中创建项目,编辑、调试、编译程序。2、将编译生成的目标码文件(后缀为.Hex)下载到实验板上。3、观察实验运行结果并记录。1.原理补充:在简单的单片机应用系统中,往往只需要几个功能键就能满足要求,此时,可采用独立式按键结构。独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键的典型应用如图1.2.1所示。独立式按键示意图独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。程序开始,检测按键是否被按下,若按下,则移动机器人启动,未被按下,继续检测。这里将程序分成三个部分,分别是延时子函数、按键子函数、主函数。延时子函数,通过参数t设置延时时间;按键模块子函数需用到延时函数,对按键进行消抖;主函数主要调用按键检测程序,实现对移动机器人的控制。程序流程图如图1.2.2所示程序流程图程序示例:在编写程序开始的部分,将系统头文件“STC89C52RC.H”包含进来,对常用的变量类型进行宏定义,规划各函数和变量,对变量进行定义和初始化,对自定义子函数进行声明并添加相应标注,程序开始部分如下sbitIN1=P1^0;sbitIN2=P1^1;Voidkey();编写主函数,在主函数中就是调用按键检测函数。Voidmain(){key();}编写key()按键检测函数,按键按下,输出低电平,通过if语句检测低电平,延时10ms后,再次检测,若检测为高电平,则表示为机械抖动,若检测到低电平表示按键按下。Voidkey(){if(IN1==0){delay_ms(10);if(IN1==0){while(IN1==0);IN2=~IN2;}}}在上面的程序中,就只有一个检查按键扫描的函数key(),key()函数是检查有没有按键按下编写的。当有按键下的时候P2口取反。2.代码实现#includereg52.h#defineuintunsignedint#defineucharunsignedcharsbitKEY1=P3^4;sbitKEY2=P3^5;sbitKEY3=P3^6;sbitKEY4=P3^7;sbitU1=P2^6;sbitU2=P2^7;ucharcount,count1,bai,shi,ge,num,count1;uintsecond;ucharcodetable[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x51,0x79,0x71};voiddelay(uintz){uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}voidinit(){TMOD=0x11;//0001'0001TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;ET0=1;TR0=1;}voiddisplay(uintsecond){bai=second/100;shi=second%100/10;ge=second%10;U2=1;P0=0xfe;//1111'1110U2=0;U1=1;P0=table[bai];U1=0;delay(5);U2=1;P0=0xfd;//1111'1101U2=0;U1=1;P0=table[shi];U1=0;delay(5);U2=1;P0=0xfb;//1111'1011U2=0;U1=1;P0=table[ge];U1=0;delay(5);}voidkeyscan(uintsecondGet){if(KEY1==0){delay(20);TR0=0;while(!KEY1)display(secondGet);TR0=1;}if(KEY2==0){TR0=0;}if(KEY3==0){TR0=1;}if(KEY4==0)//S4键清零{delay(10);if(KEY4==0){TR0=0;second=0;while(!KEY4)display(second);TR0=1;}}}voidmain(){init();while(1){display(second);keyscan(second);}}voidtimer0()interrupt1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;count1++;if(count1==2){count1=0;second++;if(second==999)second=0;}}3.实验实现截图六、试验总结经过这个试验我对独立键盘检测控制有一定的了解,不过我这个试验的程序编辑、编译不太熟悉,搞了好久也没有得到结果,最后在同学的帮助下完成了这个程序,并开始将编译生成的目标码文件传入实验板中。在一个困难的问题又来到了,我对试验板又不知道如何操作,经过同学们的帮助我最终完成了这个试验
本文标题:嵌入式独立键盘检测控制实验
链接地址:https://www.777doc.com/doc-2440340 .html