哥做的单片机多功能信号发生器.docx
- 文档编号:24455166
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:20
- 大小:228.17KB
哥做的单片机多功能信号发生器.docx
《哥做的单片机多功能信号发生器.docx》由会员分享,可在线阅读,更多相关《哥做的单片机多功能信号发生器.docx(20页珍藏版)》请在冰豆网上搜索。
哥做的单片机多功能信号发生器
第1章硬件电路的设计
1.1基本原理
低频信号发生器系统主要由CPU、D/A转换电路、电流/电压转换电路、按键和显示电路、电源等电路组成。
其工作原理为当按下第一个按键就会分别出现方波、锯齿波、三角波、正弦波,并且LCD显示器波形数据和频率。
1.2资源分配
①主控芯片采用ATMEL公司的89C51;
②采用12MHz的晶振器为89C51提供时钟信号;
③提供12V、-12V和5V电压;
④对于89C51内存分配
⑤采用LCD1602显示频率;
⑥8位D/A转换器采用DAC0808;
⑦运算放大器采用LM324。
1.3按键电路
键盘实际上是一组按键开关的集合,其中每一个按键就是一个开关量输入装置。
键的闭合与否,取决于机械弹性开关的通、断状态。
反应在电压上就是呈现出高电平或低电平,若高电平表示断开,那么低电平键闭合。
所以,通过电平状态(高或低)的检测,便可确定相应按键是否已被按下。
键盘作为向系统提供操作人员的干预命令的接口,以其特定的按键代表着各种确定操作命令。
所以准确无误地辨认每个键的动作及其所处的状态,是系统能否正常工作的关键。
多数键盘的按键均采用机械弹性开关。
一个电信号通过机械触点的断开、闭合过程,完成高、低电平的切换。
由于机械触点的弹性作用,一个按键开关闭合及断开的瞬间必然伴随有一连串的抖动。
消除按键盘抖动通常有两种方法:
硬件消抖和软件消抖。
通过硬件电路消除按键过程中抖动的影响是一种广为采用的措施。
这种做法,工作可靠,且节省机时。
硬件消抖是通过在按键输出电路上加一定的硬件线路来消除抖动,一般采用R—S触发器或单稳态电路。
如图3-1所示:
图1-3-1单稳态硬件消抖电路
查询工作方式是直接在主程序中插入键盘检测子程序,主程序每执行一次,则键盘检测子程序就对键盘进行检测一次。
如果没有键按下,则跳过键识别,直接执行其他程序;如果有键按下,则通过键盘扫描子程序识别按键,得到按键的编码值,然后根据编码值进行相应的处理,处理完后再回到主程序执行。
键盘扫描子程序流程如图1-3-2所示。
图1-3-2键盘扫描流程图
1.4显示模块的设计
通过液晶1602显示输出的波形、频率,其电路图如图1-4-1所示:
图1-4-1液晶1602显示输出的波形、频率
如上图所示,1602的八位数据端接单片机的P1口,其三个使能端RS、RW、E分别接单片机的P1.5—P1.7。
通过软件控制液晶屏可以显示波形的种类以及波形的频率。
1.5D/A转换电路的设计
DAC0832是CMOS工艺制造的8位D/A转换器,属于8位电流输出型D/A转换器,转换时间为1us,片内带输入数字锁存器。
DAC0832与单片机接成数据直接写入方式,当单片机把一个数据写入DAC寄存器时,DAC0832的输出模拟电压信号随之对应变化。
利用D/A转换器可以产生各种波形,如方波、三角波、正弦波、锯齿波等以及它们组合产生的复合波形和不规则波形。
1.DAC0832主要性能:
◆输入的数字量为8位;
◆采用CMOS工艺,所有引脚的逻辑电平与TTL兼容;
◆数据输入可以采用双缓冲、单缓冲和直通方式;
◆转换时间:
1us;
◆分辨率:
8位;
◆单一电源:
5—15V;
◆参考电压:
-10—+10V;
DAC0832内部结构资料:
芯片内有两级输入寄存器,使DAC0832具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。
D/A转换结果采用电流形式输出。
要是需要相应的模拟信号,可通过一个高输入阻抗的线性运算放大器实现这个供功能。
运放的反馈电阻可通过RFB端引用片内固有电阻,还可以外接。
该片逻辑输入满足TTL电压电平范围,可直接与TTL电路或微机电路相接,下面是芯片电路原理图1-5-1所示:
图1-5-1DAC0832电路原理图
如图1-5-1所示,待转换的8位数字量由芯片的8位数据输入线D0~D7输入,经DAC0832转换后,通过2个电流输出端IOUT1和IOUT2输出,IOUT1是逻辑电平为"1"的各位输出电流之和,IOUT2是逻辑电平为"0"的各位输出电流之和。
另外,ILE、
、
、
和
是控制转换的控制信号。
DAC0832由8位输入寄存器、8位DAC寄存器和8位D/A转换电路组成。
输入寄存器和DAC寄存器作为双缓冲,因为在CPU数据线直接接到DAC0832的输入端时,数据在输入端保持的时间仅仅是在CPU执行输出指令的瞬间内,输入寄存器可用于保存此瞬间出现的数据。
有时,微机控制系统要求同时输出多个模拟量参数,此时对应于每一种参数需要一片DAC0832,每片DAC0832的转换时间相同,就可采用DAC寄存器对CPU分时输入到输入寄存器的各参数在同一时刻开始锁存,进而同时产生各模拟信号。
控制信号ILE、
、
用来控制输入寄存器。
当ILE为高电平,
为低电平,
为负脉冲时,在LE产生正脉冲;其中LE为高电平时,输入寄存器的状态随数据输入线状态变化,LE的负跳变将输入数据线上的信息存入输入寄存器。
控制信号
和
用来控制8位A/D转换器。
当
为低电平,
输入负脉冲时,则在LE产生正脉冲;其中LE为高电平时,DAC寄存器的输入与输出的状态一致,LE负跳变,输入寄存器内容存入DAC寄存器。
DAC0832的数据输出方式在微机应用系统中,通常使用的是电压信号,而DAC0832输出的是电流信号,这就需要由运算放大器组成的电路实现转换。
其中有输出电压各自极性固定的单位性输出和在随动系统中输出电压有正负极性的双极性输出两种输出方式。
2.DAC0832同CPU的连接
DAC0832作为微处理器的一个端口,用地址92H的选通作为
和
的控制信号,微处理器的写信号直接来控制
和
。
DAC0832同CPU的接口如图1-5-2所示:
图1-5-2DAC0832和CPU连接电路
本系统D/A转换电路图1-5-3所示:
图1-5-3D/A转换电路图
DAC083主要是用于波形的数据的传送,是本题目电路中的主要芯片其,性能指标:
1.分辨率:
输出模拟电压应能区分0~2n-1共2n个输入数字量。
表示方法:
(1)用输入二进制数的位数表示;如8位。
(2)用输出模拟电压的最小值与最大值的比值表示。
指最小输出电压和最大输出电压之比。
DAC0808的分辨率为1/256。
2.精度:
DAC实际输出电压与理想的输出电压的偏差。
3.线性度:
DAC实际传输特性曲线与理想的传输特性曲线的偏差。
DAC0808的最大误差为+0.19%。
4.转换速度:
用完成一次转换所需的时间——建立时间Tset来衡量。
建立时间:
输入信号从开始变化到输出电压进入与稳态值相差1/2LSB范围以内的时间。
输入信号由全0变为全1所需时间最长。
当外接运放时,转换时间还应加上运放的上升(下降)时间。
(1.5.1)
式中
为转换时间,
为建立时间,
输出最大电压值,
为运放输出转换速率。
1.6D/A转换波形输出电路
DAC0832为电流输出型转换器,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。
如图1-6-1所示为一种用两级运算放大器组成的模拟电压输出电路。
从第一个运放输出为单极性模拟电压,从第二个运放输出为双极性模拟电压。
如果参考电压为+5V,则点a输出电压为0~-5V,点b输出电压为±5V。
图1.6.1D/A转换波形发生电路
第2章软件设计
2.1系统初始化程序设计
复位程序完成如下工作:
1.显示2秒的PPP.HELLO初始界面;
2.初始频率设置为983HZ;
3.将频率值转换成定时器的初值;
4.置定时器0工作于方式1,送入定时器0定时初值,启动定时器0工作;
5.显示初始频率和产生波形的类型;
6.转键盘扫描程序。
系统的初始化流程如图2-1所示。
图2-1初始化流程图
参考文献
[1]何立民.MCS-51系列单片机应用系统设计.北京:
北京航空航天大学出版社,1990
[2]穆兰.单片微型计算机原理及接口技术.北京:
机械工业出版社,1995
[3]张毅刚.MCS-51单片机应用设计.哈尔滨:
哈尔滨工业大学出版社,1990.
[4]蒋智勇.单片微型计算机原理及接口技术.沈阳:
辽宁科学技术出版设,1992
[5]韩全立.王建明.单片机控制技术及应用.北京:
电子工业出版社,2004
[6]徐仁贵.微型计算机借口技术及应用.北京:
机械工业出版社,1995
[7]房小翠.王金凤.单片机使用系统设计技术.北京:
国防工业出版社,1999
[8]张毅坤.单片微型计算机原理及应用.西安:
西安电子科技大学出版社,1998
[9]任为民.电子技术基础课程设计.北京:
中央广播电视大学出版社,1997
[10]弘道工作室.Protel99电路设计.北京:
人民交通出版设,2000
附录1电路图
附录2源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitlcdrw=P3^3;
sbitlcdrs=P3^2;
sbitlcde=P3^4;
sbitd=P2^7;
sbits1=P2^0;
sbits2=P2^1;
sbits3=P2^2;
sbitcs=P3^5;
sbitwr=P3^6;
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=110;j>0;j--);
}
voiddelay1(uinty)
{uinti;
for(i=y;i>0;i--);
}
voidwrite_com(ucharcom)//1602写指令
{lcdrs=0;
P1=com;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
voidwrite_data(uchardate)//1602数据
{lcdrs=1;
P1=date;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
voidinit()//初始化
{
lcdrw=0;
lcde=0;
wr=0;
cs=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)//写频率
{
ucharqian,bai,shi,ge;
qian=date/1000;
bai=date/100%10;
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)
{
fre=(1000/(9+3*ys));
write_f(fre);
}
if(s1num==2)
{
fre=(100000/(3*ys));
write_f(fre);
}
if(s1num==3)
{
fre=(1000/(15+3*ys));
write_f(fre);
}
}
voidkeyscanf()
{
d=0;
if(s1==0)
{
delay(5);
if(s1==0)
{
while(!
s1);
s1num++;
if(s1num==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)
{
ys=10;
write_com(0x80+0x05);
write_data(0x73);//写squrae
write_data(0x71);
write_data(0x75);
write_data(0x61);
write_data(0x72);
write_data(0x65);
}
if(s1num==3)
{
ys=0;
write_com(0x80+0x05);//train
write_data(0x74);
write_data(0x72);
write_data(0x61);
write_data(0x69);
write_data(0x6e);
write_data(0x20);
}
if(s1num==4)
{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];
delay1(ys);
}
}
if(s1num==2)//方波//
{
P0=0xff;
delay1(ys);
P0=0;
delay1(ys);
}
if(s1num==3)//三角波//
{
if(a<128)
{
P0=a;
delay1(ys);
}
else
{
P0=255-a;
delay1(ys);
}
a++;
}
if(!
(s1&s2&s3))
{
xsf();
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 多功能 信号发生器