两路相位可调方波信号发生器Word格式文档下载.docx

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

两路相位可调方波信号发生器Word格式文档下载.docx

《两路相位可调方波信号发生器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《两路相位可调方波信号发生器Word格式文档下载.docx(21页珍藏版)》请在冰点文库上搜索。

两路相位可调方波信号发生器Word格式文档下载.docx

引脚

符号

功能说明

1

VSS

一般接地

2

VDD

接电源(+5V)

3

V0

液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

4

RS

RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

5

R/W

R/W为读写信号线,高电平

(1)时进行读操作,低电平(0)时进行写操作。

6

E

E(或EN)端为使能(enable)端,

写操作时,下降沿使能。

读操作时,E高电平有效

7

DB0

低4位三态、双向数据总线0位(最低位)

8

DB1

低4位三态、双向数据总线1位

9

DB2

低4位三态、双向数据总线2位

10

DB3

低4位三态、双向数据总线3位

11

DB4

高4位三态、双向数据总线4位

12

DB5

高4位三态、双向数据总线5位

13

DB6

高4位三态、双向数据总线6位

14

DB7

高4位三态、双向数据总线7位(最高位)(也是busyflag)

15

BLA

背光电源正极

16

BLK

背光电源负极

寄存器选择控制表

操作说明

写入指令寄存器(清除屏等)

读busyflag(DB7),以及读取位址计数器(DB0~DB6)值

写入数据寄存器(显示各字型等)

从数据寄存器读取数据

注:

关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0.

busyflag(DB7):

在此位为1时,LCD忙,将无法再处理其他的指令要求。

2.程序流程图

图6流程图

3.源程序

#include<

reg51.h>

math.h>

#defineucharunsignedchar

#defineuintunsignedint

sbittest=P3^7;

sbitLCDEN=P2^2;

sbitLCDRS=P2^0;

sbitLCDRW=P2^1;

sbitWaveA=P3^0;

sbitWaveB=P3^1;

ucharFrequency,Key_Value,Flag,a[6];

uintdataPhase_Difference;

doubleControl_Phase=0.000001;

intdataCounter_T0,Number_T0,Counter_T1,Number_T1;

//**********************

voidInitial_System();

ucharScan_Keyboard();

uintGet_Number_T0(ucharFrequency);

uintGet_Number_T1(ucharFrequency);

voidIncrease_Frequency();

voidDecrease_Frequency();

voidIncrease_Phase_Difference(uintdataStep_Phase_Difference);

//voidDecrease_Phase_Difference(uintdataStep_Phase_Difference);

voidCalculate_Frequency_Phase(void);

voidDisplay_Frequency_Phase();

voidDelay(uint);

voidWrite_Cmd(ucharcmd);

voidWrite_Data(ucharData);

voidLCD_Init();

//**********************************

voidmain()

{

Initial_System();

while

(1)

{

Key_Value=Scan_Keyboard();

Calculate_Frequency_Phase();

Display_Frequency_Phase();

}

}

//************************

voidInitial_System()

WaveA=0;

WaveB=0;

Control_Phase=0.000001;

Frequency=10;

Phase_Difference=0;

Counter_T0=0;

Counter_T1=0;

Number_T1=Get_Number_T1(Frequency);

TMOD=0x22;

TH1=0x38;

//256-200

TL1=0x38;

TH0=0xc9;

//256-201

TL0=0xc9;

EA=1;

ET1=1;

TR0=1;

TR1=1;

LCD_Init();

}

//****************************

voidWrite_Cmd(ucharcmd)

LCDEN=1;

LCDRS=0;

P0=cmd;

Delay(5);

LCDEN=0;

//***************************

voidWrite_Data(ucharData)

LCDRS=1;

P0=Data;

voidLCD_Init()

LCDRW=0;

Write_Cmd(0x01);

Write_Cmd(0x38);

Write_Cmd(0x0C);

Write_Cmd(0x06);

Write_Cmd(0x80);

Write_Data('

F'

);

R'

E'

:

'

Write_Cmd(0x80+0x40);

P'

H'

A'

//*************************

ucharScan_Keyboard()

ucharkey;

uchartemp1,temp2;

P1=0x0f;

if(P1!

=0x0f)

temp1=P1;

P1=0xf0;

temp2=P1;

}

