频率发生器设计_第1页
频率发生器设计_第2页
频率发生器设计_第3页
频率发生器设计_第4页
频率发生器设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、频率发生器设计一、设计目的1、能够根据题目要求及实际情况掌握编写程序、调试程序、软件仿真及与硬件结合。2、熟悉89c52单片机的内部结构和功能及i/o分配,合理使用其内部寄存器、存储器、位寻址。能够完成频率发生器的软件编程设计工作。3、对频率发生器软件编程、调试、相关硬件设备的使用技能等方面得到真正的实践机会,把软硬件结合,克服其中的种种问题,提高编程能力。二、设计要求1通过按键输入设定频率(默认占空比1:1)并显示2通过按键输入设定占空比并显示3输出此频率4、要求做出实物。(本机地址为08h,当接到上位机发的08h时,则回发08h;当接到上位机发的aah时,则将设定发给上位机;当收到上位机发

2、的55h时,则修改设定频率)。三、硬件电路设计方案选择:本次课题设计的频率发生器系统是由单片机89c52、两个四位一体数码显示管、按键三部分组成。本次课题设计的频率发生器的系统框图如图3-1所示:图3-1 系统框图3.1stc89c52单片机介绍89c52共有四个八位的并行双向口,即有32根输入输出口线。各口的每一位均由锁存器、输出驱动器和输入缓冲器组成。 vcc(40引脚):电源电压vss(20引脚):接地图3-2stc89c52引脚图p0端口(p0.0p0.7,3932引脚):p0口是一个漏极开路的8位双向i/o口。作为输出端口,每个引脚能驱动8个ttl负载,对端口p0写入“1”时,可以作

3、为高阻抗输入。在访问外部程序和数据存储器时,p0口也可以提供低8位地址和8位数据的复用总线。此时,p0口内部上拉电阻有效。在flash rom编程时,p0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。p1端口(p1.0p1.7,18引脚):p1口是一个带内部上拉电阻的8位双向i/o口。p1的输出缓冲器可驱动(吸收或者输出电流方式)4个ttl输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。p1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。p1口特点是输出锁存器,输出时没有条件。输入缓冲,输入时有条件,即需要先将

