有效值检波器Word文档下载推荐.docx

上传人:b****2 文档编号:3617387 上传时间:2023-05-02 格式:DOCX 页数:24 大小:121.27KB
下载 相关 举报
有效值检波器Word文档下载推荐.docx_第1页
第1页 / 共24页
有效值检波器Word文档下载推荐.docx_第2页
第2页 / 共24页
有效值检波器Word文档下载推荐.docx_第3页
第3页 / 共24页
有效值检波器Word文档下载推荐.docx_第4页
第4页 / 共24页
有效值检波器Word文档下载推荐.docx_第5页
第5页 / 共24页
有效值检波器Word文档下载推荐.docx_第6页
第6页 / 共24页
有效值检波器Word文档下载推荐.docx_第7页
第7页 / 共24页
有效值检波器Word文档下载推荐.docx_第8页
第8页 / 共24页
有效值检波器Word文档下载推荐.docx_第9页
第9页 / 共24页
有效值检波器Word文档下载推荐.docx_第10页
第10页 / 共24页
有效值检波器Word文档下载推荐.docx_第11页
第11页 / 共24页
有效值检波器Word文档下载推荐.docx_第12页
第12页 / 共24页
有效值检波器Word文档下载推荐.docx_第13页
第13页 / 共24页
有效值检波器Word文档下载推荐.docx_第14页
第14页 / 共24页
有效值检波器Word文档下载推荐.docx_第15页
第15页 / 共24页
有效值检波器Word文档下载推荐.docx_第16页
第16页 / 共24页
有效值检波器Word文档下载推荐.docx_第17页
第17页 / 共24页
有效值检波器Word文档下载推荐.docx_第18页
第18页 / 共24页
有效值检波器Word文档下载推荐.docx_第19页
第19页 / 共24页
有效值检波器Word文档下载推荐.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

有效值检波器Word文档下载推荐.docx

《有效值检波器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《有效值检波器Word文档下载推荐.docx(24页珍藏版)》请在冰点文库上搜索。

有效值检波器Word文档下载推荐.docx

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,STC89C52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

本次设计主要用到单片机4个I/O口中的3个,其中P3口及P1.0-P1.2与液晶显示器相接,18、19脚外界晶振电容为单片机提供时序。

2.2.2晶振时序电路

XTAL1和XTAL2分别为反向放大器的输入和输出。

该反向放大器可以配置为片内振荡器。

石晶振荡和陶瓷振荡均可采用。

如采用外部时钟源驱动器件,XTAL2应不接。

有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

2.2.3复位电路

常见的复位电路有两种:

上电复位电路和开关复位电路,可根据电路的需要选择复位电路。

2.3液晶显示电路

字符型液晶显示模块LCD1602是一种用5x7点阵图形来显示字符的液晶显示器,其引脚功能如下表所示。

编号

符号

引脚说明

1

VSS

电源地

9

D2

DataI/O

2

VDD

电源正极

10

D3

3

VL

液晶显示偏压信号

11

D4

4

RS

数据/命令选择端(H/L)

12

D5

5

R/W

读写选择端(H/L)

13

D6

6

E

使能信号

14

D7

7

D0

15

BLA

背光源正极

8

D1

16

BLK

背光源负极

读状态:

输入:

RS=L,RW=H,E=H输出:

D0~D7=状态字

写指令:

RS=L,RW=L,D0~D7=指令码,E=高脉冲输出:

读数据:

RS=H,RW=H,E=H输出:

D0~D7=数据

写数据:

RS=H,RW=L,D0~D7=数据,E=高脉冲输出:

根据1602液晶显示器的读写时序操作,编写相应的单片机驱动程序,便可以实现液晶显示器的显示输出。

2.4A/D转换电路

ADC0832有DIP和SOIC两种封装,DIP封装的ADC0832引脚排列如图所示。

各引脚说明如下:

CS——片选端,低电平有效。

CH0,CH1——两路模拟信号输入端。

DI——两路模拟输入选择输入端。

DO——模数转换结果串行输出端。

ADC0832引脚图

CLK——串行时钟输入端。

Vcc/REF——正电源端和基准电压输入端。

GND——电源地。

2.4电压放大及整流电路

在本设计中,采用LM324运放组成放大电路,对微量交流电压信号进行放大。

同时,对交流信号全波整流。

三、系统的软件设计

软件调试主要是编写相应的程序,在电路仿真软件上仿真,直至到预期效果。

1.程序框图

主程序及各子程序的框图见图。

主程序框图LCD程序流程图

2.程序清单

根据程序流程图,编写相应的子程序和主程序。

程序清单见附录3。

四、测试数据

1.同一频率在不同电压时的测量。

40mV

100mV

500mV

1V

5V

20Hz

20

0.0%

0%

50Hz