while(P1!

Delay(10);

key=temp1|temp2;

switch(key)

case0xee:

return0;

break;

case0xde:

return1;

case0xbe:

return2;

case0x7e:

return3;

case0xed:

return4;

case0xdd:

return5;

case0xbd:

return6;

case0x7d:

return7;

case0xeb:

return8;

case0xdb:

return9;

case0xbb:

return10;

case0x7b:

return11;

case0xe7:

return12;

case0xd7:

return13;

case0xb7:

return14;

case0x77:

return15;

default:

return16;

//*********************************

uintGet_Number_T0(ucharFrequency)

uinth;

doublel;

l=(double)Frequency;

l=Control_Phase*0.5/l;

l=l/0.000055;

h=l;

if(l-h>

+0.5)

h=h+1;

returnh;

uintGet_Number_T1(ucharFrequency)

doublef;

f=(double)Frequency;

f=0.5/f;

f=f/0.0002;

h=f;

if(f-h>

=0.5)

//********************************T0

voidTimer0_Interrupt()interrupt1

Counter_T0++;

if(Counter_T0>

Number_T0)

Counter_T0=0;

if(Flag==0)

WaveB=WaveA;

else

WaveB=~WaveA;

ET0=0;

TR0=0;

//********************************T1

voidTimer1_Interrupt()interrupt3

Counter_T1++;

if(Counter_T1>

Number_T1)

Counter_T1=0;

WaveA=~WaveA;

ET0=1;

TR0=1;

//********************************

voidIncrease_Frequency()

if(Frequency<

=256-10)

Frequency=Frequency+10;

else

Frequency=255;

voidDecrease_Frequency()

if(Frequency>

10)

Frequency=Frequency-10;

Frequency=1;

voidIncrease_Phase_Difference(uintdataStep_Phase_Difference)

Control_Phase=Control_Phase+0.00555556*Step_Phase_Difference;

if(Control_Phase>

=1&

&

Flag==1)

{

Flag=0;

Control_Phase=0.000001;

}

elseif(Control_Phase>

1)

Flag=1;

Control_Phase=Control_Phase-1;

Phase_Difference+=Step_Phase_Difference;

if(Phase_Difference>

=360)

voidCalculate_Frequency_Phase(void)

switch(Key_Value)

case0:

Increase_Frequency();

break;

case1:

Decrease_Frequency();

case2:

Increase_Phase_Difference(10);

case3:

Initial_System();

default:

Number_T0=Get_Number_T0(Frequency);

voidDisplay_Frequency_Phase()

uchari,j;

a[0]=Frequency/100;

a[1]=(Frequency%100)/10;

a[2]=Frequency%10;

a[3]=Phase_Difference/100;

a[4]=(Phase_Difference%100)/10;

a[5]=Phase_Difference%10;

Write_Cmd(0x80+5);

for(i=0;

i<

=2;

i++)

Write_Data(a[i]+48);

Write_Cmd(0x80+0x40+5);

for(j=3;

j<

=5;

j++)

Write_Data(a[j]+48);

test=0;

voidDelay(uinti)

uintj,k;

for(k=i;

k>

0;

k--)

for(j=110;

j>

j--);

4.仿真结果分析

4.1系统初始化

系统默认频率为10HZ,相位差为0.液晶显示,示波器测量如图:

图7系统初始图

4.2频率100HZ,相位差0

图8频率100HZ,相位差0

4.3频率10HZ,相位差90

图9频率10HZ,相位差90

4.4频率100HZ,相位差90

图10频率100HZ,相位差90

5.心得体会

通过本次课程设计,我对单片机和C语言的相关知识得到了进一步的,刚开始看到这个题目的时候,感觉倒计时不是很难,有对应的输入,在控制芯片的作用下,进行递减的控制,就可以达到效果。

所以刚开始的时候,做的还不是很认真,当设计进行到具体环节的时候,问题就体现出来了,并不是像刚开始的那样简单。

首先要想到芯片的对应P口的功能,于是要对所学的单片机的知识进行复习,查找相关资料对那些知识进行扩充,于是就大量的查找相关资料和阅读,了解清楚了相应的功能后,开始了设计。

接着就是具体的模块部分的设计。

我把整体模块分为三个部分进行,输入部分,用4*4的矩阵键盘作为输入模块。

显示部分,采用1602,。

控制部分则有AT89S52芯片来完成其功能。

再就是进行相对应的仿真设计。

由于再仿真用到的是Proteus软件,所以要对这个软件的应用进行学习。

也是开始查找一些资料书和上网找一些应用方面的技巧,在做了充分的准备后,开始了仿真绘图。

在绘图的过程中,有时候也是弄错了,导致仿真的结果出不来,在同学的帮助下,仔细查找和修改,还是完成了本设计,感觉集体的智慧还是很强大的。

在看到LCD上的显示和示波器一致的时候,心里感觉还是蛮高兴的。

虽然在这次设计的过程中,困难不少,但是正是在自己的努力,同学们的帮助下,自己能够顺利的完成,确实还是蛮欣慰的。

感谢这次课程设计给了自己锻炼的机会,自己在今后的学习和生活中,会更加的努力,争取更大的进步!

6.参考文献

[1]何立民.MCS51单片机应用系统设计[M].北京:

北京航空航天大学出版社,2003.

[2]徐君毅.单片微型机原理与应用[M].上海:

上海科技出版社,1995.

[3]公茂法.单片机人机接口实例集[M].北京:

航空航天大学出版社,1998.

[4]沈红卫.基于单片机的智能系统设计与实现[M].北京:

电子工业出版社,2005.

[5]李广弟,朱月秀等.单片机基础[M].北京:

北京航空航天大学出版社,2003.

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

当前位置:首页 > 总结汇报 > 学习总结

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

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