基于51单片机的简易逻辑分析仪设计

合集下载

简易逻辑分析仪设计

简易逻辑分析仪设计

2008年10月第10期电子测试EL ECTRONIC TEST Oct.2008No.10简易逻辑分析仪设计贾 奕,黄劲松,沈鹏程,田开坤(1湖北师范学院物理与电子科学学院 黄石 4350022湖北师范学院电工电子实验教学示范中心 黄石 435002) 摘 要:本系统是以STC89C52单片机和复杂可编程逻辑器件CPLD 的组合电路为核心,利用锁存器在时钟上升沿将输入端的数据锁存的原理,构建了一个基于实时采样和直接数据存储器存储(DMA )的简易逻辑分析仪。

系统由五部分组成:按键模块、CPLD 模块、DDS 采样时钟发生模块、L CD 显示模块、DMA 数据采集模块。

相比于市场上的逻辑分析仪,本系统结构简单,易制作,成本低,可同时测量8路T TL 信号。

本系统可以用来分析数字逻辑电路中的时序逻辑关系,本文还用该逻辑分析仪研究了51单片机对外部地址读写操作的时序,得到与单片机数据手册一致的波形时序图。

关键词:逻辑分析仪;DMA ;CPLD ;DDS 中图分类号:TP399 文献标识码:BDesign of simple logic analyzerJia Y i ,Huang Jinsong ,Shen Pengcheng ,Tian Kaikun(1College of Physics and Electronic Science ,Hubei Normal University ,Huangshi 435002,China ;2Electricaland Electronic experimental teaching centres of excellence ,Hubei Normal University ,Huangshi 4350020,China )Abstract :A simple logic analyzer based on a real 2time sampling and DMA has been designed by using STC89C52SCM and CPLD circuit as t he p rimary component s.It operates by a latch which can latch t he data coming from t he inp ut port o n t he outp ut port by means of latching t he rising edge of a clock p ulse.The system includes five basic component s :a button control mod 2ule ,t he CPLD module ,a DDS sampling clock p ulse generation module ,an L CD module ,and t he DMA pared to t he existing logic analyzer ,t he system can measure synchro 2nously 8T TL signals ,and t he circuit is simple and can be constructed easily wit h low cost s.The system can be used as a tool t hat measures t he logic relations of t he digital circuit.An ex 2ample has been given t hat shows how t he time is measured when a 51SCM reads or writes so me data to t he o ut side address ,SCM manual data are consistent wit h t he wave timing map.K eyw ords :logic analyzer ;DMA ;CPLD ;DDS测试工具与解决方案2008.100 引 言在数字电路的研究中,往往要对电路的时序进行分析,在这种情况下,很多学生或工程师通常会选择示波器,而忽略了逻辑分析仪。

简易逻辑分析仪的设计与应用

简易逻辑分析仪的设计与应用

华 坚 周 杏 鹏
( 南 大 学 自动 化 学 院 江 苏 南京 东
20 9 ) 1 0 6
[ 要] 文章 详细介 绍基 于 C I 摘 P D+微 控 制 器的 简 易逻 辑 分析 仪 设 计 方 法 , 助 通 用 P 借 C机 及 其 强 大
的 人 机 交 互 设 备 , 现 了基 于 VC+ + 6 0W i3 I 数 据 分 析 显 示 界 面 , 成 了 简 易 逻 辑 分 析 仪 。 它 不 实 . n 2AP 的 构
8路采 样通 道 , 储 深 度 为 5 2K, 样 精 度 为 0 1 存 1 采 .
数 据 采 集 模 块 主要 由 MC C L 和 S U、 P D RAM 构 成 , 最 为核心 的功 能 由 C L 而 P D完成 。 C I 采 用 的 是 E M7 5 A TC 0 P D P 2 6 E 1 0— 1 , 0 内 核 和 IO供 电 电压 为 3 3V, IO可 以兼 容 5V. / . 但 / 故该 系统 可适 用 于 5V、 . 混 合 电压 数 字 系统 。 3 3V C I 内部 主要 包 括 采 样 时 钟 生 成模 块 、 址 计 数 P D 地
仅 具有 8 并行信 号 时序 分析 显 示功能 , 路 而且 还 具有 串行 通信数 据 帧信 息的 实时检 测与 智能识 别功 能 ; 对检
测 和调试 各种 数 字逻 辑 电路和 信 息化 系统十 分有 用且 应 用 非 常方便 。 经过 大量 的测试 , 系统 对 串行 通信 该
数 据 帧 信 息 的 识 别 出错 率 约 为 1 。
给P C机 ; C分 析 显 示 数 据 模 块 负 责 分 析 处 理 数 P
图 2 数 据 采 集 模 块 框 图

简易逻辑分析仪报告

简易逻辑分析仪报告

简易逻辑分析仪摘要本系统是由单片机作为主控制器、可编程器件作为辅助控制单元来实现数字信号产生、逻辑信号采集和示波器显示。

由单片机为核心的信号发生器,实现了大范围可控频率、预设码型的信号输出;数据采集模块的输入电路中的程控迟滞比较器,提高了输入信道的抗干扰能力。

可编程器件高密度特点在本系统中的应用,大大减少了外围器件,增强了系统的可靠性。

带有LCD显示模块为用户控制提供友好的人机界面,实现了设置掉电保护功能,并支持鼠标操作和图形打印。

关键词逻辑分析仪单片机可编程器件程控迟滞比较器一、方案论证及选择方案一:利用普通的74系列移位计数器构成数字信号发生器,纯单片机方式实现逻辑分析仪。

图 1-1 方案一结构框图如图1-1所示,数字信号发生器部分,利用74系列的移位计数器的基本功能,通过拨码开关向置数端预置循环序列,通过TTL 驱动输出数字信号。

逻辑分析仪部分的门限电压由电位器控制。