4、该口设为输入状态,先输出1。 此外,p1.0和p1.1还可以作为定时器/计数器2的外部技术输入(p1.0/t2)和定时器/计数器2的触发输入(p1.1/t2ex)p3口为准双向口。可以字节访问,也可以位访问。p3.0-rxd,串行输入口。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,外部数据存储器读选通。rst(9引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机单

5、片机的复位初始化操作。ale(30引脚):地址锁存控制信号(ale)是访问外部程序存储器时,锁存低8位地址的输出脉冲。xtal1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。xtal2(18引脚):振荡器反相放大器的输入端。stc89c52引脚图如图3-2所示。3.2 按键电路设计按键电路是由两个开关组成,一个接外部中断int0,一个接外部中断int1,外部中断1是改变状态量的,使频率和占空比转换,。外部中断0是调节占空比和频率的变量的。电路图如图3-3所示:图3-3 按键电路3.3数码管显示电路设计1 驱动电路数码管采用共阴极连接,以动态驱动形式显示实现出来。动态驱动是将所有数码

6、管的8个显示笔划a,b,c,d,e,f,g,dp 的同名端连在一起,另外为每个数码管的公共极com增加位元选通控制电路,位元选通由各自独立的i/o线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决单片机对位元选通com端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没选通的数码管就不会亮。图3-4 数码管显示电路数码管显示电路如图3-4所示:52 74hc573锁存器介绍74hc573锁存器主接线图:包含八进制3态非反转透明锁存器,span是一种高性能硅门cmosspan器件。spansl74hc573跟ls/al

7、573的管脚一样。器件的输入是和标准cmos输出兼容的,加上拉电阻他们能和ls/alsttl输出兼容。锁存器输入是和标准 cmos 输出兼容的;加上拉电阻,他们能和 ls/alsttl 输出兼容。当锁存使能端le为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。u36755x出能直接接到 cmos,nmos 和 ttl 接口上u25805x作电压范围:2.0v6.0vu20302x输入电流:1.0uacmos 器件的高噪声抵抗特性三态总线驱动输出置数全并行存取缓冲控制输入使能输入有改善抗扰度的滞后作用原理说明:m54hc563/

8、74hc563/m54hc573/74hc573的八个锁存器都是透明的d 型锁存器,当使能(g)为高时,q 输出将随数据(d)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,i/o 通道,双向总线驱动器和工作寄存器。数据锁存当输入的数据消失时,在芯片的输出端,数据仍然保持; 这个概念在并行数据扩展中经常使用到。1脚三态允许控制端低电平有效1d8d为数据输入端1q8q为数据输出端74hc573

9、引脚图le为锁存控制端;oe为使能端。le为锁存控制端;oe为使能端。3.5系统电路原理图图3-5 系统电路原理图本次课程设计的频率发生器的电路原理图如图3-5所示,所需元件有数码管2个;按钮2个;74hc573:2个;单片机芯片:1个。四、流程图设计4.1主程序主程序包括系统初始化及显示程序,是一个循环系统。其流程图如图4-1所示:图4-1 流程图4.2系统初始化子程序在此程序中,给所有变量赋初值,有按键扫描口、选择串行口工作方式scon、状态标志位flag、初始频率与占空比及其定时、定时器0与定时器1的工作方式等。初始化时启动了定时器0与定时器1。4.3显示子程序利用分离频率的各位数值,将

10、各位数值分别显示出来。在程序中利用了频率显示的高位灭零的方法以致最高位为0时就不显示,以致显示效果美观化。一共有五位是显示频率的,若频率小于10000时,则万位不显示;若频率小于1000时,则万位与千位都不显示,依次类推。占空比的显示规律与频率的一样。流程图如图4-2所示:图4-2 显示子程序流程图4.4按键扫描程序关于按键扫描程序的说明:频率可调时,占空比保持原状不变,反之亦然,只能进行单一变量的调节,状态标志flag的初始值为0。(1)频率调节:i=0时,按键为状态键,此时flag加1,即flag=1,此时进行频率的调节。可以进行加5hz操作,由外部中断1键控制。如果连续按住这个键,便会执

11、行连续加值操作。这里的频率的最大值为15000hz,当频率增至最大值时,还按增值键,此时频率会自动跳到1hz开始继续增加。(2)占空比调节:当状态值flag=2时,此时频率保持不变,进行占空比调节。只可进行加10操作,由外部中断1键控制。要注意的是占空比的初值是50,我们定义的zkb为50(百分比的分子部分,为一整数),故调节占空比时,zkb会进行加10操作。zkb的最大值为99,当增到最大值时,便会返回到值1,如此循环。外部中断0键ex0=0?flag+=flag=1?ex1 pl+=5边界处理flag=2?ex1 zkb+=10边界处理flag=3?flag=0,计算定时器0和1的初值键处

12、理结束图4-3 按键处理流程图(3)为了减轻单片机的工作量,在软件设计中采取了这样的措施,在修改参数确定后才进行定时器初值tc0、tc1的计算。按键处理流程图4-3所示:4.5定时中断子程序定时器中断子程序中有定时器0与定时器1中断。定时器中断子程序流程图分别如图4-4图4-5所示。图4-4 定时器0中断子程序图4-5 定时器1中断子程序五、程序设计#include#include#define uchar unsigned char#define uint unsigned intsbit output=p17; /矩形波输出口float fosc=12000000; /系统时钟频率floa

13、t length=65536; /方式1计数长度uchar flag; /状态键标志uchar zkb; /占空比uint pl; /频率uchar timer0_l,timer0_h,timer1_l,timer1_h; /t0和t1的定时初值uchar code tabl10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /* 1 延时子程序的设计, 第一、定义的c51中循环变量,尽量采用无符号字符型变量。 第二在for循环语句中,尽量采用变量减减来做循环。第三、在dowhile,while语句中,循环体内变量也采用减减方法。 这因为

14、在c51编译器中,对不同的循环方法,采用不同的指令来完成的。第四、对于要求精确延时时间更长,这时就要采用循环嵌套,的方法来实现,因此,循环嵌套的方法常用于达到ms级的延时。 对于循环语句同样可以采用for,dowhile,while结构来完 成,每个循环体内的变量仍然采用无符号字符变量。 */void delay1ms(uchar n) /延时n ms uchar j; while(n-) for(j=0;j1000) pl=50; display(pl,zkb); if(flag=2) /状态2下对占空比进行调整 zkb+=5; /按键占空比加5 if(zkb99) zkb=50; if(f

15、lag=3) /状态2下对占空比进行调整 flag=0; display(pl,zkb); display(pl,zkb); /* 5 定时器中断子程序,中断是程序执行过程中,允许外部或内部事件通过硬件打断程序的执行,完成中断服务程序后,cpu继续原来的被打断的程序,这样的过程被称为中断响应过程。*/void timer0_pl()interrupt 1 /频率t0中断tr0=0; tr1=1; /启动t1,占空比定时 tl0=timer0_l; th0=timer0_h; output=0; /输出高电平void timer1_pl() interrupt 3 /占空比t1中断tr0=1;

16、tr1=0; /t1停止 tl1=timer1_l; th1=timer1_h; output=1; /输出高电平/* 6 主函数程序,在调用函数时,大多数情况下,主调函数和被调函数,之间没有数据传递关系。这样就是前面提到的有参函数,在主调函数时,函数名后面括号中的参数称为实际参数。*/void main() uint pl0=0; uchar zkb0=0; system_init(); /系统初始化 while(1)/死循环,显示频率和占空比 if(flag=0) /状态0时,正常显示频率和占空比 display(pl,zkb); if(flag=1) /状态1时,频率调整状态,频率闪烁

17、display(pl0,zkb); display(pl,zkb); delay1ms(20); if(flag=2) /状态2时,占空比调整状态,占空比闪烁 display(pl,zkb0); display(pl,zkb); 六、设计总结这次单片机小学期课程设计题目是频率发生器。此次小学期设计分为硬件设计和软件编程,由小组两个成员共同完成,此课程报告重点在于软件编程,所以该报告重点在于c语言程序编程。课程设计的主要步骤是首先听老师讲解硬件的基本知识,包括数码显示器基本原理,各种主接线板的基本结构及其名称,硬件各部分的功能,这为硬件焊接打下了良好的基础。程序的编程使用c语言进行编程,在之前的课程学习中,已经学习过这门课程。此次频率发生器软件编程内容主要包括延时子程序的编程,系统初始化,子程序的显示,键盘扫描部分程序的编程,定时器中断子程序,主函数的编程等问题。其主要问题计数初值的选择设定,这一点要经过详细精确的计算还有数码显示程序。这次小学期课程设计,学习到了很多知识,以前只是学习课本上的基本知识,对其概念性的东西有所了解掌握,不知道其具体的用途和使用方法,这次小学期设计综合了硬件设计和软件编程。把写好的软件程序输进硬件设备,提供电源,观看实验现象。把平时学习的理论知识同硬件焊接结合起来,提高了动手操作能力,与此同时,也对平时学习的理论知识有了巩固和提高,所

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论