数字电压表的制作与设计-实习报告 本文关键词:电压表,实习报告,数字,制作,设计
数字电压表的制作与设计-实习报告 本文简介:河南工程学院实习报告专业电气自动化技术班级1331班姓名赵庆飞学号2013207091342014年12月1日实习(训)报告评语等级:评阅人:职称:*年*月*日河南工程学院实习(训)报告实习目的(内容):数字电压表的制作与设计实习时间:自12月1日至12月14日共14天。实习地点:实验室3号实验楼实
数字电压表的制作与设计-实习报告 本文内容:
河
南
工
程
学
院
实
习
报
告
专业电气自动化技术
班级
1331班
姓名
赵庆飞
学号
201320709134
2014年
12月1日
实习(训)报告评语
等级:
评阅人:
职称:*年*月*日
河
南
工
程
学
院
实习(训)报告
实习目的(内容):
数字电压表的制作与设计
实习时间:自
12月
1日至12月
14
日共14天
。
实习地点:
实验室3号实验楼
实习单位:
电气信息工程学院
指导老师:
陶春鸣
摘要
随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数电路,这
就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。
数字电压表它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。本章重点介绍单片A/D
转换器以及由它们构成的基于单片机的数字电压表的工作原目前,由各种单片A/D
转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力理。AT89C52单片机的一种电压测量电路,该电路采用ADC0832本文介绍一种基于A/D转换电路,测量范围直流
0~5V
的4路输入电压值,并在四位LED数码管上显示或单路选择显示。测量最小分辨率为0.019V,测量误差约为正负0.02V。本次设计就是为了更好地掌握单片机及相关的电子技术,在参阅一些资料的基础上利用ADC0832而设计的数字电压表。
一、设计目的与功能要求
A、
设计目的
利用单片机及ADC0832核心元件制作三位半数字电压表,更好地学习掌握ADC0832的工作原理及A/D的转换编程方法。
B、功能要求
利用ADC0832设计实现数字电压表的测量值为0~5V,用电位器模拟ADC0832的输入电压,用3位数码管显示,实时模拟数字电压表。
二.总体设计
A、系统设计
主要分为两部分:硬件电路及软件程序。硬件电路包括:单片机及外围电路,模拟信号采集电路,A/D转换电路,数码管显示电路,各部分电路的衔接。软件的程序可采用C语言或汇编,这里采用C语言,详细的设计思路在后面介绍。
B、设计方案
数字电压表的设计方案很多,但采用集成电路来设计较流行。其设计主要是由模拟电路和数字电路两大部分组成,模拟部分包括A/D转换器,基准电源等;数字部分包括振荡器,数码显示,计数器等。其中,A/D转换器将输入的模拟量转换成数字量,它是数字电压表的一个核心部件,ADC0832
为
8
位分辨率
A/D
转换芯片,其最高分辨可达
256
级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在
0~5V
之间。芯片转换时间仅为
32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过
DI
数据输入端,可以轻易的实现通道功能的选择。
C、总体设计框图
采集
量程变换处理
数字信号
数码管
单
片
机
A/D
转换器
ADC0832
外界模拟信号
显示出模拟电压
的数值
预先写好的汇编程序
置
入
振荡器、时序脉冲
三.设计原理图
四.硬件电路设计
1、核心元器件介绍
a
、
芯片介绍
1.单片机AT89S52介绍
AT89S52
是一种低功耗、高性能CMOS8位微控制器,具有
8K
在系统可编程AT89S52引脚图
DIP封装Flash存储器。使用Atmel
公司高密度非易失性存储器技术制造,与工业80C51
产品指令和引脚完
全兼容。片上Flash允许程序存储器在系统可编程,亦适于
常规编程器。在单芯片上,拥有灵巧的8
位CPU
和在系统
可编程Flash,使得AT89S52为众多嵌入式控制应用系统提
供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,
32
位I/O
口线,看门狗定时器,2
个数据指针,三个16
位
定时器/计数器,一个6向量2级中断结构,全双工串行口,
片内晶振及时钟电路。另外,AT89S52
可降至0Hz
静态逻
辑操作,支持2种软件可选择节电模式。空闲模式下,CPU
停止工作,允许RAM、定时器/计数器、串口、中断继续工
作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
P0
口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻
辑电平。对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,
P0不具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验
时,需要外部上拉电阻。
P1
口:P1
口是一个具有内部上拉电阻的8
位双向I/O
口,p1
输出缓冲器能驱动4
个
TTL
逻辑电平。
此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2
的触发输入(P1.1/T2EX)。
在flash编程和校验时,P1口接收低8位地址字节。
引脚号第二功能:
P1.0
T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1
T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5
MOSI(在系统编程用)
P1.6
MISO(在系统编程用)
P1.7
SCK(在系统编程用)
P2
口:P2
口是一个具有内部上拉电阻的8
位双向I/O
口,P2
输出缓冲器能驱动AT89S52引脚图
PLCC封装4
个
TTL
逻辑电平。对P2
端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入
口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX
@DPTR)
时,P2
口送出高八位地址。在这种应用中,P2
口使用很强的内部上拉发送1。在使用
8位地址(如MOVX
@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3
口:P3
口是一个具有内部上拉电阻的8
位双向I/O
口,p3
输出缓冲器能驱动4
个
TTL
逻辑电平。
P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
端口引脚第二功能:
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
INTO(外中断0)
P3.3
INT1(外中断1)
P3.4
TO(定时/计数器0)
P3.5
T1(定时/计数器1)
P3.6
WR(外部数据存储器写选通)
P3.7
RD(外部数据存储器读选通)
此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
按键复位
上电复位
ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:振荡器反相放大器的输出端。
2.A/D转换器ADC0832
·
8位分辨率;
·
双通道A/D转换;
·
输入输出电平与TTL/CMOS相兼容;ADC0832·
5V电源供电时输入电压在0~5V之间;
·
工作频率为250KHZ,转换时间为32μS;
·
一般功耗仅为15mW;
·
8P、14P—DIP(双列直插)、PICC
多种封装;
·
商用级芯片温宽为0°C
to
+70°C,工业级芯片温宽为?40°C
to
+85°C;
芯片接口说明:
·
CS_
片选使能,低电平芯片使能。
·
CH0
模拟输入通道0,或作为IN+/-使用。
·
CH1
模拟输入通道1,或作为IN+/-使用。
·
GND
芯片参考0
电位(地)。
·
DI
数据信号输入,选择通道控制。
·
DO
数据信号输出,转换数据输出。
·
CLK
芯片时钟输入。
·
Vcc/REF
电源输入及参考电压输入(复用)
3、其他硬件
A、排阻的作用
内存芯片下方均匀分布的“芝麻粒”,实排阻际上是位于内存颗粒和金手指之间的“排阻”。排阻,是一排电阻的简称。我们知道,内存在处理、传输数据时会产生大小不一的工作电流。而在内存颗粒走线的必经之处安装一排电阻,则能够帮助内存起到稳压作用,让内存工作更稳定。从而提升内存的稳定性,增强内存使用寿命。内存右边角上的“小绿豆”,我们一般称之为SPD。SPD是一存储体,它存储了厂商对内存的详细配置信息:如内存的工作电压,位宽,操作时序等。每次开机后自检时,系统都会首先读取内存SPD中的相关信息,来自动配置硬件资源,以避免出错。上拉、限流。和普通电阻一样,相比而言简化了PCB的设计、安装,减小空间,保证焊接质量。
排阻的特点
排阻具有方向性,与色环电阻相比具有整齐、少占空间的优点。
排阻引脚说明
1与a
2与b
3与c
4
与d之间的电阻都是10欧,与其它的管脚没有任何关系.就是一排电阻,做在了一个原件上..
有的还有一个公脚,就是为了方便使用,拿万用表量一下就会发现所有脚对公共脚的阻值均是标称值,除公共脚外其它任意两脚阻值是标称值的两倍,很明显任意两脚通过公共脚脚串联的嘛!用在有很多上下拉电阻的场合应用特方便,比如并行通讯线上,还节省空间。(就是老师问这个问题就难住我啦,老师问我排阻的作用,我说保护电路,老师还问我还有什么作用,我竟不知道,我在网上查,其实查到啦,我不知道排阻是上拉电阻也是它的作用,就造成了,最后还是老师给我点出来的)
五、软件(程序)
A、
流程图
开始
系统初始化
启动A/D转换
采集A/D转换值
数据转换
Y
调用显示
三位是否显示完?完?
读电压值
Y
N
END
程序流程图
转换结束?
Y
N
B、程序
#include
#define
uchar
unsigned
char
#define
uint
unsigned
int
uint
Chan0Value,Chan1Value;
sbit
RS=P2^0;
//1602各控制脚
sbit
RW=P2^1;
sbit
EN=P2^2;
sbit
Cs0832=
P1^4;
//0832各控制脚
sbit
Clk0832=
P1^5;
sbit
Di0832=
P1^6;
sbit
Do0832=
P1^6;
uchar
table[]={“Chanal
0:
.
V“};
uchar
table1[]={“Chanal
1:
.
V“};
void
delay1ms(unsigned
int
ms)//延时1毫秒(不够精确的)
{
int
i,j;
for(i=0;i>i;
}
for(i=0;i<8;i++)
//从低到高取一次数
{
if(Do0832)
Dat2|=0x01<
Clk0832=1;
//下降沿有效
Clk0832=0;
}
Cs0832=1;
Di0832=1;
Clk0832=1;
//数据读取完成,释放所有数据线
if(Dat1==Dat2)
return
Dat1;
//校验两次数相等,输出
}
/*本程序与其他一般程序最大的不同就是要读两次
一次从最高位到最低位,一次从最低位到最高位,
两次所读值相等即为正常,可以输出*/
/******************************LCD1602**************************************/
/*************************lcd1602程序**************************/
void
wr_com(unsigned
char
com)//写指令//
{
delay1ms(1);
RS=0;
RW=0;
EN=0;
P0=com;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void
wr_dat(unsigned
char
dat)//写数据//
{
delay1ms(1);
RS=1;
RW=0;
EN=0;
P0=dat;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void
lcd_init()//初始化设置//
{
delay1ms(15);
wr_com(0x38);delay1ms(5);
wr_com(0x80);delay1ms(5);
wr_com(0x01);delay1ms(5);
wr_com(0x06);delay1ms(5);
wr_com(0x0c);delay1ms(5);
}
void
writevalue(uchar
add,uchar
dat)
{
wr_com(0x80+add);
wr_dat(dat);
}
void
zifuchuan(ucharch)
{
while(*ch!=0)
wr_dat(*ch++);
delay1ms(1);
}
void
main(void)
{
uint
a,b;
int
i=0;
lcd_init();
while(1)
{
a=GetValue0832(0);
delay1ms(100);
b=GetValue0832(1);
wr_com(0x80);
for(i=0;i<15;i++)
{
wr_dat(table[i]);
}
Chan0Value=a/255.0*500;
writevalue(10,Chan0Value/100+0x30);
writevalue(12,Chan0Value%100/10+0x30);
writevalue(13,Chan0Value%100%10+0x30);
wr_com(0x80+0x40);
for(i=0;i<15;i++)
{
wr_dat(table1[i]);
}
Chan1Value=b/255.0*500;
writevalue(0x40+10,Chan1Value/100+0x30);
writevalue(0x40+12,Chan1Value%100/10+0x30);
writevalue(0x40+13,Chan1Value%100%10+0x30);
}
}
六、调试仿真
电路在proteus中的仿真图如下:
仿真结果:输入的电压从0~5V变化时,数字电压表能够测量出并利用数码管显示出来。测量的精度与要求的一致,前两位精确,百分位不作精确。要更精确,只需修改相应的源程序代码即可。
七、PCB板制作和焊接
A、PCB制作
利用原理图制作PCB板及利用专门的复写纸张将设计完成的PCB图通过喷墨打印机打印输出,然后将印有电路图的一面与铜板相对压紧,最后放到热交换器上进行热印,通过在高温下将复写纸上的电路图墨迹粘到铜板上。
制板。调制溶液,将硫酸和过氧化氢按3:1进行调制,然后将含有墨迹的铜板放入其中,等三至四分钟左右,等铜板上除墨迹以外的地方全部被腐蚀之后,将铜板取去,然后将清水将溶液冲洗掉。
打孔。利用凿孔机将铜板上需要留孔的地方进行打孔,完成后将各个匹配的元器件从铜板的背面将两个或多个引脚引入,然后利用焊接工具将元器件焊接到铜板上。
B、焊接
按照原理图进行焊接(焊接完好的成品如下)
八、心得
经过两周的努力终于设计成功,LCD的显示结果和直接用数字电压表测试模拟量输入所得结果几乎一致,误差完全在合理的范围之内。由于仪器误差,LCD显示最大值只能是4.9V,离标准最大值5.0V已经不远,达到预期目的,设计成功。本设计参考了AT89S52与ADC0832转换的接口连线,设计出电路图的连线,从并中理解了许多基本的知识和接线方法,在制作过程中遇到了许多问题,如封装的大小尺寸不同,焊盘的大小需要调整,在PCB封装连线时由于学校只能做单层板,所以不能把线条全部敷出,选择了在背面用导线代替,最后由于电位器的封装在LCD的下面无法调节分辨率,选择了把电位器重新定位,在面板上重新打了三个孔把电位器脚分别用导线连接再接到了焊盘上。还有排阻因为封装的错误使9引脚接到了VCC上。所以在焊接时就把排阻的头和尾进行了对调。通过这次的设计与实验使自己学到了很多的东西,也提高了对科学的自然兴趣。
参考文献
[1]
《单片机微型计算机原理及应用》
鲍小南等编著
浙江大学出版社
[2]
《.单片机课程设计指导》楼然苗、李光飞编著
.电子工业出版社,2007
[3]
《单片机应用技术.》
吴经国等编著
.中国电力出版社,2000
[4]
《8051单片机实践与应用》
吴金戌
沈庆阳
郭庭青
编著
清华大学出版社
[5]
《单片机原理及应用》
余修武
编著
电子科技大学出版社
[
6]
《单片机原理及接口技术》
(C51编程)张毅钢
编著
人民邮电出版社
篇2:数字电压表设计报告
数字电压表设计报告 本文关键词:电压表,数字,报告,设计
数字电压表设计报告 本文简介:课程设计报告题目:数字电压表学生姓名:张强学生学号:1214010242系别:电气信息工程学院专业:自动化(2)班届别:2012指导教师:徐峰1设计总体方案1.1设计要求⑴以MCS-51系列单片机为核心器件,组成一个简单的直流数字电压表。⑵采用1路模拟量输入,能够测量0-5V之间的直流电压值。⑶电压
数字电压表设计报告 本文内容:
课程设计报告
题
目:数字电压表
学生姓名:张强
学生学号:1214010242
系
别:电气信息工程学院
专
业:自动化(2)班
届
别:2012
指导教师:
徐峰
1
设计总体方案
1.1设计要求
⑴以MCS-51系列单片机为核心器件,组成一个简单的直流数字电压表。
⑵采用1路模拟量输入,能够测量0-5V之间的直流电压值。
⑶电压显示用4位一体的LED数码管显示,至少能够显示两位小数。
⑷尽量使用较少的元器件。
1.2
设计思路
⑴根据设计要求,选择AT89C51单片机为核心控制器件。
⑵A/D转换采用ADC0808实现,与单片机的接口为P1口和P2口的高四位引脚。
⑶电压显示采用4位一体的LED数码管。
⑷LED数码的段码输入,由并行端口P0产生:位码输入,用并行端口P2低四位产生。
1.3
设计方案
硬件电路设计由6个部分组成;
A/D转换电路,AT89C51单片机系统,LED显示系统、时钟电路、复位电路以及测量电压输入电路。硬件电路设计框图如图1所示。
时钟电路
复位电路
A/D转换电路
测量电压输入
显示系统
AT89C51
P1
P2
P2
P0
图1
数字电压表系统硬件设计框图
2
硬件电路设计
2.1
A/D转换模块
现实世界的物理量都是模拟量,能把模拟量转化成数字量的器件称为模/数转换器(A/D转换器),A/D转换器是单片机数据采集系统的关键接口电路,按照各种A/D芯片的转化原理可分为逐次逼近型,双重积分型等等。双积分式A/D转换器具有抗干扰能力强、转换精度高、价格便宜等优点。与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0809、ADC0808等,它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送到单片机进行分析和显示。一个n位的逐次逼近型A/D转换器只需要比较n次,转换时间只取决于位数和时钟周期,逐次逼近型A/D转换器转换速度快,因而在实际中广泛使用[1]。
2.1.1
逐次逼近型A/D转换器原理
逐次逼近型A/D转换器是由一个比较器、A/D转换器、存储器及控制电路组成。它利用内部的寄存器从高位到低位一次开始逐位试探比较。
转换过程如下:
开始时,寄存器各位清零,转换时,先将最高位置1,把数据送入A/D转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则1保留,如果转换的模拟量比输入的模拟量大,则1不保留,然后从第二位依次重复上述过程直至最低位,最后寄存器中的内容就是输入模拟量对应的二进制数字量[5]。其原理框图如图2所示:
顺序脉冲发生器
逐次逼近寄存器
ADC
电压
比较器
输入电压
输入数字量
图2
逐次逼近式A/D转换器原理图
2.1.2
ADC0808
主要特性
ADC0808是CMOS单片型逐次逼近式A/D转换器,带有使能控制端,与微机直接接口,片内带有锁存功能的8路模拟多路开关,可以对8路0-5V输入模拟电压信号分时进行转换,由于ADC0808设计时考虑到若干种模/数变换技术的长处,所以该芯片非常适应于过程控制,微控制器输入通道的接口电路,智能仪器和机床控制等领域[5]。
ADC0808主要特性:8路8位A/D转换器,即分辨率8位;具有锁存控制的8路模拟开关;易与各种微控制器接口;可锁存三态输出,输出与TTL兼容;转换时间:128μs;转换精度:0.2%;单个+5V电源供电;模拟输入电压范围0-
+5V,无需外部零点和满度调整;低功耗,约15mW[6]。
2.1.3
ADC0808的外部引脚特征
ADC0808芯片有28条引脚,采用双列直插式封装,其引脚图如图3所示。
图3
ADC0808引脚图
下面说明各个引脚功能:
IN0-IN7(8条):8路模拟量输入线,用于输入和控制被转换的模拟电压。
地址输入控制(4条):
ALE:地址锁存允许输入线,高电平有效,当ALE为高电平时,为地址输入线,用于选择IN0-IN7上那一条模拟电压送给比较器进行A/D转换。
ADDA,ADDB,ADDC:3位地址输入线,用于选择8路模拟输入中的一路,其对应关系如表1所示:
表1
ADC0808通道选择表
地址码
对应的输入通道
C
B
A
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
START:START为“启动脉冲”输入法,该线上正脉冲由CPU送来,宽度应大于100ns,上升沿清零SAR,下降沿启动ADC工作。
EOC:
EOC为转换结束输出线,该线上高电平表示A/D转换已结束,数字量已锁入三态输出锁存器。
D1-D8:数字量输出端,D1为高位。
OE:OE为输出允许端,高电平能使D1-D8引脚上输出转换后的数字量。
REF+、REF-:参考电压输入量,给电阻阶梯网络供给标准电压。
Vcc、GND:
Vcc为主电源输入端,GND为接地端,一般REF+与Vcc连接在一起,REF-与GND连接在一起.
CLK:时钟输入端。
2.1.4
ADC0808的内部结构及工作流程
ADC0808由8路模拟通道选择开关,地址锁存与译码器,比较器,8位开关树型A/D转换器,逐次逼近型寄存器,定时和控制电路和三态输出锁存器等组成,其内部结构如图4所示。
图4
ADC0808的内部结构
其中:
(1)8路模拟通道选择开关实现从8路输入模拟量中选择一路送给后面的比较器进行比较。
(2)地址锁存与译码器用于当ALE信号有效时,锁存从ADDA、ADDB、ADDC
3根地址线上送来的3位地址,译码后产生通道选择信号,从8路模拟通道中选择当前模拟通道。
(3)比较器,8位开关树型A/D转换器,逐次逼近型寄存器,定时和控制电路组成8位A/D转换器,当START信号有效时,就开始对当前通道的模拟信号进行转换,转换完成后,把转换得到的数字量送到8位三态锁存器,同时通过引脚送出转换结束信号。
(4)三态输出锁存器保存当前模拟通道转换得到的数字量,当OE信号有效时,把转换的结果送出。
ADC0808的工作流程为:
(1)输入3位地址,并使ALE=1,将地址存入地址锁存器中,经地址译码器从8路模拟通道中选通1路模拟量送给比较器。
(2)送START一高脉冲,START的上升沿使逐次寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。
(3)当转换结束时,转换的结果送入到输出三态锁存器中,并使EOC信号回到高电平,通知CPU已转换结束。
(4)当CPU执行一读数据指令时,使OE为高电平,则从输出端D0-D7读出数据。
2.2
单片机系统
2.2.1
AT89C51性能
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含有4KB的可反复擦写的只读程序存储器和128字节的随机存储器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,它为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51功能性能:与MCS-51成品指令系统完全兼容;4KB可编程闪速存储器;寿命:1000次写/擦循环;数据保留时间:10年;全静态工作:0-24MHz;三级程序存储器锁定;128*8B内部RAM;32个可编程I/O口线;2个16位定时/计数器;5个中断源;可编程串行UART通道;片内震荡器和掉电模式[6]。
2.2.2
AT89C51各引脚功能
AT89C51提供以下标准功能:4KB的Flash闪速存储器,128B内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路,同时,AT89C51可降至0Hz静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作,掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有工作直到下一个硬件复位。AT89C51采用PDIP封装形式,引脚配置如图5所示[7]。
图5
AT89C51的引脚图
AT89C51芯片的各引脚功能为:
P0口:这组引脚共有8条,P0.0为最低位。这8个引脚有两种不同的功能,分别适用于不同的情况,第一种情况是89C51不带外存储器,P0口可以为通用I/O口使用,P0.0-P0.7用于传送CPU的输入/输出数据,这时输出数据可以得到锁存,不需要外接专用锁存器,输入数据可以得到缓冲,增加了数据输入的可靠性;第二种情况是89C51带片外存储器,P0.0-P0.7在CPU访问片外存储器时先传送片外存储器的低8位地址,然后传送CPU对片外存储器的读/写数据。P0口为开漏输出,在作为通用I/O使用时,需要在外部用电阻上拉。
P1口:这8个引脚和P0口的8个引脚类似,P1.7为最高位,P1.0为最低位,当P1口作为通用I/O口使用时,P1.0-P1.7的功能和P0口的第一功能相同,也用于传送用户的输入和输出数据。
P2口:这组引脚的第一功能与上述两组引脚的第一功能相同即它可以作为通用I/O口使用,它的第一功能和P0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元,但并不是像P0口那样传送存储器的读/写数据。
P3口:这组引脚的第一功能和其余三个端口的第一功能相同,第二功能为控制功能,每个引脚并不完全相同,如下表2所示:
表2
P3口各位的第二功能
P3口各位
第二功能
P3.0
RXT(串行口输入)
P3.1
TXD(串行口输出)
P3.2
/INT0(外部中断0输入)
P3.3
/INT1(外部中断1输入)
P3.4
T0(定时器/计数器0的外部输入)
P3.5
T1(定时器/计数器1的外部输入)
P3.6
/WR(片外数据存储器写允许)
P3.7
/RD(片外数据存储器读允许)
Vcc为+5V电源线,Vss接地。
ALE:地址锁存允许线,配合P0口的第二功能使用,在访问外部存储器时,89C51的CPU在P0.0-P0.7引脚线去传送随后而来的片外存储器读/写数据。在不访问片外存储器时,89C51自动在ALE线上输出频率为1/6震荡器频率的脉冲序列。该脉冲序列可以作为外部时钟源或定时脉冲使用。
/EA:片外存储器访问选择线,可以控制89C51使用片内ROM或使用片外ROM,若/EA=1,则允许使用片内ROM,若/EA=0,则只使用片外ROM。
/PSEN:片外ROM的选通线,在访问片外ROM时,89C51自动在/PSEN线上产生一个负脉冲,作为片外ROM芯片的读选通信号。
RST:复位线,可以使89C51处于复位(即初始化)工作状态。通常89C51复位有自动上电复位和人工按键复位两种。
XTAL1和XTAL2:片内震荡电路输入线,这两个端子用来外接石英晶体和微调电容,即用来连接89C51片内OSC(震荡器)的定时反馈回路。
2.4
LED显示系统设计
2.4.1
LED基本结构
LED是发光二极管显示器的缩写。LED由于结构简单、价格便宜、与单片机接口方便等优点而得到广泛应用。LED显示器是由若干个发光二极管组成显示字段的显示器件[6]。在单片机中使用最多的是七段数码显示器。LED七段数码显示器由8个发光二极管组成显示字段,其中7个长条形的发光二极管排列成“日”字形,另一个圆点形的发光二极管在显示器的右下角作为显示小数点用,其通过不同的组合可用来显示各种数字。LED引脚排列如下图8所示:
图8
LED引脚排列
2.4.2
LED显示器的选择
在应用系统中,设计要求不同,使用的LED显示器的位数也不同,因此就生产了位数,尺寸,型号不同的LED显示器供选择,在本设计中,选择4位一体的数码型LED显示器,简称“4-LED”。本系统中前一位显示电压的整数位,即个位,后两位显示电压的小数位。
4-LED显示器引脚如图9所示,是一个共阴极接法的4位LED数码显示管,其中a,b,c,e,f,g为4位LED各段的公共输出端,1、2、3、4分别是每一位的位数选端,dp是小数点引出端,4位一体LED数码显示管的内部结构是由4个单独的LED组成,每个LED的段输出引脚在内部都并联后,引出到器件的外部。
图9
4位LED引脚
对于这种结构的LED显示器,它的体积和结构都符合设计要求,由于4位LED阴极的各段已经在内部连接在一起,所以必须使用动态扫描方式(将所有数码管的段选线并联在一起,用一个I/O接口控制)显示。
2.4.3
LED译码方式
译码方式是指由显示字符转换得到对应的字段码的方式,对于LED数码管显示器,通常的译码方式有硬件译码和软件译码方式两种。
硬件译码是指利用专门的硬件电路来实现显示字符码的转换。
软件译码就是编写软件译码程序,通过译码程序来得到要显示的字符的字段码,译码程序通常为查表程序[3]。
本设计系统中为了简化硬件线路设计,LED译码采用软件编程来实现。由于本设计采用的是共阴极LED,其对应的字符和字段码如下表3.3所示。
表3.3
共阴极字段码表
显示字符
共阴极字段码
0
3FH
1
06H
2
5BH
3
4FH
4
66H
5
6DH
6
7DH
7
07H
8
7FH
9
6FH
2.4.4
LED显示器与单片机接口设计
由于单片机的并行口不能直接驱动LED显示器,所以,在一般情况下,必须采用专用的驱动电路芯片,使之产生足够大的电流,显示器才能正常工作[7]。如果驱动电路能力差,即负载能力不够时,显示器亮度就低,而且驱动电路长期在超负荷下运行容易损坏,因此,LED显示器的驱动电路设计是一个非常重要的问题。
为了简化数字式直流电压表的电路设计,在LED驱动电路的设计上,可以利用单片机P0口上外接的上拉电阻来实现,即将LED的A-G段显示引脚和DP小数点显示引脚并联到P0口与上拉电阻之间,这样,就可以加大P0口作为输出口德驱动能力,使得LED能按照正常的亮度显示出数字,如图10所示。
图10
LED与单片机接口间的设计
2.5
总体电路设计
经过以上的设计过程,可设计出基于单片机的简易数字直流电压表硬件电路原理图如图11所示。
图11
简易数字电压表电路图
此电路的工作原理是:+5V模拟电压信号通过变阻器VR1分压后由ADC08008的IN0通道进入(由于使用的IN0通道,所以ADDA,ADDB,ADDC均接低电平),经过模/数转换后,产生相应的数字量经过其输出通道D0-D7传送给AT89C51芯片的P1口,AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码传送给四位LED,同时它还通过其四位I/O口P2.0、P2.1、P2.2、P2.3产生位选信号控制数码管的亮灭。此外,AT89C51还控制ADC0808的工作。其中,单片机AT89C51通过定时器中断从P2.4输出方波,接到ADC0808的CLOCK,P2.6发正脉冲启动A/D转换,P2.5检测A/D转换是否完成,转换完成后,P2.7置高从P1口读取转换结果送给LED显示出来[3]。
简易数字直流电压表的硬件电路已经设计完成,就可以选取相应的芯片和元器件,利用Proteus软件绘制出硬件的原理,并仔细地检查修改,直至形成完善的硬件原理图。但要真正实现电路对电压的测量和显示的功能,还需要有相应的软件配合,才能达到设计要求。
3
程序设计
3.1
程序设计总方案
根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图12所示。
开始
初始化
调用A/D转换子程序
调用显示子程序
结束
图12
数字式直流电压表主程序框图
3.2
系统子程序设计
3.2.1
初始化程序
所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等[9]。
3.2.2
A/D转换子程序
A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图13所示。
开始
启动转换
A/D转换结束?
输出转换结果
数值转换
显示
结束
图13
A/D转换流程图
3.2.3
显示子程序
显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms[10]。
在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。
4
仿真
4.1
软件调试
软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐形的,可以通过仿真开发系统发现逐步改正。Proteus软件可以对基于微控制器的设计连同所有的周围电子器件一起仿真,用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。Proteus支持的微处理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。Proteus可以完成单片机系统原理图电路绘制、PCB设计,更为显著点的特点是可以与u
Visions3
IDE工具软件结合进行编程仿真调试[8]。
本系统的调试主要以软件为主,其中,系统电路图的绘制和仿真我采用的是Proteus软件,而程序方面,采用的是汇编语言,用Keil软件将程序写入单片机。
4.2显示结果及误差分析
4.2.1
显示结果
1.
当IN0口输入电压值为0V时,显示结果如图14所示,测量误差为0V。
图14
输入电压为0V时,LED的显示结果
2.当IN0输入电压值为1.50V时,显示结果如图15所示。测量误差为0.01V。
图15
输入电压为1.50V时,LED的显示结果
3.
当IN0口输入电压值为3.50V时,显示结果如图16。测量误差为0.01V。
图16
输入电压为3.50V时,LED的显示结果
4.2.2
误差分析
通过以上仿真测量结果可得到简易数字电压表与“标准”数字电压表对比测试表,如下表4所示:
表4
简易数字电压表与“标准”数字电压表对比测试表
标准电压值/V
简易电压表测量值/V
绝对误差/V
0.00
0.00
0.00
0.50
0.51
0.01
1.00
1.00
0.00
1.50
1.51
0.01
2.00
2.00
0.00
2.50
2.50
0.00
3.00
3.00
0.00
3.50
3.50
0.00
4.00
4.00
0.00
4.99
5.00
0.01
由于单片机AT89C51为8位处理器,当输入电压为5.00V时,ADC0808输出数据值为255(FFH),因此单片机最高的数值分辨率为0.0196V(5/255)。这就决定了电压表的最高分辨率只能到0.0196V,从上表可看到,测试电压一般以0.01V的幅度变化。
从上表可以看出,简易数字电压表测得的值基本上比标准电压值偏大0-0.01V,这可以通过校正ADC0808的基准电压来解决。因为该电压表设计时直接用5V的供电电源作为电压,所以电压可能有偏差。当要测量大于5V的电压时,可在输入口使用分压电阻,而程序中只要将计算程序的除数进行调整就可以了。
参考文献
[1]胡健.单片机原理及接口技术.北京:机械工业出版社,2004年10月
[2]王毓银.数字电路逻辑设计.高等教育出版社,2005年12月
[3]于殿泓、王新年.单片机原理与程序设计实验教程.西安电子科技大学出版社,2007年5月
[4]谢维成、杨加国.单片机原理与应用及C51程序设计实例.电子工业出版社,2006年3月
[5]李广弟.单片机基础.北京航空航天大学出版社,2007年5月
[6]姜志海,黄玉清等著.单片机原理及应用[M]
.北京:电子工业出版社.2005年7月
[7]魏立峰.单片机原理及应用技术.北京大学出版社,2005年
[8]周润景.Protues在MCS-51&ARM7系统中的应用百例.第一版.北京:电子工业出版社,2006年
[9]边春远等著.MCS-51单片机应用开发实用子程序[M]
.北京:人民邮电出版社.2005年9月.
[10]苗红霞.单片机实现数字电压表的软硬件设计[J]
.河海大学常州分校学报,2002,(03).
[11]宋凤娟,孙军,李国忠.基于89C51单片机的数字电压表设计[J]
.工业控制计算机,2007,(04).
篇3:ARM课程设计报告--基于LPC2131数字电压表设计
ARM课程设计报告--基于LPC2131数字电压表设计 本文关键词:电压表,课程设计,数字,报告,设计
ARM课程设计报告--基于LPC2131数字电压表设计 本文简介:电控学院课程设计课程名称:ARM课程设计题目:基于LPC2131数字电压表设计院(系):电气与控制工程学院专业班级:测控技术与仪器1001班姓名:庞海洋呼霄鹏学号:10060701301006070124指导教师:黄梦涛李红岩2013年12月28日目录一概述11.1课题设计背景11.2ARM开发板(
ARM课程设计报告--基于LPC2131数字电压表设计 本文内容:
电控学院
课程设计
课程名称:
ARM课程设计
题
目:
基于LPC2131数字电压表设计
院
(系):
电气与控制工程学院
专业班级:
测控技术与仪器1001班
姓
名:
庞海洋
呼霄鹏
学
号:
1006070130
1006070124
指导教师:
黄梦涛
李红岩
2013年12月28日
目
录
一概述1
1.1课题设计背景1
1.2ARM开发板(简介)1
1.3、LPC2131微控制器2
二、
方案设计3
2.1设计思路3
2.2设计要求3
三、
硬件设计4
3.1硬件设计原理图及介绍4
四、
软件设计5
五、
参考文献6
六、
心得体会6
七、
附件8
15
西安科技大学电控学院课程设计
基于LPC2131数字电压表
一概述
1.1课题设计背景
电压表已经有100多年的发展历史,虽然不断改进与完善,仍然无法满足现代电子测量的需求,数字电压表(Digital
Voltmeter简称DVM)自1952年问世以来,显示出强大的生命力,现已成为在电子测量领域中应用最广泛的一种仪器。数字电压表可以显示清晰、直观,读数准确,准确度高,分辨力强,测量范围广,扩展能力强,测量速度快,输入阻抗高,集成度高,微功耗和抗干扰能力强等优点,独占电压表产品的熬头。
DVM的高速发展,使它已成为实现测量自动化、提高工作效率不可缺少的仪表,数字化是当前计量仪器发展的主要方向之一,而高准度的DC-DVC的出现,又使DVM进入了精密标准测量领域。随着现代化技术的不断发展,数字电压表的功能和种类将越来越强,越来越多,其使用范围也会越来越广泛。采用智能化的数字仪器也将是必然的趋势,它们将不仅能提高测量准确度,而且能提高电测量技术的自动化程序,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表(如:温度计、湿度计、酸度计、重量、厚度仪等),几乎覆盖了电子电工测量、工业测量、自动化仪表等各个领域。从而提高计量检定人员的工作效。
目前数字电压表的内部核心部件是A/D转换器,转换器的精度很大程度上影响着数字电压表的准确度,本课程设计A/D转换器采用LPC2131对输人模拟信号进行转换,控制核心再对转换的结果进行运算和处理,最后串口显示数字电压信号。
1.2ARM开发板(简介)
ARM开发板,即以基于ARM内核的芯片作为CPU,同时附加其他功能外围的嵌入式开发板,用以评估内核芯片的功能。ARM开发板可以分为Cortex-M0开发板、Cortex-M3开发板、Cortex-A5开发板[1]、Cortex-A8开发板、Cortex-A9开发板、Cortex-A15开发板等,而提供这些内核芯片的厂商有飞思卡尔、TI、NXP、三星、Atmel和ST等。英国ARM公司是嵌入式RISC处理器的IP(知识产权)供应商,它为ARM架构处理器提供ARM处理器内核(如ARM7TDMI、ARM9TDMI及ARM10TDMI等)。由各半导体公司在上述处理器内核基础上进行再设计,嵌入各种外围和处理部件,形成各种MCU。目前基于ARM内核的芯片在嵌入式处理器市场上占据75%的份额。ARM作为嵌入式系统的处理器,具有低电压,低功耗和高集成度等特点,并具有开放性和可扩充性。事实上,ARM内核已成为嵌入式系统首选的处理器内核。而对于医疗电子设备而言,并不需要图像处理等方面更高的要求,因此,ARM7TDMI内核以0.9MIPS(百万条指令每秒)/MHz的高效处理能力足以满足应用需要。ARM7TDMI内核是ARM核系列中32位通用内核中的一个产品,它采用三级流水线结构,指令的执行分成取指、译值和执行3个阶段。运算器能够实现32位整数运算。内核不但能够执行32位高效ARM指令,同时还支持简洁的16位Thumb指令集以提高代码密度。
1.3、LPC2131微控制器
1、简介
LPC2131/2132/2138
是基于一个支持实时仿真和跟踪的16/32
位ARM7TDMI-STM
CPU,并带有32kB、64kB
和512kB
嵌入的高速Flash
存储器。128
位宽度的存储器接口和独特的加速结构使32
位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16
位Thumb
模式将代码规模降低超过30%,而性能的损失却很小。较小的封装和很低的功耗使
LPC2131/2132/2138
特别适用于访问控制和POS
机等小型应用中;由于内置了宽范围的串行通信接口和8/16/32kB
的片内SRAM,它们也非常适合于通信网关、协议转换器、软件
modem、语音识别、低端成像,为这些应用提供大规模的缓冲区和强大的处理功能。多个32
位定时器、1个或2
个10
位8
路的ADC、10
位DAC、PWM
通道、47
个GPIO
以及多达9
个边沿或电平触发的外部中断使它们特别适用于工业控制应用以及医疗系统。
2、主要性能
a、
8/16/32kB
的片内静态RAM
和32/64/512kB
的片内Flash
程序存储器。128
位宽度接口/加速器可实现高达60
MHz
工作频率。
b、
1
个(LPC2131/2132)或2
个(LPC2138)8
路10
位的A/D
转换器,共提供16
路模拟输入,每个通道的转换时间低至2.44us。
c、
1
个10
位的D/A
转换器,可产生不同的模拟输出。(仅适用于LPC2132/2138)
d、
2
个32
位定时器/计数器(带4
路捕获和4
路比较通道)、PWM
单元(6
路输出)和看门狗。
e、多个串行接口,包括2
个16C550
工业标准UART、2
个高速I2C
接口(400
kbit/s)、SPITM
。
2、
方案设计
2.1设计思路
通过LPC2131板内的A/D转换器,采取中断方式,完成对2路0—5V的模拟电压进行循环采集,采集的数据通过串口UARTO
向PC机发送显示
。
2.2设计要求
(1)对2路模拟信号输入实行循环采集,每路连续采集16次,取平均值。
(2)分别设定每一路的上限值,若采集的平均值超过该上限值,则对应通道的指示灯闪烁10次后一直亮,指示灯闪烁时喇叭发声,以示警告。
3、
硬件设计
3.1硬件设计原理图及介绍
图3.1原理框图
由上图知,两个被测信号进入ARM开发板,经过A/D转换模块转换得出电压值,再经由上位机显示出数值。
图3.2蜂鸣器报警电路
图3.3指示灯闪烁电路
4、
软件设计
4.1程序流程图如图4.1所示。根据流程图编程实现各自功能。
图4.1程序流程图
5、
参考文献
[1]周立功.ARM嵌入式系统基础教程[M].北京航空航天大学出版社,2008.9.
[2]李红岩,杨学存.ARM嵌入式实验+实训指导书[M].西安科技大学出版社,2013.9.
[3]周立功,张华等.深入浅出ARM7——LPC213x/LPC214x(上册)[M].北京航空航天大学出版社,2005.
[4]黄智伟,税梦玲,张强.全国大学生电子设计大赛ARM嵌入式系统应用设计与实践[M].北京航空航天大学出版社,2011.
[7]百度文库
6、
心得体会
心得体会一(庞海洋)
这次的课程设计是基于LPC2131的数字电压表,实现的主要功能用ARM的A/D转换模块功能,外部扩展蜂鸣器报警电路和指示灯闪烁电路,用串口UART0向PC机发送显示。
在做数字电压表的设计时,开始是遇到不少的问题,比如我们想数字电压表到底是什么设计原理呢,模拟电压信号是怎样被数字电压表循环采集的呢。由于只是在课堂上学习过理论知识,还没有接触过实际真正设计和开发,所以在考虑问题的时候往往是不全面的,导致设计过程中存在着这样那样的问题。经过这一个星期的课程设计实习,过程曲折坎坷让人一言难尽啊。我们组一共二个人,整体上是我们二个人都在做,但个人的分工不同,呼霄鹏负责硬件部分,我负责软件部分。在设计程序的过程中,我明白到做一个好程序的不易,做一个好的编程者就更加困难。我主要负责软件程序编写以及调试工作。通过这次课程设计,加强了我的动手、思考和解决问题的能力。在整个设计过程中主要是软件编写,这个我们花了好长时间,几乎是前四天都在编写数字电压表程序。最后,在老师和同学的帮助下,我们完成了程序设计。经过一天的调试,我们的课程设计终于成功了。我们两个都很激动,尝到了通过自己设计电压表的喜悦。
这次课程设计我最大的收获就是“细节”。“细节决定成败”这句话太对了。我以后在生活中要注重细节。在课程设计过程中,我的程序框架是对的,可是细节部分出现很多错误。导致我的程序虽然在语法上没有错误但是出现逻辑错误使电压表不能完成其设计功能。我要做一个细心的人。最后,谢谢老师和同学们的帮助。
心得体会二(呼霄鹏)
这次的课程设计是基于LPC2131的数字电压表,实现的主要功能用ARM的A/D转换模块功能,外部扩展蜂鸣器报警电路和指示灯闪烁电路,用串口UART0向PC机发送显示。
本学期在学院的安排下我们学习了ARM嵌入式系统的理论知识,这门课程是我们测控专业的主要课程。虽然我们学的都是一些简单的知识,注重学习如何去分析和研究嵌入式系统的功能和结构等,但学习的过程中还是有一定的困难。在理论课结束后老师为我们安排了ARM的课程设计实习。
本次课程实习我们两个人组,我主要负责硬件的设计、调试和电路图的绘制,另一个同学负责软件的编写和调试。这次实习对于我来说还是有一定难度的,因为几乎没有什么实际经验而不像有的同学以前参加过电子设计大赛。他们做起来感觉得心应手可以说是一气合成,而我画图所用的软件以前虽然用过但还是不太熟悉,画图过程中有很多问题。
通过这次课程设计,虽然学到了不少东西不管是电路图的绘制还是软件的编写和调试,但同时也发现了自身的不足。就比如说实际动手能力吧。画基本一样的一电路图,熟悉画图软件的同学可能有一上午就可以画好所有的,而我却需要差不多一天的时间还不能保证还所画图完全正确。希望通过这次实习可以对自己的操作能力有所提高。
7、
附件
程序清单:
/****************************************************************************
文
件
名:main.c
功
能:使用ADC模块的通道0、1进行电压的测量,然后将转换结果从串口输出,
上位机使用EasyARM软件全仿真的DOS字符窗口观察。
说
明:跳线JP8、JP30短接。由W1、W2调节测量电压值。
通讯格式:8位数据位,1位停止位,无奇偶校验,波特率为115200。***************************************************************************/
#include
“config.h“#define
LED1
10;
dly--)
{
for(i=0;
i=80)
{
x
=
0;
y++;
}
}
}
/****************************************************************************
名
称:main()
功
能:进行通道0、1电压ADC转换,并把结果转换成电压值,然后发送到串口。
说
明:在CONFIG.H文件中包含stdio.h。***************************************************************************/
int
main(void)
{
uint32
ADC_Data;
char
str[20];
UART0Init(115200);//
初始化UART0
PINSEL1
=
0x01400000;//
设置P0.27、P0.28连接到AIN0、AIN1
IO1DIR
=
BEEPCON;
//
设置I/O为输出
IO2DIR
=
0x00000000;
IO1SET
=
BEEPCON;
/*
进行ADC模块设置,其中x>6)
//
提取AD转换值
ADC_Data
=
ADC_Data
3300;
//
数值转换
ADC_Data
=
ADC_Data
/
1024;
sprintf(str,“%4dmV
at
VIN1“,ADC_Data);
ISendStr(30,23,0x30,str);
if(
ADC_Data>=3000)
{
uint32
i;
for(i=0;i>6)
//
提取AD转换值
ADC_Data
=
ADC_Data
3300;
//
数值转换
ADC_Data
=
ADC_Data
/
1024;
sprintf(str,“%4dmV
at
VIN2“,ADC_Data);
ISendStr(30,21,0x30,str);
if(
ADC_Data>=2500)
{
uint32
i;
for(i=0;i<10;i++)
{
IO1SET
=
BEEPCON;
IO2DIR
=
0x00020000;
//
BEEPCON
=
1
DelayNS(15);
IO1CLR
=
BEEPCON;
//
BEEPCON
=
0
IO2DIR
=
0x00000000;
DelayNS(15);
}
IO2DIR
=
0x00020000;
DelayNS(150);
}
else
{
IO1SET
=
BEEPCON;
//
BEEPCON
=
0
IO2DIR
=
0x00000000;}
}
return(0);
}