这种方法单片机除了完成基本的数据分析外,还需要完成对逻辑数据的采集、存储、显示等大量控制工作。

方案二:由单片机产生数字信号序列,由另外两片单片机构成逻辑分析仪。

射随器门限 比较器电位器 调压电路单 片 机ZYX D/AD/A预 置拨码开关序列 输出数字信号发生器 简易逻辑分析100Hz 时钟键盘级联74 移位计数器 数码管图 1-2 方案二结构框图如图1-2所示,相比方案一在信号产生上方案二采用了单片机方案,数码管显示循环序列码状态,本方案用软件可以实现不同频率、更加复杂数字信号的输出。

在逻辑分析仪部分,部分的特点是双单片机结构,二者通过串口通信,下位机单片机3只负责显示,上位机单片机2通过D/A 输出程控的门限电平。

本方案解决了显示与数据采集处理不能同时工作的矛盾, 方案三利用FPGA/CPLD 的高速特点,实现系统并行工作,这是本方案相比于方案二的特色之一。

用可编程器件可以高速完成单一功能模块。

FPGA/CPLD 的使用弥补了单片机在高速采集和实时显示的弱点,使整个系统的处理能力远超过当前微控制器的水平,这使设计十分具有发挥的空间。

基于FPGA的简易逻辑分析仪的设计与仿真完整设计

基于FPGA的简易逻辑分析仪的设计与仿真完整设计

目录摘要 (1)Abstract (2)前言 (3)第一章概述 (4)1.1 选题背景 (4)1.2 FPGA简介 (4)第二章设计方案 (6)2.1 设计任务和要求 (6)2.2 总体设计方案 (6)第三章系统子模块实现与仿真分析 (9)3.1 数字信号发生器实现与仿真 (9)3.1.1 数字信号发生器的软件流程图和组成框图 (9)3.1.2 带异步置位/复位的通用八位寄存器 (10)3.1.3 任意分频器 (11)3.1.4 循环移位寄存器 (12)3.1.5 数字信号发生器仿真 (13)3.2 触发电路实现与仿真 (14)3.3 存储器REGN的实现与仿真 (15)3.4 640分频器FREQ的实现与仿真 (16)3.5 存储器RAM的实现与仿真 (17)第四章系统顶层的实现与仿真 (20)4.1 系统顶层原理图 (20)4.2 系统顶层仿真图 (20)结论 (22)参考文献 (23)致谢 (24)附录 (25)逻辑分析仪是一种类似于示波器,用来分析测量数字系统的逻辑波形和逻辑关系的仪器设备。

在每个时钟到来,并且与预置的触发字逻辑状态相同时,将触发之后的数据进行储存、处理并输出显示到屏幕上。

本文采用FPGA开发器件设计一个8通道的简易逻辑分析仪,实现对输入的8路逻辑信号进行数据判断、数据存储、采集和处理,然后输出显示的功能。

其功能参数分别是采样率为100KHz,每通道存储深度为32bit。

本次设计使用FPGA(现场可编程逻辑门阵列)芯片和VHDL硬件描述语言作为主要设计方法实现8路简易逻辑分析仪。

本系统根据逻辑分析仪所要实现的各项功能分别编程设计了对应的功能模块,分别是触发模块,数据缓存模块,分频模块以及存储器模块,并分别进行了仿真验证,在此基础上,完成了系统电路的设计与仿真。

仿真结果表明,本次设计各模块都达到了所需要求,实现了各自的功能。

系统总体方案也得到了较理想的结果,本次设计方案是可行的,达到了设计要求。

基于51的简易逻辑分析仪

基于51的简易逻辑分析仪

