方波发生器课程设计讲解Word文件下载.docx
- 文档编号:20006464
- 上传时间:2023-01-14
- 格式:DOCX
- 页数:23
- 大小:268.28KB
方波发生器课程设计讲解Word文件下载.docx
《方波发生器课程设计讲解Word文件下载.docx》由会员分享,可在线阅读,更多相关《方波发生器课程设计讲解Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿结构。
另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前的单片机以采用程序存储器和数据存储器截然分开的结构为多。
本课题讨论的方波发生器的核心是目前应用极为广泛的51系列单片机。
1.1、设计内容
本课程设计是设计一个方波发生器,用3位数码管显示方波的频率。
1.2、设计的基本要求
用单片机产生频率可调的方波信号。
输出方波的频率范围为1Hz-200Hz,频率误差比小于0.5%。
要求用“增加”、“减小”2个按钮改变方波给定频率,按钮每按下一次,给定频率改变的步进步长为1Hz,当按钮持续按下的时间超过2秒后,给定频率以10次/秒的速度连续增加(减少),输出方波的频率要求在数码管上显示。
用输出方波控制一个发光二极管的显示,用示波器观察方波波形。
开机默认输出频率为5Hz。
2、方波发生器设计方案
在电子技术领域中,实现方波发生器的方法有很多种,可以采用不同的原理及器件构成不同的电路,但可以实现相同的功能。
在此次设计中,有些地方与课题原本的具体要求有点不同。
如实现频率调节时,不是按要求利用调整变阻器的阻值来完成的,而是用按键来实现的。
2.1、方案介绍
微处理器模块AT89S52,频率显示模块,独立键盘模块,74573显示驱动模块。
本设计中用到两个定时器,定时器0和定时器1,其中定时器0工作在定时方式2下,可自动重装,
决定方波的频率;
定时器1同样工作在定时方式1下,用于实现数码管的动态扫描,用显示方波的输出频率,键盘的操作是通过P1口与单片机共同来控制的,键盘操作来完成按要求对方波频率进行调节。
2.2、方波发生器的原理与功能
方波发生器的原理方框图如图1所示
由于系统的要求不高,比较单一的,再加上我们是通过定时器来调节频率的,而非电阻,因此实现起来就相对简化了。
仅用键盘、AT89S52及串行显示便可完成设计,达到所要求实现的功能。
方波发生器工作原理与功能:
简单的流程为:
主程序扫描键盘,将设置信息输入,处理后,输出到数码管显示,并输出方波驱动一个LED。
单片机的晶振为12.0MHz,用到了两个定时器,即定时器0与定时器1,分别进行频率的定时。
根据计算定时器初值的公式:
计算出定时器0与定时器1所要装入的初值。
频率显示电路由74573构成的驱动电路和数码显示管组成,利用三个数码管来显示频率的。
此电路的键盘是由两个功能键(调节频率的增减)组成,利用无限循环对键盘进行扫描。
键有两种状态,当其处于状态0时,键会处于有效状态,当其处于状态1时,处于无效状态,通过对键盘的扫描并获得键值,从而达到控制输出方波频率的控制作用。
3、系统的硬件设计
3.1、单片机最小系统
单片机各功能部件的运行都是以时钟频率为基准的,有条不紊地进行工作。
因而时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
常用的时钟电路方式有两种:
一种是内部时钟方式,一种是外部时钟方式,这里采用的是内部时钟方式,外接晶振。
时钟电路由片外晶体、微调电容和单片机的内部电路组成。
选取频率为12.0MHz的晶振,微调电容是瓷片电容。
89S52单片机的P3.7口作为波形输出口,若接示波器,则可通过示波器来观察波形,是一个矩形波。
此单元电路包括时钟电路、复位电路,具体电路如图2所示:
图2单片机最小系统
3.2、小键盘接口电路
小键盘如图3所示。
它包括8个键,系统中用到的键只有2个,分别为0号、1号键。
其中0号键是频率增加控制键,接P1.0口,用它来控制方波频率的增加,;
1号键是频率减少控制键,接P1.1口,用它来控制方波频率的减少。
图3小键盘接口电路
3.3、数码管显示电路
采用动态显示来实现显示功能,如图4所示。
由74573进行驱动,并从P0口送入数码管的断码(J12接到P0口),因为数码管是共阴数码管,所以其位选科直接由P2口直接驱动(J16接道P2口),不需要驱动芯片,通过送入段码,再送入对应的位码,就能实现数码管的动态显示。
显示部分具体电路如图4所示:
图4数码管显示电路
4、系统的软件设计
方波发生器的软件设计包括主程序、延时子程序、系统初始化程序、显示子程序、键盘扫描程序、定时器中断子程序。
其中主程序用来控制整个程序的执行,它与各子程序紧密相联,共同实现方波发生器各种功能的执行。
4.1、主程序
主程序包括系统初始化及显示程序,是一个死循环系统。
其流程图如图5所示:
4.2、系统初始化子程序
在此程序中,给所有变量赋初值,有键盘扫描口、状态标志位flag、初始频率及其定时、定时器0与定时器1的工作方式等。
初始化时启动了定时器0与定时器1。
4.3、显示子程序
利用分离频率的各位数值,将各位数值分别显示出来。
在程序中利用了频率显示的高位灭零的方法以致最高位为0时就不显示,以致显示效果美观化。
一共有4位是显示频率的,若频率小于1000时,则千位不显示;
若频率小于100时,则千位与百位都不显示,依次类推。
显示子程序流程图如图6所示:
4.4、键盘扫描程序
键盘扫描用无限循环实现,通过无限循环扫描,可得到相应的键值,从而可判断是否有键被按下及时哪根键被按下;
关于键盘扫描程序的说明:
频率可调时,占空比保持位50%,只能进行单一变量的调节,状态标志flag的初始值为0。
(1)频率调节:
频率值初始值为5Hz,按键扫描程序返回0时,按下键是接P1.0的键,频率值增加,返回值为1是表示是接P1.1口的键被按下,频率值减少,此时进行频率的调节;
可以进行加1Hz、减1Hz、加10Hz、减10Hz操作,分别由1号键、2号键控制。
如果按住某个键不放,便会执行连续加值或减值操作。
这里的频率的最大值为200Hz,当频率增至最大值时,还按增值键,此时频率会保持200Hz不变。
同理,频率的最小值为1Hz,当减频率减至最小值时,再按减频率键,则频率会保持1Hz不变。
当返回的值为255时表示没有键被按下。
(2)键盘中断处理子程序流程图与键处理流程图分别如图7、图8所示:
4.5、定时器中断子程序
定时器中断子程序中有定时器0与定时器1中断,频率定时器0中断流程图与动态扫描定时器1流程图分别如图9、图10所示。
(1)定时器0遇中断执行的操作有进行频率定时和输出相应频率方波的操作。
(2)定时器1遇中断,重装初值,并执行数码管显示程序。
5、调试与性能分析
5.1硬件调试
硬件的测试首先是检查电路的逻辑线路是否正确,如果正确再检查原理图的线路连接是否正确,电路的布局安排是否合理等等。
软件的测试只要是检查程序的语法是否正确,数据结构安排是否妥当,时序是否正确,整体流程安排是否合理。
上面两部检查妥当后,就到了系统调试最关键的一步,软硬件的协同调试,问题往往在此才能被发现。
5.2软件调试
在软硬件协同调试时,硬件问题比较少,主要体现在上拉电阻的使用,滤波电容的使用等,极少发生逻辑上的错误。
硬件的问题往往是致命的问题,其不易察觉,发现之后电路更改也不容易。
这就需要我们不断的实验,在实战中摸索出规律,吸取经验教训,在以后的电路设计中能设计出稳定的抗干扰能力强的电路。
软件问题是调试中遇到问题最多的,此系统中出现过的问题有以下几处:
1、键盘中断处理程序中中断入口后,没有关掉外部中断,出现键值读取不正确,不能正确操作键盘。
解决方法,在中断入口处关掉外中断,并在出口时再开外中断;
2、键盘扫描前没有软件延时消抖,出现键值读取不准确。
解决方法,在键盘中断入口后在键值扫描前软件延时约10ms,消去键盘抖动所带来的误操作;
3、程序中有个别地方将“=”与“==”混淆,造成结果不准确,解决办法,仔细查找,将混淆出更正。
再把到计时设定时子程序加进来,看是否能通过菜单正确调用,返回。
能否修改到计时。
整个调试完毕。
6、设计体会
在单片机课程设计中,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。
更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。
设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。
在这次设计过程中,我也对word、protues、Keil等软件有了更进一步的了解,这使我在以后的学习中更加熟练。
总之,本次单片机课程设计让我悟出了许多东西:
第一,就是对资料的搜索、整理、归类、总结、保存的能力是一个至关重要的个人能力。
如果没有这种能力,在大学学习阶段,那么我们的学习将会是一种负担;
今后我们走出校门,甚至在整个人生阶段,也将会碌禄无为;
第二,我们要学会坚持不懈,不轻易言弃,这对于我们非常的重要。
如果我们没有这种精神,一旦我们遇到一点挫折,我们也许就会被打败,以后进入社会就会没有我们的立足之地。
因此,我们要珍惜大学时光,循序渐进的培养这些能力,这样才不会被瞬息万变的时代所淘汰。
参考文献
[1]李鸿等.单片机原理及应用[M].湖南大学出版社,2005.
[2]何立民.单片机高级教程---应用与设计[M].北京航空航天大学出版社,2000,8.
[3]戴佳.51单片机C语言应用程序设计实例精讲[M].北京:
电子工业出版社,2006.
[4]于京.
51系列单片机C程序设计与应用案例[M].北京:
中国电力出版社,2006.
[5]孙育才.
ATMEL新型AT89S52系列单片机及其应用[M].北京:
清华大学出版社,2005.
[6]李华.MCS-51系列单片机实用接口技术[M].北京:
北京航空航天大学出版社,2000
附录A:
基于单片机方波信号发生器的原理图
附录B:
基于单片机方波信号发生器的程序清单
/******************************************
Filename:
Signalgenerator
Describe:
方波信号发生器
Author:
王荣金
Date:
2011.9
******************************************/
#include<
reg52.h>
math.h>
typedefunsignedcharuchar;
typedefunsignedintuint16;
sbitP37=P3^7;
//由P27输出方波
bitflag=0;
//键连续按下标志位,1有效
ucharSec2s=0;
//标志位,标志键按下是否已到2s
ucharLED[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
//共阴数码管显示位码
ucharFre[3]={0,0,0};
//存储数码管段码
ucharSEG[3]={0xfe,0xfd,0xfb};
//数码管位码
ucharFre_value=5;
//存储频率初始值
ucharKey_val;
//键值存储
ucharpre_Key_val;
uint16count=0;
uint16count1=0;
//记录2s是否到达
uint16Over_val=0;
/************************************/
voidDelayms(void)//延时大约10ms
{
uchari,j;
for(i=0;
i<
25;
i++)
for(j=0;
j<
120;
j++);
}
/***************************
设置定时器工作方式
***************************/
voidTimer_Mode(void)
TMOD|=0x12;
//T1工作方式1,T0工作方式2,自动重装
TL0=6;
//T0记250us,即0.25ms
TH0=6;
TL1=0xf0;
//T1记10ms
TH1=0xd8;
EA=1;
ET0=1;
//开中断
ET1=1;
TR0=1;
//开始记时
TR1=1;
/*******************************************
数码管显示程序,假设P1进行位选,P0送段码
********************************************/
voidLED_dis(void)
staticucharb=0;
Fre[2]=Fre_value/100;
//百位
Fre[1]=Fre_value%100/10;
//十位
Fre[0]=Fre_value%10;
//个位
P2=0xff;
if(Fre[2]==0){//进行消隐
Fre[2]=10;
if(Fre[1]==0)Fre[1]=10;
}
P0=LED[Fre[b]];
P2=SEG[b];
//要显示的那一位
b++;
if(b==3)b=0;
/*************************************
按键扫描函数,判断是哪根键被按下
*************************************/
ucharKey_scan()
{
uchari,k;
P1=0xff;
//进行初始化
i=P1;
if(i==0xff)k=255;
//无键按下,返回值是255
else//有键按下
{
Delayms();
//延时约10ms去抖动
if(i!
=P1)k=255;
else
{switch(i)
{
case0xfe:
k=0;
break;
//函数返回0时表示P1.0按下
case0xfd:
k=1;
//程序返回1时表示P1.1按下
}
}
returnk;
频率处理函数
uint16Get_T0_value(ucharF)
uint16h;
double*k,f;
f=(double)F;
//强制转换
f=0.5/f;
//半个周期
f=f/0.00025;
//多少个250us,0.25ms
h=f;
//取整
if(modf(f,k)>
=0.5)h+=1;
//要求频率误差小于0.5Hz
returnh;
/*************************************************
按键处理函数
*************************************************/
voidKey_process(void)
{
While
(1){
Key_val=Key_scan();
//获取键值
if((Key_val!
=pre_Key_val)&
&
(flag==0)){
pre_Key_val=Key_val;
if(Key_val!
=255){
flag=0;
//键按下,连续按下标志位清零
switch(Key_val){
case0:
Fre_value++;
if(Fre_value>
=200)Fre_value=200;
Over_val=Get_T0_value(Fre_value);
break;
case1:
if(Fre_value>
=2)Fre_value--;
elseFre_value=1;
}
else{
Sec2s=0;
}
}
else{
=255)flag=1;
//有键一直被按下
elseflag=0;
/**********************************************************/
voidmain(void)
Timer_Mode();
P37=1;
//设置初始值为1
Over_val=Get_T0_value(Fre_value);
Key_process();
/**************************************************
T0中断子程序
**************************************************/
voidTimer0_ISR(void)interrupt1using0
count++;
if(count>
Over_val){//记时是时间是否达到
count=0;
P37=~P37;
}//由P3.7来输出波形
if(flag==1){
if(count1<
4000)count1++;
//1s到达否
count1=0;
if(Sec2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 方波 发生器 课程设计 讲解