简易数字示波器设计方案

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

简易数字示波器设计方案

1课题任务

利用单片机和12864液晶显示器,制作简易数字示波器。要求如下:

(1) 显示器显示频率范围0-50HZ

(2)示波器的输入阻抗为100K

(3)示波器的输入信号范围:-5~5V

(4)测量显示被测信号的频率(周期)、峰值(有效值)

参考方案如下:

图错误!文档中没有指定样式的文字。-1 总体设计结构

2 设计方案选择

2.1 显示器选择方案

带中文字库的12864每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。带中文字库的128X64-0402B内部提供128×2字节的字符显示RAM缓冲区(DDRAM)。字符显示是通过将字符显示编码写入该字符显示RAM实现的。根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。三种不同字符/字型的选择编码范围为:0000~0006H(其代码分别是0000、0002、0004、0006共4个)显示自定义字型,02H~7FH显示半宽ASCII码字符,A1A0H~F7FFH显示8192种GB2312中文字库字形。字符显示RAM

在液晶模块中的地址80H~9FH。字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关系如下表所示。

12864显示器图2-1

2.2 单片机芯片选择方案

STC12C5A60S2是STC生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换,针对电机控制,强干扰场合。

STC12C5A60S2图2-2

2.3 TL082双运放选择方案

运放电路是对输入的波形进行进一步的放大,已达到单片机的要求波形,以便对波形进行采集,从而达到设计目的,减少误差。

3硬件设计

3.1 系统连接图

总体电路设计结构如图3-1所示

总设计图3-1

3.2 键盘扫描电路的设计

总体电路结构如下图3-2

按键图3-2

由于设计的是示波器,在示波器显示波形的时候需要对波形的幅度频率进行调整,所以设计键盘对波形进行调整。

按扭作用四个按钮分别对应频率和幅度的加减调节,X轴减调节是减少频率,X 轴加调节是增加频率,Y轴减调节是减少幅度,Y轴加调节是增加幅度。

3.3 振荡复位电路

总体电路结构如图3-3所示

振荡复位电路图3-3

时钟振荡电路用于产生单片机正常工作时所需要的时钟信号,电路由两个30pF的瓷片电容和一个12MHz的晶振组成,并接入到单片机的XTAL1和XTAL2引脚处,使单片机工作于内部振荡模式。此电路在加电后延迟大约10ms振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率决定。电路中两个电容C1、C2的作用使电路快速起振,提高电路的运行速度。

复位电路

复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位.

3.4最小系统

最小系统图3-4

3.5 STC内部AD采集

STC12C5A60S2单片机有8路10位高速AD转换器,P1^0-P1^7涉及寄存器:P1ASF(模拟功能控制寄存器)、ADC_CONTR(ADC控制寄存器) 、ADC_RES、ADC_RESL(转换结果寄存器)。

注意: 1、初次打开内部A/D模拟电源需适当延时等内部模拟电源稳定后,再启动A/D转换,启动A/D后,在转换结束前不改变任何I/O口的状态,有利于高精度A/D 转换,若能将定时器/串行/中断系统关闭更好。

2、A/D转换模块使用的时钟为内部R/C振荡器所产生的系统时钟

3、由于使用两套时钟,设置好ADC_CONTR后要加4个空延时操作才可以正确读到ADC_CONTR寄存器的值

3.6 双运放电路

总体电路结构如图3-5所示

运放电路图3-5

4 软件设计

4.1 程序设计流程

如下图4-1所示

设计流程 图4-1

4.2 STC12C5A60S2内部AD 程式

信号输入

12864LCD 初始化 显示参考坐标

初始化AD ,开始AD 采集时钟

更新

是否有按键

数据处理以便LCD 显示

键盘扫描

LCD 显示

#include

#include

#include "lcd.h"

#define ADC_POWER 0x80 //AD电源控制

#define ADC_START 0x08 //AD转换控制

#define ADC_FLAG 0x10 //AD转换完成

#define Speed_0 0x00 //540 clk

#define Speed_1 0x20 //360 clk

#define Speed_2 0x40 //180 clk

#define Speed_3 0x60 //90 clk

#define ADC0 0x00 //P1.0

#define ADC1 0x01 //P1.1

#define ADC2 0x02 //P1.2

#define ADC3 0x03 //P1.3

#define ADC4 0x04 //P1.4

#define ADC5 0x05 //P1.5

#define ADC6 0x06 //P1.6

#define ADC7 0x07 //P1.7

void AD_init(void);

double Result_Calculate(void);

void SendData( uchar byte );

//**********************************//

// A/D初始化//

//**********************************//

void AD_init(void)

{

AUXR1 = 0x04; //转换结果高2位放在ADC_RES的低2位中,低8位放在ADC_RESL中

P1ASF = 0x01; //P1.0口作为模拟功能A/D使用

ADC_RES = 0x00; //结果清零

ADC_RESL = 0x00;

ADC_CONTR = ADC_POWER|Speed_2|ADC0|ADC_START; //打开电源,180CLK周期转换,选择P1.0作输入

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

EADC = 1; //允许A/D转换中断

EA = 1; //开总中断

相关文档
最新文档