第33卷增刊2008年6月广西大学学报(自然科学版)JournalofGuangxiUniversity(NatSciEd)V01.33,Sup.June,2008文章编号:1001—7445(2008)增.0128—03基于51单片机的简易逻辑分析仪江波,叶丽(广西大学电气工程学院,广西南宁530004)摘要:介绍采用STC89LE54单片机控制8路逻辑信号电平采集的简易逻辑分析仪设计.采用EPM7128SLC84—15控制系统实现一个数字信号发生器可预置8路信号工作,单片机和EPM7128SLC84--15间采用中断方式交换数据.采集电路以5kbit每秒的速率同时对8路逻辑信号进行采样.逻辑信号门限电压通过键盘任意设定信号采集的触发等级、触发条件、触发位置由键盘设定.采集存储的8路信号可以同时清晰稳定地在示波器再现.关键词:STC89LE54EPM7128SLC84;逻辑分析;数字信号发生器中图分类号:TN702文献标识码:ASimplelogicanalyserbasedon51singlechipJIANGBo,YELi(CollegeofElectricalEngineering,GuangxiUniversity,Nanning530004,China)Abstract:Thepaperintroducesthedesignofthesimplelogicanalyserwhichacquisitionof8routessignalleveliscontroledthroughSTC89LE54singlechip.ThecontrolsystemthroughEPM7128SLC84-15torealizesadigitalwaveformgeneratorsscheduled8routessignal,itisthroughthesuspendedmeanstoexchangedatabetweensinglechipandEPM7128SLC84-15.5kbit/sreal—timesamplerateoftheacquisitioncircuitiSfacedtothe8routeslogicsignalinthemeantime.Thresholdvoltageoflogicsignalissetarbitrarilybykeybord;triggerrank,triggerconditionandtriggerlocationaresetbykeybord.8routessignalsampledandregisteredcanbereshowedclearlyontheoscilloscopesinthemeantime.Keywords:STC89LE54;EPM7128SLC84;logicanalyse;digitalwaveformgenerators逻辑分析仪(LogicAnalyzer)是以逻辑信号为分析对象的测量仪器.是一种数据域仪器,其作用相当于时域测量中的示波器.正如在模拟电路错误分析中需要示波器一样,在数字电路故障分析中也需要一种仪器,它适应了数字化技术的要求,是数字逻辑电路的设计、分析及故障诊断工作中不可缺少的工具,在数字电路的研制测试、电子计算机维修、微处理器以及各种集成化数字仪表和装置中均有广泛的用途.逻辑分析仪作为硬件设计中必不可少的检测工具,还可将其引人实验教学中,建立直观感性的印象,提升学生的硬件设计能力,可以全面提高教学质量.在数字电路的调试中,往往要测试多路信号波形,分析其逻辑关系,采用普通示波器时,最多只能测试2路信号波形,若采用市面上的逻辑分析仪,由于其核心部件设计昂贵,投资较高.本文着重讨论基于单片机技术的逻辑分析仪的实现方法.・收稿日期:2008—01—21;修订日期:2008—03一17作者简介:江波(1981一),男,广西兴安人,广西大学电气工程学院2005级硕士研究生增刊江波等:基于51单片机的简易逻辑分析仪1291系统总体结构本系统采用单片机和可编程器件作为数据处理及控制核心,整个系统由一个信号发生器和一个简易逻辑分析仪构成.将设计任务分解为数字信号发生、信号采集存储、信号融合处理、显示、掉电保护等功能模块.图1即为该系统的总体框图.考虑到硬件电路的紧凑性,故将上述模块合理分配连接成以下3个模块:数字信号发生器、单片机控制器、键盘/显示j图1系统总体框图Fig.1Totalsystemframe-structuredgraph2系统主要硬件电路设计2.1单片机控制器单片机控制器是整个硬件电路的核心,采用STC89LE54单片机为主控制核心的双CPU工作模式.STC89LE54单片机内部含有可重复编程的FLASHROM,可通过串口进行在线编程,在设计调试过程中可十分容易进行程序的在线修改.利用AT24C64存储器(EEPROM)实现掉电存储功能.从CPU系统即以AT89S52为主的显示键盘模块的控制.数字信号处理主要是D/A转换器件的选择,我们选用性能优良的DAC0832作为D/A变换芯片.该方案的特点是硬件简单,软件实现方便,大大提高了系统的设计性能.由单片AT89S52控制8个共阳数码管、8个按键构成动态显示模块.由于具有RS一232接口,易于与计算机相连,可以直接利用计算机来作为显示器显示波形.本设计的采样对象是逻辑信号,一般的逻辑电平为5V,所以在设计中,我们约定被采样信号的电平在0"5V之间.而STC89LE54内部的A/D转换模块所能判别的电平信号为0~3.3V,我们可以利用其内部的参考电平进行A/D的测试,参考电平选为VCC(3.3V).所以,必须要对输入信号进行压缩处理,压缩比为5s3.3.通过预处理的8路信号都是0--一3.3V电平信号,刚好适合STC89LE54内部A/D转换模块采样.由于要对8路信号进行采集,对每路信号的采样速率是总速率的1/8,STC89LE54内部A/D转换最快可实现200kHz的采样速率.理论可实现最高采样速率为200kHz/8=25kHz的采样速率.但是由于软件延时等因素.可实现最大采样速率为5kHz.为了提高采样速率,对每BIT信号,采样一次.为了实现对8路逻辑电路的同步采样,我们采用序列通道单次采样的方式,采样由输入时钟信号进行同步.Clock采样fI.fIff图2同步采样图Fig.2Phys.samplinggraph每个上升沿到来触发采样,依次对8路信号采样各采样一次.2.2数字信号发生器模块的电路设计与实现采用CPLD实现,使用可编程逻辑器件EPM7128sLC84完成数字信号发生器的功能.ALTERA的EPM7128S系列CPLD是基于第二代MAX结构体系地高性能EEPROM结构的CPLD.使用Maxplus软件可方便的编制一个十分频器件,得到100Hz频率.加上循环移位器,很容易就能实现循环移位序列.这种方案精准、稳定,便于控制,且可编程逻辑器件应用日益广泛,是高新电子技术发展的必备元器件.采用可编程器件提高了设计效率,并使系统更稳定,调试更方便.其电路框图如图3所示:图中的时钟产生电路由有源晶振提供,控制和预置电路和指示电路由拨码开关和发光二极管电路实现,信号序列产生电路由CPLD器件EPM7128SLC84来实现。

简易逻辑分析仪的设计与实现

简易逻辑分析仪的设计与实现


Th e u to si g a d a ay i g i y t m e fr n e s o h tt e a ay e a ip a l a n e r s l ft tn n n l zn t s se p ro ma c h wst a h n lz rc n d s ly ce ra d e s
行 采集存储 , 制 D A转换进 行波 形输 出与显示 。 控 / ( ) 字信 号发生 器模 块 2数
该模块 由 5 5定 时器 和 移 位 寄存 器 7 L 9 5 4 S 5组 成 。将 5 5定时器 接成 多谐 振荡器产 生矩 形波作 为 5
选通各个通道 , 通过软件控制对 8 路信号实现采集 。 信号采集之前 , L 34接成 电压跟随器, 将 M2 提高输 入 阻 抗 , 输 入 阻 抗 大 于 5k 简 化 了 硬 件 的 使 0O,
sa l v fII . tb e wa eoT S 1
K e r s: AT 9S sn l h p; sm p e lgc a ay e ;e g tsg a h n e s y wo d 8 51 i ge c i i l o i n l z r ih in lc a n l
移位寄 存器 的时钟 信 号 , 过移 位 产生 符 合 实 际要 通 求 的逻 辑 序 列 信 号 。8位 拨 码 开 关 可 以 预 置 初 始
状态。
号逻辑 分析 的功能 。系统整体 主要分 数字 信号 发生
器、 采集 与存 储 、 / D A转 换 、 波 器 X— 示 Y通 道 的控 制、 晶 显 示 等 模 块。其 系 统 整 体 框 图 如 图 1 液
ae e t fc , h n o gU i rt , ia 2 4 0 , hn ) gm n Of e S a d n nv sy We i 6 2 9 C i i ei h a

