虚拟信号发生器单片机课设.docx
- 文档编号:19449891
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:25
- 大小:297.89KB
虚拟信号发生器单片机课设.docx
《虚拟信号发生器单片机课设.docx》由会员分享,可在线阅读,更多相关《虚拟信号发生器单片机课设.docx(25页珍藏版)》请在冰豆网上搜索。
虚拟信号发生器单片机课设
燕山大学
课程设计说明书
题目:
虚拟信号发生器的设计
学院(系):
电气工程学院
年级专业:
自动化仪表
学号:
100103020002
学生姓名:
王思琪
指导教师:
张淑清林洪彬
教师职称:
教授讲师
课程名称:
“单片机原理及应用——数字信号处理”课程设计
基层教学单位:
自动化仪表系指导教师:
张淑清谢平
学号
100103020002
学生姓名
王思琪
(专业)班级
仪表一班
设计题目
虚拟信号发生器的设计
设
计
技
术
参
数
1.利用Matlab设计任意波形虚拟信号发生器。
2.在PC机显示不同信号波形的同时,利用串行口控制单片机系统的LED显示相应波形参数(如幅度、频率、相位和能量等)。
3.扩展:
也可产生其他信号,或驱动其他外设并显示及参数。
设
计
要
求
要求至少输出五种以上参数可调的信号(如:
方波,三角波,正弦波、高斯白噪声等),并实现相应信号的频谱分析,对比不同信号的时域波形和频谱特性。
(其中可调参数包括幅值、相位、频率、采样频率等)。
设计相应的软件分析界面。
工
作
量
软件编程与硬件调试相结合,绘制设计流程图,编制相应软件界面,实现单片机控制与信号处理任务的综合应用
参
考
资
料
1)《微型计算机控制系统》赖寿宏,机械工业出版社(教材)
2)《单片机及应用》李大友,高等教育出版社(教材)
3)《信号处理原理及应用》谢平等机械工业出版社(教材)
4)《Matlab程序设计及其在信号处理中的应用》聂祥飞等西南交通大学出版社
5)自选其他有关资料
周次
第一周
第二周
应
完
成
内
容
熟悉伟福单片机编程环境,调试单片机各基本功能模块;熟悉matlab信号处理工具箱,信号处理系统基本功能模块学习和调试
单片机系统与信号处理系统综合进行硬件调试,
撰写课程设计报告
指导教
师签字
基层教学单位主任签字
说明:
1、此表一式四份,系、指导教师、学生各一份,报送院教务科一份。
2、学生那份任务书要求装订到课程设计报告前面。
电气工程学院教务科
目录(信号处理要求)
第一章摘要……………………………………………3
第二章总体设计方案…………………………………4
第三章单片机模块基本原理…………………………5
3.1led显示模块………………………………………6
3.2蜂鸣器模块………………………………………6
3.3数码管显示模块…………………………………7
3.416*16点阵显示模块………………………………8
3.5串行通信模块………………………………………9
第四章硬件整体设计与调试…………………………10
第五章心得及总结……………………………………11
参考文献…………………………………………………12
附录………………………………………………………12
第1章摘要
随着大规模集成电路技术的发展,中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、(I/O)接口、定时器/计数器和串行通信接口,以及其他一些计算机外围电路等均可集成在一块芯片上构成单片微型计算机,简称为单片机。
单片机具有体积小、成本低,性能稳定、使用寿命长等特点。
其最明显的优势就是可以嵌入到各种仪器、设备中,这是其他计算机和网络都无法做到的
信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。
各种波形曲线均可以用三角函数方程式来表示。
能够产生多种波形,如方波、锯齿波、三角波、正弦波的电路被称为函数信号发生器。
在通信、广播、电视系统,在工业、农业、生物医学领域内,函数信号发生器在实验室和设备检测中具有十分广泛的用途。
信号发生器应用广泛,种类繁多,性能各异,分类也不尽一致。
按照频率范围分类可以分为:
超低频信号发生器、低频信号发生器、视频信号发生器、高频波形发生器、甚高频波形发生器和超高频信号发生器。
按照输出波形分类可以分为:
正弦信号发生器和非正弦信号发生器,非正弦信号发生器又包括:
脉冲信号发生器,函数信号发生器、扫频信号发生器、数字序列波形发生器、图形信号发生器、噪声信号发生器等。
按照信号发生器性能指标可以分为一般信号发生器和标准信号发生器。
前者指对输出信号的频率、幅度的准确度和稳定度以及波形失真等要求不高的一类信号发生器。
后者是指其输出信号的频率、幅度、调制系数等在一定范围内连续可调,并且读数准确、稳定、屏蔽良好的中、高档信号发生器。
第二章总体设计方案
首先我们进行的是单片机部分的设计,课设的前两天,熟悉了单片机个模块的设计例程,而后我们挑选了合适的例程为我们的所需要的信号发生器模块所用。
在这之中,我们用到了273输出模块,led显示模块,数码管显示模块,蜂鸣器模块,16*16点阵显示模块,串行通信模块。
在精心的学习之后,我们成功地完成了单片机部分的初步制作。
此后,我们开始了第三天的数字信号软件方面的制作,在guide设计教程及学长的指导下,我们设计了一个简洁方便的操作界面,并根据相应的按键功能编写程序,先收集了5种波形函数,而后编写了与之对应的变量函数。
于是我们便能将可变参数加入到函数中去,进行调试了。
其后,我们设计了傅里叶转换函数,将波形一一转换为频域波形,最后,我们在学长的指导下完成了串行发送的按钮设计。
信号处理部分也制作完毕。
最后是单片机部分与信号部分的连接调试,我们将matlab发送的波形参数与单片机的数码管,led,蜂鸣器的信号同步。
成功的做出了两者相结合的虚拟信号发生器。
第三章单片机模块基本原理
3.1led显示模块
实验仪上装有8只发光二极管及相应驱动电路。
如图,L0-L7为相应发光二极管驱动信号输入端,该输入端为高电压电平“1”时发光二极管点亮。
我们可以通过P1口对其直接进行控制,点亮或者熄灭发光二极管。
因此我们使用74LS273扩展I/O端口。
方法是:
通过片选信号和写信号将数据总线上的值锁存在273中,同时在273的输出端口输出,当数据总线上的值撤消以后,由于273能够锁存信号,所以273的输出端保持不变,直到下次有新的数据被锁存。
本次课设中,在数据输出同时输出片选信号和写信号。
LED显示模块图
3.2蜂鸣器模块
端口输出的方波经放大滤波后,驱动扬声器发声。
声音的频率端口输出时延时控制,因此能按规定时序发出声音信号。
其电路图如下所示
蜂鸣器电路图
3.3数码管显示模块
实验仪提供了6位8段码LED显示电路,学生只要按地址出相应数据,就可以实现对显示器的控制。
显示共有6位,用动态方式显示。
8位段码、6位位码是由两片74LS374输出。
位码经ULN2003倒相驱动后,选择相应显示位。
实验仪中8位段码输出地址为0X004H,位码输出地址0X002H。
此处X是由KEY/LEDCS决定,参见地址译码。
做键盘和LED实验时,需将KEY/LEDCS接到相应的地址译码上。
以便用相应的地址来访问。
例如,将KEY/LEDCS接到CS0上,则段码地址为08004H,位码地址为08002H。
七段数码管的字型代码表如下表:
显示字形
g
f
e
d
c
b
a
段码
0
0
1
1
1
1
1
1
3fh
1
0
0
0
0
1
1
0
06h
2
1
0
1
1
0
1
1
5bh
3
1
0
0
1
1
1
1
4fh
4
1
1
0
0
1
1
0
66h
5
1
1
0
1
1
0
1
6dh
6
1
1
1
1
1
0
1
7dh
7
0
0
0
0
1
1
1
07h
8
1
1
1
1
1
1
1
7fh
9
1
1
0
1
1
1
1
6fh
A
1
1
1
0
1
1
1
77h
b
1
1
1
1
1
0
0
7ch
C
0
1
1
1
0
0
1
39h
d
1
0
1
1
1
1
0
5eh
E
1
1
1
1
0
0
1
79h
F
1
1
1
0
0
0
1
71h
3.416*16点阵模块
实验电路连线框图:
连线
连接孔1
连接孔2
1
16x16_CS
CS3
16x16点阵需要32个驱动,分别为16个列驱动及16个行驱动。
每个行与每个列可以选中一个发光管,共有256个发光管,采用动态驱动方式。
每次显示一行,10ms后再显示下一行。
其电路连线图如下所示:
16*16点阵电路连线图
3.5串行通信模块
串行通信接口连接如下:
1、8051、80C196的RXD、TXD接线柱在POD51/96仿真板上,8088/86的TXD、RXD在POD8086仿真板上的8251芯片旁边。
2、通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。
也可以将本机的TXD接到RXD上,这样按下的键,就会在本机LED上显示出来。
3、若想与标准的RS232设备通信,就要做电平转换,输出时要将TTL电平换成RS232电平,输入时要将RS232电平换成TTL电平。
可以将仿真板上的RXD、TXD信号接到实验板上的“用户串口接线”的相应RXD和TXD端,经过电平转换,通过“用户串口”接到外部的RS232设备。
可以用实验仪上的逻辑分析仪采样串口通信的波形。
其电路连线图如下所示:
串口通信电路连线图
第四章硬件整体设计与调试
经过如上的模块化设计之后,便可进行最终电路的整合与接线,模块整合后电路图如下:
经过与数字信号的部分的连线,我们进行了串行通信的调试。
多次调试后,终于能将信号波形参数的取整个位形式发送到硬件上,在16*16点阵上显示其参数名,同时发送时蜂鸣响一声,在led上显示2进制的参数,在数码管上显示10进制的参数。
总的来说,我们的信号发生器设计的相当成功。
第五章心得与总结
经过长达一星期不间断的单片机及信号处理的课程设计,我再一次加强了对单片机硬件和信号处理Matlab的软件的认识,Matlab这样的软件强大的开发功能与灵活的编程手段勾起了我对信号处理浓厚的兴趣,并最终实现了虚拟信号发生器的设计,可以看出虚拟仪器给用户提供了一个充分发挥自己的才能和想象力的空间,可根据用户自己的设想及要求,通过编程来设计,组建自己的仪器系统,他的灵活、开放,技术更新周期短,可随着计算机技术的发展和用户的需求进行仪器与系统的升级,在性能维护和灵活组态等方面有着传统仪器无法比拟的优点。
通过此次课程设计,我不仅把所学知识的融会贯通,而且丰富了我的阅历。
同时,在查找资料的过程中也了解了许多课外知识,开拓了视野,认识了将来数字图像处理的发展方向,使自己在专业方面和动手能力方面都得到了加强。
在咨询学长的同时,我学会了虚心请教师长,来完善我的课题能力,如果没有学长每天的答疑解惑,我们不可能编出对于自己来说前所未有复杂的单片机及guide程序。
与此同时,在与我所在的小组成员的合作中,我感受到了团队行动的力量,我们合理的分工推动了大家一起竞争的欲望,最终让小组迅速的完成了老师的任务,看来科研之中的竞争与合作真的能够发挥事半功倍的作用!
参考文献
1)《微型计算机控制系统》赖寿宏,机械工业出版社(教材)
2)《单片机及应用》李大友,高等教育出版社(教材)
附录单片机程序清单
#include
#defineLEDLen6
#defineucharunsignedchar
#defineuintunsignedint
xdataunsignedcharRowLow_at_0xb002;//行低八位地址
xdataunsignedcharRowHigh_at_0xb003;//行高八位地址
xdataunsignedcharColLow_at_0xb000;//列低八位地址
xdataunsignedcharColHigh_at_0xb001;//列高八位地址
xdataunsignedcharOUTBIT_at_0x8002;//位控制口
xdataunsignedcharOUTSEG_at_0x8004;//段控制口
xdataunsignedcharIN_at_0x8001;//键盘读入口
xdataunsignedcharCS273_at_0x9000;
sbitSpeaker=P1^0;
ucharj,a;
uints=0;
ucharLEDBuf[LEDLen];//显示缓冲
ucharRcvBuf;//接收缓冲
bitHasRcv=0;//接收标志
codeucharLEDMAP[]={//八段管显示码
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
codeucharFont[][32]={
//幅
0x00,0x20,0x02,0x22,0xFE,0x23,0x22,0x22,0x22,0xBA,0xFE,0xAB,0x22,0xAA,0xFE,0xAB,
0x00,0xA8,0xFC,0xA9,0x04,0xA9,0x04,0xA9,0xFC,0xF9,0x00,0x20,0xFE,0x23,0x00,0x20,
//值
0x00,0x20,0xFE,0x2F,0x08,0x22,0x08,0x22,0xF8,0x23,0x08,0x22,0xF8,0x23,0x08,0x22,
0xF8,0xA3,0x08,0x62,0xF8,0x33,0x80,0x20,0x40,0x10,0xFC,0x17,0x60,0x18,0x40,0x10,
//频
0x00,0x00,0x02,0xC3,0x86,0x20,0x48,0x10,0x50,0x08,0xA4,0x84,0xA4,0x4A,0xA4,0x4A,
0xA4,0x08,0xA4,0x00,0x84,0xFE,0xFC,0x48,0x40,0x48,0x20,0x4E,0xFE,0x08,0x00,0x08,
//率
0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0xFE,0xFF,0x20,0x01,0xC4,0x47,0x48,0x22,
0x10,0x11,0x80,0x04,0xD0,0x17,0x28,0x22,0x00,0x41,0xFE,0x7F,0x00,0x01,0x00,0x02,
//相
0x84,0x10,0xFC,0x10,0x84,0x10,0x84,0x10,0x84,0x10,0x84,0x90,0xFC,0x50,0x84,0x52,
0x84,0x32,0x84,0x34,0xFC,0x18,0x84,0xFE,0x84,0x10,0x84,0x10,0xFC,0x10,0x00,0x10,
//位
0x00,0x00,0x00,0x10,0xFE,0x1F,0x40,0x10,0x20,0x10,0x20,0x11,0x20,0x11,0x10,0x91,
0x10,0x52,0x18,0x52,0x10,0x34,0x00,0x20,0xFC,0x17,0x40,0x10,0xC0,0x0C,0x00,0x09,
//采
0x00,0x01,0x00,0x01,0x04,0xC1,0x0E,0x31,0x18,0x09,0x20,0x05,0x40,0x03,0x80,0x01,
0xFE,0x7F,0x00,0x01,0xA0,0x08,0x10,0x11,0x10,0x00,0x00,0x7E,0xF8,0x01,0x00,0x00,
//样
0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0xFE,0x13,0x20,0x90,0x20,0x50,
0x20,0x54,0xFC,0x39,0x20,0x30,0x20,0x10,0xFE,0xFD,0x90,0x10,0x88,0x10,0x08,0x11,
//频
0x00,0x00,0x02,0xC3,0x86,0x20,0x48,0x10,0x50,0x08,0xA4,0x84,0xA4,0x4A,0xA4,0x4A,
0xA4,0x08,0xA4,0x00,0x84,0xFE,0xFC,0x48,0x40,0x48,0x20,0x4E,0xFE,0x08,0x00,0x08,
//率
0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0xFE,0xFF,0x20,0x01,0xC4,0x47,0x48,0x22,
0x10,0x11,0x80,0x04,0xD0,0x17,0x28,0x22,0x00,0x41,0xFE,0x7F,0x00,0x01,0x00,0x02,
};
voidDelay(uchart)
{
uchari;
while(t--!
=0)
for(i=100;i!
=0;i--);
}
voiddisply1()//16x16点阵显示
{
uchari;
ucharcount;
uintbitmask;
//uintnum;
//清屏
ColLow=0xff;//行驱动低有效
ColHigh=0xff;
RowLow=0x00;//列驱动高有效
RowHigh=0x00;
if(s<2)
{for(j=0;j<2;j++)
{
for(count=0;count<25;count++)
{
bitmask=0x01;
for(i=0;i<16;i++)
{
RowLow=0x00;//首先清屏
RowHigh=0x00;
ColLow=~Font[j][i*2];//写出一行数据
ColHigh=~Font[j][i*2+1];
RowLow=bitmask&0xff;//点亮此行
RowHigh=bitmask>>8;
bitmask<<=1;//移位,指向下一行
Delay
(1);
}
}
ColLow=0xff;
ColHigh=0xff;
}
}
if((s>=2)&&(s<3))
{
for(j=2;j<4;j++)
{
for(count=0;count<25;count++)
{
bitmask=0x01;
for(i=0;i<16;i++)
{
RowLow=0x00;//首先清屏
RowHigh=0x00;
ColLow=~Font[j][i*2];//写出一行数据
ColHigh=~Font[j][i*2+1];
RowLow=bitmask&0xff;//点亮此行
RowHigh=bitmask>>8;
bitmask<<=1;//移位,指向下一行
Delay
(1);
}
}
ColLow=0xff;
ColHigh=0xff;
}
}
if((s>=3)&&(s<4))
{
for(j=4;j<6;j++)
{
for(count=0;count<25;count++)
{
bitmask=0x01;
for(i=0;i<16;i++)
{
RowLow=0x00;//首先清屏
RowHigh=0x00;
ColLow=~Font[j][i*2];//写出一行数据
ColHigh=~Font[j][i*2+1];
RowLow=bitmask&0xff;//点亮此行
RowHigh=bitmask>>8;
bitmask<<=1;//移位,指向下一行
Delay
(1);
}
}
ColLow=0xff;
ColHigh=0xff;
}
}
if((s>=4)&&(s<5))
{for(j=6;j<10;j++)
{
for(count=0;count<15;count++)
{
bitmask=0x01;
for(i=0;i<16;i++)
{
RowLow=0x00;//首先清屏
RowHigh=0x00;
ColLow=~Font[j][i*2];//写出一行数据
ColHigh=~Font[j][i*2+1];
RowLow=bitmask&0xff;//点亮此行
RowHigh=bitmask>>8;
bitmask<<=1;//移位,指向下一行
Delay
(1);
}
}
ColLow=0xff;
ColHigh=0xff;
}
}
}
voidSerialIO0()interrupt4
{
if(RI)
{
RI=0;
RcvBuf=SBUF;
HasRcv=1;
Delay(100);
s++;
if(s>=5)
{
s=0;
}
}
else
{
TI=0;
}
}
voidDisplayLED()
{
uchari;
ucharPos;
ucharLED;
Pos=0x20;//从左边开始显示
for(i=0;i { OUTBIT=0;//关所有八段管 LED=LEDBuf[i]; OUTSEG=LED; OUTBIT=Pos;//显示一位八段管 Delay (1); Pos>>=1;//显示下一位 } } codeucharKeyTable[]={//键码定义 0x16,0x15,0x14,0xff, 0x13,0x12,0x11,0x10, 0x0d,0x0c,0x0b,0x0a, 0x0e,0x03,0x06,0x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 虚拟 信号发生器 单片机