基于51单片机键盘通信系统课程设计报告_第1页
基于51单片机键盘通信系统课程设计报告_第2页
基于51单片机键盘通信系统课程设计报告_第3页
基于51单片机键盘通信系统课程设计报告_第4页
基于51单片机键盘通信系统课程设计报告_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.Word资料单片机实习报告书中文标题:基于51单片机键盘通信系统英文标题:basiconstc51keyboardcommunicationsystem要求完成的主要任务:1.单片机最小系统的设计、焊接、调试。(包括4X4键盘、显示电路、及串行接口通信)2.完成ISP下载电路的设计、焊接。3.完成系统软件的设计,包括程序结构设计、流程图绘制、程序设计。(实现功能选择、数据输入、数据显示、数据通信等功能)4.利用仿真软件完成系统仿真工作5.在单片机最小系统硬件上实现任务实习目的:1.理论目的实习目的之一是为了巩固课堂理论学习,并能用所学理论知识应用于实际的应用系统中。2.实践目的实习目的之二是通过设计具体的键盘及串口通信来掌握单片机的硬件电路的设计、焊接以及软件设计,锻炼实际动手能力。时间安排:序号阶段内容所需时间序号阶段内容所需时间1方案设计2天5电路焊接2天2硬件设计2天6系统调试1天3软件设计3天7实习报告1天4系统仿真1天合计12天Word资料目录摘要 IAbstract II1引言 11.1单片机介绍 11.2单片机最小系统 31.2.1复位电路 31.2.2振荡电路 41.3各功能模块 51.3.1矩阵键盘电路 51.3.2数码管显示电路 61.3.3串行通信电路 82仿真电路及实物调试运行图 112.1整体电路仿真图 112.2实物运行结果 123心得体会 154参考资料 16附1:主系统程序:#include<reg51.h> 17附2:子系统程序: 22Word资料摘要单片机就是一块硅片上集成了微处理器、存储器及各种输入输出接口的芯片,这样的芯片就具有了计算机的属性,因而被称为单片微型计算机,简称单片机。由RAM,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。本次课程设计包括STC89S52单片机最小系统包括复位和时钟电路及供电系统、4×4矩阵键盘、独立6个8段LED数码管显示电路以及串口通信。4X4矩阵键盘将16个按键排成4行4列,第一行将每个按键的一端连接在一起构成一个行线,第一列的将每个按键的另一端连接在一起构成列线,我们将这八根线接到单片机的8个I/O口上,通过程序扫描键盘就可以16个键。而数码显示管则是由八个发光二极管点亮,分为共阴极和共阳极。串行通信是将数据字节分成为一位一位的形式在一条传输线上逐个的传送,此时只需要一条数据线,外加一条公共信号地线和若干控制信号线。关键词:单片机矩阵键盘串口通信数码显示管AbstractSingle-chipcomputerisapieceofsiliconwafersusedmicroprocessor,memory,andvariousinput/outputinterfacechip,chiphasthecomputersuchasthepropertiesofthesocalledsinglechipmicrocomputer,referredtoas"singlechipmicrocomputer.ByRAM,ROMandCPU,timing,countandvariousinterfaceintheintegrationofthemicrocontroller.Ithassmallvolume,lowcost,strongfunction,iswidelyusedinintelligentindustryandindustrialautomation.And51seriesmicrocontrolleristhesinglechipmicrocomputerinoneofthemosttypicalandmostrepresentative.Ofthestudyandapplicationofthecurriculumdesignbasedonit,soastostudy,designanddeveloptheabilityofsoftandhard.

ThecurriculumdesignincludesSTC89S52SCMsmallestsystemincludingresetandclockcircuitandpowersupplysystem,4*4matrixkeyboard,independentsixsection8oftheLEDdigitaltubedisplaycircuitandserialcommunication.4x4matrixkeyboardwillbe16in4rowfourcolumns,thefirstlineofeachkey-presstogetherconstitutealineattheendoftheline,thefirstcolumnofeachkey-presstogetherconstituteacolumnontheothersideoftheline,wearegoingtotheeightlinesreceivedeightmicrocontrollerI/Oport,byscanningthekeyboardcanbe16keyprogram.Thedigitaldisplaytubeiscomposedofeightledslightup,dividedintocommoncathodeandanode.Serialcommunicationisthedatabytesintoanaonatransmissionlineonebyone,intheformoftransmission,atthistime,onlyneedacablewithapublicsignalgroundandseveralcontrolsignallines.