简易逻辑分析仪

简易逻辑分析仪

简易逻辑分析仪一、方案论证及选择1、系统总体框图如下:整个系统由信号发生器部分、信号调理部分、ARM软件控制部分以及输出显示部分组成。

2、数字信号发生器模块方案一:采用555定时器和可预置移位寄存器。

用两片74LS194A接成8位可预置循环移位寄存器,方波发生器提供一时钟信号给移位寄存器,预置数用8个按键接入(即循环序列),此方案简单可靠。

方案二:用PC 通过软件编程可以从并行口输出信号波形,不需要硬件电路,且设计灵活,但是不适合电子设计竞赛,并且PC体积大,携带不方便。

方案三:采用中规模FPGA,使用VHDL语言设计移位寄存器。

此方案可以实现精确定时产生信号,且信号频率可调,体积小, 但其显示电路占用资源多,这样设计出来的电路系统将大且复杂。

方案四:采用一片AT89C2051单片产生波形序列。

用单片机产生数字信号,设计简单,设置灵活,频率调节方便。

综合分析上述各方案,比较其优缺点,本系统有其固定的频率要求,故选用最简单的方案一。

3、门限电压分级部分方案一、采用单片机软件控制分级输出不同的电压值,给到比较器的反相端。

该方案简单、且输出电压精确。

方案二、用单片机产生一路PWM波,再经过两级RC低通滤波可得到直流电压,通过控制PWM波的占空比来改变电压值,达到分级效果。

该方案RC滤波得到的电压不稳定,且有纹波。

方案三、直流电源供5V电压,采用电阻、电位器进行一级一级的分压,以实现分级效果。

该方案电路复杂,且电位器调节比较难。

方案四、采用数字式电位器,由单片机结合相应的外围电路进行控制,以实现分压。

采用程控方式,得到的电压精确且稳定。

鉴于本系统软件程序较多,ARM内部仅两个DA,故选择方案四以避免使用单片机内部DA。

二、硬件部分单元电路1、数字信号发生器电路该部分采用了555定时器产生一定频率的时钟信号,通过改变滑动变阻器阻值可实现频率在一定范围内可变,定时器后接一个非门以增强后级驱动能力。

定时器产生的方波信号作为双向移位寄存器74LS194的输入时钟,利用74LS194的两个控制端(S0,S1)来产生八路可预置的循环移位逻辑信号序列。

基于C51单片机的智能仪器综合设计实验

基于C51单片机的智能仪器综合设计实验

基于单片机的智能仪器综合设计实验一、实验目的在实验一~实验三的基础上,完成综合设计实验,学会信号采集、数据处理、键盘控制、LCD或LED显示等功能的智能仪器设计。

二、复习与参考实验一~实验三三、设计指标利用K分度号热电偶进行温度检测,测温范围为500-1200ºC,室温为20ºC,用LCD或LED显示室温和测量温度。

具有4路温度信号循环检测功能,通道切换时间可调;具有任意指定通道显示功能。

四、实验要求1.选择传感器,设计硬件电路,包括检测电路、信号调理电路、AD转换电路、单片机最小系统、LED显示(单号)、LCD显示(双号)、独立式按键,画出电路原理图。

2.画出软件流程图。

3.用Keil C51编写程序。

3.实验结果在LCD或LED上显示出来。

4.实验前完成第1、2项备查。

五、实验仪器设备和材料清单PC机;单片机实验板、连接导线、ST7920图形液晶模块Keil c51软件六、实验成绩评定方法实验成绩包括预习、实验完成质量、实验报告质量3部分组成,各部分所占比例分别为30%、40%、30%。