50

52

4%

53

6%

100Hz

100

107

7%

101

1%

200Hz

199

0.5%

204

2%

200

500Hz

526

5.2%

499

0.2%

498

0.4%

1kHz

1004

998

999

0.1%

2kHz

1995

1997

1993

0.3%

1998

5kHz

4990

4999

4986

4983

10k

9976

9986

9992

9982

9975

20k

19987

0.6%

19978

0.7%

19994

19986

19955

100k

99967

99936

99957

99849

误差平均在0.2%以内。

2.同一电压在不同频率时的测量。

10Hz

100Hz

1000Hz

10KHz

50KHz

50mV

50.8

1.4%

50.4

48

46

8%

100mV

106.4

6.4%

106

104

92

84

16%

200mV

213

6.5%

210

5%

201

189

5.5%

500mV

502

500

458

8.2%

1.03

3%

1.02

1.01

0.92

2V

2.1

2.04

2.01

1.94

1.85

7.5%

5.08

1.6%

5.00

4.92

4.76

2.8%

4.52

9.6%

20V

18.5

误差平均在3%以内。

五.心得体会

在这次电子设计竞赛中我们使用了STC89C52单片机。

这让我对于单片机有了更多的了解。

同时在找资料的过程中学到了许多单片机课本上没有讲到的知识。

在这次电子设计竞赛过程中,我们通过在原有的输入系统进行了改进,使之测量频率和电压有效值精度更高,使之成为一个更加适用,功能更加完备的属于自己的一个系统。

在这个过程中让我对于C语言的编写有了更深入的体会。

在这次电子设计竞赛中,虽然花费了大量的时间和精力,但我却学到了许多在理论课程中无法学到的知识。

最重要的是让我懂得了合作的重要性,学会了如何与人更好的合作。

六、参考文献

[2] 李广弟.单片机基础[M].北京:

北京航空航天大学出版社,1994

[3] 阎石.数字电子技术基础(第三版).北京:

高等教育出版社,1989

1版

[6]张毅刚等编著.《单片机原理及应用》.北京:

高等教育出版社.2004年1月第1版

附录1电路简图

附录2元器件清单

元器件

描述

数量

STC89C52

单片机

液晶显示器

LCD1602

按键开关

电阻

电容

342uF

晶振

11.0592MHz

ADC0832

电路板

10mm铜柱

10mm

LM324

电位器

103,104

拨码开关

6合1

指示灯

红色

二极管

IN4007

附录3程序清单:

#include<

reg51.h>

//包含单片机寄存器的头文件

intrins.h>

//包含_nop_()函数定义的头文件

#defineucharunsignedchar

#defineuintunsignedint

sbitCS=P1^2;

//将CS位定义为P3.4引脚

sbitCLK=P1^0;

//将CLK位定义为P1.0引脚

sbitDIO=P1^1;

//将DIO位定义为P1.1引脚

unsignedcharcodedigit[10]={"

0123456789"

};

//定义字符数组显示数字

unsignedcharcodeStr[]="

Volt="

;

//说明显示的是电压

//以下是对液晶模块的操作程序

sbitRS=P2^0;

//寄存器选择位,将RS位定义为P2.0引脚

sbitRW=P2^1;

//读写选择位,将RW位定义为P2.1引脚

sbitE=P2^2;

//使能信号位,将E位定义为P2.2引脚

sbitBF=P0^7;

//忙碌标志位,,将BF位定义为P0.7引脚

//频率

ucharcodetable1[]="

Freq=Hz"

unsignedcharcode

table2[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};

bitflag;

//定义标志位,确定是否到了1s

unsignedlongx;

ucharT0count;

//从T0的计数单元中读取计数的数值

uchartimecount;

voiddelay(uintz)

{

uintx,y;

for(x=z;

x>

0;

x--)

for(y=110;

y>

y--);

}

voidwrite_date(uchardate)//写数据

{

P0=0xFF;

delay(5);

RS=1;

E=0;

P0=date;

E=1;

voidwrite_com(ucharcom)

RS=0;

P0=com;

voidinit()//写位

ucharnum;

write_com(0x80+0x40);

for(num=0;

num<

16;

num++)

{

write_date(table1[num]);

delay(5);

}

}

voidLcdPos(ucharxPos,ucharyPos)

//设置第(xPos,yPos)个字符的DDRAM地址

