课设报告简易信号发生器.docx
- 文档编号:30553406
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:44
- 大小:845.45KB
课设报告简易信号发生器.docx
《课设报告简易信号发生器.docx》由会员分享,可在线阅读,更多相关《课设报告简易信号发生器.docx(44页珍藏版)》请在冰豆网上搜索。
课设报告简易信号发生器
简易信号发生器设计
摘要
随着电子技术的飞快发展,单片机也应用得越来越广泛,基于单片机的智能仪器的设计技术不断成熟。
单片机构成的仪器具有高可靠性,高性价比。
单利用单片机采用程序设计方法来产生波形,线路相对简单,结构紧凑,价格低廉,频率稳定度高,抗干扰能力强等优点,而且还能对波形进行细微的调整,改良波形,易于程序控制。
只要对电路稍加修改,调整程序,就能实现功能的升级。
本系统利用单片机AT89C51采用程序设计方法产生正弦波、三角波、方波、锯齿波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,并通过按键来控制四种波形的类型选择。
本次设计主要由信号发生模块、数模转换模块和仿真模块。
关键词:
单片机;数模转换;液晶显示屏
第1章概述
在本系统中,设计的要求为产生三角波、正弦波、方波信号,要求频率和幅值可调。
并且显示内容可以在LCD显示出来,在本系统中,主控为AT89C51单片机,D/A转换芯片采用的为ADC0832,LCD显示屏采用LCD12864,本系统设置有三个控制按键,分别为频率转换按键、波形切换按键、幅值切换按键,通过这三个按键,可以对输出的波形进行控制,波形幅值为0—5V,分为5个幅值挡位,频率范围为40Hz—400Hz,分为50个频率挡位。
在设计中,采用LCD12864将输出的波形、幅值、频率等信息的参数显示出来,较LCD1602来说显示内容更为丰富直观。
最终结果,本设计完成了设计要求的全部内容,并且在波形上增加了锯齿波。
系统具有硬件简单、效果明显、运行稳定,方便操作的特点。
第2章系统总体方案选择
本设计中,可以大致分为两个模块,主要的部分为信号发生器模块,这一部分为系统的主要部分,并且实现起来也较为简单。
第二部分为LCD显示部分,显示的内容为幅值、频率、波形等信息,显示的内容为实时的,需要不断刷新显示,所以这一部分实现起来难度较大。
2.1系统硬件设计图
本系统硬件设计遵循模块化设计的原则,以简单实用为主要的设计理念,电路图详见附录
(1)
图
(1)硬件电路设计图
2.2系统软件设计
软件设计时,可以将任务分开实现,其一为波形数据输出,其二为LCD12864显示。
图
(2)程序的模块化设计
第3章各单元硬件设计及工作原理
3.1单片机最小系统的设计
单片机最小系统,因为系统相对简单,主要的外设器件只有两个,所以就选用了AT89C51作为主控芯片。
3.2数模转换电路的设计
3.2.1DAC0832芯片工作方式的选择
DAC0832有3种工作方式:
单缓冲、双缓冲、直接选通方式,由于本设计为了达到持续输出信号的目的,所以采用了直接选通的方式,这种方式的优点就是转换速度更快,操作简单,输入的数据可直接转换输出。
将芯片的————CS、—————WR1、—————WR2、—————XFER、GND这五个引脚直接接地,ILE、VCC接电平即可。
3.2.2DAC0832芯片外围电路设计
DAC832的输出量为电流量,但是我们想要的是获得的是电压量,因此在DAC0832使用的时候,是需要在输出口,外接由运算放大器组成的I/V转换电路,就能得到模拟输出的电压,运算器使用的是LM324。
DA转换电路如右图所示,在这个图内,数据的输入端和单片机P1口相连。
图(3)DA转换电路图
3.3显示屏的选择
3.3.1LCD12864与LCD1602的区别
这两者最大的区别就是显示面积的区别,前者的显示面积较大,后者的显示面积较小,基于这点,我们选用LCD12864,用来显示足够多的内容。
3.3.2LCD12864显示屏原理及其硬件设计
这次使用的LCD12864为Protues自带库中特有的,虽然是特有的,但是和平时使用的没有太大的区别,在这里我就不在赘述显示原理了,具体的介绍将会在附录中,在这里,我将主要介绍在使用时候的注意事项,特点就是没有专门的汉字库和符号库,所以在使用的时候需要将所需要的汉字和符号事先通过取模软件提取出来,我使用的是取模软件为PCTOLCD2002,此软件取模方便,推荐使用,但是在使用的时候需要注意的是,显示屏在显示的时候是从第一行从左到右一次显示,然后在到第二行进行显示,汉字的显示一般需要占用两行,也就是,在汉字取模的时候,要将汉字分为上下两个部分取模。
此款显示屏分为左右两个显示,分别通过————CS1、————CS2,选通左半屏和右半屏,所以在写程序的需要注意下。
这点平时使用的显示屏有点区别。
显示屏D0~D7与单片机P0口相连,其余状态控制引脚通过单片机P3口控制。
图(4)LCD12864显示屏接线图
第4章软件设计与说明
4.1软件设计思路
采用了模块化设计的思路,将复杂的问题分解成各个简单的问题,大体上可以分为两个部分,其一为波形输出部分;其二为LCD12864显示部分。
程序流程图如下图所示:
图(5)程序流程图
4.2波形数据输出程序设计
波形数据输出的实现有两种方法,一种是采用波形函数的形式,这种方法是很好的方法,但是存在一个很大的问题,那就是由于51内核的单片机速度较慢,产生的波形频率较慢,所以我放弃了这种方法。
在本设计中,采用了查表的方法,就是提前将需要显示出来的波形数据存储在数组中,然后单片机依次输出,将一个波形的一个周期等间距的分为六十四个点,波形数据可以通过matlab产生,下面给出正弦函数的幅值为5V波形产生程序:
x=0:
2*pi/64:
2*pi;y=round(sin(x)*127)+128
(1)
具体程序如下:
ucharcodesinx0[64]={
128,114,102,90,78,66,55,45,36,28,20,14,9,5,2,1,1,1,
3,7,11,17,24,32,41,50,61,72,84,96,108,121,133,146,
158,170,182,193,204,213,222,230,237,243,247,251,
253,254,254,252,249,245,240,234,226,218,209,199,
188,176,167,158,145,135,};图(6)5V正弦波图像
幅值和波形的变化都是通过切换到不同的数组来实现的,正弦函数有5个数据组,三角波和方波也有5个数组。
频率的更改是采用延时的方式的,就是在每次是数据切换之间延时一段时间,这样就达到了更换频率的目的了。
函数输出到的程序如下:
while
(1)
{
delay_time=pl;//pl的值为选择的频率挡位。
P1=*(which_bx+kk);
kk++;
if(kk==64)
kk=0;
while(delay_time)//延时时间不同,频率就不同了。
delay_time--;
}
4.3LCD12864显示程序设计
显示程序设计中,需要调用的指令较多,所以可以将这一部分的操作进行函数的包装,比如要进行清屏,只需要将清屏的指令写成函数,如果还要进行清屏操作的话只需要调用该函数就行了,根据这一原则,大大降低了该部分程序的繁杂程度。
图(7)显示界面设置
图(8)实际显示效果
LCD12864可分为左、右半屏,每一半屏有512个地址单元,一行有64个单元,总共有8行(页),我们在写入字符的时候是对地址进行操作的,地址表我将在附录中给出。
系统开始运行后,首先是将屏幕上面不变的部分显示出来,比如“频率”、“幅值”等信息。
然后,每当按下按键后,将会触发外部中断,在中断服务程序中,将需要变更的信息,重新运行一次,这样就做到了,每按下按键信息就会变化了。
界面中,我将左1/4的屏来显示当前的信息,有3/4屏用来显示波形图像。
界面如上图(7)、(8)所示。
第5章调试结果及其说明与使用说明
5.1调试过程中遇到的问题
5.1.1LCD12864显示问题
在刚开始使用的时候,由于不清楚其显示的原理,通过字模软件取完后直接就放到程序里面了,所以显示出来的汉字总是乱码的,不清楚是为什么,在网上查了下资料后和看了下网上的例程后,这才发现这种显示屏的控制方法和以前使用显示屏不一样。
在显示的过程中,只有将第一页的内容显示完以后才会紧接着显示下面的,所以就会出现汉字是分开的。
了解了显示原理后,后面的显示就不是问题了。
图(9)调试之前界面图图(10)正常的界面图
5.1.2幅值调节问题
在最开始调节幅值的时候,我是采用在5V波形数组前成以一个系数,这样数出来的波形幅值也就相应的扩大或者缩小,但是,实际出来的效果却是频率特别慢,只有几十Hz,所以就放弃了这种调幅值的方式,采用了所有的波形数据通过查表的方式来实现,这样,相应的运算过程就简化了,输出的波形频率也就上去了,每种波形我设置了5个挡位的幅值大小,可以自由切换。
5.2使用说明
有三个操作按键,分别可以切换幅值、频率、波形。
然后在显示屏中可以显示出相应的信息。
图(11)按键界面
第6章总结
这次课设收获很多,最开始看到题目时感觉不难,但是实际去做的时候就遇到了很多问题,不过最后都顺利的解决了。
总体来说,完成的结果较为满意,所有的功能都实现了。
这次课设是一个较为综合的题目,锻炼了我们在单片机、数电、模电等方面的知识,设计时,需要软硬件综合考虑,设计硬件的时候在网上查询了大量的资料、有些之前学过的知识都忘记了,但是还好,复习下就想起来。
记得有位老师曾经说过,大学期间学习的课程内容,大多都是会忘了,但是重要的是,学到的了其中的方法和思想,在需要用到这方面的知识的时候,重新拿起书本回顾下就行了。
在写软件的时候,开始的时候打算是用汇编语言来写的,主要是考虑到汇编语言编写的程序高效的特点,但是在LCD12864显示的时候老是失败,最后还是放弃了使用汇编语言,真是一个遗憾,转而使用C语言后,由于之前有些基础,所以写起来的问题就不大了。
课设真正的收获,就是提高了解决问题的能力、查询资料的能力。
我相信在以后的工作中,这种能力是会帮助到我们的,因为毕竟在校期间学习的知识和以后参加工作后用到的知识还是有很大的差别的,如果分析问题和解决问题的能力不够的话,是不能适应以后的社会的。
单片机课设通过仿真平台,可以大大的提高系统设计的灵活性,增加了我们对单片机课程的理解和兴趣。
我们可以在以后的学习中,多多利用仿真工具,这样就可以提前验证下所设计的方案的正确性,找出问题,提高了开发的效率。
第7章参考文献
[1]徐春辉.单片微机原理及应用[M].北京:
电子工业出版社,2013.
[2]周润景,张丽娜.基于Protues的电路及单片机系列设计与仿真[M].北京:
北京航空航天大学出版社,2006.
[3]张毅刚,彭元喜,姜守达等.MCS-51单片机应用设计[M].哈尔滨:
哈尔滨工业大学出版社.2003.
[4]
附录:
一、系统整体电路图
二、整体程序
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#definelcdcol_add0x40
#definepage_add0xb8
sbitbx_adjust=P3^2;//函数发生器定义
sbitpl_adjust=P3^3;//中断输入接口
sbitfztj=P2^1;
sbitbxtj=P2^0;
ucharbxxz=0,pl=0,delay_time=0,kk,pp,vp,fz=0,bx=0;//为函数发生模块提供中间变量
uchar*which_bx,*which_bx2;//选择哪一种波形
uintpl_num;
/*************12864LCD引脚定义*************/
sbitLCD_RS=P3^7;//寄存器选择输入
sbitLCD_RW=P3^6;//液晶读/写控制
sbitLCD_EN=P3^5;//液晶使能控制
sbitLCD_RST=P3^4;//液晶复位端口
sbitLCD_CS1=P3^0;//右半屏控制
sbitLCD_CS2=P3^1;//左半屏控制
ucharcodefuzhi[64]={//“幅值”的字码表
0x00,0xF8,0x08,0xFF,0x08,0xF8,0x00,0x02,//“幅”的上半部分
0x7A,0x4A,0x4A,0x4A,0x7A,0x02,0x02,0x00,
0x00,0x80,0x60,0xF8,0x07,0x04,0xE4,0xA4,//“值”的上半部分
0xA4,0xBF,0xA4,0xA4,0xE4,0x04,0x00,0x00,
0x00,0x0F,0x00,0xFF,0x08,0x0F,0x00,0xFF,//“幅”的下半部分
0x49,0x49,0x7F,0x49,0x49,0xFF,0x00,0x00,
0x01,0x00,0x00,0xFF,0x40,0x40,0x7F,0x4A,//“值”的下半部分
0x4A,0x4A,0x4A,0x4A,0x7F,0x40,0x40,0x00,
};
ucharcodepinglv[64]={//“频率”的字码表
0x40,0x7C,0x40,0xFF,0x48,0x6C,0x4A,0xF2,
0x12,0x1A,0xD6,0x12,0x12,0xFB,0x12,0x00,
0x00,0x14,0xA4,0x44,0x04,0x24,0xB5,0x6E,
0x24,0x94,0x04,0x44,0xA6,0x14,0x00,0x00,
0x08,0x87,0x40,0x2F,0x10,0x0F,0x80,0x8F,
0x40,0x20,0x1F,0x20,0x40,0xCF,0x00,0x00,
0x08,0x09,0x08,0x08,0x09,0x09,0x09,0xFF,
0x09,0x09,0x0B,0x08,0x08,0x0D,0x08,0x00
};
ucharcodehanshu[64]={//“函数”的字码表
0x00,0xF0,0x00,0x22,0x42,0x82,0x02,0xF2,
0x12,0x8A,0x46,0x62,0x00,0xF0,0x00,0x00,
0x10,0x92,0x54,0x30,0xFF,0x50,0x94,0x32,
0xD8,0x17,0x10,0x10,0xF0,0x18,0x10,0x00,
0x00,0xFF,0x40,0x48,0x44,0x52,0x60,0x5F,
0x40,0x42,0x44,0x4C,0x40,0xFF,0x00,0x00,
0x02,0x82,0x4E,0x33,0x22,0x52,0x8E,0x40,
0x23,0x14,0x08,0x16,0x61,0xC0,0x40,0x00
};
ucharcodezx[64]={//“正弦”的字码表
0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,
0x82,0x82,0x82,0xC2,0x83,0x02,0x00,0x00,
0x02,0xE2,0x22,0x22,0x3E,0x08,0x08,0x88,
0x49,0x3A,0x08,0x08,0x88,0x0C,0x08,0x00,
0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,
0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00,
0x00,0x43,0x82,0x42,0x3E,0x00,0x20,0x31,
0x29,0x25,0x23,0x21,0x30,0x60,0x00,0x00,
};
ucharcodejc[64]={//“锯齿”的字码表
0x10,0x28,0xE7,0x24,0x24,0x24,0x00,0xFE,
0x92,0x92,0xF2,0x92,0x92,0xDF,0x82,0x00,
0x40,0x40,0x40,0x7E,0x40,0x40,0x40,0x7F,
0x44,0x44,0x46,0x44,0x40,0x60,0x40,0x00,
0x01,0x01,0x3F,0x11,0x49,0x25,0x18,0x07,
0xFC,0x44,0x47,0x44,0x44,0xFE,0x04,0x00,
0x00,0x00,0xFF,0x40,0x50,0x48,0x44,0x43,
0x44,0x48,0x58,0x40,0xFF,0x00,0x00,0x00,
};
ucharcodefb[64]={//“方波”的字码表
0x10,0x10,0x10,0x10,0x10,0xF1,0x92,0x96,
0x90,0x90,0x90,0xD0,0x90,0x18,0x10,0x00,
0x20,0x42,0x04,0x0C,0x80,0xF8,0x88,0x88,
0x88,0xFF,0x88,0x88,0xA8,0x18,0x00,0x00,
0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,
0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,
0x04,0x04,0xFE,0x41,0x30,0x8F,0x40,0x22,
0x14,0x08,0x14,0x22,0x41,0xC0,0x40,0x00,
};
ucharcodesj[64]={//“三角”的字码表
0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,
0x84,0x84,0x84,0xC4,0x86,0x04,0x00,0x00,
0x20,0x10,0x08,0xF4,0x93,0x92,0x92,0xF2,
0x9A,0x96,0x92,0x90,0xF8,0x10,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,
0x80,0x40,0x20,0x1F,0x04,0x04,0x04,0x7F,
0x04,0x04,0x44,0x84,0x7F,0x00,0x00,0x00,
};
ucharcodetable[]={//数字、符号码表
0x3E,0x51,0x49,0x45,0x3E,//-0-
0x00,0x42,0x7F,0x40,0x00,//-1-
0x62,0x51,0x49,0x49,0x46,//-2-
0x21,0x41,0x49,0x4D,0x33,//-3-
0x18,0x14,0x12,0x7F,0x10,//-4-
0x27,0x45,0x45,0x45,0x39,//-5-
0x3C,0x4A,0x49,0x49,0x31,//-6-
0x01,0x71,0x09,0x05,0x03,//-7-
0x36,0x49,0x49,0x49,0x36,//-8-
0x46,0x49,0x49,0x29,0x1E,//-9-
0x7F,0x08,0x08,0x08,0x7F,//-H
0x61,0x51,0x49,0x45,0x43,//-Z-
0x1F,0x20,0x40,0x20,0x1F,//-V-
0x7F,0x09,0x09,0x09,0x06,//-P-
0x00,0x36,0x36,0x00,0x00,//-:
-
0x00,0x60,0x60,0x00,0x00,//-.-
};
ucharcodesinx0[64]={//5V正弦函数码表
128,114,102,90,78,66,55,45,36,28,20,14,9,5,2,1,1,1,
3,7,11,17,24,32,41,50,61,72,84,96,108,121,133,146,
158,170,182,193,204,213,222,230,237,243,247,251,253,
254,254,252,249,245,240,234,226,218,209,199,188,176,
167,158,145,135,
};
ucharcodesinx1[64]={//4V正弦函数码表
102,91,82,72,62,53,44,36,29,22,16,11,7,4,2,1,1,1,2,
6,9,14,19,26,33,40,49,58,67,77,86,97,106,117,126,136,
146,154,163,170,178,184,190,194,198,201,202,203,203,202,199,
196,192,187,181,174,167,159,150,141,134,126,116,107,
};
ucharcodesinx2[64]={//3V正弦函数码表
77,68,61,54,47,40,33,27,22,17,12,8,5,3,1,1,1,1,2,4,
7,10,14,19,25,30,37,43,50,58,65,73,80,88,95,102,109,
116,122,128,133,138,142,146,148,151,152,152,152,151,
149,147,144,140,136,131,125,119,113,106,100,95,87,80,
};
ucharcodesinx3[64]={//2V正弦函数码表
51,46,41,36,31,26,22,18,14,11,8,6,4,2,1,0,0,0,1,3,4,
7,10,13,16,20,24,29,34,38,43,48,53,58,63,68,73,77,82,
85,89,92,95,97,99,100,101,102,102,101,100,98,96,94,90,
87,84,80,75,70,67,63,58,54,
};
ucharcodesinx4[64]={//1V正弦函数码表
26,23,20,18,16,13,11,9,7,6,4,3,2,1,0,0,0,0,1,1,2,3,5,6,8,10,12,
14,17,19,22,24,27,29,32,34,36,39,41,43,44,46,47,49,49,50,51,
51,51,50,50,49,48,47,45,44,42,40,38,35,33,32,29,27
};
ucharcodefangbo0[64]={//5V方波函数码表
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 报告 简易 信号发生器