简易示波器.docx
- 文档编号:27583481
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:11
- 大小:54.23KB
简易示波器.docx
《简易示波器.docx》由会员分享,可在线阅读,更多相关《简易示波器.docx(11页珍藏版)》请在冰豆网上搜索。
简易示波器
电子线路设计
————简易示波器设计
院系:
物理学与电子科学学院
班级专业:
2012级微电子
学生姓名:
陈仁浩/徐壮
学号:
20122211052400132012221105240021
指导老师:
卢仕
目录
引言-2-
一、本课程设计的目的-3-
二、单片机课程设计内容及要求-3-
三、下位机模块程序-3-
3.1头文件和声明-3-
3.2延时函数-4-
3.3ADC初始化-4-
3.4用ADC查询监测返回端口通道电压值-5-
3.5串口发送数据-5-
3.6串口模式初始化-6-
3.7主函数-6-
四、上位机程序-8-
五、调试结果及结论-13-
六、心得体会-13-
引言
在众多的51系列单片机中,要算国内STC公司的1T增强系列更具有竞争力,因他不但和8051指令、管脚完全兼容,而且其片内的具有大容量程序存储器且是FLASH工艺的,如STC12C5A60S2单片机内部就自带高达60KFLASHROM,这种工艺的存储器用户可以用电的方式瞬间擦除、改写。
而且STC系列单片机支持串口程序烧写。
显而易见,这种单片机对开发设备的要求很低,开发时间也大大缩短。
写入单片机内的程序还可以进行加密,这又很好地保护了你的劳动成果。
重要的一点STC12C5A60S2目前的售价与传统51差不多,市场供应也很充足,是一款高性价比的单片机。
STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S,即25万次每秒),针对电机控制,强干扰场合。
一、本课程设计的目的
单片机课程设计是在教学及实验基础上,对课程所学理论知识的深化和提高。
因此,要求学生能综合应用所学知识,设计与制造出具有较复杂功能的小型单片机系统,并在实践的基本技能方面进行一次系统的训练。
能够较全面地巩固和应用“单片机”课程中所学的基本理论和基本方法,并初步掌握小型单片机系统设计的基本方法。
培养独立思考、独立收集资料、独立设计规定功能的单片机系统的能力;培养分析、总结及撰写技术报告的能力。
二、单片机课程设计内容及要求
利用stc12c5a60s的A/D转换功能制作一个简易的示波器,将采样到的电压信号以动态图像的形式在PC上显示。
实验环境:
KeiluVision3
预备知识:
C语言,A/D转换,51单片机相关知识。
三、下位机模块程序
3.1头文件和声明
#include"stc12c5a60s2.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineADC_POWER0x80
#defineADC_FLAG0x10
#defineADC_START0x08
chara[11]={'0','1','2','3','4','5','6','7','8','9','a'};
3.2延时函数
通过执行无意义的操作消耗CPU时间实现延时的,实际上就是空循环,但是延时时间基本是和循环次数成正比,和晶振频率成反比的。
voiddelay(uintt)
{
uchari;
while(t--)
for(i=0;i<20;i++);
}
3.3ADC初始化
给各个寄存器赋值,为A/D转换做准备工作。
voidADC_init()
{
P1ASF=0xff;
ADC_CONTR=0x80;
delay
(1);
ADC_RES=0;
ADC_RESL=0;
}
3.4用ADC查询监测返回端口通道电压值
ucharADC_work()
{
ucharm;
ADC_CONTR|=0x88;
while(!
(ADC_CONTR&0x10));
m=ADC_RES;
ADC_CONTR&=0xef;
ADC_RES=0;
ADC_CONTR&=0xf7;
return(m);
}
3.5串口发送数据
voidsend(ucharsendd)
{
SBUF=sendd;
while(!
TI);
TI=0;
}
3.6串口模式初始化
也是为A/D转换做准备。
voiduart_init()
{
EA=1;
ES=1;
SCON=0x50;//工作于方式1,打开REN
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
3.7主函数
voidmain()
{
unsignedintm,n,qian,bai,shi,ge;
uart_init();
ADC_init();
while
(1)
{
AUXR=AUXR|0x40;
n=(float)(ADC_work());
m=(int)(((n/256.0)*5+0.001)*1000);
qian=m/1000;
bai=((m%1000)/100);
shi=((m%100)/10);
ge=(m%10);
send(a[10]);
send(a[qian]);
send(a[bai]);
send(a[shi]);
send(a[ge]);
delay(200);
}
}
四、上位机程序
OptionExplicit
PrivateSubCommand1_Click()
WithMSComm1
.Settings="115200,n,8,1"
.InBufferSize=200
.OutBufferSize=20
.InputMode=0'发送的是字符就要写字符,或者说二进制
.InputLen=1'
.RThreshold=1
.SThreshold=0
.CommPort=Val(Text1.Text)
.PortOpen=True
EndWith
EndSub
PrivateSubCommand3_Click()
MSComm1.PortOpen=0
EndSub
PrivateSubCommand2_Click()
End
EndSub
PrivateSubForm_Load()
Form1.AutoRedraw=1
EndSub
PrivateSubMSComm1_OnComm()
StaticqAsInteger
StaticdadadaAsSingle,dadaAsSingle,daAsSingle,xiaoAsSingle
DimbAsVariant
SelectCaseMSComm1.CommEvent
CasecomEvReceive
b=(MSComm1.Input)
'MSComm1.InBufferCount=0
Ifb="a"Then
q=1
ExitSub
EndIf
Ifq=1Then
dadada=Val(b)
q=2
ExitSub
EndIf
Ifq=2Then
dada=Val(b)
q=3
ExitSub
EndIf
Ifq=3Then
da=Val(b)
q=4
EndIf
Ifq=4Then
xiao=Val(b)
EndIf
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''数据接收部分
DimiAsInteger,rAsSingle
'StaticmAsInteger:
m=100
Statica(0To100)AsSingle
Form1.Cls
r=(dadada+dada/10+da/100+xiao/1000)-0.001
Text2.Text=r
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''画坐标线
DrawStyle=0
DrawWidth=1
Line(1000,9000)-(10000,9000),RGB(255,0,0)
Line(1000,9000)-(1000,1000),RGB(255,0,0)
'CurrentX=1000:
CurrentY=9000:
Print"0"
DrawWidth=6
FontSize=14
Fori=0To100Step10
PSet(1000+(9000/100)*i,9000):
CurrentX=1000+(9000/100)*i:
CurrentY=9000:
Printi
Nexti
CurrentX=10800:
CurrentY=9000:
Print"X轴"
Fori=0To10
PSet(1000,9000-800*i):
CurrentX=1000:
CurrentY=9000-800*i:
Printi
Nexti
CurrentX=1000:
CurrentY=500:
Print"Y轴"
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''X轴初始化
Dimx(0To100)AsInteger
Fori=0To100
x(i)=1000+(9000/100)*i
Nexti
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Y值顺延
Dimy(0To100)AsSingle
Fori=100To1Step-1
a(i)=a(i-1)
Nexti
a(0)=r
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''依X轴画点连线画点连线。
。
DimtAsInteger
Fort=0To100
y(t)=9000-8000*(a(t)/10)
Nextt
Fort=0To100
DrawWidth=5
PSet(x(t),y(t))
Ift<100Then
DrawWidth=1
Line(x(t),y(t))-(x(t+1),y(t+1)),RGB(255,0,0)
EndIf
Nextt
EndSelect
MSComm1.InBufferCount=0
EndSub
五、调试结果及结论
当电压大于4v时,红灯亮;
当电压大于3v小于4v时,蓝灯亮;
当电压大于2v小于3v时,黄灯亮;
当电压小于2v时,绿灯亮。
接触点的电压变化将以图形的形式呈现在上位程序应用中。
六、心得体会
通过这次的课程设计作品的制作让我对单片机的理论有了更加深入的了解,同时在具体的制作过程中我们发现现在书本上的知识与实际的应用存在着不小的差距,书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,我们不得不考虑这方的问题,这让我们无法根据书上的理论就轻易得到预想中的结果,有时结果甚至很差别很大。
通过这次实践使我更深刻的体会到了理论联系实际的重要性,我们在今后的学习工作中会更加的注重实际,避免称为只会纸上谈兵的赵括。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 示波器