《物联网基础应用实训》课程设计报告PINGDINGSHANUNIVERSITY数码管显示4X4矩阵键盘的键号姓名:陈凯昂班级:物联网(2)班学号:121210325指导教师:王启明完成时间:2014.06.051一、设计要求单片机的P1口的P1.0~P1.7连接4X4矩阵键盘,P0口控制一只数码管,当4X4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。例如,1号键按下时,数码管显示“1”;9号键按下时,数码管显示“9”,等等。二、原理说明本题目的关键点是如何进行键盘扫描(可采用行扫描法,也可采用线反转法)。并计算出键号,然后把键号送数码管显示。三、Proteus电路设计1.建立新文件进入ProteusISIS界面,单击主菜单项【文件】“新建设计”选项,就会弹出“新建设计”窗口(见图B-1),窗口中提供了多种模板选择。其中横向图纸为Landscape,纵向图纸为Portrait,DEFAULT为默认模版。单击选择的模板图标,再单击“确定”按钮,即建立一个该模板的空白文件。如果直接单击“确定”按钮,即选用系统默认的DEFAULT模板。图B-1单击保存按钮,在弹出的对话框“保存ISIS设计文件”中输入文件名再单击“保存”,则完成新建设计文件的保存操作,其后缀自动为“.DSNo2.设定绘图纸大小当前的绘图纸大小为默认的A4。如要改变图纸大小,可单击菜单中的【系统】“设置图纸大小”弹出如图B-2所示窗口,可选择所需图纸的尺寸。2图B-23.选取元器件并添加到对象选择窗口中单击器件选择按钮,弹出如图B-3所示的选取元器件对话框。在其左上角“关键字”一栏中输入元器件名称“AT89C51,则出现关键字匹配的元器件列表,如图B-3所示。选中AT89C51所在行或单击AT89C51所在行后,再单击“确定”按钮,便将元器件AT89C51加入到ISIS对象选择窗口中。按此操作方法逐一完成其他元器件的选取。本设计中使用的各元器件的关键字相应为“AT89C51,BUTTON(按钮开关)、“MINRES510R”(电阻)、7SEG-MPX1-CA(数码管)等。被选取的元器件加入到ISIS对象选择窗口中,如图B-4所示。图B-33图B-4上述的方法称“关键字查找法”,关键字可以是对象的名称、描述、分类、子类,甚至是对象的属性值。还有一种“分类查找法”,即元器件所属大类、子类,甚至以生产厂家为条件,一级一级地缩小范围进行查找。在具体操作时,常将两种方法结合使用。4.放置、移动、旋转元器件单击ISIS对象选择窗口中的元器件名,蓝色条出现在该元器件名上。把鼠标指针移到编辑区某位置后,单击就可放置元器件于该位置,每单击一次,就放置一个元器件。如果要移动元器件,先右击元器件使其处于选中状态,再按住鼠标左键进行拖动,到达目标处后,松开鼠标即可。如要调整元器件方向,先将指针指在元器件上单击鼠标右键选中,再单击相应的转向按钮。若多个对象一起移动或转向,可选择相应的块操作命令。5.放置电源、地(终端)选择窗口中下面来添加电源和地。应该说明的是,Proteus中的单片机芯片默认已经添加电源与地,也可以省略。先看添加电源的操作,首先单击图B-4中左侧的工具箱中的终端模式按钮,然后在对象选择窗口中单击POWER(电源)来选中电源,然后使用元器件调整工具按钮进行方向调整,最后就可以在编辑区中单击放置电源了。放置GROUND(地)的操作类似。6.电路图布线系统默认自动布线有效。相继单击元器件引脚间、线间等要连线处,会自动生成连线。7.设置、修改元器件的属性Proteus库中的元器件都有相应的属性,要设置、修改它的属性,可右击放置在ISIS编辑区中的该元器件,再单击它打开其属性窗口,这时可在属性窗口中设置、修改它的属性。例如,设置某电阻R1的属性如图B-5所示。4图B-58.电气检测电路设计完成后,单击电气检查快捷按钮团,会出现检查结果窗口,窗口前面是一些文本信息,接着是电气检查结果列表,若有错,会有详细的说明。电气检测也可通过菜单操作【工具】“电气规则检查”完成。经过上述各个步骤操作后,完成本实例的原理电路设计如图B-6所示。图B-65四、KeilμVision3平台下的源程序设计源程序设计包括源程序源代码的输入编辑与调试,目前常使用两种设计手段:一种是使用ProteusVSM;另一种是使用KeilμVision3平台。ProteusVSM提供了简单的文本编辑器,对于不同系列的单片机,VSM均提供了相应的编译器,使用时可根据单片机的型号和语言要求来选取。德国Keil公司开发的KeilμVision3软件平台是目前最好的AT89C51单片机软件开发平台之一。KeilμVision3是一种集成化的文件管理编译环境,使用工程的方法来管理文件,而不是单一文件的模式,所有的文件包括源程序(如C程序、汇编程序)、头文件等都可以放在工程文件里统一管理。该环境下可编译C源代码和汇编源程序,连接和重定位目标文件和库文件,创建.hex文件,调试目标程序等。调试手段丰富并可直接与Proteus进行联调,进而实现对所设计电路的验证。因此,目前设计者多使用KeilμVision3平台来进行源程序文件的设计与调试。1.绘制流程图在编写源程序之前,首先要根据任务要求,绘制出源程序框图,它是程序设计与调试的依据。本例的源程序框图如图B-7所示。图B-72.源程序文件的设计使用KeilμVision3进行源程序文件的设计与调试,一般可以按照下面的步骤来进行源程序文件的设计。P1为输入口从P1口读入按键的状态把按键状态数据转换为显示的段码段码送P0口显示6(1)创建一个工程文件启动Keil软件后,进入Keil界面,单击【Project】(工程)菜单下面的“NewProject(新建工程)来新建一个工程。软件弹出“CreateNewProject(创建新工程)窗口。在“文件名(N)”窗口中输入新建工程的名字,并且在“保存在(I)”下拉框中选择工程的保存目录,为工程输入文件名后,单击“保存(S)”即可。(2)选择单片机单击“保存(S)”后,会弹出“SelectDeviceforTarget(选择MCU)窗口,按照界面的提示选择相应的MCU。选择“Atmel”目录下的“AT89C51。(3)添加用户源程序文件一个新的工程创建完成后,就需要将用户编写的源程序代码添加到这个工程中,添加用户程序文件通常有两种方式:一种是新建文件;另一种是添加已创建的文件。对于新建文件的添加,首先单击快捷按钮,出现一个空白的编辑窗口,用户可输入自己编写的程序源代码,如图B-8所示。图B-8程序源代码输入完毕后,单击快捷按钮保存文件,在弹出的窗口中输入保存路径和文件名。这样就将这个新源程序文件与刚才建立的工程保存在同一个文件夹下。由于使用C语言编程,则文件的扩展名应为“.c”。如果添加已经存在的源程序文件,则在工程窗口中右键单击“SourceGroupl选择“AddFileto‘SourceGroupl'选项,完成上述操作后会出现AddFileto‘SourceGroupl'的对话框。在该窗口中选择要添加的文件,单击已创建的源程序文件后,单击“Add”按钮,再单击“Close”按钮,文件就已经添加到工程中。73.C51源程序#includereg51.h#defineucharunsignedchar#defineuintunsignedint//段码ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};//上次按键和当前按键的序号,该矩阵中序号范围0~15,16表示无按键ucharPre_KeyNo=16,KeyNo=16;//延时voidDelayMS(uintx){uchari;while(x--)for(i=0;i120;i++);}//矩阵键盘扫描voidKeys_Scan(){ucharTmp;P1=0x0f;//高4位置0,放入4行DelayMS(1);Tmp=P1^0x0f;//按键后0f变成0000XXXX,X中一个为0,3个仍为1,通过异或把3个1变为0,唯一的0变为1switch(Tmp)//判断按键发生于0~3列的哪一列{case1:KeyNo=0;break;case2:KeyNo=1;break;case4:KeyNo=2;break;case8:KeyNo=3;break;default:KeyNo=16;//无键按下}P1=0xf0;//低4位置0,放入4列8DelayMS(1);Tmp=P14^0x0f;//按键后f0变成XXXX0000,X中有1个为0,三个仍为1;高4位转移到低4位并异或得到改变的值switch(Tmp)//对0~3行分别附加起始值0,4,8,12{case1:KeyNo+=0;break;case2:KeyNo+=4;break;case4:KeyNo+=8;break;case8:KeyNo+=12;}}//主程序voidmain(){P0=0x00;while(1){P1=0xf0;if(P1!=0xf0)Keys_Scan();//获取键序号if(Pre_KeyNo!=KeyNo){P0=DSY_CODE[KeyNo];Pre_KeyNo=KeyNo;}DelayMS(100);}}五、源程序编译及目标代码文件的生成把源程序文件添加到工程中后,还需要将文件进行编译和调试,最终目标是要生成.hex文件,具体步骤如下。1.程序编译把源程序文件打开,单击快捷按钮,对当前文件进行编译,则在输出窗口出现提示信息,从该提示信息可以看到程序是否有语法错误。如有错误,认真9检查程序找到错误并改正,改正后再次单击进行编译,直至提示信息显示没有错误为止。2.程序调试程序编译没有错误后,就可进行调试与仿真。单击快捷按钮(开始调试/停止调试),进入程序调试状态。在左边的工程窗口给出了常用的寄存器r0-r7以及a,b,sp,如tr,pc,psw等特殊功能寄存器的值,这些值会随着程序的执行发生相应的变化。同时在该窗口还可查看单片机片内程序存储器的内容(单元地址前有“C:)或片内数据存储器的内容(单元地址前有“D:”)。在调试状态时,如图B-9所示,会出现一行新增加的用于调试的快捷命令图标(上面一行)以及原来就有的用于调试的快捷图标(下面一行)。图B-9在程序调试状态下,可运用快捷图标进行单步、跟踪、断点、全速运行等方式的调试,也可观察单片机资源的状态,例如程序存储器、数据存储器、特殊功能寄存器、变量寄存器及I/O端口的状态。这些图标大多数是与主菜单栏命令【Debug】下拉菜单中的各项子命令一一对应,只是快捷图标比下拉菜单使用起来更加方便快捷。3.生成目标代码文件源程序最终要生成在单片机上可执行的二进制文件(.hex格式文件),单片机系统才能运行。具体操作如下:单击“OptionsforTarget‘Targetl’”窗口中的“Output”选项,就会出现Output页面。选择“CreateHEXFile项后,即可生成单片机可直接运行的二进制文件(.hex格式文件),文件扩展名为.hex。六、Proteus仿真把“.hex”文件加载到电路图中的单片机后,就可自接单击仿真按钮,则会当即实现交互式仿真,仿真效果如图B-10所示。当按下相应键时,数码管显示相应数字,图中显示按下“2”时的显示情况。10图B-10仿真时,如果要暂停程序的运行,可单击按钮;如果要停止程序的运行,可单击按钮;如果要单步运行程序,可单击按钮。七、总结本题关键在于进行键盘扫描,采用的是行扫描法。然后计算出键号,接着把键号送数码管显示。所以,通过这次课程设计,我认识到键盘行扫描法的重要性,了解到了它的基本工作原理等。此外,它为我接下来的学习和研究积累了宝贵的经验,在以后的学习中我会我会合理利用这个技巧,以实现它的价值。