Keywords:singlechipmicrocomputermatrixkeyboardserialcommunicationdigitaldisplaytube1引言1.1单片机介绍单片机就是一块硅片上集成了微处理器、存储器及各种输入输出接口的芯片,这样的芯片就具有了计算机的属性,因而被称为单片微型计算机,简称单片机。通俗的语言来讲,单片机就是一块集成芯片,但这块集成芯片具有一些特殊的功能,而它的功能的实现要靠我们使用者自己来编程完成,我们编程的目的就是控制这块芯片的各个引脚在不同时间输出不同的电平,进而控制与单片机各个引脚相连接的外围电路的电气状态。即将计算机主机CPU、内存和I/O接口集成在一小块硅片上的微型机。图1-1单片机内部结构图一片MCS-51单片机芯片内包含一个8位CPU、振荡器和时钟电路、至少128字节的内部数据存储器可寻址外部程序存储器和数据存储器个64k字节21个特殊功能寄存器4个并行I/O接口2个16位定时/计数器至少5个中断源提供两级中断优先级可实现两级中断服务程序嵌套。具有可位寻址功能有较强的布尔处理能力。各功能单元包括IO端口和定时器/计数器等都由特殊功能寄存器SFR集中管理。AT89C52是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的只读程序存储器(PEROM)和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C52单片机适合于许多较为复杂控制应用场合。主要性能参数:·与MCS-51产品指令和引脚完全兼容·8k字节可重擦写Flash闪速存储器·1000次擦写周期·全静态操作:0Hz-24MHz·三级加密程序存储器·256×8字节内部RAM·32个可编程I/O口线·3个16位定时/计数器·8个中断源·可编程串行UART通道·低功耗空闲和掉电模式功能特性概述:AT89C52提供以下标准功能:8k字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。芯片引脚图如图2所示。图1-2AT89C52芯片引脚图P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“l”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“l”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口P2写“l”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“l”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。ALE:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的l/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。EA:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。XTAL2:振荡器反相放大器的输出端。1.2单片机最小系统1.2.1复位电路复位电路,就是利用它把电路恢复到起始状态。以便回到原始状态,重新进行计算。单片机复位电路主要有四种类型:(1)微分型复位电路;(2)积分型复位电路;(3)比较器型复位电路;(4)看门狗型复位电路。其最小系统复位电路如图1-3所示。图1-3复位电路51单片机最小系统复位电路的极性电容的大小直接影响单片机的复位时间,一般采用10到30uF,51单片机最小系统容值越大需要的复位时间越短。51单片机最小系统晶振Y1也可以采用6MHz或者11.0592MHz,在正常工作的情况下可以采用更高频率的晶振,51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。51单片机最小系统起振电容C2、C3一般采用15到33pF,并且电容离晶振越近越好,晶振离单片机越近越好。P0口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k。其他接口内部有上拉电阻,作为输出口时不需外加上拉电阻。1.2.2振荡电路51单片机有两种振荡方式,为内部振荡和外部振荡,内部振荡方式所得到时钟信号比较稳定,在实际电路中,一般是选用内部振荡方式。单片机的XTAL1脚和XTAL2脚之间并接一个晶体振荡器就构成了内部振荡方式。AT89S52单片机内部有一个高增益的反相放大器,XTAL1为内部反相放大器的输入端,XTAL2为内部反相放大器的输出端,在其两端接上晶振后,就构成了自激振荡电路,并产生振荡脉冲,振荡电路输出的脉冲信号的频率就是晶振的固有频率。在实际应用中通常还需要在晶振的两端和地之间各并上一个小电容。实际的内部振荡方式的电路如图1-4所示。图1-4振荡电路图中,电容器C2、C3常称为微调电容,其作用有三个:快速起振、稳定振荡频率、微调振荡频率。AT89S52单片机允许外接0~33MHz的晶振,电容器C2、C3可取5pF~33pF。一般情况下,使用频率较低的晶振时,C1、C2的容量可选大一点。为了减少寄生电容,更好地保证振荡器稳定可靠地工作,在实际装配电路时,晶振X和电容C2、C3应尽可能地安装在XTAL1(图中为X1,单片机第19脚)、XTAL2(图中为X2,单片机第18脚)引脚附近。1.3各功能模块1.3.1矩阵键盘电路在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。确定矩阵式键盘上何键被按下用“行扫描法”。行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,第一步:判断键盘中有无键按下,将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。第二步:判断闭合键所在的位置,在确认有键按下后,依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。对矩阵键盘还要消除按键在闭合和断开时的抖动。可采用延时方式软件消除抖动。其连接电路如图1-5所示。图1-5矩阵键盘电路1.3.2数码管显示电路7段数码管一般由8个发光二极管组成,其中由7个细长的发光二极管组成数字显示,另外一个圆形的发光二极管显示小数点。当发光二极管导通时,相应的一个点或一个笔画发光。控制相应的二极管导通,就能显示出各种字符,尽管显示的字符形状有些失真,能显示的数符数量也有限,但其控制简单,使用也方便。发光二极管的阳极连在一起的称为共阳极数码管,阴极连在一起的称为共阴极数码管,如图1-6所示。

