收藏 分销(赏)

单片机实习报告.doc

上传人:Fis****915 文档编号:552021 上传时间:2023-12-06 格式:DOC 页数:52 大小:2.40MB 下载积分:6 金币
下载 相关 举报
单片机实习报告.doc_第1页
第1页 / 共52页
单片机实习报告.doc_第2页
第2页 / 共52页


点击查看更多>>
资源描述
单片机实习报告 目录 摘要 2 Abstract 3 1.实习任务与要求 4 1.1实习目的 4 1.2实习任务 4 1.3实习要求 5 2.基本原理 6 2.1数字时钟基本原理 6 2.2温度计工作基本原理 6 2.3频率计工作基本原理 6 3.方案论证 7 3.1键盘显示接口部分 7 3.2温度计部分 7 4.硬件设计 9 4.1最小系统设计 9 4.1.1晶振振荡器电路 9 4.1.2复位电路 9 4.2下载电路 11 4.3键盘电路 12 4.4显示电路 13 4.4.1数码管结构 13 4.4.2LED显示器工作原理 14 4.5温度传感器电路设计 16 4.5.1DS18B20的工作原理 16 4.5.2DS18B20的测温原理 19 4.6总电路 21 5.软件设计 22 5.1主程序流程图 22 5.2定时器0中断处理流程图 23 5.3时钟子程序 24 5.4温度子程序 25 5.5双机通信 26 5.6频率计子程序 28 5.7程序清单 28 6.仿真分析 41 6.1数字时钟仿真分析 41 6.2温度计仿真 43 6.3频率计仿真 45 7.实物运行照片 48 8 小结 51 参考文献 52 摘要 本次单片机实习的主要目的是巩固单片机的理论知识及锻炼实际动手能力。主要任务是在最小系统的基础上设计键盘显示电路,然后编程实现数字时钟,数字温度计和数字频率计。其中数字时钟要有调时调分调秒的功能;而温度计能完成串行通信,将温度显示在另一个单片机上.最后要求整个系统能通过按键实现数字时钟与温度计和频率计之间的相互切换。在实习过程要记录每天的实习内容包括方案的论证,硬件设计,软件设计,仿真分析及实物制作等。 关键词:单片机,数字时钟,温度计,频率计 Abstract The main goal of the Single Chip Microcomputer practice is to renforce the speculative knowledge and train the ability of handwork. The main task is to design the keyboard display circuit on the base of DIY.Then we should programme to realize the digital clock,digtal thermometer and digital frequency meter.what’more,the digital clock is required to have the function of adjust the second,muinute and hour.The Digtal thermometer is required to accomplish the communication of two Single Chip Microcomputers,the temperature can be displayed on the second Single Chip Microcomputer.At last,the whole system is required to realize the mutual switch between the clock and the thermometer ,the clock and the frequency meter.In the practice course ,we should write down the practice contents everyday,including the choice of scheme ,hardware design,software design,simuation analysis,making material object and so on . Key words: Single Chip Microcomputer, digital clock, digtal thermometer , digital frequency meter 1.实习任务与要求 1.1实习目的 1、巩固《单片机原理与应用》理论课的理论知识; 2、熟悉单片机应用系统的硬件设计及软件设计的基本方法; 3、将《单片机原理与应用》理论课的理论知识应用于实际的应用系统中; 4、训练单片机应用技术,锻炼实际动手能力。 1.2实习任务 (1)利用上述材料完成单片机最小系统的设计、焊接、调试; (2)完成ISP下载电路的设计、焊接; (3)完成应用系统扩展电路部分的设计、焊接、调试,应用系统扩展电路的具体要求如下: 1)键盘、显示电路 利用单片机最小系统、6个7段LED数码管、12个按键,设计制作一个键盘、显示电路。可以使用8279键盘显示接口电路,也可以使用单片机的并行接口作为键盘显示接口。 2) 数字时钟 在键盘、显示电路的基础上完成一个数字时钟的设计,完成以下功能: a. 要求以24小时计时方式显示时、分、秒; b. 时、分、秒可以通过按键分别调整。 3) 数字温度计 在上题的硬基础上,制作一个数字温度计。完成以下功能: a. 利用DS18B20可编程1-Wire数字温度传感器芯片,或利用AD590温度传感器芯片和A/D转换器芯片采集温度温度信号; b. 当按下键盘上的温度显示按键时将实时温度信息显示在LED显示器上,当按下键盘上的时钟显示按键时,恢复时钟的正常显示; c. 通过串行通信的方式,将采集到的实时温度信息送至第二个单片机系统,并在二个单片机系统显示实时温度。 4) 数字频率计 在上题的硬基础上,制作一个数字频率计。完成以下功能: a. 利用MCU设计一个数字频率计,用于检测0~500kHz周期信号的频率,输入信号幅度范围:0.1~10V; b. 当按下键盘上的频率显示按键时将测量的频率信息显示在LED显示器上,当按下键盘上的时钟显示按键时,恢复时钟的正常显示; (4)利用仿真软件完成系统仿真工作; (5)完成系统软件的设计,包括程序结构设计、流程图绘制、程序设计。 1.3实习要求 1)利用PROTEL等软件进行硬件设计; 2)利用Keil uV2软件完成应用系统软件设计; 3)利用PROTEUS软件进行仿真设计; 4)完成单片机最小系统和应用系统电路板的焊接; 5)对电路进行调试; 6)利用stc-isp软件完成在系统编程、下载,并完成系统软件调试; 7)题目由指导教师提供; 8)要求每个学生单独完成硬件软件设计、仿真、焊接、调试任务; 9)写出实习报告,实习报告主要包括以下内容:目录、摘要、关键词、基本原理、方案论证、硬件设计、软件设计(带流程图、程序清单)、仿真结果、实物运行结果照片、结论、参考文献等; 10)实习完成后通过答辩; 11)答辩时交实习报告电子文档,通过答辩后根据修改意见修改并打印、装订成册。 2.基本原理 2.1数字时钟基本原理 数字时钟是利用单片机的内部的定时/计数器工作与定时方式,对机器周期计数形成基准时间(如10ms),然后用另外一个计数器或软件计数的形式对基准时间里德计数形成秒(如对10ms计数100次),“秒”计数60次形式“分”,“分”计数60次形成“时”,然后通过软件程序使它们的内容在相应的位置显示出来。在具体设计时定时器采用中断方式工作,对时钟的形成在终中断程序中实现,在主程序中只是对定时/计数器的定义初始化,调用显示程序。并在设计中加入了按键,可以通过按键对时,分,秒进行调整。 2.2温度计工作基本原理 在单片机电路设计中,大多都是使用传感器,所以可以采用一个温度传感器,它会将温度转换成数字量后存贮在自身内部,将其连在单片机的一个IO口,即一种单总线串行接口,然后通过软件程序在数码管或液晶屏上显示出来就可以直接读取被测温度值。 2.3频率计工作基本原理 频率计的基本设计原理是直接用十进制数字显示被测信号频率。所谓频率,就是周期信号在单位时间(1s)内变化的次数。若在一定时间间隔T内测得这个周期信号的重复变化次数N,则其频率可表示为f=N/T。即可利用单片机内部的定时/计数器来对外部输入脉冲进行计数,从而测得频率。 3.方案论证 3.1键盘显示接口部分 方案一: 使用8279键盘显示接口电路,即键盘和显示器通过8279芯片然后再接到单片机上,8279可以通过对键盘的自动扫描,将键盘信号存入FIFO RAM里,再通过显示子程序显示按键的信息。具体来说,扫描输出线,通过138译码后,作为列与回送线交叉成键,输出数据分别用三位来体现扫描码和回送码,读键时屏蔽高两位,使键值正好等于输出数据的查表值,从而在数码管上显示出来。 方案二: 使用单片机的并行接口作为键盘显示接口,即键盘引脚直接接到单片机的IO口上。 从以上两种方案可以看出,方案一占用的单片机IO口少,精度高,稳定性好,但导致整个电路所用芯片增加,成本提高。相比较而言方案二虽然占用单片机的IO口较多,但这个可以通过设计矩阵键盘来解决,并且也较方案一所用的芯片少,降低了成本。综合考虑选择方案二。 3.2温度计部分 方案一: 采用热电偶温差电路测温,温度检测部分可以使用低温热偶,热电偶由两个焊接在一起的异金属导线所组成,热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。数据采集部分则使用带有A/D 通道的单片机,在将随被测温度变化的电压或电流采集过来,进行A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。热电偶的优点是工作温度范围非常宽,且体积小,但是它们也存在着输出电压小、容易遭受来自导线环路的噪声影响以及漂移较高的缺点,并且这种设计需要用到A/D 转换电路,感温电路比较麻烦。系统主要包括对A/D0809 的数据采集,自动手动工作方式检测,温度的显示等,这几项功能的信号通过输入输出电路经单片机处理。此外还有复位电路,晶振电路,启动电路等。故现场输入硬件有手动复位键、A/D 转换芯片,处理芯片为51 芯片,执行机构有4 位数码管、报警器等。 方案二: 采用数字温度芯片DS18B20 测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0—100 摄氏度时,最大线形偏差小于1 摄氏度。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89S51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用51 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20控制工作,还可以与PC 机通信上传数据,另外AT89S51 在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。【1】 该系统利用AT89S51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间,并可以利用AT24C16芯片作为存储器件,以此来对某些时间点的温度数据进行存储,利用键盘来进行调时和温度查询,获得的数据可以通过MAX232芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。 从以上两种方案,容易看出方案一的测温装置可测温度范围宽、体积小,但是线性误差较大。方案二的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单,故本次设计采用了方案二。 4.硬件设计 4.1最小系统设计 4.1.1晶振振荡器电路 单片机是一个复杂的同步时序电路,为了保证同步工作方式的实现,其所有的工作都在唯一的时钟信号控制下严格的按时序进行的。时序就是单片机内部以及内部与外部互联必须遵守的规律。单片机的时序可以通过两种方式产生:内部振荡方式和外部振荡方式。外部振荡方式需要引入外部时钟信号作为单片机的时钟信号,它可以使各单片机之间的时钟信号同步,常用于多片单片机组成的系统中,而本次设计只需使用一片单片机,所以本次系统设计采用了内部振荡方式。 单片机内部有一个用于构成振荡器的高增益反相放大器,引脚X1和X2分别是该放大器的输入端和输出端。这个放大器与作为反馈原件的片外石英晶体及电容一起构成一个自激振荡器。电容C1和C2通常取30pF,对振荡器有微调的作用。晶振的实际频率与标称频率的关系为: ƒx为实际频率,ƒ0为标称频率,ƒ0范围是1.2MHz~12MHz。所以本设计晶振Y采用12HMz,电容C1和C2取30pF,则ƒx为12MHZ。 图4-1振荡电路 4.1.2复位电路 单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。除了进入系统的正常初始化之外,由于程序运行出错或者操作出错而使单片机系统处于死锁状态,为了摆脱死锁状态,也需要使单片机重新启动。 单片机的复位操作一般有上电自动复位和按键电平复位两种方式。本设计采用上电自动复位和按键电平复位都有的复位电路。 手动按键复位需要人为在复位输入端RESET上通过按钮加入高电平,其复位过程是:当按下按键S时,RESET端直接与VCC相连,从按下按键到松开按键的时间内,能使RESET端维持一段时间的高电平,这段时间的高电平使单片机复位。当按键被松开后,RESET端回到低电平,单片机系统完成复位,恢复正常工作状态。 上电复位电路是在RESET复位输入引脚上接一电容至VCC端,下接一个电阻到地。上电复位的工作过程是:在系统上电瞬间,电容相当于短路,电源电压通过电容加给RESET引脚以高电平信号,此高电平信号随着VCC对电容的充电过程而逐渐回落,在其高电平期间,系统复位;当电容两端电压达到电源电压时,电容充电电流为零,电容相当于开路,RESET端为低电平,单片机复位完成,恢复正常工作状态。 这里要注意的是,要想实现复位,必须保证复位信号高电平持续时间大于两个机器周期,而。 本设计的单片机机器周期为:。而,所以满足要求。 图4-2复位电路 图4-3 最小系统电路 4.2下载电路 MAX232是电平转换芯片。1970年,美国电气学会规定“RS232”串口通信协议。规定逻辑“1”,-5—-15V;逻辑“0”,+5—+15.噪声容限为2V.要实现利用串口与单片机进行通信,就要进行电平转换,把标准转化成单片机可以识别的。MAX220—MAX249都是电平转换芯片,在单片机最小系统中,使用MAX232. 图4-4下载电路 4.3键盘电路 键盘分编码键盘和非编码键盘,键盘上闭合键的识别由专用的硬件编码器实现,并产生按键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的称为非编码键盘,在单片机组成的各种系统中,用的最多的是非编码键盘,也有用到编码键盘的,我们这里用的就是非编码键盘。 在这种非编码键盘的单片机系统中,键盘处理程序首先执行有无按键按下的程序段,当确认有按键按下后,下一步就要识别哪一个按键被按下,对键的识别常采用逐行(逐列)扫描的方法。 单片机检测按键是否被按下的依据是检测与该键对应的I/O口是否为低电平。 判断键盘哪一个键被按下。方法是:一次给行线送低电平,然后查所有列线状态,称为行扫描,如果全为1,则所按下键不在此行,如果不全为1,则所按下键必在此行,而且是在与零电平列线相交的交点上的那个键。 本设计中有2*4矩阵键盘和独立键盘。矩阵键盘可以有效的减少键盘与单片机接口时所占用的I/O接口。 图4-5键盘电路 如图所示,2*4矩阵键盘的行线和列线者接到了单片机的P3口。S1,S2,S3,S4为独立键盘。 4.4显示电路 4.4.1数码管结构 数码管内部有8个发光二极管,公共端由8个发光二极管的阴极并接而成,正常显示时公共端接低电平(GND),各发光二极管是否点亮取决于a-dp各引脚上是否是高电平。 LED数码管的外形结构如图4-5,外部有10个引脚,其中3, 8脚为公共端也称位选端,其余8个引脚称为段选端,当要使某一位数码管显示某一数字((0-9中的一个)必须在这个数码管的段选端加上与数字显示数字对应的8位段选码(也称字形码),在位选端加上低电平即可。 LED有共阴极和共阳极两种。如图4-5所示。 二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管。当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。 符号和引脚 共阴极 共阳极 图4-6LED结构图 表4-1LED显示段码 字型 共阳极段 共阴极段 字型 共阳极段 共阴极段 0 C0H 3FH 9 90H 6FH 1 F9H 06H A 88H 77H 2 A4H 5BH B 83H 7CH 3 B0H 4FH C C6H 39H 4 99H 66H D A1H 5EH 5 92H 6DH E 86H 79H 6 82H 7DH F 84H 71H 7 F8H 07H 空白 FFH 00H 8 80H 7FH P 8CH 73H 4.4.2LED显示器工作原理: (1)LED静态显示方式 LED显示器工作于静态显示方式时,各位的共阴极连接在一起并接地;每位的段码分别与8位的锁存器输出相连。各个LED的显示字符一经确定,相应锁存的段码输出将维持不变,直到送入另一个字符为止,故静态显示器的亮度较高。 (2)LED动态显示方式 在多位LED显示时,为简化硬件电路,通常将所有的段码线相应段并联在一起,由1个8位I/0口控制,形成段码线的多路复用,而各位的共阴极分别由相应的I/O线控制,形成各位的分时选通。设计中采用八个共阴LED管,其中段码线采用CD4511译码占用4位I/O口,而位选信号使用74LS138占用3个I/O口,则只要7个I/O口。由于各位的段码线并联,4位I/O口输出的段码对各个显示位来说都是相同的。因此,在同一时刻,如果各位选线都处于选通状态的话,8位LED将显示相同的字符。若要各位LED能够同时显示出与本位相应的显示字符,就必须采用动态显示方式,即在某一时刻,只让某一位的位选线处于选通状态,而其它各位的位选线处于关闭状态,同时,段码线上输出相应位要显示的字符的段码。这样,在同一时刻,8位LED中只有选通的那1位显示出字符,而其他7位则是熄灭的。同样,在下一时刻,只让下一位的位选线处于选通状态,而其他各位的位选线处于关闭状态,在段码线上输出将要显示字符的段码,则同一时刻,只有选通位显示出将要显示的字符,而其他各位则是熄灭的。如此循环下去,就可以使各位显示出将要显示的字符。虽然这些字符是在不同时刻出现的,而在同一时刻,只有一位显示,其他各位熄灭,但由于LED显示器的余辉和人眼的视觉暂留作用,只要每位显示间隔足够短,则可以造成多位同时亮的假象,达到同时显示的效果。 发光二极管从导通到发光有一定的延时,导通时间太短,则发光太弱,人眼无法看清;但也不能太长,因为要受限于临界闪烁频率,而且此时间越长,占用CPU时间也越多。另外,显示位数增多,也将占用大量的CPU时间,因此动态显示的实质是以牺牲CPU时间来换取器件的减少。 本次设计中,6位LED七段数码管采用共阴极接法。 图4-7显示电路 如图所示,单片机的P0口通过U2锁存器(74HC573)与数码管相连,来实现位选;通过U3与数码管相连来实现段选。 4.5温度传感器电路设计 4.5.1DS18B20的工作原理 根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤: 1. 每一次读写之前都必须要对DS18B20进行复位; 2. 复位成功后发送一条ROM指令; 3. 最后发送RAM指令,这样才能对DS18B20进行预定的操作。 复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待15~60微秒左右后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。其工作时序包括初始化时序、写时序和读时序,具体工作方法如图4-8,4-9,4-10所示。 (1) 初始化时序 图4-8初始化时序 总线上的所有传输过程都是以初始化开始的,主机响应应答脉冲。应答脉冲使主机知道,总线上有从机设备,且准备就绪。主机输出低电平,保持低电平时间至少480us,以产生复位脉冲。接着主机释放总线,4.7KΩ上拉电阻将总线拉高,延时15~60us,并进入接受模式,以产生低电平应答脉冲,若为低电平,再延时480us。 (2) 写时序 图4-9 写时序 写时序包括写0时序和写1时序。所有写时序至少需要60us,且在2次独立的写时序之间至少需要1us的恢复时间,都是以总线拉低开始。写1时序,主机输出低电平,延时2us,然后释放总线,延时60us。写0时序,主机输出低电平,延时60us,然后释放总线,延时2us。 (3) 读时序 图4-10 读时序 总线器件仅在主机发出读时序是,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。所有读时序至少需要60us,且在2次独立的读时序之间至少需要1us的恢复时间。每个读时序都由主机发起,至少拉低总线1us。主机在读时序期间必须释放总线,并且在时序起始后的15us之内采样总线状态。主机输出低电平延时2us,然后主机转入输入模式延时12us,然后读取总线当前电平,然后延时50us。 当主机收到DSl8B20 的响应信号后,便可以发出ROM 操作命令之一,这些命令如表4-2所示。RAM指令集如表4-3所示。 主机控制DS18B20完成温度转换过程是:每一次读写之前都要对DS18B20进行复位,即将数据总线下拉500us,然后释放,DS18B20收到信号后等待16-60us左右,之后发出60-240us的存在低脉冲,主CPU收到此此信号表示复位成功;复位成功后发送一条ROM指令,然后发送RAM指令,这样才能对DS18B20进行预订的读写操作。 表4-2 ROM操作命令 指令 约定代码 功能 读ROM 33H 读DS18B20中的编码 符合ROM 55H 发出此命令后,接着发出64位ROM编码,访问单线总线上与该编辑相对应的DS18B20使之做出响应,为下一步对该DS18B20的读写作准备 搜索ROM 0F0H 用于确定挂接在同一总线上的DS18B20个数和识别64位ROM地址,为操作各器件作准备 跳过ROM 0CCH 忽略64位ROM地址,直接向DS18B20发送温度变换指令 告警搜索命令 0ECH 执行后,只有温度跳过设定值上限或下限的片子才能做出反应 表4-3RAM指令集 指令 约定代码 功能 温度转换 44H 启动DS18B20进行温度转换 读暂存器 0BEH 读暂存器9个字节内容 写暂存器 4EH 将数据写入暂存器的TH、TL字节 复制暂存器 48H 把暂存器的TH、TL字节写到E2RAM中 重调E2RAM 0B8H 把E2RAM中的TH、TL字节写到暂存器TH、TL字节 读供电方式 0B4H 启动DS18B20发送电源供电方式的信号给主CPU 4.5.2DS18B20的测温原理 DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将最低温所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在最低温所对应的一个基数值。 减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。 减法计数器 斜坡累加器 减到0 减法计数器 预 置 低温度系数 振 荡 器 高温度系数 振 荡 器 计数比较器 预 置 温度寄存器 减到0 图4-11测温原理图 初始化 DS18B20 跳过ROM 匹配 温度变换 延时1S 跳过ROM 匹配 读暂存器 转换成显示码 数码管显示 图4.12测温流程图 图4-13温度传感电路 4.6总电路 图4-14总电路图 (1)当给单片机上电后,其为时钟模式,按一次S1实现对“秒”的调整,按两次S1实现对“分”的调整,按三次S1实现对“时”调整;按S2 实现增1,按S3实现减1. (2)按S2实现时钟到温度计的切换,按S4恢复时钟。 (3)按S3实现时钟到频率计的切换,按S4恢复时钟。 5.软件设计 5.1主程序流程图 开始 初始化 调用显示时钟函数 调用键盘扫描函数 调用温度显示函数 调用频率计函数 S2是否按下 S4是否按下 S3是否按下 显示时钟 Y Y Y N N 5.2定时器0中断处理流程图 5.2中断程序流程图 重装初值 保护现场 计数单元加1 到1秒? N 秒加1 N 到60秒? 秒清0,分加1 N 到60分? 分清0,时加1 N 到24时? 小时清0 恢复现场 中断返回 5.3时钟子程序 开始 调用键盘扫描函数 S1是否按下 调用延时函数 S1按下1次 S1按下2次 S1按下3次 S2是否按下 S3是否按下 调秒 调分 调时 加1 减1 Y Y 5.4温度子程序 设置堆栈指针 将温度转换为BCD码 发读存储器命令 读温度数据 复位DS18B20 发跳过ROM命令 显示缓冲区初始化 更新数据缓冲区 延时 发温度转换命令 复位DS18B20发跳过ROM命令 开始 显示温度 双机通信 5.5双机通信 (1)发送 开始 T1初始化,启动T1工作 设定串行工作方式 置发送数据块首址 数据块长度计数器 结束 T1=1 全部数据发送完 清T1 修改地址指针和 数据块长度计数器 发送数据 N N Y Y (2)接收 开始 T1初始化,启动T1工作 设定串行工作方式 并设定允许接收模式 置发送数据块首址 数据块长度计数器 结束 R1=1 全部数据接收完 清R1 修改地址指针和 数据块长度计数器 接收数据 N N Y Y 5.6频率计子程序 开始 频率测量 计数器计数 测量数据显示 5.7程序清单: 1.主程序 #include<reg52.h> #include<stdio.h> #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; sbit key1=P3^4; sbit key2=P1^7; sbit key3=P3^6; sbit key4=P3^7; sbit ds=P2^2; uint temp; float f_temp; uchar buf[3]; uchar i,num,hour,min,sec,num1,num2,num3,num4; unsigned long int fre; uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //带小数点的0~9编码 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //不带小数点的0~9的编码 void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void display(uchar num1,uchar dat) //数据显示程序 { //num是第几个数码管,dat是要显示的数字 uchar i; i=0xff; i=i&(~((0x01)<<(num1))); //用I来存储位选数据,只有一位为0 wela=1; P0=i;wela=0;P0=0xff; dula=1;P0=table[dat]; //编码赋给P0口 dula=0; delayms(3); } void dis_time(uchar hour,uchar min,uchar sec) //显示时间函数 { display(0,hour/10);display(1,hour%10+10); display(2,min/10);display(3,min%10+10); display(4,sec/10);display(5,sec%10); } void keyscan() { if(key1==0) { delayms(10); if(key1==0) { num=4; TR0=0;num--;while(!key1);delayms(10);while(!key1); while(num) { dis_time(hour,min,sec) ; if(key1==0){delayms(10);if(key1==0)num--;}while(!key1); if(key4==0){delayms(10);if(key4==0)num=0;}while(!key4); switch(num) { case 3:if(key2==0){delayms(10);if(key2==0){sec++;if(sec==60)sec=0;while(!key2)display(4,sec/10);display(5,sec%10);}} if(key3==0){delayms(10);if(key3==0){sec--;if(sec==255)sec=59;while(!key3)display(4,sec/10);display(5,sec%10);}} break; case 2:if(key2==0){delayms(10);if(key2==0){min++;if(min==60)min=0;while(!key2)display(2,min/10);display(3,min%10+10);}} if(key3==0){delayms(10);if(key3==0){min--;if(min==255)min=59;while(!key3)display(2,min/10);display(3,min%10+10);}} break; case 1: if(key2==0){delayms(10);if(key2==0){hour++;if(hour==24)hour=0;while(!key2)display(0,hour/10);display(1,hour%10+10);}} if(key3==0){delayms(10);if(key3==0){hour--;if(hour==255)hour=23;while(!key3)display(0,hour/10);display(1,hour%10+10);}} break; } } TR0=1; } } } void init_t() { TH0=(65536-4597)/256; TL0=(65536-4597)%256; TMOD=0x51; EA=1; ET0=1;ET1=1; TR0=1;TR1=0; } void dsreset() //DS18B20复位,初始化函数 { uint i;ds=0;i=103; while(i>0)i--; ds=1;i=4;while(i>0)i--; } bit tempreadbit(void) //读1位数据函数 { uint i;bit dat;ds=0;i++; //i++起延时作用 ds=1;i++;i++; dat=ds;i=8;while(i>0)i--; return(dat); } uchar tempread(void) //读一个字节数据函数 { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tempreadbit(); dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在dat里 } return(dat); } void
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服