简易数字示波器设计方案.docx
- 文档编号:8903583
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:36
- 大小:1.19MB
简易数字示波器设计方案.docx
《简易数字示波器设计方案.docx》由会员分享,可在线阅读,更多相关《简易数字示波器设计方案.docx(36页珍藏版)》请在冰豆网上搜索。
简易数字示波器设计方案
简易数字示波器设计方案
1课题任务
利用单片机和12864液晶显示器,制作简易数字示波器。
要求如下:
(1)显示器显示频率围0-50HZ
(2)示波器的输入阻抗为100K
(3)示波器的输入信号围:
-5~5V
(4)测量显示被测信号的频率(周期)、峰值(有效值)
参考方案如下:
图1-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.3TL082双运放选择方案
运放电路是对输入的波形进行进一步的放大,已达到单片机的要求波形,以便对波形进行采集,从而达到设计目的,减少误差。
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.5STC部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.2STC12C5A60S2部AD程式
#include
#include
#include"lcd.h"
#defineADC_POWER0x80//AD电源控制
#defineADC_START0x08//AD转换控制
#defineADC_FLAG0x10//AD转换完成
#defineSpeed_00x00//540clk
#defineSpeed_10x20//360clk
#defineSpeed_20x40//180clk
#defineSpeed_30x60//90clk
#defineADC00x00//P1.0
#defineADC10x01//P1.1
#defineADC20x02//P1.2
#defineADC30x03//P1.3
#defineADC40x04//P1.4
#defineADC50x05//P1.5
#defineADC60x06//P1.6
#defineADC70x07//P1.7
voidAD_init(void);
doubleResult_Calculate(void);
voidSendData(ucharbyte);
//**********************************//
//A/D初始化//
//**********************************//
voidAD_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;//开总中断
}
//****************************************//
//串口初始化//
//****************************************//
voidUART_init(void)
{
SM0=0;//选择串口为方式1工作
SM1=1;//8位数据波特率可变
REN=1;
BRT=0xDC;
AUXR=0x15;//选择独立波特率发生器为串行
//口的波特率发生器,模式为1T
}
//******************************************//
//转换结果计算//
//******************************************//
doubleResult_Calculate(void)
{
uinttemp;
doubleresult;
temp=ADC_RES*256+ADC_RESL;
result=temp*4.94/1024;
returnresult;
}
//******************************************//
//串口发送数据//
//******************************************//
voidSendData(ucharbyte)
{
SBUF=byte;
while(!
TI);
TI=0;
}
//******************************************//
//主程序//
//******************************************//
voidmain()
{
Init_LCD();
AD_init();
UART_init();
while
(1);
}
//******************************************//
//A/D中断服务//
//******************************************//
voidAD_Service(void)interrupt5
{
ADC_CONTR&=!
ADC_FLAG;//清标志
Printf_Decimal(Result_Calculate());
ADC_RES=0x00;
ADC_RESL=0x00;
ADC_CONTR=ADC_POWER|Speed_2|ADC_START;//开始下一次转换
_nop_();
_nop_();
_nop_();
_nop_();
}
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitPSB=P0^4;//串/并行接口选择1-并行0-串行
sbitRS=P0^7;//并行数据/命令选择,串行片选0-指令1-数据
sbitRW=P0^6;//并行读写选择0-写1-读串行数据口
sbitE=P0^5;//并行使能,串行同步时钟
voidDelay_ms(uinttime);//延时
ucharBusy(void);//读忙
ucharRead_Status(void);//读状态
ucharRead_Date(void);//读数据
voidWrite_Cmd(ucharcmd);//写命令
voidWrite_Date(uchardate);//写数据
voidInit_LCD(void);//初始化LCD
voidLocation(ucharx,uchary);//设定显示位置
voidClear_Screen(void);//清屏
voidWrite_str(uchar*p);
voidPrintf_Decimal(doubleNum);
#include"lcd.h"
externvoidSendData(ucharbyte);
4.3主程式
#include"stc12c5a60s2.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitbusy=P0^7;
sbitrw=P3^6;
sbitrs=P3^7;
sbiten=P3^5;
uintdataADC_RES_DATA;
uintpdataa[128];
ucharad_t,ad_min,ad_max,max,min,num,windows,heng,zong,ab,num_1,num_k;
uintad_pp,freq;
ucharcodewave[]={0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x08,0x00,0x00,0x80,0x00,0x08,0x00,0x00,0x80,0x00,0x08,0x00,0x00,
0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3E,0xF3,0xE7,0x00,0x00,0x11,0x7C,0x01,0xE0,0x78,0x00,0x00,0x04,0x40,0x00,0x00,
0x20,0x8A,0x08,0xB0,0x00,0x11,0x0C,0x01,0x10,0x44,0xC0,0x00,0x04,0x40,0x00,0x00,
0x20,0x8A,0x08,0xB0,0x00,0x11,0x18,0x01,0x10,0x44,0xC0,0x00,0x04,0x40,0x00,0x00,
0x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 数字 示波器 设计方案
![提示](https://static.bdocx.com/images/bang_tan.gif)