八、实验报告要求实验报告格式:●实验名称●实验目的●实验内容●硬件设计●软件设计●调试过程●参考文献●附1:电路原理图●附2:程序清单附录:实验程序源代码如下:(陈寅)#include "reg51.h"#define THC0 0xee //5ms时间常数设置#define TLC0 0x00sbit ADWR=P3^6; /***WR*****/sbit ADRD=P3^7; /***RD*****/sbit ADCS=P2^7; /***CS*****/sbit EOC=P3^3; /***EOC****/sbit ADA=P1^3; //通道选择引脚sbit ADB=P1^4;sbit ADC=P1^5;sbit CS =P1^0; /****************/sbit SID=P1^1; /**液晶引脚定义**/sbit SCLK=P1^2; /****************/sbit MODE=P2^0; /*************************/sbit UP=P2^1; /*四个按键接口,0表示按下*/sbit DOWN=P2^2; /*************************/sbit LED1=P2^3; /**4个LED灯引脚定义**/sbit LED2=P2^4; /********************/sbit LED3=P2^5; /********************/sbit LED4=P2^6; /********************//***************500~1200°C范围的K分度表,间隔10*******************/ unsigned int code K_TABLE[71]={20644,21066,21493,21919,22346,22772,23198,23624,24050,24476,24902,25327,25751,26176,26599,27022,27445,27867,28288,28709,29128,29547,29965,30383,30799,31214,31629,32042,32455,32866,33277,33686,34095,34502,34909,35314,35718,36121,36524,36925,37325,37725,38122,38519,38915,39310,39703,40096,40488,40897,41296,41657,42045,42432,42817,43202,43585,43968,44349,44729,45108,45486,45863,46238,46612,46985,47356,47726,48095,48462,48828}; unsigned char GetAdData[10]={0}; //存放获得AD值的数组变量unsigned char ViewTemperature[4]={"0000"}; //显示温度缓冲数组变量unsigned MODESelect=1;int ChangeTime=2; //通道切换时间,单位Sint TongDao=1;void delay(unsigned int j){unsigned char i;do{for(i=0;i<100;i++);}while(j--);}void send_command(unsigned char command_data) //发送命令{unsigned char i;unsigned char i_data;i_data=0xf8; //操作命令,可以查看资料delay(10);CS=1;SCLK=0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data=i_data&0x0f;i_data<<=4;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;}void send_data(unsigned char command_data) //发送数据{unsigned char i;unsigned char i_data;i_data=0xfa; //操作命令,可以查看资料delay(10);CS=1;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data=i_data&0x0f; //取低四位i_data<<=4; //左移四位,从而变成高四位for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;}void InitLCD() //液晶初始化{send_command(0x30); //功能设置:一次送8位数据,基本指令集send_command(0x06); //点设定:显示字符/光标从左到右移位,DDRAM地址加1send_command(0x0c); //显示设定:开显示,显示光标,当前显示位反白闪动send_command(0x04); //显示设定:开显示,显示光标,当前显示位反白闪动send_command(0x01); //清DDRAMsend_command(0x02); //DDRAM地址归位send_command(0x80); //把显示地址设为0X80,即为第一行的首位}/* x,y为起始座标x(0<=x<=3),y(0<=y<=7),x为行座标,y为列座标;how为要显示汉字的个数;style为显示字符的类型,0表汉字,1表字母;str是要显示汉字的地址*/void Display(unsigned char x,unsigned char y,unsigned char how,bit style,unsigned char *stri) //液晶显示{unsigned char hi=0;if(x==0) send_command(0x80+y);else if(x==1) send_command(0x90+y);else if(x==2) send_command(0x88+y);else if(x==3) send_command(0x98+y);if(style==0){for(hi=0;hi<how;hi++){send_data(*(stri+hi*2));send_data(*(stri+hi*2+1));}}elsefor(hi=0;hi<how;hi++) send_data(*(stri+hi));}float LvBo(void)//复合滤波{unsigned char max,min,i;unsigned int sum=0;float U1;max=GetAdData[0];min=GetAdData[0];for(i=0;i<10;i++){sum=sum+GetAdData[i];if(max<GetAdData[i]) max=GetAdData[i];if(min>GetAdData[i]) min=GetAdData[i];}sum=sum-max-min;U1=(float)sum/8;U1=10.0*((U1*5.0)/255); //换成mvreturn U1;}void search (void)//查表子函数{unsigned int da=0,max,min,mid,j;unsigned int var;da=LvBo()*1000; //u1扩大1000倍da=da+798; //20度max=71;min=0;var=0;while(1){mid=(max+min)/2; //中心元素位置if(K_TABLE[mid]==da) {var=mid*10;break;} //中心元素等于查表元素,计算相应温度else if(K_TABLE[mid]>da) max=mid-1;else min=mid+1;if(max-min==1) /*线性插值计算温度值*/{j=(K_TABLE[max]-K_TABLE[min])/10; /*表中相邻两值对应温度相差10°C*/j=(da-K_TABLE[min])/j;var=10*min+j;break;}if(max==min){if(da>=K_TABLE[min]){j=(K_TABLE[min+1]-K_TABLE[min])/10;j=(da-K_TABLE[min])/j;}else if(da<K_TABLE[min]){j=(K_TABLE[min]-K_TABLE[min-1])/10;j=(da-K_TABLE[min-1])/j;min=min-1;}var=10*min+j;break;}}var=var+500;ViewTemperature[0]=var/1000+0x30;ViewTemperature[1]=var/100%10+0x30;ViewTemperature[2]=var/10%10+0x30;ViewTemperature[3]=var%10+0x30;}void LcdDisplay(void){unsigned char ViewMODESelect,ViewTongDao[5]={"0 "},ViewChangeTime[5]={"00(S)"};ViewMODESelect=MODESelect+0x30;ViewTongDao[0]=TongDao+0x30;if(MODESelect==1||MODESelect==2){if(MODESelect==1) Display(0,3,5,0,":自动切换");else if(MODESelect==2) Display(0,3,5,0,":手动切换");Display(0,0,2,0,"模式"); //液晶显示Display(0,2,1,1,&V iewMODESelect);Display(1,0,5,0,"温度通道:");Display(1,5,5,1,V iewTongDao);Display(2,0,4,0,"温度值:");Display(2,4,4,1,V iewTemperature);Display(2,6,2,1,"℃");}else if(MODESelect==3){ViewChangeTime[0]=ChangeTime/10+0x30;ViewChangeTime[1]=ChangeTime%10+0x30;Display(0,0,2,0,"模式");Display(0,2,1,1,&V iewMODESelect);Display(0,3,5,0,":设置时间");Display(1,0,5,0,"切换时间:");Display(1,5,5,1,V iewChangeTime);Display(2,0,14,1," "); //本行清屏}}void TDSelect(void) //AD通道设置{if(TongDao>=5) TongDao=1;if(TongDao<=0) TongDao=4;if(TongDao==1) {ADC=0;ADB=0;ADA=0;}else if(TongDao==2) {ADC=0;ADB=0;ADA=1;}else if(TongDao==3) {ADC=0;ADB=1;ADA=0;}else if(TongDao==4) {ADC=0;ADB=1;ADA=1;}}main(){unsigned char AdCount=0; //用来存放AD采集次数InitLCD();TMOD=0x11; //定时器0初始化TH0=THC0;TL0=TLC0;TR0=1;ET0=1;EA=1;P2|=0x07; //按键初始为高while(1){ADWR=1; /************/ADCS=0; /************/ADWR=0; /**AD初始化**/ADWR=1; /************/while(!EOC); //等待转换结束ADRD=0;GetAdData[AdCount]=P0; //读取转换结果AdCount++;if(AdCount>=10) //连续采集10次值{AdCount=0;search(); //查表LED1=!LED1;LcdDisplay(); //显示}}}void Timer0() interrupt 1{static unsigned char count=0,UPFlag=1,DOWNFlag=1; //按键标志位static unsigned int TimeCount=0;TH0=THC0;TL0=TLC0;if(MODE==0||UP==0||DOWN==0){count++;if(count>=30) //消抖处理{count=0;if(MODE==0) //按键按下{MODESelect++;if(MODESelect>=4) MODESelect=1;}else if(UP==0){UPFlag=0;if(MODESelect==2){TongDao++;TDSelect();}}else if(DOWN==0){DOWNFlag=0;if(MODESelect==2){TongDao--;TDSelect();}}}}else count=0;if(MODESelect==1){TimeCount++;if(TimeCount>=(ChangeTime*1000/5)){TimeCount=0;TongDao++;TDSelect();}}else if(MODESelect==3){if(UPFlag==0) {UPFlag=1;ChangeTime++;}else if(DOWNFlag==0){DOWNFlag=1;ChangeTime--;if(ChangeTime<=0) ChangeTime=1;}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.. .本科生毕业设计报告学院物理与电子工程学院专业电子信息工程设计题目:基于51单片机的简易逻辑分析仪设计学生指导教师(及职称)班级学号完成日期:年月基于51单片机的简易逻辑分析仪设计物理与电子工程学院电子信息工程[摘要]本设计完成了一种能进行数字电路中多路数据测试的简易逻辑分析仪。