图1-6数码管引脚排列7段数码管每段的驱动电流和其他单个LED发光二极管一样,一般为5~10mA;正向电压随发光材料不同表现为1.8~2.5V不等。7段数码管的显示方法可分为静态显示与动态显示,本设计只用到动态显示,故只介绍动态显示。所谓动态显示就是一位一位地轮流点亮各位显示器(扫描),对于显示器的每一位而言,每隔一段时间点亮一次。虽然在同一时刻只有一位显示器在工作(点亮),但利用人眼的视觉暂留效应和发光二极管熄灭时的余辉效应,看到的却是多个字符“同时”显示。若显示器的位数不大于8位,则控制显示器公共极电位只需一个8位I/O口(称为扫描口或字位口),控制各位LED显示器所显示的字形也需要一个8位口(称为数据口或字形口)。动态显示器的优点是节省硬件资源,成本较低,但在控制系统运行过程中,要保证显示器正常显示,CPU必须每隔一段时间执行一次显示子程序,这占用了CPU的大量时间,降低了CPU工作效率,同时显示亮度较静态显示器低。综合以上考虑,本设计用共阴数码管做动态显示。用锁存器74HC573扩展P0口,其连接电路图如图1-7。图1-7数码管1.3.3串行通信电路1.单片机串行通信方式介绍串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。51单片机内部有一个全双工串行接口。一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。SBUF寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。从而控制外部两条独立的收发信号线RXD(P3.0)、TXD(P3.1),同时发送、接收数据,实现全双工。串行口控制寄存器SCON(见表1-1)。表1-1串行口控制寄存器SCON表中各位(从左至右为从高位到低位)含义如下。SM0和SM1:串行口工作方式控制位,其定义如表1-2所示。表1-2串行口工作方式控制位其中,fOSC为单片机的时钟频率;波特率指串行口每秒钟发送(或接收)的位数。SM2:多机通信控制位。该仅用于方式2和方式3的多机通信。其中发送机SM2=1(需要程序控制设置)。接收机的串行口工作于方式2或3,SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请引发串行接收中断,否则会将接受到的数据放弃。当SM2=0时,就不管第位数据是0还是1,都将数据送入SBUF,并置位RI发出中断申请。工作于方式0时,SM2必须为0。REN:串行接收允许位:REN=0时,禁止接收;REN=1时,允许接收。TB8:在方式2、3中,TB8是发送机要发送的第9位数据。在多机通信中它代表传输的地址或数据,TB8=0为数据,TB8=1时为地址。RB8:在方式2、3中,RB8是接收机接收到的第9位数据,该数据正好来自发送机的TB8,从而识别接收到的数据特征。TI:串行口发送中断请求标志。当CPU发送完一串行数据后,此时SBUF寄存器为空,硬件使TI置1,请求中断。CPU响应中断后,由软件对TI清零。RI:串行口接收中断请求标志。当串行口接收完一帧串行数据时,此时SBUF寄存器为满,硬件使RI置1,请求中断。CPU响应中断后,用软件对RI清零。电源控制寄存器PCON(见表1-3)。表1-3PCON寄存器表中各位(从左至右为从高位到低位)含义如下。SMOD:波特率加倍位。SMOD=1,当串行口工作于方式1、2、3时,波特率加倍。SMOD=0,波特率不变。2.RS-232C接口RS-232C是EIA(美国电子工业协会)1969年修订RS-232C标准。RS-232C定义了数据终端设备(DTE)与数据通信设备(DCE)之间的物理接口标准。其功能特性如图1-8所示。图1-8RS232C功能特性3.80C51串行口的工作方式一、方式0方式0时,串行口为同步移位寄存器的输入输出方式。主要用于扩展并行输入或输出口。数据由RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据,低位在先,高位在后。波特率固定为fosc/12。二、方式1方式1是10位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图所示。其中1位起始位,8位数据位,1位停止位。用软件置REN为1时,接收器以所选择波特率的16倍速率采样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧信息的其余位。接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。三、方式2和方式3方式2或方式3时为11位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚。方式2和方式3时起始位1位,数据9位(含1位附加的第9位,发送时为SCON中的TB8,接收时为RB8),停止位1位,一帧数据为11位。方式2的波特率固定为晶振频率的1/64或1/32,方式3的波特率由定时器T1的溢出率决定。四、波特率的计算在串行通信中,收发双方对发送或接收数据的速率要有约定。通过软件可对单片机串行口编程为四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。方式0的波特率=fosc/12(公式1)方式2的波特率=(2SMOD/64)*fosc(公式2)方式1的波特率=(2SMOD/32)*(T1溢出率)(公式3)方式3的波特率=(2SMOD/32)*(T1溢出率)(公式4)当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时器方式(即方式2,且TCON的TR1=1,以启动定时器)。这时溢出率取决于TH1中的计数值。T1溢出率=fosc/{12×[256-(TH1)]}(公式5)在单片机的应用中,常用的晶振频率为:12MHz和11.0592MHz。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表1-4所示。本实习所用晶振为11.0592MHz,选用定时器1为波特率发生器工作于方式2,串口通信方式采用方式1,所以定时器1的初值为TH1=0XFD,TL1=0XFD。表1-4常用波特率与定时器1的参数关系表2仿真电路及实物调试运行图2.1整体电路仿真图电路用proteus进行仿真,用两块单片机最小系统板进行实物搭建。主系统部分使用共阴极显示屏,子系统部分使用共阳极显示屏。整体电路仿真图如图3-1所示。图3-1整体电路仿真图2.2实物运行结果1)给单片机上电后,单片机显示如下。如图3-2所示图3-2数码管初始显示2)按下数字键3,进行十进制数的输入。此时数码管显示结果如图3-3所示。图3-3数据输入初始显示图按下数据键,输入四位十进制,顺序是从左往右输入,之后按下enter键,将数据存入。显示结果和图3-4所示结果一致。图3-4依次按下数字键后的实物调试图数据输错后按下键14,即清除键,即可重新输入。显示结果如下:图3-5按清除键后的实物调试图进行数据显示时,首先要按下键7,进入数据显示状态。再按下键0到9,可以显示0到9序号里面存的数据。显示结果如下:图3-6按显示键后的实物调试图6)进行串行通信时,首先按下键11,进入串行通信状态。将两个系统连接起来以后,在发送系统中输入十进制数,在输出系统中可以显示相同数据并且方向相同。如图3-7所示。图3-6串行通信的实物调试图3心得体会在这次设计过程中,体现出自己单独仿真的能力以及综合运用知识的能力,体会到了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。在电路的设计仿真整个过程中,我深刻地认识到了耐心与细心的重要性,我将严格要求自己,养成一丝不苟的学习和生活态度,为以后走向社会打基础。本次课程设计对我专业知识的运用进行了全方面的考核与检测,同时更加强了学习专业知识的决心,以及对以后从事电子方面的信心。平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了。而且还可以记住很多东西。比如一些程序的调用,通过动手实践让我们对调用映象深刻。所以这个课程设计对我们的作用是非常大的。通过课程设计,使我深深地体会到,干任何事都必须耐心、细致。在编程过程中,有的时候犯了一些小错误很正常,发现错误要积极思考,耐心寻找,越是心烦意乱则更难查错。在以后的学习生活以至于工作中,我们一定要养成一种高度负责、一丝不苟的良好习惯。这次课程设计使我在工作风度上得到了一次难得的磨练。也衷心感谢老师和同学对我悉心的指导。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。4参考资料[1]尹勇撒继铭等,单片计算机原理及应用(第1版),科学出版社,2013年[2]谢自美.电子线路设计·实验·测试(第三版).武汉:华中科技大学出版社[3]李群芳.单片微型计算机与接口技术(第3版).电子工业出版社,2008[4]刘教瑜.单片机原理及应用.武汉理工大学出版社,2011[5]张东亮.单片机原理与应用.人民邮电出版社,2009附1:主系统程序:#include<reg51.h>#include<intrins.h>bitFlag;unsignedintReData,SenData;//chartable[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x84};//数码管代码chartable[17]={~0xc0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,~0x90,~0x88,~0x83,~0xc6,~0xa1,~0x86,~0x84};//数码管代码//chartable[17]={0xc0,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xfc};chardis_buf;chari=0,j=0,k=0,inp1=0,inp2=0,inp3=0,on_off=0,disp=0;//初始化控制变量chartemp,key,num,m,n;chara[11][5];voidkeydown(void);voidkeyscan(void);voiddisplay(void);voidinit(void); voiddelay(intz){ intx,y; for(x=0;x<z;x++) for(y=0;y<110;y++);}voidmain(){ P0=0xff; P2=0xff; dis_buf=0xbf; while(1) { for(m=0;m<10;m++) for(n=0;n<5;n++) a[m][n]=0; display(); }} voidkeydown(void) { P1=0xf0; if(P1!=0xf0) { keyscan(); //扫描函数 while(P1!=0xF0); }}voidkeyscan(void){ intm,n;//**********为每个按钮设置一个编号key********************************** P1=0x0f; //低四位输入 delay(1); temp=P1; temp=(~temp)&0x0f; if(temp==1) key=0; elseif(temp==2) key=4; elseif(temp==4) key=8; elseif(temp==8) key=12; P1=0xf0; delay(1); temp=P1; temp=(temp>>4); temp=(~temp)&0x0f; if(temp==1) key=key+0; elseif(temp==2) key=key+1; elseif(temp==4) key=key+2; elseif(temp==8) key=key+3; if(key==3||key==7||key==11||key==12||key>13) { //控制按钮输入 if(key==3) //数据输入按钮 { on_off=1; //开数据输入开关 } elseif(key==7) //数据显示按钮 { disp=1; num=0; } elseif(key==11) //串行通信 { init(); inp2=1,i=0,j=0,inp1=0,on_off=0,disp=0,num=0; for(m=0;m<10;m++) for(n=0;n<5;n++) a[m][n]=0; } elseif(key==12) //回车按钮 { inp1++; if(inp1==2){inp1=0;j=0;} } elseif(key==15) //清楚按钮 { i=0,j=0,inp1=0,inp2=0,on_off=0,disp=0,num=0; for(m=0;m<10;m++) for(n=0;n<5;n++) a[m][n]=0; } elseif(key==14) //输入清除按钮 { for(j=0;j<6;j++)a[i][j]=0; inp1=0; j=0; } }else{ //数据按钮输入 if(key<3){num=key+1;} //num为1~3 elseif(key>3&&key<7){num=key;} //num为4~6 elseif(key>7&&key<11){num=key-1;} //num为7~9 elseif(key==13){num=0;} //num为0 if(disp==0&&on_off==1){ if(inp1==0){i++;a[i][0]=num;} //数据存储 elseif(inp1==1){j++;a[i][j]=num;} }elseif(inp2==1) { for(i=5;i>0;i--)a[0][i]=a[0][i-1]; a[0][0]=num; SBUF=num; } } }/* */ voiddisplay(void) { while(1){ P0=0x40; P2=0; keydown(); while(on_off){ //数据输入和显示 P2=0xfe; P0=table[a[i][0]]; delay(10); P2=0xfb; P0=table[a[i][1]]; delay(10); P2=0xf7; P0=table[a[i][2]]; delay(10); P2=0xef; P0=table[a[i][3]]; delay(10); P2=0xdf; P0=table[a[i][4]]; delay(10); keydown(); while(disp) { keydown(); for(m=0;m<11;m++) { if(num==a[m][0])k=m; } P2=0xfe; P0=table[a[k][0]]; delay(10); P2=0xfb; P0=table[a[k][1]]; delay(10); P2=0xf7; P0=table[a[k][2]]; delay(10); P2=0xef; P0=table[a[k][3]]; delay(10); P2=0xdf; P0=table[a[k][4]]; delay(10); } } while(in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论