基于单片机正弦信号发生器docx.docx

上传人:b****0 文档编号:18577102 上传时间:2023-08-19 格式:DOCX 页数:12 大小:55.80KB
下载 相关 举报
基于单片机正弦信号发生器docx.docx_第1页
第1页 / 共12页
基于单片机正弦信号发生器docx.docx_第2页
第2页 / 共12页
基于单片机正弦信号发生器docx.docx_第3页
第3页 / 共12页
基于单片机正弦信号发生器docx.docx_第4页
第4页 / 共12页
基于单片机正弦信号发生器docx.docx_第5页
第5页 / 共12页
基于单片机正弦信号发生器docx.docx_第6页
第6页 / 共12页
基于单片机正弦信号发生器docx.docx_第7页
第7页 / 共12页
基于单片机正弦信号发生器docx.docx_第8页
第8页 / 共12页
基于单片机正弦信号发生器docx.docx_第9页
第9页 / 共12页
基于单片机正弦信号发生器docx.docx_第10页
第10页 / 共12页
基于单片机正弦信号发生器docx.docx_第11页
第11页 / 共12页
基于单片机正弦信号发生器docx.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于单片机正弦信号发生器docx.docx

《基于单片机正弦信号发生器docx.docx》由会员分享,可在线阅读,更多相关《基于单片机正弦信号发生器docx.docx(12页珍藏版)》请在冰点文库上搜索。

基于单片机正弦信号发生器docx.docx

基于单片机正弦信号发生器docx

课程设计(论文)任务书

专业班级:

学生姓名:

指导教师(签名):

一、课程设计(论文)题目

正弦波信号发生器设计

二、本次课程设计(论文)应达到的目的

本次课程设计是自动化专业学生在学习了《单片机原理及应用》课程及《模拟电子线路》、《数字电子线路》等专业基础课程之后进行的一次综合训练,其主要目的是加深学生对单片机软硬件技术和相关理论知识的理解,进一步熟悉51单片机系统设计的基本理论、方法和技能;掌握工程应用的基本内容和要求,力争做到理论与实际的统一;同时培养学生分析问题、解决问题的能力和独立完成系统设计的能力,并按要求编写相关的技术文档和设计报告等。

三、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术参数、设计要求等)

1.设计内容

(1)选择51单片机,晶振采用12MHz。

(2)设计一个能产生0至50HZ正弦波信号。

通过0832D/A芯片完成数模转换。

(3)频率值由键盘输入。

(4)将频率值由LED数码管上显示(两位)。

2.设计要求

(1)按照任务书的要求完成系统分析及方案设计。

(2)完成硬件原理图的设计,并选择相关元器件。

(3)完成控制软件流程图的设计,编写相应的单片机控制程序。

(4)撰写设计报告。

四、应收集的资料及主要参考文献:

1.李建忠.单片机原理及应用.西安电子科技大学出版社,2008

2.杨居义.单片机课程设计指导.清华大学出版社,2009

3.李海滨等.单片机技术课程设计与项目实例.中国电力出版社,2009

以及与51系列单片机相关的文献及教材。

五、审核批准意见

教研室主任(签字)

正弦信号发生器设计方案框图

图1-1硬件设计方框图

DAC0832硬件简介

根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种连接方式:

直通方式、单缓冲方式和双缓冲方式。

1、双缓冲方式:

进行两级缓冲;

2、单缓冲方式:

只进行一级缓冲;

3、直通方式:

不进行缓冲,适用于比较简单的场合。

本设计采用的是直通连接方式。

具体电路设计如图1-2所示:

图1-2DAC0832连接图

放大整形电路

为了输入的是小信号时也能对精确的测出它的频率,所以在信号的输入口加电压放大。

有时输入的信号波形不是很好时,放大后也是失真的信号,这就会影响到所测信号的频率,因此要经过整形。

其电路如图1-3所示:

图1-3放大整形电路

振荡电路

单片机必须在时钟的驱动下才能工作。

在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。

系统所采用的振荡电路如图1-4所示。

图1-4振荡电路图

系统选用石英晶体振荡器。

此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。

电路中两个电容C1,C2的作用有两个:

一是帮助振荡器起振;二是对振荡器的频率进行微调。

C1,C2的典型值为30PF。

单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。

其大小是时钟信号频率的倒数,常用fosc表示。

如时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12μs。

复位电路

复位电路如图3-7所示,采用上电复位,由极性电容C3和电阻组成。

复位电路具有上电自动复位功能,高电平有效,在正常工作状态下复位管脚为低电平。

其电路如图1-5所示

图1-5复位电路

键盘电路

键盘电路如图所示,P2.0对应的按键有启动和停止作用,P2.1对应的按键是减少频率,P2.1对应的按键是加频率。

电路如图1-6所示

图1-6键盘电路

显示电路

显示电路如图1-7所示,频率通过与单片机相连接的LM016L显示

图1-7显示电路

软件设计和仿真调试

正弦信号发生器程序的流程图

图2-1程序流程图

程序设计:

#include//头文件

#defineucharunsignedchar

#defineuintunsignedint

sbitlcdrw=P3^3;//位变量的定义,显示器选通信号

sbitlcdrs=P3^2;//位变量的定义,显示器读写信号

sbitlcde=P3^4;//位变量的定义,显示器使能信号

sbitk1=P2^0;//位变量的定义,按键1

sbitk2=P2^1;//位变量的定义,按键2

sbitk3=P2^2;//位变量的定义,按键3

sbitcs1=P3^5;//位变量的定义,DAC0832片选信号

sbitcs2=P3^6;//位变量的定义,DAC0832数据传送信号

uchars1num,a,ys,j;//变量的定义(字符型),延时变量

uintfre;//变量的定义(整型)频率值

ucharcodetosin[256]={

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};/*正弦波码*/

voiddelay(uintz)//延时子程序

{

uchari,j;

for(i=z;i>0;i--)

for(j=50;j>0;j--);//设置频率最大值为50HZ

}

voiddelay1(uinty)//延时子程序

{

uinti;

for(i=y;i>0;i--);

}

voidwrite_com(ucharcom)//LM160L写指令

{

lcdrs=0;//LM160L选通信号

P1=com;

delay(5);

lcde=1;

delay(5);

lcde=0;

}

voidwrite_data(uchardate)//向LM160l发送数据

{lcdrs=1;

P1=date;

delay(5);

lcde=1;

delay(5);

lcde=0;

}

voidinit()//初始化

{

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);

}

voidwrite_f(uintdate)//写频率

{

ucharshi,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);

}

voidxsf()//显示频率

{

if(s1num==1)//if语句(判断是否是状态1)

{

fre=50-ys;//频率计算公式

write_f(fre);//写频率

}

}

voidkeyscanf()//按键部分

{

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--;

}

}

}

voidmain()//主函数

{

init();

while

(1)//无限循环语句防止程序跑飞

{

keyscanf();

if(s1num==1)//正弦波

{

for(j=0;j<255;j++)

{

P0=tosin[j];

delay(ys);

}

}

if(!

(s1&s2&s3))

{

xsf();

}

}

}

Keil仿真编译结果

图3-1编译结果

源程序经过编译之后生成HEX文件,在proteus仿真中使用。

Proteus仿真原理图如图3-2所示;

图3-2proteus仿真原理图

添加正确编译后的HEX文件,启动按钮开始仿真,结果如图3-3所示。

图3-3仿真结果

按下调频按钮,输出其他频率的正弦波形,结果如图3-4所示。

图3-4仿真结果

按下按键可输出相应频率值的正弦波,并且该频率值由显示器两位显示,仿真结果满足设计要求。

参考文献

[1]李建忠.单片机原理及应用[M].西安电子科技大学出版社

,2008

[2]丁明亮,唐前辉.51单片机应用设计与仿真——基于Keil与Proteus[M].北京航空航天大学大学出版社,2009

[3]曾庆波,商俊平,代瑶,林范刚.单片机基本技能与应用系统设计[M].哈尔滨工业大学出版社,2013

[4]郭天祥.新概念51单片机C语言教程[M].北京:

电子工业出版社,2009

[5]蓝和惠,宁武,闫小金.全国大学生电子设计竞赛单片机应用技能精解[M].北京:

电子工业出版社,2009

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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