它以51单片机控制核心,数模转换器为逻辑信号门限电平控制电路,用按键和12864LCD作为人机交互界面,采用C51进行模块化编程,实现了四路信号的测试,具有成本低,使用方便等特点。

[关键词]数字电路单片机数模转换器逻辑分析仪1 设计任务与要求本设计的主要任务及参数指标是:数据位数4位,存储深度80字;数据速率最高1kHz;输入阻抗大于50kΩ;逻辑信号门限电平在1.0V~4.0V 围按8级任意设定。

2 设计方案本系统采用51单片机为控制核心,系统由单片机系统、逻辑电平控制、按键、LCD显示、系统电源等模块构成。

被测数据输入到逻辑电平控制模块,然后进行单片机进行测试,按键用于控制逻辑信号门限电平的大小,系统电源为各模块供电,各模块的供电电压为5V。

图1 系统框图3 设计原理分析3.1 单片机系统电路设计图2 单片机系统电路单片机系统为逻辑分析仪的核心,负责控制逻辑分析仪的逻辑电平、检测按键并驱动LCD 进行显示。

单片机系统电路如图2所示,由晶体振荡器Y1、电容C3和C4构成振荡器电路,为单片机提供时钟信号。

电容C1、电阻R2和R1、按键KEY1构成单片机复位电路,高电平复位,当按键KEY1按下的时间超过2个机器周期以上时,单片机就执行复位操作。

EA 接高电平,单片机首先访问部程序存储器。

J1EA/VP 31X119X218RESET 9RD 17WR 16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P 30TXD 11RXD 10U1P10P11P12P13P14P15P16P17P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P27123456789J11K+5Y112M+5RXD TXDRD WRT0T1INT0INT1C322p FC422p FR28.2KC110u F+512J6CON2KEY1SW2R1100..为1KΩ的排阻,作为P0口的外部上拉电阻。

在硬件制作时为了方便单片机的测试和功能的扩展,把所有的I/O口均通过排针引出。

3.2 人机界面电路设计.图3 按键控制电路按键控制电路如图3所示,用于控制逻辑分析仪的工作状态,如采样率改变、逻辑电平的调整等等,单片机通过检测按键对应的I/O口是否为低电平来判断按键是否按键,为了防止干扰,应在单片机的按键检测程序中加入延时函数。

.图4 LCD显示接口电路LCD显示接口电路如图4所示,此模块用来显示需要显示的数据,电位器R3用于调节液晶的对比度。

LCD采用采用字符式FM12864M-12L型LCD,为节约I/O 口,以串行方式与单片机连接。

..图5 蜂鸣器驱动电路蜂鸣器驱动电路如图5所示,选用三极管Q1为PNP型三极管,三极管基极电阻R11为1kΩ,因为单片机的灌电流能力强于拉电流能力,因此采用PNP型三极管,蜂鸣器采用5V有源蜂鸣器。

三极管连接到单片机的P17口,当P17输出为低电平时,蜂鸣器响。

3.3 逻辑电平控制电路设计逻辑分析仪主要作用在于时序判定,通常只显示两个电压(逻辑1和0),因此设定了参考电压后,逻辑分析仪将被测信号通过比较器进行判定,高于参考电压者为高电平,低于参考电压者为低电平,在高电平与低电平之间形成数字波形。

逻辑电平控制电路用于控制输入信号的门限电平,输入信号经过逻辑电平控制电路以后再连接到单片机的I/O口,主要有电压比较器和数模转换器构成,电路如图6所示。

逻辑分析仪被测信号路数为4路,采用4个电压比较器和一片数模转换器实现逻辑电平控制,电压比较器采用LM393,因为采用OC输出,所以输出端均连接上了5.1kΩ的上拉电阻。

4路输入信号的门限电平由数模转换器控制,为了使4路输入信号的门限电平一致,四片电压比较器的反向输入端接在一起,并连接到数模转换器的输出端。

数模转换器U2换用TLC5615来实现,TCL5615为十位串行数模转换器,控制方便,并节约单片机的I/O口,数模转换器的参考电压由U2的6脚输入,稳定的参考电压为2.5V,由TL431产生。

..图6 逻辑电平控制电路3.4 供电电源电路设计J15.图7 供电电源电路系统采用5V 供电,供电电源电路由LM7805完成,电路如图7所示。

J11为供电电源电路的输入端,D3为了防止反接,C6、C7为输入滤波电容,C8、C9为输出滤波电容,D5为电源指示灯,R8为电源指示灯的限流电阻。

4 系统软件设计图8 设计流程图设计流程图如图8所示,电路焊接完成先进行硬件的调试,然后进行程序的编译和软硬联合调试。

