单片微型计算机结构设计课程实习报告.doc
单片微型计算机结构设计课程实习报告实 习 执 行 大 纲一、实习目的1、巩固单片机原理与应用理论课的理论知识;2、熟悉单片机应用系统的硬件设计及软件设计的基本方法;3、将单片机原理与应用理论课的理论知识应用于实际的应用系统中;4、训练单片机应用技术,锻炼实际动手能力。二、实习纪律与要求1、实习纪律1)参加实习的学生必须按照实习大纲的要求,在指导教师的指导下,全面完成实习任务;2)听从指导教师安排,严格遵守实习纪律;3)因故在实习期间缺勤累计超过规定时间的三分之一,不得参加本次实习考核,但可在补足所缺天数后再给予考核并评定实习成绩。2、基本要求1)利用PROTEL等软件进行硬件设计;2)利用Keil uV2软件完成应用系统软件设计;3)利用PROTEUS软件进行仿真设计;4)完成单片机最小系统和应用系统电路板的焊接;5)对电路进行调试;6)利用stc-isp软件完成在系统编程、下载,并完成系统软件调试;7)题目由指导教师提供;8)要求每个学生单独完成硬件软件设计、仿真、焊接、调试任务;9)写出实习报告,实习报告主要包括以下内容:目录、摘要、关键词、基本原理、方案论证、硬件设计、软件设计(带流程图、程序清单)、仿真结果、实物运行结果照片、结论、参考文献等;10)实习完成后通过答辩;11)答辩时交实习报告电子文档,通过答辩后根据修改意见修改并打印、装订成册。三、实习地点武汉理工大学信息工程学院通信实验室。四、实习时间2012年12月17日-2012年12月30日。五、实习内容1、任务1)利用上述材料完成包含如下系统功能组件的单片机最小系统的设计、焊接、调试(1)键盘一个4X4的矩阵键盘,其中,10个按键是09数字键;另外6个是功能键,用于功能选择和控制。(2)显示电路由6个7段LED数码管组成的显示电路。(3)温度检测利用DS18B20可编程1-Wire数字温度传感器芯片,或利用AD590温度传感器芯片和A/D转换器芯片采集温度温度信号。(4)串口串行通信利用51的串口实现串行通信接口电路。2)完成ISP下载电路的设计、焊接3)完成系统软件的设计,包括程序结构设计、流程图绘制、程序设计,实现如下功能(1)功能选择通过功能选择键,使得单片机处于不同的工作状态并通过LED显示相应的内容。(2)温度显示通过功能选择键选择温度检测、显示后,LED显示温度值。(3)数据输入通过功能选择键选择数据输入后,将通过键盘键入的09按键值显示在LED上,其中,最后输入的显示在最左边,之前键入向右移动一位。(4)数据通信将两个单片机最小系统通过串口连接起来,其中一个作为主系统,另一个作为辅系统。当通过功能选择键选择数据通信后,当在主系统上进行功能(2)、功能(3)的操作时,辅系统的LED上显示与主系统同样的内容。4)利用仿真软件完成系统仿真工作5)在单片机最小系统硬件上实现任务3中规定的功能1 C51系列单片机结构概述单片机即单片微型计算机是将计算机主机CPU、内存和I/O接口集成在一小块硅片上的微型机。一片MCS-51单片机芯片内包含一个8位CPU、振荡器和时钟电路、至少128字节的内部数据存储器可寻址外部程序存储器和数据存储器个64k字节21个特殊功能寄存器4个并行I/O接口2个16位定时/计数器至少5个中断源提供两级中断优先级可实现两级中断服务程序嵌套。具有可位寻址功能有较强的布尔处理能力。各功能单元包括IO端口和定时器/计数器等都由特殊功能寄存器SFR集中管理。MCS-51单片机内部结构框图如图1所示。图1-1单片机内部结构图AT89C52是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的只读程序存储器(PEROM)和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C52单片机适合于许多较为复杂控制应用场合。主要性能参数:·与MCS-51产品指令和引脚完全兼容·8k字节可重擦写Flash闪速存储器·1000次擦写周期·全静态操作:0Hz24MHz·三级加密程序存储器·256×8字节内部RAM·32个可编程IO口线·3个16位定时计数器·8个中断源·可编程串行UART通道·低功耗空闲和掉电模式功能特性概述:AT89C52提供以下标准功能:8k字节Flash闪速存储器,256字节内部RAM,32个IO口线,3个16位定时计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。芯片引脚图如图2所示。图1-2 AT89C52芯片引脚图1) P0口:P0口是一组8位漏极开路型双向IO口,也即地址数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“l”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。2) P1口:P1是一个带内部上拉电阻的8位双向IO口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“l”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。3) P2口:P2是一个带有内部上拉电阻的8位双向IO口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口P2写“l”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。4) P3口:P3口是一组带有内部上拉电阻的8位双向IO口。P3口输出缓冲级 可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“l”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。5) RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。6) ALE:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的l6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。7) PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。8) EA:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000HFFFFH),EA端必须保持低电平(接地)。9) XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。10)10XTAL2:振荡器反相放大器的输出端。2 单片机最小系统2.1 复位电路其最小系统复位电路如图2-1所示。 图2-1复位电路51单片机最小系统复位电路的极性电容的大小直接影响单片机的复位时间,一般采用10到30uF,51单片机最小系统容值越大需要的复位时间越短。51单片机最小系统晶振Y1也可以采用6MHz或者11.0592MHz,在正常工作的情况下可以采用更高频率的晶振,51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。51单片机最小系统起振电容C2、C3一般采用15到33pF,并且电容离晶振越近越好,晶振离单片机越近越好P0口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k。其他接口内部有上拉电阻,作为输出口时不需外加上拉电阻。2.2 振荡电路51单片机有两种振荡方式,为内部振荡和外部振荡,内部振荡方式所得到时钟信号比较稳定,在实际电路中,一般是选用内部振荡方式单片机的XTAL1脚和XTAL2脚之间并接一个晶体振荡器就构成了内部振荡方式。AT89S52单片机内部有一个高增益的反相放大器,XTAL1为内部反相放大器的输入端,XTAL2为内部反相放大器的输出端,在其两端接上晶振后,就构成了自激振荡电路,并产生振荡脉冲,振荡电路输出的脉冲信号的频率就是晶振的固有频率。在实际应用中通常还需要在晶振的两端和地之间各并上一个小电容。实际的内部振荡方式的电路如图2-2所示。图2-2振荡电路图中,电容器C4、C5常称为微调电容,其作用有三个:快速起振、稳定振荡频率、微调振荡频率。AT89S52单片机允许外接033MHz的晶振,电容器C4、C5可取5pF33pF。一般情况下,使用频率较低的晶振时,C1、C2的容量可选大一点。为了减少寄生电容,更好地保证振荡器稳定可靠地工作,在实际装配电路时,晶振X和电容C4、C5应尽可能地安装在XTAL1(图中为X1,单片机第18脚)、XTAL2(图中为X2,单片机第19脚)引脚附近。3 各功能模块3.1 矩阵键盘电路在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。确定矩阵式键盘上何键被按下用“行扫描法”。行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,第一步:判断键盘中有无键按下,将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。第二步:判断闭合键所在的位置,在确认有键按下后,依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 对矩阵键盘还要消除按键在闭合和断开时的抖动。可采用延时方式软件消除抖动。其连接电路如图 3-1所示。图3-1 矩阵键盘电路3.2 数码管显示电路7 段数码管一般由 8 个发光二极管组成,其中由 7 个细长的发光二极管组成数字显示,另外一个圆形的发光二极管显示小数点。当发光二极管导通时,相应的一个点或一个笔画发光。控制相应的二极管导通,就能 显示出各种字符, 尽管显示的字符形状有些失真,能显示的数符数量也有限,但其控制简单,使用也方便。 发光二极管的阳极连在一起的称为共阳极数码管, 阴极连在一起的称为共阴极 数码管,如图 3-2 所示。 图3-2数码管引脚排列7 段数码管每段的驱动电流和其他单个LED发光二极管一样,一般为 510mA;正向电压随发光材料不同表现为 1.82.5V 不等。 7段数码管的显示方法可分为静态显示与动态显示,本设计只用到动态显示,故只介绍动态显示。所谓动态显示就是一位一位地轮流点亮各位显示器(扫描),对于显示器的每一位而言,每隔一段时间点亮一次。虽然在同一时刻只有一位显示器在工作(点亮),但利用人眼的视觉暂留效应和发光二极管熄灭时的余辉效应,看到的却是多个字符“同时”显示。若显示器的位数不大于8位,则控制显示器公共极电位只需一个8位I/O口(称为扫描口或字位口),控制各位LED显示器所显示的字形也需要一个8位口(称为数据口或字形口)。 动态显示器的优点是节省硬件资源,成本较低,但在控制系统运行过程中,要保证显示器正常显示,CPU 必须每隔一段时间执行一次显示子程序,这占用了 CPU 的大量时间,降低了CPU工作效率,同时显示亮度较静态显示器低。综合以上考虑,本设计用共阴数码管做动态显示。用锁存器74HC573扩展P0口,其连接电路图如图3-3。图3-3 数码管显示电路3.3 串行通信电路3.3.1 单片机串行通信方式介绍串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。51 单片机内部有一个全双工串行接口。一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF 的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。从而控制外部两条独立的收发信号线RXD(P3.0)、TXD(P3.1),同时发送、接收数据,实现全双工。串行口控制寄存器SCON(见表3-1)。表3-1 串行口控制寄存器SCON表中各位(从左至右为从高位到低位)含义如下。SM0 和SM1 :串行口工作方式控制位,其定义如表3-2 所示。表3-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(见表3-3) 。表3-3 PCON寄存器表中各位(从左至右为从高位到低位)含义如下。SMOD :波特率加倍位。SMOD=1,当串行口工作于方式1、2、3 时,波特率加倍。SMOD=0,波特率不变。3.3.2 RS-232C接口RS-232C是EIA(美国电子工业协会)1969年修订RS-232C标准。RS-232C定义了数据终端设备(DTE)与数据通信设备(DCE)之间的物理接口标准。其功能特性如图3-4所示。图3-4 RS232C功能特性3.3.4 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。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表3-4所示。本实习所用晶振为11.0592MHz,选用定时器1为波特率发生器工作于方式2,串口通信方式采用方式1,所以定时器1的初值为TH1=0XFD,TL1=0XFD。表3-4 常用波特率与定时器1的参数关系表其串口电路连接图如图3-5所示(因为proteus软件中串口连接不需要电平转换芯片MAX232)。其实物连接图如图3-6所示(J1接RS-232)。图3-5 仿真串口连接图图3-6 串口模块实物连接图3.4 温度模块使用温度传感器,结合单片机电路设计,采用一只DS18B20温度传感器,直接读取被测温度值,之后进行转换,依次完成设计要求。DS18B20温度传感器能直接读出被测温。这一部分主要完成对温度信号的采集和转换工作。数字温度传感器DS18B20把采集到的温度通过数据引脚传到单片机的P2.2口,单片机接受温度并存储,然后通过功能按键和数码管显示当前温度。其连接电路图如图3-7所示(其中标号18B20接单片机P2.2口)。图 3-7 温度模块电路图4 程序设计流程图4.1 发送机程序流程图如图4-1为发送机程序流程图图4-1 发送机程序流程图4.2 发送机程序流程图图4-2为发送机程序流程图图4-2 发送机程序流程图5 仿真电路及实物调试运行图5.1 整体电路仿真图整体电路仿真图如图5-1所示图5-1 整体电路仿真图5.2 各功能模块仿真结果1) 单片机一上电数码管显示全零,结果如图5-2所示。图5-2 清零结果显示 图5-3按键结果显示2) 上电后依次按按键1、2、3,显示仿真结果如图5-3所示。3) 按下清零按键显示结果和图5-2所示结果一致4) 按下切换温度按键,此时温度值为20,数码管显示结果如图5-4所示。图5-4 数码管显示温度5.3 实物运行结果1) 上电后依次按按键数字键,显示仿真结果如图5-6所示。每按一次按键,第一个数码管显示该数字,之前显示的数字右移。图5-5 依次按下数字键后的实物调试图2) 按下切换温度按键,此时温度值为当前室温,数码管显示结果如图5-7所示。图5-6 测试温度值的实物图3) 按下切换数据按键,显示结果和图5-6所示结果一致。4) 实物图正面如图5-8所示,实物图反面如图5-9所示 图5-7 实物图正面图5-8 实物图反面6 心得体会 通过这次课程设计,加强了我们动手、思考和解决问题的能力。在设计过程中,经常会遇到这样那样的情况,就是心里想着这样的程序可以行得通,但实际接上总是实现不了,因此耗费在这上面的时间用去很多。我觉得做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了。而且还可以记住很多东西。比如一些程序的调用,通过动手实践让我们对调用映象深刻。所以这个课程设计对我们的作用是非常大的。设计程序时,我发现只有细心才能做到完美,首先是参数设置,还有结果显示部分的设置,兼顾到方方面面去考虑是很需要的,否则只是一纸空话。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。7 参考文献1 姚燕南微型计算机原理西安:西安电子科技大学出版社,20022 艾德才微型接口技术编程北京:清华大学出版社,20023 冯博琴. 单片微型计算机原理与接口技术.北京:清华大学出版社,20004 薛钧毅. 单片微型计算机原理及应用.西安:西安交通大学出版社,20055 李群芳. 单片微型计算机与接口技术.北京:电子工业出版社,20086 郭天祥. 51单片机C语言教程. 北京:电子工业出版社,20097 谭浩强. C语言设计. 北京:清华大学出版社,19918 附录附录1:实习日记12月17、18日:看书学习,研究实现方法。12月21、22日编写温度显示程序。利用DS18B20检测温度,显示在数码管上。编写之前仔细研读了郭天祥新概念51单片机C语言教程。了解了DS18B20的工作原理,以及操作方法。并在单片机开发板上实现了温度检测。过程其实并不简单,首先是书上并没有详细介绍DS18B20的工作时序图,而且程序注释较少,所以理解起来比较吃力。通过上网查资料以及向同学请教等途径最终弄清了每一步操作。但是编译的时候总是通不过,经过多次检查才排除问题。深深体会到写程序要一丝不苟,不能有丝毫大意,就算错一个标点符号,也是一个很大的问题。12月24日编写串口发送、接受程序。测试中出现的问题:发送后接收到数据乱码,显示温度时差个小数点。排查错误后发现发送接收程序中的显示表不对应,接收表中未定义带小数点的数据。12月25日将数码管显示程序、温度转换模块程序、矩阵键盘扫描程序。串口发送程序组装为一个整体的发送机程序并重新修改接收机程序,使之与发送机程序相对应。由于程序基本都不用改变什么,只是调用子程序而已,所以在编写时出现了一些书写方面的错误,通过软件编译均可轻松解决。至此,程序编写工作完成。12月27日买元件并焊接电路。经过白天一整天的奋战,到晚上终于完成了电路的焊接,调试的时候发现了不少问题。数码管不是没显示就是只有几个数码管显示,而且不固定。复位键完全没用,矩阵键盘工作也不稳定。检查电路良久,未能排除故障。请了几位高人,奋战到半夜,也没弄排除故障。12月28日到30日由于昨天所焊电路不能正常工作,一大早起来到广埠屯又买了一套元件,下午重新焊。教训深刻,丝毫不敢马虎。这次焊接采取了一种比较保守的方法,放弃了跳采用排阵加杜邦线的方法,出错的概率较低,而且每焊接一次即用万用表测量一次。即便如此晚上测试的时候还是不能正常工作,经检测是矩阵键盘焊接有误,纠正之后还是不能可正常工作。一上电电路中只有电源指示灯和P0.0,P0.1指示灯都亮,数码管无反应,经检查发现时复位电路焊接出问题,导致RST引脚为高,重新焊接复位电路;之后数码管依旧不亮,但P0口的两指示灯正常工作,说明程序正常运行,最后排查发现与电源正相连的某线虚焊排查后数码管回复正常,只是最后三位的g段不亮,最后排查发现还是虚焊问题;转换到显示温度,温度显示乱码,最后排查发现温度引脚未接入单片机,接入后电路板运行正常,所要求功能均实现。从这次设计再次感受到细心的重要性,细心一点可以省去很多步骤。12月31日写实习报告。附录2:原件清单表1-1 元件清单表序号名称数量1铜板2块2单片机STC89C521片3晶振12MHz1个430PF瓷片电容2个510k/0.25W电阻2个610uF/16V电解电容1个72k/0.25W电阻1个810k/9脚排阻1个95V/500mA直流电源1个1074HC5732片11MAX2321片12104电容5个13排针、按钮、LED、导线等若干附录3:c语言程序/*发送机程序*/#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula=P26;sbit wela=P27;sbit ds=P22; /温度传感器信号线uchar a=0,0,0,0,0,0;uchar fun;uchar send_num=0; /声明6个段选并全部关闭 uint tempe; /定义整型温度数据 float f_tempe;uchar code table=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xbf,0x86,0xdb,0xcf, /带小数点编码 0xe6,0xed,0xfd,0x87,0xff,0xef, 0x40,/显示一横 0x00 ;void display(uchar num) / 把最近输入的六个数字倒序存入数组,实现数字右移 int i; for(i=5;i>0;i-) ai=ai-1; a0=num;void delayms(uint xms) uint i,j; for(i=xms;i>0;i-) /i=xms,即延时约x毫秒 for(j=110;j>0;j-) ; void matrixkeyscan()/矩阵键盘扫描 uchar temp,key; P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xee:key=0;break;case 0xde:key=1;break;case 0xbe:key=2;break;case 0x7e:key=3;break; while(temp!=0xf0) /等待按键释放 temp=P3; temp=temp&0xf0; display(key); /*/ P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xed:key=4;break;case 0xdd:key=5;break;case 0xbd:key=6;break;case 0x7d:key=7;break; while(temp!=0xf0) /等待按键释放 temp=P3; temp=temp&0xf0; display(key); /*/ P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xeb:key=8;break;case 0xdb:key=9;break;case 0xbb:key=10;break;case 0x7b:key=11;break; while(temp!=0xf0) /等待按键释放 temp=P3; temp=temp&0xf0; if(key=8)|(key=9) display(key); /*/ P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xe7:fun=12;break;case 0xd7:fun=13;break;case 0xb7:fun=14;break;case 0x77:fun=15;break; while(temp!=0xf0) /等待按键释放 temp=P3; temp=temp&0xf0; /display(key); void display2() /数码管动态显示 六个数码管循环显示 int j=0; uchar tablew6=0xfe,0xfd,0xfb,0xf7,0xef,0xdf; /声明了六个位选每个对应打开的位选码 for(j=0;j<=5;j+) dula=0;