单片机课程设计10.docx
《单片机课程设计10.docx》由会员分享,可在线阅读,更多相关《单片机课程设计10.docx(22页珍藏版)》请在冰豆网上搜索。
单片机课程设计10
目录
绪论1
第1章系统总体结构与工作原理2
1.1系统总体方案选择与说明2
1.1.1通道转换方案设计2
1.1.2显示部分方案设计2
1.2系统总体方案总结3
1.3系统结构框图3
1.4工作原理4
第2章硬件设计及计算方法4
2.1单片机的选择及时钟电路4
2.2LED显示器件选择5
2.3A/D转换模块及转化电路设计6
2.3.1ADC0808简介7
2.3.274HC4066简介7
2.3.3A/D转换以及量程选择电路8
第3章软件设计与说明9
3.1数字电压表系统软件设计方案确定9
第4章总结12
参考文献13
附录1系统原理图14
附录2系统源程序15
绪论
传统的模拟式(即指针式)电压表已有100多年的发展史,虽然不断改进与完善,仍无法满足现代电子测量的需要,数字电压表自1952年问世以来,显示强大的生命力,现已成为在电子测量领域中应用最广泛的一种仪表。
数字电压表简称DVM(DigitalVoltmeter),它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。
智能化数字电压表则是最大规模集成电路(LSI)、数显技术、计算机技术、自动测试技术(ATE)的结晶。
一台典型的直流数字电压表主要由输入电路、A/D转换器、控制逻辑电路、计数器(或寄存器)、显示器,以及电源电路等级部分组成。
本设计采用了以单片机为开发平台,控制系采用AT89C52单片机,A/D转换采用ADC0808。
系统除能确保实现要求的功能外,还可以方便进行8路其它A/D转换量的测量、远程测量结果传送等扩展功能。
简易数字电压测量电路由A/D转换、数据处理、显示控制等组成。
关键词:
单片机AT89C52A/D转换ADC080874HC4066数据处理
第1章系统总体结构与工作原理
1.1系统总体方案选择与说明
实现数字电压表的方案很多,目前广泛采用的时基于74系列逻辑器件,本设计将介绍基于单片机实现的方案。
方案设计此设计包含两个模块,通道转换和显示部分方案。
1.1.1通道转换方案设计
方案一:
考虑到ADC0808的8路模拟量输入本质上也是模拟开关,因此可以利用其8个模拟通道中的IN0与IN1个作为通道转换器,即根据通道对应的电压测量范围确定对应的电压方法倍数设计对应的放大电路。
用ADC0808对74HC4066进行控制,能实现量程的自动切换。
方案二:
利用手动开关实现通道转换。
该方案可简化控制程序,消减系统开销。
缩短反应时间,不足之处在于操作麻烦。
综上所述:
方案一操作方便更加满足实际需求,故选择方案一。
1.1.2显示部分方案设计
方案一:
单片机的P0口接74HC573芯片来驱动四位数码管
方案二:
直接用单片机的P10-P1.7口驱动数码管。
综上所述,两个方案都可行,但方案二所需方便快捷,则选择此方案。
1.2系统总体方案总结
根据数字电压表的功能实现要求,选用AT89C51单片机作控制系统,低电压经放大器选用OPA820实现放大10倍、高电压经大电阻分压从而控制输入ADC0808的信号在0到5V左右实现A/D转换经AT89C51送入LED显示。
其精度和显示可以精确控制,且电路相对简单成本低,稳定性较高,故采用此设计。
1.3系统结构框图
根据项目要求,确定该系统的设计方案,图1-3-1为该系统设计方案的结构框图。
硬件电路由6各部分组成,即单片机、时钟电路、复位电路、LED显示电路、A/D装唤器和测量电压输入电路。
单片机
电源
LED
AD转换
复位电路
电压转化
输入
图1-3-1系统结构框图
1.4工作原理
对待测模拟电压值按不同的范围,分为500mv、10v两个档位,分别为档位1与档位2。
对于高于500mv的档位,采用高电阻分压电路,其比例为1/2等比例转换为0—5V的电压值,对于500mv档位,等比例放大10倍左右,再将电压送入AD进行转换,再将处理的信号送入单片机进行处理并显示。
同时单片机对74HC4066进行控制,实现自动切换量程。
当电压超过500mv时,p3.2输出低电平,关闭档位1电路中的开关74HC4066,档位2的电路工作,如此实现自动切换量程。
在本系统设计中采用AT89C51单片机的端口P1.0~P1.7作为4位LED数码管的显示控制。
P3.2与P3.3作为档位控制端口。
P0作为AD输入端口,P2作为AD转换控制端口。
AT89C51单片机的晶体振荡器振荡频率为11.0592MHz。
4位LED数码管的采用动态显示方式显示。
第2章硬件设计及计算方法
根据设计要求与思路,确定该系统的设计方案。
硬件电路由5个部分组成,即单片机时钟电路、复位电路、4位显示器电路、A/D转换电路,电压转换电路。
2.1单片机的选择及时钟电路
根据初步设计方案的分析,设计这样一个简单的应用系统,可以选择带有EPROM的单片机,应用程序直接存储在片内,不用在外部扩展程序存储器,电路可以简化。
此电路选择Atmel公司生产的AT89C51。
AT89系列与MCS-51系列单片机相比有两大优势:
第一,片内程序存储器采用闪速存储器,使程序的写入更加方便;第二,提供了更小尺寸的芯片,使整个电路体积更小。
它以较小的体积、良好的性价比倍受青睐。
单片机工作的时间基准是由时钟电路提供的。
在单片机的XTAL1和XTAL2两个管脚,接一只晶振及两只电容就构成了单片机的时钟电路,如图2-1-1所示。
图2-1-1单片机的时钟电路
电路中,电容C1和C2对震荡电路有微调的作用,通常的取值范围位(30+10)pF。
石英晶体选择6MHz或12MHz都可以,其结果只是机器周期时间不同,影响计数器的计数初值,此设计取12MHz。
本设计使用的是CLOCK时钟脉冲触发。
2.2LED显示器件选择
单片机应用系统中,通常都需要进行人机对话。
这包括人对应用系统的状态干预与数据输入,以及应用系统向人们显示运行状态与运行结果。
显示器、键盘电路就是用来完成人机对话活动的人机通道。
图2-2-1LED显示管脚
LED显示器的驱动是一个非常重要的问题,由图2-2-1可知,显示电路由LED显示器、段驱动电路和位驱动电路组成。
用AT89C52单片机的端口P1.0~P1.7作为4位LED数码管的显示控制。
2.3A/D转换模块及转化电路设计
A/D转换器的功能是将模拟量转换为与其大小成正比的数字量信号。
能实现这种转换的原理和方法很多,此设计采用ADC0808转换器。
ADC0808是属于连续渐进式的A/D转换器,这类型的A/D转换器除了转换速度快(几十至几百us)、分辨率高外,还有价钱便宜的优点,普遍被应用于微电脑的接口设计上。
2.3.1ADC0808简介
ADC0808的管脚图如图2-3-1所示
图2-3-1ADC0808管脚图
1~5和26~28(IN0~IN7):
8路模拟量输入端。
8、14、15和17~21:
8位数字量输出端。
22(ALE):
地址锁存允许信号,输入,高电平有效。
6(START):
A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
7(EOC):
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
9(OE):
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
10(CLK):
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
12(VREF(+))和16(VREF(-)):
参考电压输入端主电源输入端。
23~25(ADDA、ADDB、ADDC):
3位地址输入线,用于选通8路模拟输入中的一路。
2.3.274HC4066概述
74HC4066是一款高速CMOS器件,74HC4066引脚兼容HEF4066B。
74HC4066遵循JEDEC标准no.7A。
74HC4066包含4个独立的模拟开关。
每个开关包含2个输入/输出引脚(nY或nZ)和1个高有效使能输入引脚(nE)。
当引脚nE为低时,其对应的开关将被关断。
74HC4066引脚兼容74HC4016,但具备更低的导通阻抗。
此外,导通阻抗在整个输入信号范围内保持恒定。
2.3.3A/D转换以及量程选择电路
集成摸数转换芯片ADC0808实现的A/D转换电路被测信号由ADC0808模拟输入端输入,完成A/D转换后送入单片机,经相应处理后送出显示。
系统硬件电路设计,对待测模拟电压值按不同的范围,分为500mV,10V两个档位,对于高于500mV的档位,采用高电阻分压电路,等比例转换为0—5V的电压值,对于500mV档位,等比例放大10倍左右,再将电压送入AD进行转换,再将处理的信号送入单片机进行处理并显示,单片机的P3.2与P3.3口分别对74HC4066进行控制,实现对量程的切换。
量程选择方式:
自动。
具体电路图2-3-2如下。
图2-3-2A/D转换以及量程选择电路
第3章软件设计与说明
进行应用软件设计时可以采用模块化结构设计,其优点是:
①每个模块的程序结构简单,任务明确,易于编写、调试和修改;②程序可读性好,对程序的修改可局部进行,其他部分可以保持不变,易于功能扩充和版本升级;
③易于使用频繁的子程序可以建立子程序,便于多个模块调用;
④便于分工合作,多个程序员同时进行程序的编写和调试工作,加快软件研制进度。
3.1数字电压表系统软件设计方案确定
(1)根据设计要求,根据系统所要完成的功能,设计如图3-1-1所示的功能模块。
图3-1-1数字电压表软件设计的模块
(2)程序的设计
①主程序的设计主程序的内容一般包括:
主程序的起始地址、中断服务额程序的起始地址、有关内存单元及相关部件的初始化和一些子程序调用等。
根据设计要求,设计出如图3-1-2所示的主程序流程图。
图3-1-2主程序流程图
②A/D转换子程序的设计A/D转换程序的功能是采集数据,再整个系统设计中占有很高的地位。
程序流程图如图3-1-3所示。
图3-1-3A/D转换子程序流程图
③数码转换及显示子程序的设计由于人们日常习惯使用十进制数,而计算机的键盘输入、输出以及显示常采用二进制编码的十进制数(即BCD码)或ASCII码。
因此,在程序设计中经常要进行数码转换。
5.2所用芯片及参数
表5-2-1所用芯片及参数
序号
名称
元件编号
参数
数量
1
单片机
AT89C52
1
2
差动放大器
OPA820
1
3
开关
74HC4066
2
4
7段数码管
7SEG-MPX2-CC
4
5
电容
CAP
30pF
2
6
晶振
CRYSTAL
12Mhz
1
7
电阻
RES
1k
1
8
电阻
RES
2k
1
9
电阻
RES
20k
3
10
电阻
RES
4.7k
1
11
电阻
RES
180k
1
12
电解电容
CAP-ELEC
22μF
1
13
模数转换芯片
ADC8088
1
第4章总结
这一次的课程设计,我觉得是十分有意义的,我不仅学到了不少东西,同时在与同组同学合作中建立了深厚的友谊。
此次我做的是数字电压表这个基础的设计,虽然该设计十分简单,但是上课所学的很多知识都能应用在这个电压表设计中。
确定课设内容后,我查找大量相关材料,然后知识汇总,把有关课题的内容经过对比与分析,最后来完成课程设计。
电压测量在很多参考书上都有介绍,但运用到软件中时,出现各种不同的错误,在参考别人的程序时,在老师的指导下,根据书本上所讲的有关知识点加以改进,编了一个新的程序,来实现功能。
编程我运用的是C语言来说,C语言在很多领域的功能都很强大使用C语言,感觉比较简洁清晰,函数关系较为清晰,并可以减少程序的冗长。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。
一周的设计完满结束了,经过自己的努力和同学的帮忙终于有了成果,特别离不开指导老师南老师与叶老师悉心教导,相信他们的工作作风和知识筑成都是我们学习榜样,给我很大的启迪。
感谢这些老师不畏辛劳,热心精心的指导。
在这里向他们说声谢谢,你辛苦了。
参考文献
[1]彭为等.单片机典型系统设计实例精讲[M].北京:
电子工业出版社,2006
[2]张毅刚等。
单片机原理与应用设计[M].北京:
电子工业出版社,
[3]王迎旭.单片机原理与应用.北京:
机械工业出版社,2004.7
[4]周向红.51系列单片机应用与实践教程.北京:
北京航空航天大学出版社,2008.5
[5]刘国荣.单片机微型计算机技术.北京:
机械工业出版社,1996
附录1系统原理图
附录2系统源程序
#include
#include
sbitadcs=P2^0;
sbitadrd=P2^1;
sbitadwr=P2^2;
sbitduanla=P2^6;
sbitweila=P2^7;
sbitv1=P3^0;
sbitv2=P3^1;
sbitv3=P3^2;
sbitv4=P3^3;
unsignedlongintadval;
unsignedcharqian,bai,shi,ge,a;
//段低电平有效,位高电平有效
unsignedchartable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//不带小数点
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,};//带小数点编码
voiddelay(unsignedintz)//延时函数
{
unsignedcharx,y;
for(x=z;x>0;x--);
for(y=110;y>0;y--);
}
main()
{
for(;;)
{
adcs=0;
adwr=1;
_nop_();
adwr=0;
_nop_();
adwr=1;
for(a=10;a>0;a--)
P1=0xff;
adrd=1;
_nop_();
adrd=0;
_nop_();
adval=P1;
adrd=1;
if(v1==0)//2v档位
{
adval=500*adval/256;
qian=adval/1000;
bai=adval/100%10;
shi=adval%100/10;
ge=adval%10;
weila=1;
P0=0x01;
weila=0;
P0=0xff;
duanla=1;
P0=0xff;
duanla=0;
delay(65535);delay(65535);
weila=1;
P0=0x02;
weila=0;
P0=0xff;
duanla=1;
P0=table[bai+10];
duanla=0;
delay(65535);delay(65535);
weila=1;
P0=0x04;
weila=0;
P0=0xff;
duanla=1;
P0=table[shi];
duanla=0;
delay(65535);delay(65535);
weila=1;
P0=0x08;
weila=0;
P0=0xff;
duanla=1;
P0=table[ge];
duanla=0;
delay(65535);delay(65535);
}
elseif(v2==0)//20v档位
{
adval=500*adval/256;
qian=adval/1000;
bai=adval/100%10;
shi=adval%100/10;
ge=adval%10;
weila=1;
P0=0x02;
weila=0;
P0=0xff;
duanla=1;
P0=table[bai];
duanla=0;
delay(65535);delay(65535);
weila=1;
P0=0x04;
weila=0;
P0=0xff;
duanla=1;
P0=table[shi+10];
duanla=0;
delay(65535);delay(65535);
weila=1;
P0=0x08;
weila=0;
P0=0xff;
duanla=1;
P0=table[ge];
duanla=0;
delay(65535);delay(65535);
}
elseif(v3==0)//200v档位
{
adval=500*adval/256;
qian=adval/1000;
bai=adval/100%10;
shi=adval%100/10;
ge=adval%10;
weila=1;
P0=0x02;
weila=0;
P0=0xff;
duanla=1;
P0=table[bai];
duanla=0;
delay(65535);delay(65535);
weila=1;
P0=0x04;
weila=0;
P0=0xff;
duanla=1;
P0=table[shi];
duanla=0;
delay(65535);delay(65535);
weila=1;
P0=0x08;
weila=0;
P0=0xff;
duanla=1;
P0=table[ge];
duanla=0;
delay(65535);delay(65535);
}
elseif(v4==0)//200mv档位
{
adval=500*adval/256;
qian=adval/1000;
bai=adval/100%10;
shi=adval%100/10;
ge=adval%10;
weila=1;
P0=0x02;
weila=0;
P0=0xff;
duanla=1;
P0=table[bai];
duanla=0;
delay(65535);delay(65535);
weila=1;
P0=0x04;
weila=0;
P0=0xff;
duanla=1;
P0=table[shi];
duanla=0;
delay(65535);delay(65535);
weila=1;
P0=0x08;
weila=0;
P0=0xff;
duanla=1;
P0=table[ge];
duanla=0;
delay(65535);delay(65535);
}
else//空档显示
{
weila=1;
P0=0x02;
weila=0;
P0=0xff;
duanla=1;
P0=table[0];
duanla=0;
delay(65535);delay(65535);
weila=1;
P0=0x04;
weila=0;
P0=0xff;
duanla=1;
P0=table[0];
duanla=0;
delay(65535);delay(65535);
weila=1;
P0=0x08;
weila=0;
P0=0xff;
duanla=1;
P0=table[0];
duanla=0;
delay(65535);delay(65535);
}
}
}