硬件调试先不放置芯片,通过万用表验证PCB与原理图的一致性,如果发现有不一致的地方,查找原因,直到解决问题为止。

然后进行加电测试,分别测试主要关键点的电压是否和原理一致,单独验证每个模块电路的正确性。

硬件验证通过后进行程序的编辑与调试,直到最终设计作品工作为止。

4.1 设计过程所用仪器1、DF1731SC2A直流稳压电源2、UT805A万用表3、PC机4.2 软件设计工具和平台采用Keil uVision4集成开发环境作为软件开发平台,用C语言对单片机编程实现系统各功能,并进行整体软件系统调试。

采用RS232串口为单片机进行程序下载,由于电脑没有RS232串口,因此使用CH341T完成USB转RS232,RS232连接到单片机串口完成程序的下载。

4.3 软件设计思想系统采用分模块编程的思想,然后通过标志位来实现各个模块之间的协调运行。

此逻辑分析仪的模块程序主要有数据采集模块、逻辑电平控制模块、按键检测模块、采样率控制模块、LCD显示驱动程序等。

4.4 软件设计流程图图9 程序流程图5 设计的结果图10 逻辑分析仪PCB布线图原理图的绘制和PCB的设计使用Protel 99se来完成,PCB板的制作采用快速热转印技术来完成。

在原理图的绘制及PCB的设计过程中特别注意规性,特别是PCB布线的一些规则,注意PCB走线、线距、线宽、空间布局等,合理选取接口,如图10所示为逻辑分析仪PCB布线图。

图11 多路数据逻辑分析图图12 逻辑电平设定测试图由于此逻辑分析仪为四通道,测试过程中,分别为每个通道加入被测逻辑电平,分别验证,然后四个通道同时验证,并测试逻辑电平设定等。

测试结果表明,符合设计要求。

6 总结采用51单片机为控制核心,数模转换器加电压比较器构成逻辑电平控制电路,LCD组成显示界面等,可以有效的构成简易逻辑分析仪的硬件系统,使用EDA开发工具可以缩短建议逻辑分析仪设计的时间,使用模块化编程的思想有利于程序的调试和可读。

通过对简易逻辑分析仪的设计,可以加深对系统设计思想的认知,初步具备电子设计的能力。

