基于单片机正弦信号发生器.doc_第1页
基于单片机正弦信号发生器.doc_第2页
基于单片机正弦信号发生器.doc_第3页
基于单片机正弦信号发生器.doc_第4页
基于单片机正弦信号发生器.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

西安建筑科技大学课程设计(论文)课程设计(论文)任务书专业班级: 学生姓名: 指导教师(签名): 一、课程设计(论文)题目正弦波信号发生器设计二、本次课程设计(论文)应达到的目的本次课程设计是自动化专业学生在学习了单片机原理及应用课程及模拟电子线路、数字电子线路等专业基础课程之后进行的一次综合训练,其主要目的是加深学生对单片机软硬件技术和相关理论知识的理解,进一步熟悉51单片机系统设计的基本理论、方法和技能;掌握工程应用的基本内容和要求,力争做到理论与实际的统一;同时培养学生分析问题、解决问题的能力和独立完成系统设计的能力,并按要求编写相关的技术文档和设计报告等。三、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术参数、设计要求等)1设计内容(1)选择51单片机,晶振采用12MHz。(2)设计一个能产生0至50HZ正弦波信号。通过0832D/A芯片完成数模转换。(3)频率值由键盘输入。(4)将频率值由LED数码管上显示(两位)。2设计要求(1)按照任务书的要求完成系统分析及方案设计。(2)完成硬件原理图的设计,并选择相关元器件。(3)完成控制软件流程图的设计,编写相应的单片机控制程序。(4)撰写设计报告。四、应收集的资料及主要参考文献:1李建忠.单片机原理及应用.西安电子科技大学出版社,20082杨居义.单片机课程设计指导.清华大学出版社,20093李海滨等.单片机技术课程设计与项目实例.中国电力出版社,2009以及与51系列单片机相关的文献及教材。五、审核批准意见教研室主任(签字) 正弦信号发生器设计方案框图单片机显示电路按键电路数/模转 换电路放大电路波形输出图1-1硬件设计方框图DAC0832硬件简介根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种连接方式:直通方式、单缓冲方式和双缓冲方式。1、双缓冲方式:进行两级缓冲;2、单缓冲方式:只进行一级缓冲;3、直通方式:不进行缓冲,适用于比较简单的场合。本设计采用的是直通连接方式。具体电路设计如图1-2所示:图1-2 DAC0832连接图放大整形电路为了输入的是小信号时也能对精确的测出它的频率,所以在信号的输入口加电压放大。有时输入的信号波形不是很好时,放大后也是失真的信号,这就会影响到所测信号的频率,因此要经过整形。其电路如图1-3所示:图1-3 放大整形电路振荡电路单片机必须在时钟的驱动下才能工作。在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。系统所采用的振荡电路如图1-4所示。图1-4 振荡电路图系统选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容 C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。C1,C2的典型值为30PF。单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数,常用fosc表示。如时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12s。复位电路复位电路如图3-7所示,采用上电复位,由极性电容C3和电阻组成。复位电路具有上电自动复位功能,高电平有效,在正常工作状态下复位管脚为低电平。其电路如图1-5所示图1-5 复位电路键盘电路键盘电路如图所示,P2.0对应的按键有启动和停止作用,P2.1对应的按键是减少频率,P2.1对应的按键是加频率。电路如图1-6所示图1-6 键盘电路显示电路显示电路如图1-7所示,频率通过与单片机相连接的LM016L显示图1-7 显示电路软件设计和仿真调试正弦信号发生器程序的流程图开始初始化S1按下有按键按下?S3按下S2按下S1num+1延时增f减小延时减f增大S1num=1S1num=2输出正弦波液晶显示f无输出S1num=0液晶显示f液晶显示fNY图2-1 程序流程图程序设计:#include /头文件#define uchar unsigned char #define uint unsigned int sbit lcdrw=P33; /位变量的定义,显示器选通信号sbit lcdrs=P32; /位变量的定义,显示器读写信号sbit lcde=P34; /位变量的定义,显示器使能信号sbit k1=P20; /位变量的定义,按键1sbit k2=P21; /位变量的定义,按键2sbit k3=P22; /位变量的定义,按键3sbit cs1=P35; /位变量的定义,DAC0832片选信号sbit cs2=P36; /位变量的定义,DAC0832数据传送信号uchar s1num,a,ys,j; /变量的定义(字符型),延时变量uint fre; /变量的定义(整型)频率值uchar code tosin256=0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 ;/*正弦波码 */void delay(uint z)/延时子程序 uchar i,j; for(i=z;i0;i-) for(j=50;j0;j-);/设置频率最大值为50HZvoid delay1(uint y)/延时子程序 uint i; for(i=y;i0;i-);void write_com(uchar com) /LM160L写指令 lcdrs=0;/LM160L选通信号P1=com;delay(5);lcde=1;delay(5);lcde=0;void write_data(uchar date) /向LM160l发送数据 lcdrs=1;P1=date;delay(5);lcde=1;delay(5);lcde=0; void init() /初始化 lcdrw=0; lcde=0; cs2=0; cs1=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80+0x00); write_data(0x77); /写wave: write_data(0x61); write_data(0x76); write_data(0x65); write_data(0x3a); write_com(0x80+0x40); /写 f: write_data(0x66); write_data(0x3a); void write_f(uint date) /写频率 uchar shi,ge; shi=date/10%10; ge=date%10; write_com(0x80+0x42); write_data(0x30+qian); write_data(0x30+bai); write_data(0x30+shi); write_data(0x30+ge); write_data(0x48); write_data(0x5a);void xsf()/显示频率 if(s1num=1) /if语句(判断是否是状态1) fre=50-ys; /频率计算公式 write_f(fre); /写频率 void keyscanf()/按键部分 if(s1=0) delay(5);if(s1=0) while(!s1);/无限循环函数 s1num+;/s1num+1 if(s1num=1)/if语句(判断是否是状态1) ys=0; write_com(0x80+0x05); write_data(0x73); /写sine: write_data(0x69); write_data(0x6e); write_data(0x65); write_data(0x20); write_data(0x20); if(s1num=2) /if语句(判断是否是状态2) s1num=0;P1=0; write_com(0x80+0x05); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_com(0x80+0x42); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); if(s2=0) /按键减频率 delay(5); if(s2=0) while(!s2); ys+; if(s3=0) /按键加频率 delay(5); if(s3=0) while(!s3); ys-; void main() /主函数 init();while(1) /无限循环语句 防止程序跑飞 keyscanf();if(s1num=1) /正弦波 for(j=0;j255;j+) P0=tosinj; delay(ys); if(!(s1&s2&s3)xsf();Keil仿真编译结果图3-1 编译结果源程序经过编译之后生成HEX文件,在proteus仿真中使用。Proteus仿真原理图如图3-2所示;图3-2 proteus仿真原理图添加正确编译后的HEX文件,启动按钮开始仿真,结果如图3-3所示。图3-3 仿真结果按下调频按钮,输出其他频率的正弦波形,结果如图3-4所示。图3-4 仿真

温馨提示

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

评论

0/150

提交评论