LED点阵显示控制项目4LED点阵显示控制知识与能力目标理解并掌握矩阵键盘接口电路及软件处理方法。1理解并掌握LED点阵显示屏接口电路及软件处理方法。2学会使用汇编语言进行复杂I/O口控制程序的分析与设计。3学会使用C语言进行复杂I/O口控制程序的分析与设计。4熟练使用KeiluVsion3与Proteus软件。5项目4LED点阵显示控制4.1.1控制要求与功能展示4.1.3汇编语言程序分析与设计4.1.5基于Proteus的调试与仿真4.1.2硬件系统与控制流程分析4.1.4C语言程序分析与设计任务4.1LED按键指示灯控制4.2.2硬件系统与控制流程分析4.2.1控制要求与功能展示4.2.3汇编语言程序分析与设计4.2.4C语言程序分析与设计4.2.5基于Proteus的调试与仿真任务4.2LED点阵数显控制4.3.2硬件系统与控制流程分析4.3.1控制要求与功能展示4.3.3汇编语言程序分析与设计4.3.4C语言程序分析与设计4.3.5基于Proteus的调试与仿真任务4.3键控LED点阵显示控制任务4.1LED按键指示灯控制4.1.1控制要求与功能展示实物运行视频4.1.1控制要求与功能展示LED按键指示灯控制电路原理图任务4.1LED按键指示灯控制4.1.2硬件系统与控制流程分析1.任务硬件系统分析矩阵键盘电路又称为行列键盘它是用N条I/O线作为行线,用M条I/O线作为列线所组成的键盘,在行线和列线的每个交叉点上设置一个按键,这样就可以构成一个N*M个按键的键盘。4.1.2硬件系统与控制流程分析项目中所采用的是一个2*2式的键盘,其中P1.0、P1.1接矩阵键盘的行,P1.2、P1.3接矩阵键盘的列,为了提高电路的可靠性,图中行列线上均接有一个上拉电阻。4.1.2硬件系统与控制流程分析(1)对P1口赋值0xFE,将第一行的接口设为低电平,其余各接口设为高电平。方法一采用逐行扫描的方式图4-4逐行扫描法键盘各端口状态(一)4.1.2硬件系统与控制流程分析(2)读入P1口数据,与0xFE进行比较是否相等,若相等则第一行中无按键按下;若不相等则第一行中有按键按下。当判断有按键按下后,再次分析读入的数据,若数据等于0xFA则是第一行第一列按键被按下。4.1.2硬件系统与控制流程分析(2)读入P1口数据,与0xFE进行比较是否相等,若相等则第一行中无按键按下;若不相等则第一行中有按键按下。当判断有按键按下后,再次分析读入的数据,若数据等于0xF6则是第一行第二列按键被按下。4.1.2硬件系统与控制流程分析(3)若第一行扫描完毕,对P1口重新赋值0xFD,将第二行的接口设为低电平,其余各接口设为高电平,与第1行扫描的处理方法类似在此不详细说明。4.1.2硬件系统与控制流程分析(1)对P1口赋值0xF3,将各按键行接口置高电平,各列接口置低电平,如图4-7所示。方法二采用行列组合的方式图4-7行列组合法键盘各端口状态(一)4.1.2硬件系统与控制流程分析(2)读入P1口数据,与0xF3进行比较是否相等,若相等则此时无按键按下继续读值判断;若不相等则此时有按键按下。当判断有按键按下后,再次分析读入的数据,若数据等于0xF2则是第一行按键被按下,此时赋键值为1;若数据等于0xF1则是第二行按键被按下,此时赋键值为3。4.1.2硬件系统与控制流程分析(3)当确认按键的行数后,紧接着重新赋值P1口为0xFC,将按键行接口置低电平,列接口置高电平。4.1.2硬件系统与控制流程分析(4)重新读入并分析P1口数据,若数据等于0xF8则是第一列按键被按下,此时将键值加上0;若数据等于0xF4则是第二列按键被按下,此时将键值加上1。(5)由以上步骤可得:第一个按键按下时,K赋值为1。第二个按键按下时,K最终值为2。第三个按键按下时,K最终值为3。第四个按键按下时,K最终值为4。若按键为M列、N行。则第2步第y行K值为1+M(y-1),第4步第x列K值为K+(x-1)。4.1.2硬件系统与控制流程分析4.1.2硬件系统与控制流程分析4.1.3汇编语言程序分析与设计1、任务相关汇编指令(1)比较不等跳转指令:CJNE使用格式:CJNE目的操作数,源操作数,地址或地址标号使用说明:判断目的操作数与源操作数是否相等,不等则跳转至地址操作数中执行,否则顺序执行(即从下一条指令开始执行);同时当源操作数小于或等于目的操作数时,Cy为0,而当源操作数大于目的操作数时,Cy为1。使用示例:CJNEA,#10H,D1;判断A中的内容是否和立即数10H相等,………;不等则转至地址为D1处执行,否则不跳,………;同时按顺序往下执行D1:………4.1.3汇编语言程序分析与设计(2)不带进位加法指令:ADD使用格式:ADDA,源操作数使用说明:该指令是完成两个8位二进制数的相加运算,结果存放在累加器A中。使用示例:ADDA,Rn;(A)+(Rn)→AADDA,direct;(A)+(direct)→AADDA,@Ri;(A)+((Ri))→AADDA,#data;(A)+data→A4.1.3汇编语言程序分析与设计(3)带进位加法指令:ADDC使用格式:ADDCA,源操作数使用说明:该指令除了完成两个8位二进制数的相加运算,还要与进位标志位Cy的值相加,结果存放在累加器A中。若Cy=0,则这组指令同ADD指令。带进位加法指令主要用在多字节加法运算中。使用示例:ADDCA,Rn;(A)+(Rn)+(CY)→AADDCA,direct;(A)+(direct)+(CY)→AADDCA,@Ri;(A)+((Ri))+(CY)→AADDCA,#data;(A)+data+(CY)→A4.1.3汇编语言程序分析与设计(4)带借位减法指令:SUBB使用格式:SUBBA,源操作数使用说明:该指令的操作功能是将累加器A中的内容减去源操作数中的值或常数并减去进位标志Cy的值,运算结果存入累加器A中。使用示例:SUBBA,Rn;(A)-(Rn)-(CY)→ASUBBA,direct;(A)-(direct)-(CY)→ASUBBA,@Ri;(A)-((Ri))-(CY)→ASUBBA,#data;(A)-data-(CY)→A4.1.3汇编语言程序分析与设计(5)乘法指令:MUL使用格式:MULAB使用说明:该乘法指令的功能是将累加器A和寄存器B中的两个8位无符号整数相乘,16位乘积的低8位存入累加器A,高8位存入寄存器B。当B的值不等于0时,OV=1,否则OV=0。使用示例:假如,设(A)=4EH,(B)=5DH,执行指令:MULAB结果:(B)=1CH,(A)=56H,即积(BA)为1C56H。4.1.3汇编语言程序分析与设计(6)除法指令:DIV使用格式:DIVAB使用说明:该除法指令的功能是将累加器A和寄存器B中的两个8位无符号整数相除,得到的8位商(整数)存入累加器,8位余数存入寄存器B。当B的值不等于0时,OV=0,否则OV=1。使用示例:假如,设(A)=0BFH,(B)=32H,执行指令:DIVAB结果:(A)=03H,(B)=29H,OV=0。4.1.3汇编语言程序分析与设计(7)累加器判零条件转移指令:JZ、JNZ使用格式:JZrel或JNZrel使用说明:这类指令以累加器A的内容是否为0作为指令转移的条件,累加器A的值由以前指令执行结果确定,指令转移范围在-128~+127。其中JZ指令的执行过程是该指令执行前累加器A的值为0,程序转移,否则程序顺序执行下一条指令。而JNZ指令的执行过程是该指令执行前累加器A的值不为0,程序转移,否则程序顺序执行下一条指令。使用示例:JZLOOP;若A=0,则程序跳转至LOOP处执行,否则,;程序顺序执行JNZLOOP1;若A≠0,则程序跳转至LOOP1处执行,否则,;程序顺序执行(7)累加器判零条件转移指令:JZ、JNZ程序初始部分测按键是否按下子程序CE_AJ主程序MAIN测按键值子程序CE_JZ按键去抖延时子程序DELAY汇编程序组成4.1.3汇编语言程序分析与设计汇编程序2、汇编程序设计根据图4-9所示的控制流程分析图,结合汇编语言指令编写出汇编语言控制程序。4.1.4C语言程序分析与设计1、函数表达式的使用参数形式无参函数有参函数调用函数用实际参数代替形式参数,调用完后将结果返回给调用函数4.1.4C语言程序分析与设计1、函数表达式的使用函数的一般形式如下:返回值类型函数名(类型说明形参表列){局部变量声明;执行语句;return(返回形参名);}其中,形参表列的各项要用“,”隔开。函数的返回值通过return语句返回给调用函数,若函数没有返回值,则可以将返回值类型设为void或缺省不写。4.1.4C语言程序分析与设计1、函数表达式的使用当被调用的函数有返回值时,可以将被调用函数以一个运算对象的形式出现在一个表达式中,这种表达式称为函数表达式。有时在选择语句或循环语句中将函数表达式作为选择或循环的条件,将会使程序更加精简。4.1.4C语言程序分析与设计1、函数表达式的使用bitjisuan(){bitshu;执行语句;return(shu);}voidmain(){if(jisuan()==1)//调用函数jisuan{……;……;}}4.1.4C语言程序分析与设计C程序代码2、C语言程序分析根据图4-9所示的控制流程分析图,结合C语言的知识,我们来分析设计本任务的C语言控制程序。程序初始部分检测是否有按键按下子函数ce_anjian()主函数main()延时子函数doudong_ys()测按键值子函数ce_jianzhi()本C语言程序组成1、创建Proteus仿真电路图4.1.5基于Proteus的调试与仿真(1)列出元器件表;(2)绘制仿真电路图4.1.5基于Proteus的调试与仿真由于进行proteus仿真运行时,矩阵键盘上增加上拉电阻有时会影响引脚电平的变化,与实际硬件电路有一定区别。本任务中所涉及的矩阵键盘仿真电路均不加上拉电阻,但是仿真的结果与具有上拉电阻的硬件电路结果一样。4.1.5基于Proteus的调试与仿真(1)(2)(3)安装插件vdmagdi.exe(注意:应把插件安装在Keil3的安装目录下)将Keil安装目录\C51\BIN中的VDM51.dll文件复制到Proteus软件的安装目录Proteus\MODELS目录下修改Keil安装目录下的Tools.ini文件,在C51字段中加入TDRV11=BIN\VDM51.DLL(“PROTEUS6EMULATOR”)并保存。4.1.5基于Proteus的调试与仿真)(4)(5)(6)打开“LED按键指示灯控制.DSN”文件,在Proteus的“Debug”菜单中选中“UseRemoteDebugMonitor(远程监控)”。右键选中STC89C51单片机,在弹出的对话框“ProgramFile”项中,导入在Keil中生成的HEX文件。Keil打开“LED按键指示灯控制.UV2”,打开窗口“OptionforTarget‘工程名’”。在Debug选项中右栏上部的下拉菜单选中ProteusVSMSimulator。点击进入Settings窗口,设置IP为127.0.0.1,端口号为8000。在Keil中点击,使用单步执行来调试程序,同时在Proteus中查看直观的仿真结果。2、Proteus与Keil联调4.1.5基于Proteus的调试与仿真R5=0xf2P1=0xf2模拟按键2按下2、Proteus与Keil联调4.1.5基于Proteus的调试与仿真C=0模拟按键2按下2、Proteus与Keil联调4.1.5基于Proteus的调试与仿真R4=0X02P2=0XFD3、Proteus仿真运行4.1.5基于Proteus的调试与仿真4.1.5基于Proteus的调试与仿真仿真运行视频任务4.2LED点阵数显控制4.2.1控制要求与功能展示实物运行视频74LS245芯片8*8点阵屏单片机时钟电路复位电路4.2.1控