[参考文献][1] 庞利会,邓先荣,王军锋等.逻辑分析仪的设计与实现[J].电力自动化设备,2012,32(9):149-152.[2] 朱震华,储婉琴.简易逻辑分析仪的设计与实现[J].实验室研究与探索,2001,20(2):123-124.[3] 江波,叶丽.基于51单片机的简易逻辑分析仪[J].广西大学学报(自然科学版),2008,33(z1):128-130.[4] 朱震华,储婉琴.简易逻辑分析仪设计[J].电子工程师,2000,26(5):31-32,36.[5] 贾奕,黄劲松,鹏程等.简易逻辑分析仪设计[J].电子测试,2008,(10):70-75.[6] 朱更军,永供,项安等.串行10位D/A转换器TLC5615原理及与DSP的接口[J].电子质量,2003,(10):59-60.[7] 左现刚,余周,侯志松等.基于SPI总线的TLC5615在AVR 单片机中的应用[J].科技学院学报(自然科学版),2011,39(4):94-97.[8] 建波,高立新.串行数模转换器TLC5615的原理及其Proteus仿真设计[J].电脑,2008,(10):21,3.[9] 凌燕,黄允千.Proteus与Keil软件的整合在单片机实验开发中的应用[J].实验室研究与探索,2008,27(4):59-61,68.[10] 马刚,向仓.用Proteus与Keil整合构建单片机虚拟仿真平台[J].现代电子技术,2006,29(24):129-131.[11] 伍洁,跃,斌等.Proteus与Keil在单片机开放性实验中的应用[J].电子测量技术,2008,31(6):100-103,107.[12] 黄克亚.浅谈自制51单片机编程器方法和策略[J].科技信息,2009,(25):11.[13] 邱宁.利用USB总线的虚拟逻辑分析仪[J].自动化仪表,2003,24(9):21-24.[14] 胡昆霖,冶,左向利等.基于LabVIEW和FPGA的多通道虚拟逻辑分析仪的设计[J].电子技术应用,2012,38(11):91-93.[15] 丽焕.电压比较器电压传输特性的绘制[J].中国科技纵横,2013,(2):212.[16] 周宦银,吕子勇,马果花等.电压比较器实验研究[J].实验技术与管理,2012,29(3):42-44.[17] 旦花.单片机最小系统的设计与应用[J].无线互联科技,2012,(10):103-104.[18] 景小健,清华,清林等.MG-12864液晶显示器在智能仪表中的应用[J].化工自动化及仪表,2003,30(6):62-64.[19] 志广,晓泉,淮俊霞等.中文图形12864点阵液晶显示模块与51单片机的并行接口电路及C51程序设计[J].现代显示,2008,(7):41-44.[20] 大伟,黄璞.基于12864 LCD的波形显示系统的研制[J].仪器仪表用户,2008,15(3):28-29.The design of simple logic analyzer based on 51 single chipWang ShuShool of physics and electronic engineering 1230S007[Abstract]In this paper,a simple logic analyzer which can multiplex data in digital circuit test is designed. It takes 51 single-chip microcomputer to control the core.The digital to analog converter is used as a logic signal threshold level control circuit.The analyzer uses keyboard and 12864LCD as the man-machine interface, and modular programming with C51.It can test quadruplex signal with low cost,and uses conveniently.[Keywords]Digital circuit SCM Microcontroller DAC Logic Analyzer附一:源程序#include <reg52.h>#include "lcd.h"#include "tlc5615.h"#include "tlc1549.h"#define count 50000#define TH_M1 (65536-count)/256 //T0 (Mode 1)计数高8位#define TL_M1=(65536-count)%256 //T0 (Mode 1)计数低8位code uchar Display1[8]={"门限电平"};code uchar Display2[10]={"输出电压为"};sbit KEY1 = P0^3;sbit KEY2 = P0^4;sbit KEY3 = P0^5;sbit KEY4 = P0^6;sbit P13=P1^3;sbit P14=P1^4;sbit P15=P1^5;sbit P16=P1^6;unsigned int uiVoltage_ADC,uiVoltage_DAC; //uiVoltage:LCD显示用,无小数点float fVoltage_DAC; //定义实际需要输出的电压xdata unsigned char iCount=0; // 采样个数设置,这里设置为16次xdata unsigned char result_Port1[4][16]={0};xdata char port1_Flag=0;xdata char key12Flag=0;xdata char TR0Flag=0;xdata unsigned char key1=0; //控制显示屏上的列标记xdata unsigned char port_1[4]={1,2,3,4};char flay_a = 1;unsigned int Sample_Voltage(void);void Delay_1ms(int); //毫秒级延时函数void Control_DAC(void); //声明调整输出电压函数void displayPort1_in_LCD(unsigned char p, unsigned char i,unsigned char j);void displayPort1_in_LCD_by_Flush(unsigned char *p,unsigned char key);void put_and_Display_Voltage(); //当DA的电压设定发生改变时调用该函数void control_TR0_By_KEY3(); //通过按键KEY3控制采样的结束void display_Sample_Result(); //显示16次采样的结果函数void Sys_key();/******************************************************************************** 函数名:主函数功能说明:调用函数:入口参数:出口参数:说明:********************************************************************************/void main(){LCD_init(); //初始化LCDLCD_Clear(); //LCD清屏// T0_init();port1_Flag=0;key12Flag=0;//禁止按键key1和key2工作TR0Flag=0;// 禁止Time0工作TR0=1; //开启Time0工作fVoltage_DAC = 2.5;// put_and_Display_Voltage();// Delay_1ms(20);DAC_TLC5615_Voltage(fVoltage_DAC);while(1){if(flay_a==0){port_1[0]=(char)P13;port_1[1]=(char)P15;port_1[2]=(char)P14;port_1[3]=(char)P16;displayPort1_in_LCD_by_Flush(&port_1,key1%8);key1++;key1=key1%128;// Delay_1ms(500);// flay_a=1;// Sys_key();if(KEY1==0) //增加DAC电压,{Delay_1ms(10);if(KEY1==0){while(!KEY1);fVoltage_DAC=fVoltage_DAC+0.5;if(fVoltage_DAC>4.0){fVoltage_DAC = 1.0;}// IE=0x00;flay_a=1;// TR0Flag=1; //按一次就开始采样,再按一次就结束采样;}}if(KEY3==0) //减DAC电压,{Delay_1ms(10);if(KEY3==0){while(!KEY3);fVoltage_DAC=fVoltage_DAC-0.5;if(fVoltage_DAC<1.0){fVoltage_DAC = 4.0;}flay_a=1;// IE=0x00;// key12Flag=1;}}}if(flay_a==1){put_and_Display_Voltage();flay_a=0;}}}/********************************************************************************函数名:Display_Voltage功能说明:显示电压,整数调用函数:LCD_Pos Send_Data Write_LCD入口参数:Voltage(带显示电压*1000倍以后的值)x,y(从LCD的坐标x,y处开始显示)出口参数:无说明:显示围为0-9999 列:当Voltage=1234时,显示1.234V********************************************************************************/void Display_Voltage(unsigned int Voltage,char x,char y){code uchar Display_Dot[1]={"."};code uchar Display_Unit[1]={"V"};LCD_Pos(x,y);Write_LCD(Voltage/1000+0x30,1);Send_Data(Display_Dot,1); //显示小数点Write_LCD(Voltage%1000/100+0x30,1);Write_LCD(Voltage%100/10+0x30,1);Write_LCD(Voltage%10+0x30,1);Send_Data(Display_Unit,1); //显示单位}/********************************************************************************函数名:Sample_Voltage功能说明:带有滤波功能的电压测量调用函数:ADC_TLC1549入口参数:无出口参数:Votlage(测量滤波后的电压)说明:********************************************************************************/unsigned int Sample_Voltage(void){double Filt_Tab[3]={0};char Flag_Filt_Tab = 0;unsigned int Tab_Vol[30] ={0},k=0,Votlage = 0;double Sum = 0;char i=0,j=0;///////////////////////平均值滤波////////////for(i=0;i<30;i++){Tab_Vol[i]= ADC_TLC1549();}for(j=0;j<30;j++)for(i=0;i<30-j;i++)if(Tab_Vol[i]>Tab_Vol[i+1]){k=Tab_Vol[i];Tab_Vol[i]=Tab_Vol[i+1];Tab_Vol[i+1]=k;}for(i=0;i<10;i++){Sum +=Tab_Vol[i+10]; //取中间二十组数据}Sum = Sum/10; //平均滤波后的值Votlage =(unsigned)(Sum/1024.0*3770); //扩大1000 //需要一阶滞后滤波时把Sum修改成Filt_Tab[2]并取消屏蔽return Votlage;}/******************************************************************************** 函数名:Delay_1ms功能说明:毫秒级延时函数调用函数:入口参数:x:延时x毫秒出口参数:说明:********************************************************************************/void Delay_1ms(int x){int i,j;for(i=0;i<x;i++)for(j=0;j<120;j++);}//把p1.3,p1.4,p1.5,p1.6在液晶中进行显示,每行显示一组数据void displayPort1_in_LCD(unsigned char p, unsigned char i,unsigned char j) {LCD_Pos(i,j); //设置显示位置为第i行的第j个字符Write_LCD(p+0x30,1);}//一次显示四个电平值,显示在一列。

相关文档
最新文档