基于单片机的简易数字示波器.docx
《基于单片机的简易数字示波器.docx》由会员分享,可在线阅读,更多相关《基于单片机的简易数字示波器.docx(13页珍藏版)》请在冰豆网上搜索。
![基于单片机的简易数字示波器.docx](https://file1.bdocx.com/fileroot1/2023-1/23/466e3ba0-46c6-4fb7-8d7e-2da8c80dd050/466e3ba0-46c6-4fb7-8d7e-2da8c80dd0501.gif)
基于单片机的简易数字示波器
本科生课程设计
题目:
基于单片机的简易数字示波器
题目来源:
□省部级以上□市厅级□横向□自选
题目性质:
□理论研究□应用与理论研究□实际应用研究
学院:
信息工程学院系:
自动化
专业班级:
学生姓名:
学号:
起讫日期:
指导教师:
职称:
指导教师所在单位:
学院审核(签名):
审核日期:
二0年制
1、设计原理概述.................................................
设计背景.....................................................
设计原理框图..................................................
2硬件的设计.....................................................................
.最小系统的设计.........................................
2.1.1最小系统的电路设计................................
2.1.2单片机STC89c52介绍........................................
采样设计
2.2.1采样电路设计.......................................
2.2.2ADC0809介绍....................................
显示设计
2.3.1显示电路设计。
。
....................................
12864液晶介绍..........................................
3.软件设计..................................
程序流程图...............................
采样程序设计与分析................
显示程序设计与分析...................
4.仿真............................
Proteus仿真软件介绍..........................
矩形波仿真.....................................
三角波仿真....................................
正弦波仿真.............................
5.设计总结................................
6.参考文献...........................................
7.附录......................................
1设计原理概述
、设计背景
示波器被广泛应用于各个领域。
随着微电子技术和计算机技术的飞速发展,示波器也从模拟示波器向数字示波器发展。
同模拟示波器相比,数字示波器具有很多优点,并开始逐步取代模拟示波器,成为市场上的主流。
?
示波器是现代电子测量中最常用的仪器,它是一种可以用来观察、测量、记录各种瞬时电压,并以波形方式显示其与时间关系的电子仪器。
?
可是现在的数字示波器比较贵,普遍在1000元以上,这对于许多电子爱好者来说是一个比较大的负担,尤其是学生。
基于单片机的简易数字示波器可以很好的解决这个问题,简易数字示波器不但成本低廉,而且能够满足许多电子爱好者的测量需求,可以得到很广泛的应用。
设计原理框图
原理图设计
2硬件设计
最小系统设计
2.1.1最小系统电路设计
2.1.2单片机AT89S51介绍
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。
ATS8951的管脚图及主要性能参数:
AT89S51提供以下标准功能:
4K字节闪速存储器,128字节内部RAM,32个I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89S51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中到内容,但振荡器停止工作并禁止其它所有工作部件直到下一个硬件复位。
与MCS-51产品指令系统完全兼容,4K字节在系统编程(ISP)Flash闪速存储器,1000次擦写周期,的工作电压范围,全静态工作模式:
0HZ-33MHZ,三级程序加密锁,128*8字节内部RAM、32个可编程I/O口线、2个16位定时/计数器、6个中断源,全双工串行UART通道,低功耗空闲和掉电模式,中断可从空闲模式唤醒系统,看门狗(WDT)及双数据指针,掉电标示和快速编程特性,灵活的在系统编程(ISP-字节或页写模式)。
采样设计
2.2.1采样电路设计
2.2.2ADC0809介绍
ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,可以和单片机直接接口。
1.ADC0809引脚结构
ADC0809各脚功能如下:
D7-D0:
8位数字量输出引脚。
IN0-IN7:
8位模拟量输入引脚。
VCC:
+5V工作电压。
GND:
地。
REF(+):
参考电压正端。
REF(-):
参考电压负端。
START:
A/D转换启动信号输入端。
ALE:
地址锁存允许信号输入端。
(以上两种信号用于启动A/D转换)
EOC:
转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。
OE:
输出允许控制端,用以打开三态数据输出锁存器。
CLK:
时钟信号输入端(一般为500KHz)。
2.ADC0809应用说明
(1).ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。
(2).初始化时,使ST和OE信号全为低电平。
(3).送要转换的哪一通道的地址到A,B,C端口上。
(4).在ST端给出一个至少有100ns宽的正脉冲信号。
(5).是否转换完毕,我们根据EOC信号来判断。
(6).当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。
2.2.3电路设计说明
A、B、C接地默认IN0为输入端
VREF+接5V参考电源
CLOCK信号为600KHZ
显示设计
2.3.1显示电路设计
2.3.2、液晶屏LCD12864介绍
LCD12864分为两种,带字库和不带字库的此次使用的是不带字库的LCD12864液晶
Proteus中AMPIRE128*64,如下图所示,该液晶驱动器为KS0108
引脚功能:
与带字库液晶不同,此块液晶中含有两个液晶驱动器,一块驱动器控制64*64个点,左
右显示,这就是为什么AMPIRE128*64引脚有CS1和CS2的原因。
学习液晶主要看的它的
指令系统,再次先说明一下“页”的概念,此液晶有8页,一页有8行。
68/8=8;如下图所
示。
3、软件设计
程序流程图
采样程序设计与分析
ucharad_data[96];
sbitSTART=P3^4;
sbitOE=P3^6;
sbitEOC=P3^5;
ucharadc()
{ucharAD;
START=1;
START=0;
while(EOC==0)
{OE=1;}
AD=P1;
OE=0;
return(AD);}
voidad_cai()
{ucharb;
for(b=0;b<=95;b++)
ad_data[b]=3*adc();
}
Ucharad_data[96]申请96个8位的空间变量用于存储96个采样数据。
Ucahradc()为根据ADC0809的时序编写的采样函数。
Voidad_cai()为采样96次的函数。
显示函数设计与分析
ucharpage(uchard_ata)
{ucharpage;
if(d_ata<=51)page=0x05;
elseif(d_ata<=102)page=0x04;
elseif(d_ata<=153)page=0x03;
elseif(d_ata<=204)page=0x02;
elseif(d_ata<=255)page=0x01;
return(page);
}
ucharD_data(ucharpage,d_ata)
{ucharD_data;
switch(page)
{
case
(1):
D_data=d_ata-204;D_data=D_data/6;break;
case
(2):
D_data=d_ata-153;D_data=D_data/6;break;
case(3):
D_data=d_ata-102;D_data=D_data/6;break;
case(4):
D_data=d_ata-51;D_data=D_data/6;break;
case(5):
D_data=d_ata/6;break;
default:
break;
}
return(D_data);
}
uchardian(ucharD_data)
{uchard_data;
switch(D_data)
{case(0):
d_data=0x00;break;
case
(1):
d_data=0x80;break;
case
(2):
d_data=0x40;break;
case(3):
d_data=0x20;break;
case(4):
d_data=0x10;break;
case(5):
d_data=0x08;break;
case(6):
d_data=0x04;break;
case(7):
d_data=0x02;break;
case(8):
d_data=0x01;break;
default:
break;
}
return(d_data);
}
voidtudisplay(uchar*p)
{uchari,num,D_num,d_data,c=1;
SelectScreen
(1);
Set_column(16);
for(i=0;i<=95;i++)
{num=page(p[i]);
D_num=D_data(num,p[i]);
d_data=dian(D_num);
if(i>=48&&c)
{SelectScreen
(2);
Set_column(0);
c=0;
}
Set_page(num);
write_LCD_data(d_data);
}
P1=num;
}
波形都是由像素点组成的,波形的基础其实就是画点。
只要我们能点亮液晶的任意一个点,就能显示任意波形,从上面的图我们知道,它是分为两个半屏的,首先,我们要确定这个点是在左半屏还是右半屏,然后确定它是在那一行(page),再确定它是在哪一个字节的哪一个位(也就是确定它在那一列。
这些都确定后我们就定位到某一个具体的位上了,只就将这个位置1,就可以点亮这个点。
确定页8位转换,255个数,Page=255/5=51
ucharpage(uchard_ata)
{ucharpage;
if(d_ata<=51)page=0x05;
elseif(d_ata<=102)page=0x04;
elseif(d_ata<=153)page=0x03;
elseif(d_ata<=204)page=0x02;
elseif(d_ata<=255)page=0x01;
return(page);
}
以此确定页,然后根据页和转换的数据确定是点亮那一位
ucharD_data(ucharpage,d_ata)
{ucharD_data;
switch(page)
{
case
(1):
D_data=d_ata-204;D_data=D_data/6;break;
case
(2):
D_data=d_ata-153;D_data=D_data/6;break;
case(3):
D_data=d_ata-102;D_data=D_data/6;break;
case(4):
D_data=d_ata-51;D_data=D_data/6;break;
case(5):
D_data=d_ata/6;break;
default:
break;
}
return(D_data);
}
其中=255/40,这里近似除6,然后根据第几位给出显示数据由uchardian(ucharD_data)函数完成。
由于LCD12864列自动加一,所以只需确定第几页并确定显示那个点然后依次显示就能完成显示波形的需要。
4、仿真
矩形波仿真结果如下图:
由于算法的缺陷矩形波并不能像示波器一样显示完整的波形。
三角波仿真:
正弦波仿真
5、设计总结:
6、参考文献
7、附录: