Proteus仿真单片机数字电压表定时器给时钟频率Word文档格式.docx
《Proteus仿真单片机数字电压表定时器给时钟频率Word文档格式.docx》由会员分享,可在线阅读,更多相关《Proteus仿真单片机数字电压表定时器给时钟频率Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
![Proteus仿真单片机数字电压表定时器给时钟频率Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/1/ec80af1d-2696-4af6-82d2-cadab3a922f4/ec80af1d-2696-4af6-82d2-cadab3a922f41.gif)
1.2仿真电路图2
1.3设计过程3
3。
。
2设计课题软件系统程序清单3
总结12
3.1课程设计进行过程及步骤12
3.2所遇到的问题,你是怎样解决这些问题的15
3.3体会收获及建议15
3.4参考资料(书、论文、网络资料)15
4。
教师评语16
5.成绩16
1.概述
1.1目的
设计一个能够测量直流电压的数字电压表。
测量电压范围0~5V,测量精度小数点后两位。
该电压表上电或按键复位后能自动显示系统提示符作者信息,进入测量准备状态,按测量开始键则开始测量,并将测量值显示在液晶显示器上。
按退出键完成电压表的测量.
1。
2课程设计的组成部分
本电压表主要由单片机、4*4行列式键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1。
1所示:
AT89C51
图1。
1总体设计方案图
本电压表的所有的软件、参数均存放在AT89S52的FlashROM和内部RAM中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。
行列式键盘采用动态扫描方式。
利用单片机定时器及计数器产生定时效果通过编程形成数字电压表效果,再利用液晶显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。
数字电压表设计的内容
1软件仿真电路设计
2.1。
1设计思路
多路数字电压表应用系统硬件电路由单片机、A/D转换器、数码管显示电路和按键处理电路组成,由于ADC0808在进行A/D转换时需要有CLK信号,本试验中ADC0809的CLK直接由外部电源提供为500kHz的方波。
由于ADC0809的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。
实际显示的电压值(D/256*VREF)ADC0808采用逐次逼近法转换,把模拟电压转换成16进制的D,由于是对直流电压0~5V进行采集,所以D对应的电压为V0
,我们的目的就是要把V0显示在LED显示器上,因为单片机不好进行小数点计算,所以有:
V0=2*D扩大了100倍,扩大100倍后的结果高八位放寄存器B,低八位放寄存器A,分寄存器B为0或不为0的情况进行存取数据,得到的结果个位放入R0,十位放入R1,通过查表使之显示在LED显示器。
2仿真电路图
用Protues软件仿真设计的电路如图3-1所示。
图3—1仿真电路
3设计过程
系统结构框图
系统采用12M晶振产生脉冲做AT89C51的内部时钟信号,通过软件设置单片机的内部定时器T0产生中断信号.利用中断设置单片机的P2。
4口取反产生脉冲做AT89C51的时钟信号。
通过按键选择八路通道中的一路,将该路电压送入ADC0809相应通道,单片机软件设置ADC0809开始A/D转换,转换结束ADC0809的EOC端口产生高电平,同时将ADC0809的EO端口置为高电平,单片机将转换后结果存到片内RAM。
系统调出显示子程序,将保存结果转化为0.00-5.00V分别保存在片内RAM;
系统调出显示子程序,将转化后数据查表,输出到LED显示电路,将相应电压显示出来,程序进入下一个循环。
.2设计课题软件系统程序清单
#include<
reg52.h>
#include〈intrins。
h〉
#defineucharunsignedchar
#defineuintunsignedint
sbitCLOCK=P1^4;
sbitSTART=P1^5;
sbitEOC=P1^6;
sbitOE=P1^7;
sbitdata0=P1^0;
sbitdata1=P1^1;
sbitdata2=P1^2;
sbitdata3=P1^3;
uintA1,A2,A3,A4,adval;
uinta;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
//gongyin
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;
i>
0;
i——)
for(j=110;
j〉0;
j——);
}
voiddisplay(ucharqian,ucharbai,ucharshi,ucharge)
{
P0=0xff;
data0=0;
P0=table[qian];
delayms(5);
data0=1;
data1=0;
P0=table[bai];
delayms(5);
data1=1;
data2=0;
P0=table[shi];
data2=1;
data3=0;
P0=table[ge];
data3=1;
}
voidinit()
TMOD=0x20;
TH0=(65536-2)/256;
TL0=(65536—2)%256;
EA=1;
ET0=1;
TR0=1;
}
voidADC0808()
{
START=0;
START=1;
START=0;
while(!
EOC);
OE=1;
a=P2;
OE=0;
adval=a*(1.0/256)*5000+20;
A1=adval/1000;
A2=adval/100%10;
A3=adval/10%10;
A4=adval%10;
display(A1,A2,A3,A4);
voidmain()
init();
while
(1)
ADC0808();
voidT0_time()interrupt1
TH0=(65536-2)/256;
TL0=(65536—2)%256;
CLOCK=~CLOCK;
结果:
总结
3.1课程设计进行过程及步骤
系统软件采用汇编语言按模块化方式进行设计,然后通过Keil软件开发平台将程序转变成十六进制程序语言。
主程序流程框图如3.1所示;
键盘扫描子程序框图如3。
2所示;
电压转换流程图如3.3所示;
液晶显示程序流程图如图3.4所示;
N
图3.1.1主程序流程框图
图3。
2键盘扫描子程序
3电压转换流程图
图3.1.4液晶显示程序图
2所遇到的问题,你是怎样解决这些问题的
翻书,上网查解决方法,问老师
3体会收获及建议
在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,只有我们去试着做了,才能真正的掌握,学习的理论有些东西是很难理解的,更谈不上掌握。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写及读的过程中才能提高,这就是我在这次课程设计中的最大收获。
4参考资料(书、论文、网络资料)
[1]代启化。
基于Proteus的电路设计及仿真[J].现代电子技术.2006,第19期.
[2]刘文秀。
单片机应用系统仿真的研究[J].现代电子技术。
2005,第286期。
[3]曹巧媛。
单片机原理及应用[M],北京:
电子工业出版社,1997.7。
[4]张洪润。
兰清华,单片机应用技术教程[M],北京:
清华大学出版社,1997.11。
[5]李广第.单片机基础[M],北京航空航天大学出版社,2006。
7。
[6]DaiQiHua。
Proteus—basedcircuitdesignandsimulation[J].Modernelectronic
technology.2006,No。
19
[7]LiuWenXiu.MicrocontrollerApplicationSystemSimulation[J].Modernelectronictechnology。
2005,No.286
[8]CaoQiaoYuan。
MicrocontrollerTheoryandApplications[M],Beijing:
Electronic
IndustryPress,1997。
7.
[9]ZhangHongrun,LanQinghua,MCUapplicationtechnologytutorial[M],Beijing:
TsinghuaUniversityPress,1997。
11.
[10]Liguangdi。
Microcontrollerbasedon[M],BeijingAerospaceUniversityPress,2006.7。
4.教师评语
5.成绩