{unsignedchartmp;

xPos&

=0x0f;

//x位置范围是0~15

yPos&

=0x01;

//y位置范围是0~1

if(yPos==0)//显示第一行

tmp=xPos;

else

tmp=xPos+0x40;

tmp|=0x80;

write_com(tmp);

voidwrite_char(ucharc,ucharxPos,ucharyPos)

LcdPos(xPos,yPos);

write_date(c);

voiddelay1ms()//函数功能:

延时1ms

unsignedchari,j;

for(i=0;

i<

10;

i++)

for(j=0;

j<

33;

j++);

voiddelaynms(unsignedcharn)//函数功能:

延时若干毫秒,入口参数:

n

unsignedchari;

n;

delay1ms();

bitBusyTest(void)//函数功能:

判断液晶模块的忙碌状态

bitresult;

RS=0;

//根据规定,RS为低电平,RW为高电平时,可以读状态

RW=1;

E=1;

//E=1,才允许读写

_nop_();

//空操作

//空操作四个机器周期,给硬件反应时间

result=BF;

//将忙碌标志电平赋给result

E=0;

//将E恢复低电平

returnresult;

//函数功能:

将模式设置指令或显示地址写入液晶模块

voidWriteInstruction(unsignedchardictate)

while(BusyTest()==1);

//如果忙就等待

//根据规定,RS和R/W同时为低电平时,可以写入指令

RW=0;

//E置低电平(根据表8-6,写指令时,E为高脉冲,

//空操作两个机器周期,给硬件反应时间

P0=dictate;

//将数据送入P0口,即写入指令或地址

//空操作四个机器周期,给硬件反应时间

//E置高电平

//当E由高电平跳变成低电平时,液晶模块开始执行命令

voidWriteAddress(unsignedcharx)//函数功能:

指定字符显示的实际地址

WriteInstruction(x|0x80);

//显示位置的确定方法规定为"

80H+地址码x"

voidWriteData(unsignedchary)//函数功能:

将数据(字符的标准ASCII码)写入液晶模块

RS=1;

//RS为高电平,RW为低电平时,可以写入数据

P0=y;

//将数据送入P0口,即将数据写入液晶模块

voidLcdInitiate(void)//函数功能:

对LCD的显示模式进行初始化设置

delaynms(15);

//延时15ms,首次写指令时应给LCD一段较长的反应时间

WriteInstruction(0x38);

//显示模式设置:

16×

2显示,5×

7点阵,8位数据接口

delaynms(5);

//延时5ms ,给硬件一点反应时间

//连续三次,确保初始化成功

WriteInstruction(0x0c);

显示开,无光标,光标不闪烁

WriteInstruction(0x06);

光标右移,字符不移

WriteInstruction(0x01);

//清屏幕指令,将以前的显示内容清除

voiddisplay_volt(void)//函数功能:

显示电压符号数功能:

显示电压符号

WriteAddress(0x01);

//写显示地址,将在第2行第1列开始显示

i=0;

//从第一个字符开始显示

while(Str[i]!

='

\0'

)//只要没有写到结束标志,就继续写

{

WriteData(Str[i]);

//将字符常量写入LCD

i++;

//指向下一个字符

}

voiddisplay_dot(void)//函数功能:

显示电压的小数点

WriteAddress(0x09);

//写显示地址,将在第1行第10列开始显示

WriteData('

.'

);

//将小数点的字符常量写入LCD

voiddisplay_V(void)//函数功能:

显示电压的单位(V)

WriteAddress(0x0d);

//写显示地址,将在第2行第13列开始显示

V'

//将字符常量写入LCD

voiddisplay1(unsignedcharx)//函数功能:

显示电压的整数部分

WriteAddress(0x08);

//写显示地址,将在第2行第7列开始显示

WriteData(digit[x]);

//将百位数字的字符常量写入LCD

voiddisplay2(unsignedcharx)//函数功能:

显示电压的小数数部分

i=x/10;

//取十位(小数点后第一位)

j=x%10;

//取个位(小数点后第二位)

WriteAddress(0x0a);

//写显示地址,将在第1行第11列开始显示

WriteData(digit[i]);

//将小数部分的第一位数字字符常量写入LCD

WriteData(digit[j]);

unsignedcharA_D()//函数功能:

将模拟信号转换成数字信号

unsignedchari,dat;

CS=1;

//一个转换周期开始

CLK=0;

//为第一个脉冲作准备

CS=0;

//CS置0,片选有效

DIO=1;

//DIO置1,规定的起始信号

CLK=1;

//第一个脉冲

//第一个脉冲的下降沿,此前DIO必须是高电平

//DIO置1,通道选择信号

//第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0

//第二个脉冲下降沿

DIO=0;

//DI置0,选择通道0

//第三个脉冲

//第三个脉冲下降沿

//第三个脉冲下沉之后,输入端DIO失去作用,应置1

//第四个脉冲

8;

i++)//高位在前

dat<

<

=1;

//将下面储存的低位数据向右移

dat|=(unsignedchar)DIO;

//将输出数据DIO通过或运算储存在dat最低位

//片选无效

returndat;

//将读书的数据返回

voidmain()//函数功能:

主函数

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2