1、2010 级电子信息工程电子信息工程专业单片机原理及应用课程设计报告设计题目 单片机频率计的设计程海龙刘永姓名及学号何晓20100342040学院 工程技术学院专业 电子信息工程班级 10.2班指导老师 方飞2013 年 5 月 22 号- 1 -目录、 设计题目及要求1、设计题目基于单片机的数字频率计设计。2、设计要求(1)基本要求用单片机的定时器/计数器功能,外部扩展 8 位 LED 数码管,要求累计每秒进入单片机的外部脉冲个数,用 LED 数码管显示出来;频率范围:10Hz10MHz 方波(TTL 电平),并显示出来;要求画出单片机硬件系统框图,电路原理图,软件流程图。(2)发挥部分频率
2、上扩至 10KHz(分频后再测量) ;10mV 正弦信号频率测量(设计信号调理电路) ;自制稳压电压。指导教师签名: 年 月 日二、指导教师点评指导教师签名: 年 月 日三、成绩报告(70%): 分,作品(30%): 分,总分: 分验收盖章 年 月 日- 2 -1 引言 - 4 -2 芯片简介 - 4 -2.1 单片机 - 4 -2.1.1 单片机特点及引脚图 .- 4 -2.1.2 单片机引脚说明 .- 6 -2.2 其它芯片资料 - 8 -2.2.1 74HC573- 8 -2.2.2 74HC138- 8 -3 方案选择与论证 - 8 -3.1 方案比较 - 8 -3.2 方案论证 -
3、9 -3.3 方案选择 - 10 -4 频率计系统原理概述 - 10 -4.1 频率计方 案的概述 - 10 -4.2 系统设计结构图 - 11 -4.3 显示功能描述 - 11 -5 系统硬件设 计 - 11 -5.1 时钟电路 - 11 -5.2 复位电路 - 12 -5.3 显示电路 .- 13 -5.4 放大整形电路 .- 14 -6 软件设计 - 15 -6.1 软件实现原理 .- 15 -6.2 软件流程图 .- 15 -7 系统调试 - 16 -8 总结 - 16 -9 致谢 - 17 -10 参考文献 - 17 -11 附录 18摘要随着电子信息产业的不断发展,信号频率的测量在
4、科技研究和实际应用中- 3 -的作用日益重要。传统的频率计通常是用很多的逻辑电路和时序电路来实现的,这种电路一般运行较慢,而且测量频率的范围较小。考虑到上述问题,本课题基于单片机设计频率计。首先,我们把待测信号经过放大整形,然后把信号送入单片机的定时计数器里进行计数,获的频率值,最后把测得的频率数值送入显示电路里进行显示。本设计从频率计的原理出发,介绍了基于单片机的频率计的设计方案,选择了实现系统的各种电路元器件。关键字:单片机 频率计 测量- 4 -1 引言频率仪器是数字电路中一个典型应用,实际的硬件设计用到的器件较多,联机比较复杂,而且会产生比较大的延迟。随着复杂可编程逻辑器件的广泛应用,
5、将使整个系统大大简化。提高整体性能,它是直接用十进制数字来显示被测信号频率的一种测量装置。它不仅可以测量正弦波,方波,三角波,尖脉冲信号和其他具有周期的信号的频率,而且还可以测量他们的周期。经过改装,可以测量脉冲宽度,做成数字式脉宽测量仪,可以测量电容做成数字电容测量仪;在电路中增加传感器,还可以做成数字脉搏仪,计价器等。因此数字频率计在测量物理量方面有广泛应用。本设计在测量频率时分别采用了测周法和测频法。在频率小于 100Hz 时用测周法,在频率大于 100Hz 时用测频法。测周法的原理实际上是测量一个周期所用时间的多少,再取周期的倒数,就是频率了。测周法适用于低频段的测量,当频率较高时,采
6、用测周法误差会比较大。测频法的原理实际上是测量单位时间内的周期数,所测量即是频率,测频法适用于较高频段的测量,当测量的频率较低时,采用测频法误差会比较大。本课题的任务是设计一个基于单片机技术的数字频率计。主要介绍了整形电路,控制电路和显示电路的构成原理,以及测周法和测频法的基本方法,并且进行了相应的软硬件设计。2 芯片简介2.1 单片机2.1.1 单片机特点及引脚图AT89S52 是一种低功耗、高性能 CMOS8 位微控制器,具有 8K 在系统可编程 Flash 存储器。AT89S52 使用 Atmel 公司高密度非易失性存储器技术制造,与工业 80C51 产品指令和引脚完全兼容。片上 Fla
7、sh 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,AT89S52 拥有灵巧的 8 位 CPU 和在系统可编程 Flash,使 AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52 具有以下标准性功能:- 5 -1、与 MCS-51 单片机产品兼容;2、8K 支持在线编程(ISP)的 FLASH 结构程序存储器,1000 次擦写寿命;3、全静态操作:0Hz-33MHz;4、三级加密程序存储器;5、32 个可编程 I/O 口线;6、3 个 16 位定时器/计数器;7、6 个中断源;8、全双工 UART 串行通道;9、低功耗空闲和掉电模式;10、掉电后中
8、断可唤醒;11、看门狗定时器;12、双数据指针;13、掉电标识符。工业级产品,温度范围(-40C 到 85C),PU 为无铅环保产品。另外,AT89S52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU 停止工作,允许 RAM、定时器/计数器、串口中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。其 PDIP 图如下图 2-1 所示。图 2-1 AT89S52 单片机的引脚配置图- 6 -2.1.2 单片机引脚说明P0 口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动8
9、 个 TTL 逻辑电平。对 P0 端口写“1” 时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0 口也被作为低 8 位地址/数据复用。在这种模式下,P0不具有内部上拉电阻。在 flash 编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,P1 输出缓冲器能驱动 4 个 TTL 逻辑电平。对 P1 端口写“1” 时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL) 。P2 口:P2 口是一个具有内部上拉电
10、阻的 8 位双向 I/O 口,P2 输出缓冲器能驱动 4 个 TTL 逻辑电平。对 P2 端口写“1” 时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL) 。在访问外部程序存储器或用 16 位地址读取外部数据存储器(例如执行 MOVXDPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送 1。在使用 8 位地址(如 MOVXRI)访问外部数据存储器时,P2 口输出 P2 锁存器的内容。在 flash 编程和校验时,P2 口也接收高 8 位地址字节和一些控制信号。P3 口:P3 口是一个具有内部
11、上拉电阻的 8 位双向 I/O 口,P3 输出缓冲器能驱动 4 个 TTL 逻辑电平。对 P3 端口写“1” 时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。P3 口亦作为 AT89S52 特殊功能(第二功能)使用,如下表所示。在 flash 编程和校验时, P3 口也接收一些控制信号。端口引脚第二功能:P3.0RXD(串行输入口);P3.1TXD(串行输出口);P3.2 (外中断 0);INT0P3.3 (外中断 1);INT1P3.4T0(定时/计数器 0);- 7 -P3.5T1(定时/计数器 1);P3.6 (外部数据
12、存储器写选通);WRP3.7 (外部数据存储器读选通);RD此外,P3 口还接收一些用于 FLASH 闪存编程和程序校验的控制信号。RST:复位输入。当振荡器工作时,RST 引脚出现两个机器周期以上高电平将是单片机复位。ALE/ :当访问外部程序存储器或数据存储器时, ALE(地址锁存允PROG许)输出脉冲用于锁存地址的低 8 位字节。一般情况下,ALE 仍以时钟振荡频率的 1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是,每当访问外部数据存储器时将跳过一个 ALE 脉冲。对 FLASH 存储器编程期间,该引脚还用于输入编程脉冲( ) 。如有必要,可通过对特殊功PRO
13、G能寄存器(SFR)区中的 8EH 单元的 D0 位置位,可禁止 ALE 操作。该位置位后,只有一条 MOVX 和 MOVC 指令才能将 ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置 ALE 禁止位无效。:程序储存允许( )输出是外部程序存储器的读选通信号,当PSEN PSENAT89S52 由外部程序存储器取指令(或数据)时,每个机器周期两次 有效,PSEN即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次 信号。PSEN/VPP:外部访问允许,欲使 CPU 仅访问外部程序存储器(地址为EA0000H-FFFFH) ,EA 端必须保持低电平(接地) 。需注意的
14、是:如果加密位LB1 被编程,复位时内部会锁存 端状态。如 端为高电平(接 Vcc 端) ,EA EACPU 则执行内部程序存储器的指令。FLASH 存储器编程时,该引脚加上+12V的编程允许电源 Vpp,当然这必须是该器件是使用 12V 编程电压 Vpp。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。2.2 其它芯片资料2.2.1 74HC573八进制 3 态非反转透明锁存器74HC573 高性能硅门 CMOS 器件- 8 -SL74HC573 跟 LS/AL573 的管脚一样的器件。SL74HC573 跟 LS/AL573 的管脚一样。器件的
15、输入是和标准 CMOS 输出兼容的,加上拉电阻他们能和 LS/ALSTTL 输出兼容。数据锁存当输入的数据消失时,在芯片的输出端 ,数据仍然保持; 这个概念在并行数据扩展中经常使用到。OE 1 20 Vcc1D 2 19 1Q2D 3 18 2Q3D 4 17 3Q4D 5 16 4Q5D 6 15 5Q6D 7 14 6Q7D 8 13 7Q8D 9 12 8QGND 10 11 LEOE LE D QL H H HL H L LL L X Q0H X X Z1 脚三态允许控制端低电平有效1D8D 为数据输入端1Q8Q 为数据输出端74HC573 引脚图- 9 -LE 为锁存控制端;OE 为
16、使能端。2.2.2 74HC13874HC138 是一款高速 CMOS 器件,74HC138 引脚兼容低功耗肖特基TTL(LSTTL )系列。74HC138 译码器可接受 3 位二进制加权地址输入( A0, A1 和 A2),并当使能时,提供 8 个互斥的低有效输出(Y0 至 Y7)。74HC138 特有 3 个使能输入端:两个低有效(E1 和 E2)和一个高有效(E3)。除非 E1 和 E2 置低且 E3 置高,否则 74HC138 将保持所有输出为高。利用这种复合使能特性,仅需 4 片 74HC138 芯片和 1 个反相器,即可轻松实现并行扩展,组合成为一个 1-32(5 线到 32 线)
17、译码器。任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则 74HC138 亦可充当一个 8 输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。74HC138 与 74HC238 逻辑功能一致,只不过 74HC138 为反相输出。- 10 -3 方案选择与论证3.1 方案比较方案一:本方案主要以单片机为核心,利用单片机的外部中断和定时功能来实现频率的计数并且利用单片机的动态扫描把测出的数据送到数字显示电路显示。其实原理框图如 2.1 所示信号放大电路信号整形单片机AT89S52 电路数字显示电路2.1 方案一原理图- 11 -方案二:本方案主要
18、以数字器件为核心,主要分为时基电路,逻辑控制电路,放大整形电路,闸门电路,计数电路,锁存电路,译码显示电路七大部分。其原理框图如图 2.2 所示逻辑控制电路译码显示器锁存器闸门电路计数器时基电路放大整形电路2.2 方案二原理框图3.2 方案论证方案一:本方案主要以单片机为核心,被测信号先进入信号放大电路进行放大,再被送到波形整形电路整形,把被测得正弦波改为方波。利用单片机的外部中断和定时器的功能对被测信号进行计数。编写相应的程序可以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示。方案二:本方案使用大量的数字器件,被测量信号放大整形电路变成计数器所要求的脉冲信号,其频率于被测信号
19、的频率相同。同时时基电路提供标准时间基准信号,其高电平持续时间 1s,当 1s 信号来到时,闸门开通,被测脉冲信号通过闸门,计数器开始计数,直到 1s 信号结束闸门关闭,停止计数。若在闸门时间 1s 内计数器计得的脉冲个数为 N,则被测信号频率 FX=NHZ。逻辑控制电路的作用有两个:一是产生锁存脉冲,是显示器上的数字稳定;二是产生清零脉冲,使计数器每次测量从零开始计数。- 12 -3.3 方案选择比较以上两种方案可以知道,方案一得核心是单片机,使用的元器件少,原理电路简单,调试简单只要改变程序的设定值则可以实现不同频率范围的测试能自动选择测试的量程。与方案一相比较方案二则使用了大量的数字元器
20、件,原理电路复杂,硬件调试麻烦。如要测量高频的信号还需要加上分频电路,价格相对高了点。基于上述,所以选择了方案一。4 频率计系统原理概述4.1 频率计方案的概述本频率计的设计以 AT89S52 单片机为核心,利用它内部的外部中断和定时/计数器完成待测信号周期/频率的测量,单片机 AT89S52 内部具有 2 个 16 位定时/计数器,定时/计数器的工作可以由编程来实现定时,计数和产生计数溢出时中断要求的功能。由外部中断检测外部信号下降沿进行计数,这样可以用来测量待测信号的频率。外部输入在每个机器周期被采用一次,这样查测一次从 1到 0 的跳变至少需要 2 个机器周期,所以最大计数速率为时钟频率
21、 1/24。定时/计数器的工作有运行控制位 TR 控制,当 TR 置 1,定时/计数器开始计数:当TR 清 0 ,停止计数。4.2 系统设计结构图利用单片机的外部中断和定时功能来实现频率的计数并且利用单片机的动态扫描把测出的数据送到数字显示电路显示。其实原理框图如 4.1 所示信号放大电路 信号整形单片机AT89S52 电路数字显示电路图 4.1 系统机构图4.3 显示功能描述该设计是用 2 个四位共阴数码管构成显示,由 P0 进行段选,P2 的高三位- 13 -进行位选,由 74HC138 进行驱动。至右向左依次增大。5 系统硬件设计5.1 时钟电路在单片机片内有一个高增益的反相放大器,反相
22、放大器的输入端为XTAL1,输出端为 XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。根据硬件电路的不同,单片机的时钟连接方式可分为内部时钟方式和外部时钟方式。我们采用内部时钟方式,如图 5-1 所示。在内部方式时钟电路中,必须在 XTAL1 和 XTAL2 引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路,C1 和 C2 取 30pF 左右,晶振的频率取值范围1.2MHz12MHz。根据实际情况,本设计采用 12MHz 作为系统的外部晶振,电容值取 30pF。图 5-1 单片机晶振电路5.2 复位电路单片机复位是使 CPU 和系统中的其他功能部件都处在一个确定的
23、初始状态,并从这个状态开始工作。无论是单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。所以,必须弄清楚单片机复位的条件、复位电路和复位后的状态。单片机复位的条件是,必须使 RST 引脚(9 脚)加上持续两个机器周期(即 24 个振荡周期)的高电平。例如,若时钟频率为 12MHz,每机器周期为1us,则只需 2us 以上时间的高电平。在 RST 引脚出现高电平后的第二个周期执行复位。单片机常见的复位电路有上电复位电路和按键复位电路。为了方便- 14 -系统的硬件初始化,我们采用按键复位电路。如图 5-2 所示。图 5-2 单片机复位电路按键复位电路除具有上电复位功能外,若要复位,只需要
24、按下 S1 键,在RST 端产生一个复位高电平。5.3 显示电路我们测量的频率最终要显示出来,八段LED 数码管显示器由8 个发光二极管组成。基中7 个长条形的发光管排列成“日” 字形,另一个圆点形的发光管在数码管显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。LED 数码管显示器有两种形式:一种是8 个发光二极管的阳极都连在一起的,称之为共阳极LED 数码管显示器;另一种是 8 个发光二极管的阴极都连在一起的,称之为共阴极LED 数码管显示器。共阴和共阳结构的LED 数码管显示器各笔划段名和安排位置是相同的。当二极管导通时,对应的笔划段发亮,由发亮的笔划段组合而显示的各种字符
25、。8个笔划段 h g f e d c b a 对应于一个字节(8 位)的D7、D6、D5、。D4、D3、D2、D1、 D0,于是用8 位二进制码就能表示欲显示字符的字形代码。在单片机应用系统中,数码管显示器显示常用两种办法:静态显示和动态扫描显示。所谓静态显示,就是每一个数码管显示器都要占用单独的具有锁存功能的I/O 接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种办法单片机中CPU 的开销小,能供给单独锁存的I/O 接口电路很多。在单片机系统中动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。
26、其接口电路是把所有显示器的8 个笔划段a-h 同名端连在一起,而每- 15 -一个显示器的公共极COM 是各自独立地受I/O 线控制。CPU 向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM 端,而这一端是由I/O 控制的,所以我们就能自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的办法,轮流控制各个显示器的COM 端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示
27、数据,不会有闪烁感。5.4 放大整形电路CLK13 Q0 11Q1 10Q2 9Q3 8MR12U4BCLK1 Q0 3Q1 4Q2 5Q3 6MR2U4A16分分256分分1fp16fp256fpD2D1R3VCCCOMMAND1112 13U1D8910U1C45 6U1B12 3U1A91011 8U3C12J11011121314151617INPUT 1213 12U3A74ALS10345 6U3B74ALS10图 5-4 放大整形电路由于输入的信号可以是正弦波。而单片机内部要求被测信号为方波,所以需要设计一个整形电路。由此在测量的时候,首先通过整形电路将正弦波转化成方波并且对信号
28、进行放大。在整形之前由于不清楚被测信号的强弱的情况。所以在通过整形之前通过放大衰减处理。当输入信号电压幅度较大时,通过输入衰减电路将电压幅度降低。当输入信号电压幅度较小时,前级输入衰减为零时若不能驱动后面的整形电路,则通过调节 R14 进行调节输入放大的增益,使得被测信号得以放大。本电路采用 LM358 进行放大整形。LM358 包含两个独立的高增益和内部补偿运算放大器。 这两个运算放大器工作在单电源。该器件具有低电源供电,低功耗,内部单位增益频率补偿。其中单元 2 用于构成负反馈放大电路对信号进行放大(其中若用正反馈放大信号有可能致使电路工作不- 16 -稳定) ,同时单元 1 构成一个过
29、的电压比较器,对波形进行整形。电路如cV51图 5-4 所示。6 软件设计6.1 软件实现原理测频软件的实现是基于电路系统来进行设计的。本次设计以单片机AT89S52为核心控制LED显示,采用的是脉冲定时和计数测频,所以在软件实现上基本遵照系统的设计原理,进行测频。本次软件设计语言采用C语言,在电脑上编译通过后即可下载到电路上的实际电路中,即可实现频率的测量。6.2 软件流程图- 17 -图 6-1主程 序流程开始程序初始化LED 显示有无信号输入入显示频率值YY测试频率7 系统调试(1)调试工具:示波器5V 直流电源频率计(2)调试环境:地点:实验室室温:20 (3)测试过程:当我们把硬件焊
30、接等工序完成之后便开始进行测试,首先是测试了单片机- 18 -晶振是否起振,结果没有起振,经检查是电路没有连接好,重新焊接再进行测试,最终晶振起振。接通电源和输入信号进行检测,有信号输出,硬件测试完毕,没有问题。然后我们把我们编写的程序写入单片机,将单片机接入电路进行测试,通电之后有关单片机的所有部分都没有工作,然后在老师的帮助下将整个程序进行修改,调试。当最终程序确定下来之后,我们便进行最后的测试,我们把电路板与输入信号相连接,通电,此时数码管显示的数字比较混乱,询问老师,得知是因为不断地进入中断,导致结果不能正确显示,经过老师的指导与修改,最后通电测试,测试结果与预计结果基本相符合,调试结
31、束。8 总结通过这次单片机课程设计,我们懂得了理论与实际相结合的重要性,只有在实践中利用自己的理论知识,才能更好地掌握专业知识。只有理论知识是远远不够的,理论知识要在实践中解决问题才能发挥出其重要性,在这次设计过程中提高我们的动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机硬件及 C 语言掌握得不够好。在这次的课程设计过程中,我们遇到了很多的问题。首先是原理图画的过程中,放大整形电路没有设计好,在薛院长的细心指导和帮助下我们一次一次修改原理图,修改布线,最终硬件得以成功完成。在软件调试过程中,遇到了很多困难,在老师及同
32、学的帮助下,最终程序调试成功。在这个过程中,我们进一步了解了 C 语言编程,还学会了如何下载程序到单片机中。通过这次课程设计,我们增强了对单片机和 C 语言的理解,进一步提高分析解决实际问题的能力,培养了自己独立思考,独立动手的能力。还学会了解决程序编写问题的实际本领,真正实现由课本知识向实际能力的转化;通过典型程序的设计与制作,加深对基本原理的了解,增强了实践能力。9 致谢感谢学院精心制作这样的课题来锻炼我们,在这里我们也要对我们的指导老师表示深深的感谢。在测试的这段时间,他们总是在实验室忙碌到很晚。在- 19 -设计过程中,我们得到了老师们精心的指导和无私的帮助,他们专业的知识和科学、严谨
33、的专业精神令我们敬佩不已,也让我们受益匪浅。同时,我们要感谢教给我们专业知识的老师们,谢谢你们!10 参考文献1 康华光等编 .电子技术基础(模拟部分).高等教育出版社20052 李雷等编 .电子技术应用实验教程.电子科技大学出版社,20063 唐颖等编 单片机原理与应用及C51程序设计.北京大学出版社2008 4 李华等编 .MCS-51 系列单片机实用接口技术.北京航空航天大学出版社19932011 附录附录一:整体系统原理图1 2 3 4ABCD4321DCBA TitleNumber RevisionSizeA4Date: 23-May-2013 Shet of File: C:Doc
34、uments and SetingsAdministrator分分分.ddbDrawn By:CLK13 Q0 11Q1 10Q2 9Q3 8MR12U4BCLK1 Q0 3Q1 4Q2 5Q3 6MR2U4AY1C1C2R1 R2C3S1VC VCa11 b7 c4d2 e1g5 dp3 f1012 9 8 6L1a11 b7 c4d2 e1g5 dp3 f1012 9 8 6L2VCabcd dde efefg gdp dpg16分分dp256分分abc1fp 1fp16fp16fp256fp256fpD2D1R3VCabcCOMANDCOMANDA1 B2 C3E14 E25 E36Y0
35、 15Y1 14Y213Y3 12Y4 11Y5 10Y6 9Y77U7RSTRST0 1 2 3 4 5 6 71112 13U1D8910 U1Cf45 6U1B1 3U1A91011 8U3C12J1VCRSTP15P16P17P15P16P1710111213141516170123456710111213141516171 23 45 67 89 10Y2INPUTINPUT1213 12U3A74ALS10345 6U3B74ALS10P1.01 P1.12 P1.23P1.34 P1.45 P1.56P1.67 P1.78 RST9RXD/P3.010 TXD/P3.111 IN
36、T0/P3.212INT1/P3.313 T0/P3.414 T1/P3.515WR/P3.616 RD/P3.717 XTAL218XTAL119 GND20P2.0 21P2.1 22P2.2 23P2.3 24P2.4 25P2.5 26P2.6 27P2.7 28PSEN 29ALE 30EA/VP31P0.7 32P0.6 33P0.5 34P0.4 35P0.336P0.2 37P0.1 38P0.0 39VC 40U5AT89S52OE1 LE11D02 D13 D24D35 D46 D57D68 D79Q0 19Q1 18Q2 17Q3 16Q4 15Q5 14Q6 13Q7
37、12U674HC57312J2 VC 123456789R12470*8附录二:pcb 图21附录三:元件清单Part Type Designator Footprint1K R3 AXIAL0.310k R2 AXIAL0.310u C3 RB.1/.212MHZ Y1 JINGZ30p C2 CAP0.230p C1 CAP0.274ALS10 U3 DIP1474HC00 U1 DIP1474HC138 U7 DIP1674HC393 U4 DIP1474HC573 U6 DIP20200 R1 AXIAL0.3470*8 R12 SIP9AT89S52 U5 DIP40ISP Y2 I
38、SP10SR20302 L2 LED4SR20302 L1 LED422SW-PB S1 DIP4附录四:源程序#include #define uint unsigned int#define uchar unsigned charuchar table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /字符段码表uchar table138=0,128,64,192,32,160,96,224;unsigned long int x,count0,count1,disp_x=0;unsigned char x0=0;unsigned c
39、har led8;sbit qingl=P30; /为定义sbit fp_1=P31;sbit fp_16=P33;sbit fp_256=P32;sbit shuru=P36;void delay(uint t) /延时 while(t-); void shuju_chuli() led0=x/10000000;led1=(x%10000000)/1000000;led2=(x%1000000)/100000;led3=(x%100000)/10000;led4=(x%10000)/1000; led5=(x%1000)/100;led6=(x%100)/10; led7=(x%10);vo
40、id disply(int j)while(j-) /循环扫描int k=1;uchar i=0,m=0;/ if(disp_x=10000000)m=0;/ else 23if(disp_x=1000000)m=1;/ else if(disp_x=100000)m=2;/ else if(disp_x=10000)m=3;/ else if(disp_x=1000)m=4;/ else if(disp_x=100)m=5;/ else if(disp_x=10)m=6;/ else m=7;for(i=m;i8;i+)k=k+ledi; /消零delay(200);if(k)P2=tabl
41、e138i;P0=tableledi;else if(i=7) /全 0 时最后一位显示 0P2=table1384;P0=0x3f; void t1_and_t2chushihua() /to,t1 初始化count0=0;count1=0;TMOD=0x51; /设定 t0 定时于 1 方式,t1 计数于 1 方式TR0=0;TR1=0;TH0=(65536-49970)/256; /定时器赋初值TL0=(65536-49970)%256;TH1=0; /计数器赋初值TL1=0;PT1=1; /计数器中断优先级高于定时器PT0=0;EA=1; /开总中断 ET0=1;ET1=1;24TR0
42、=1; /启动定时器和计数器TR1=1;x=0;void du_shu() /进中断后读计数值子函数if(fp_16) /16 分频读数处理 x0=P1x=(TH1*256+TL1);x=x*16+x0;if(x60000) /计数值较小换低挡fp_1=1;delay(500);fp_16=0;else if(fp_256) /256 分频读数处理 /x0=P1x=(count1*65535);x=x+TH1*256+TL1;x=x*256+P1; /x=x+(TH1*256+TL1)*256;/x=x+count1*65535;/x=x+P1;if(x1000000)fp_256=0;del
43、ay(500);fp_16=1;/ if(fp_16) /16 分频读数处理/ / x0=P1/ x=(TH1*256+TL1)*16+x0;/ if(x60000) /计数值较小换低挡/ / fp_1=1;25/ fp_16=0;/ / else if(fp_1) /1 分频读数处理x=TH1*256+TL1;/ x=1234;disp_x=x; void into_0(void) interrupt 1 /定时中断TH0=(65536-49970)/256; /重装初值TL0=(65536-49970)%256;count0+;if(count0=20) shuru=1; /定时到,禁止输
44、入TR0=0; /停止定时,计数TR1=0;du_shu();shuju_chuli(); /调用读数子函数void into_1(void) interrupt 3 /计数溢出中断,换挡操作TR1=0;TR0=0;if(fp_256)count1+; /x=count1*65536*256; else if(fp_16)fp_16=0;delay(500);fp_256=1; /x=x+65536*16; 26else if(fp_1)fp_1=0;delay(500);fp_16=1;/x=x+65536;/TH1=0;/TL1=0;void main()fp_1=1; /初始为 16 分频挡fp_16=0;fp_256=0;shuru=1; /禁止输入qingl=1; /分频器清 0while(1) /循环测量/fp_1=1; /初始为 16 分频挡/fp_16=0;/fp_256=0;shuru=1;qingl=1;qingl=0;t1_and_t2chushihua(); /初始化子函数shuru=0; /允许输入disply(70); /动态显示