一种基于MCS-51系列单片机的SPWM电压波形发生器
基于51单片机的波形发生器的设计讲解

目录1 引言 (1)1.1 题目要求及分析 (1)1.1.1 示意图 (1)1.2 设计要求 (1)2 波形发生器系统设计方案 (2)2.1 方案的设计思路 (2)2.2 设计框图及系统介绍 (2)2.3 选择合适的设计方案 (2)3 主要硬件电路及器件介绍 (4)3.1 80C51单片机 (4)3.2 DAC0832 (5)3.3 数码显示管 (6)4 系统的硬件设计 (8)4.1 硬件原理框图 (8)4.2 89C51系统设计 (8)4.3 时钟电路 (9)4.4 复位电路 (9)4.5 键盘接口电路 (10)4.7 数模转换器 (11)5 系统软件设计 (12)5.1 流程图: (12)5.2 产生波形图 (12)5.2.1 正弦波 (12)5.2.2 三角波 (13)5.2.3 方波 (14)6 结论 (16)主要参考文献 (17)致谢....................................................... 错误!未定义书签。
1引言1.1题目要求及分析题目:基于51单片机的波形发生器设计,即由51单片机控制产生正弦波、方波、三角波等的多种波形。
1.1.1示意图图1:系统流程示意图1.2设计要求(1) 系统具有产生正弦波、三角波、方波三种周期性波形的功能。
(2) 用键盘控制上述三种波形(同周期)的生成,以及由基波和它的谐波(5次以下)线性组合的波形。
(3) 系统具有存储波形功能。
(4) 系统输出波形的频率范围为1Hz~1MHz,重复频率可调,频率步进间隔≤100Hz,非正弦波的频率按照10次谐波来计算。
(5) 系统输出波形幅度范围0~5V。
(6) 系统具有显示输出波形的类型、重复频率和幅度的功能。
2波形发生器系统设计方案设计并制作一个波形信号发生器,能够产生正弦波、方波、三角波的波形,其中不使用DDS和一些专用的波形产生芯片。
并让系统的频率范围在1Hz~1MHZ可调节,在频率范围在1HZ~10KHz时,步进小于或等于10Hz,在频率范围在10KHz~1MHz时,步进小于或等于100Hz,并且电压在0~5V范围,能够实时的显示波形的类型、频率和幅值。
基于51单片机波形发生器的设计与实现 开题报告

基于51单片机波形发生器的设计与实现开题报告合肥师范学院本科生毕业论文(设计)开题报告(学生用表)课题基于51单片机波形发生器的设计与实现系部电子信息工程学院专业电子信息工程学科工学学生屠宝轩指导教师吴剑威一、课题的来源、背景及意义(1)来源:科研/生产(2)背景:单片机是再20世纪70年代中期发展起来的一种大规模集成电路芯片,是由中央处理器(CPU),ROM、RAM芯片及I/O接口和一些外围电路等通过印刷版总线连接在一起的一个完整的计算机系统。
信号发生器是一种作为激励源或者信号源的电子设备,它能够产生各种各样的波形和频率,其在教学实验,生产装实践和科技领域有着广泛的应用,是最普遍使用的电子仪器之一。
对于电子类专业的学生,除了学习理论知识外,还必须将所学的理论知识付诸实践,在实践中订应用理论知识,提高动手能力,从而提高发现,解决问题的能力,所以试验是必不可少的环节,而信号波形发生器是实验过程最普遍,最基本,也是应用最广泛线的电子设备之一,本研究不是针对高端的信号发生器开发,而是从降低经济成本,操作方便简单,输出波形实用角度出发,研究一套设备。
(3)意义:传统的正弦信号源根据实际需要一般价格昂贵,低频输出时性能不好且不便于自动调节,工程实用性较差。
现在利用单片机的优越性,制作一种体积小,实用性强,使用方便的低频信号发生器,以AT85C51单片机为核心,结合低俗D/A转换器,通过设计与编程实现了正弦波、方波、锯齿波的产生及其自由切换以及频率、相位的可调与多相波的同时输出。
二、国内外发展现状信号波形发生器历史非常的久远,它产生于上个世纪20年代,那会,电子设备刚刚诞生,随后,雷达发展了起来,通信技术也在不断地发展,到了40年代,标准信号发生器开始出现,它的出现主要是为了进行各种接收机的测试,使信号发生器诞生之初主要是用来做定性分析的,随着使用的要求不断提升,慢慢发展成为了定量分析的测量仪器,还是在这个时期,脉冲信号发生器也出现了,这个主要是用于脉冲方面的测量的,上面说的这些信号波形发生器都是早期的一些产品,复杂的机械结构,比较[1]大的功率,比较简单的电路,速度发展总体是比较慢的。
用GMS97C2051实现的三相SPWM波形发生器.

用GMS97C2051实现的三相SPWM波形发生器摘要:GMS97C2051是LG公司生产的与MCS51系列兼容的20脚小型化CPU芯片,具有价格便宜、功能完善的特点。
文中介绍了利用该芯片实现逆变器控制所必需的SPWM发生器的原理和方法,并对CPU的计算过程、软件设计流程进行了详细说明。
1 引言在中小功率的三相逆变器中,脉宽调制(PWM)控制技术已获得了广泛应用。
PWM的实现方法也多种多样,有模拟电路方法、数字电路方法和软件计算方法等,为了提高PWM的输出质量和可*性,一些模拟电路或数字电路的PWM都通过专用集成电路芯片来实现,如HEF4752、SA8282等,然而这些芯片价格较高。
我们利用廉价的GMS97C2051单片机通过不对称规则采样SPWM算法来输出高精度的三相SPWM波形,从而实现了逆变器的SPWM控制。
实验证明,这种方法简单可行。
2 不对称规则采样SPWM算法不对称规则采样SPWM算法是在三角形载波的顶点和底点对调制波进行采样以形成阶梯,并用此阶阶梯波与三角波的交点来确定PWM。
由于在一个三角形载波周期中需采样两次,因此采样周期是载波周期的一亲。
设调制比为M,采样周期为Ts,则在三角形顶点采样计算的脉冲数据ton、toff以及在三角形底点采样计算的脉冲数据t'on、t'off分别为:ton=Ts(1+Msinωt1)/2toff=Ts(1-Msinωt2)/2t'on=Ts(1+Msinωt2)/2t'off=Ts(1-Msinωt2)/2脉冲宽度为:tpu=Ts[1+M(sinωt1+sinωt2)]/2式中t1、t2分别为顶点采样和底点采样所对应的时刻。
不规则采样SPWM算法在载波比(即三角波与调制波频率之比)等于3的整数倍时,输出SPWM不存在偶次谐波分量,其它高次谐波的幅值也较小。
3 算法在GMS97C2051中的实现考虑到三相逆奕器输出电压的对称性,可以取载波比N为3的整数倍,这样每个采样周期Ts所对应的电角度为π/N,而三相互差的120°电角度应为2Nπ/3,因此在上述的三角形的顶点和底点的采样计算的脉冲数据所对应的不规则采样规律可表示为:ton=Ts[1+Msin(kπ/N)]/2toff=Ts[1-Msin(kπ/N)]/2或ton=Ts[1+Msin(k-2n/3)π/N]/2toff=Ts[1-Msin(k-2N/3)π/N]/2或ton=Ts[1+Msin(k+2N/3)π/N]/2toff=Ts[1-Msin(k+2N/3)π/N]/2式中k为采样次数。
51单片机制作的波形发生器

51单片机制作的波形发生器相信很多朋友都可能接触到一个波型发生器的制作,可能刚刚入门,做的东西也不会说是很复杂。
可能就一个矩形波,或者是三角波。
但是网上的很多资料是忽悠人的,就此,我也提供一个比较完整的波型发生器 C51 原代:该系统的软件比较典型:包括键盘的应用,显示的应用和 DA 转换器的应用。
本设计中,输出的波形有三种:正弦波,方波,三角波。
方波的输出最为简单,只要按照设定的周期值将输出的电压改变即可。
三角波的输出也比较简单,单片机的输出只要完成数字量递增和递减交替进行即可。
、正弦波的输出最麻烦,如果在软件中计算出输出的各点电压值,将会浪费很多的 CPU 时间,以至于无法满足频率的要求。
通常最简单的方法是通过手动的方法计算出输出各点的电压值,然后在编写程序时以数组的方式给出。
当需要时,只要按照顺序进行输出即可。
这种方法比运算法速度快且曲线的形状修改灵活。
在本设计中将 360 度分为 256 个点,则每两个点之间的间隔为1.4 度,然后计算出每个点电压对应的数字量即可。
只要反复输出这组数据到 DAC0832, 就可以在系统输出端得到想要的正弦波。
具体程序如下:#include ;#define uchar unsigned char#define uint unsigned int#define DAdata P0uchar code Sinetab[256]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e,0xa0,0xa2,0xa4,0xa6,0xa8,0xaa,0xab,0xad,0xaf,0xb1,0xb2,0xb4,0xb6,0xb7,0xb9,0xba,0xbc,0xbd,0xbf,0xc0,0xc1,0xc3,0xc4,0xc5,0xc6,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xce,0xcf,0xd0,0xd1,0xd1,0xd2,0xd2,0xd3,0xd3,0xd3,0xd2,0xd2,0xd1,0xd1,0xd0,0xcf,0xce,0xce,0xcd,0xcc,0xcb,0xca,0xc9,0xc8,0xc6,0xc5,0xc4,0xc3,0xc1,0xc0,0xbf,0xbd,0xbc,0xba,0xb9,0xb7,0xb6,0xb4,0xb2,0xb1,0xaf,0xad,0xab,0xaa,0xa8,0xa6,0xa4,0xa2,0xa0,0x9e,0x9c,0x9a,0x98,0x96,0x94,0x92,0x90,0x8e,0x8c,0x8a,0x88,0x86,0x84,0x82, 0x80,0x7d,0x7b,0x79,0x77,0x75,0x73,0x71, 0x6f,0x6d,0x6b,0x69,0x67,0x65,0x63,0x61, 0x5f,0x5d,0x5b,0x59,0x57,0x55,0x54,0x52, 0x50,0x4e,0x4d,0x4b,0x49,0x48,0x46,0x45, 0x43,0x42,0x40,0x3f,0x3e,0x3c,0x3b,0x3a, 0x39,0x37,0x36,0x35,0x34,0x33,0x32,0x31, 0x31,0x30,0x2f,0x2e,0x2e,0x2d,0x2d,0x2c, 0x2c,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b, 0x2c,0x2c,0x2d,0x2d,0x2e,0x2e,0x2f,0x30, 0x31,0x31,0x32,0x33,0x34,0x35,0x36,0x37, 0x39,0x3a,0x3b,0x3c,0x3e,0x3f,0x40,0x42, 0x43,0x45,0x46,0x48,0x49,0x4b,0x4d,0x4e, 0x50,0x52,0x54,0x55,0x57,0x59,0x5b,0x5d, 0x5f,0x61,0x63,0x65,0x67,0x69,0x6b,0x6d, 0x6f,0x71,0x73,0x75,0x77,0x79,0x7b,0x7d, };uchar code Triangletab[58]={0x1a,0x21,0x28,0x2f,0x36,0x3d,0x44,0x4b, 0x52,0x59,0x60,0x67,0x6e,0x75,0x7c,0x83,0x8a,0x91,0x98,0x9f,0xa6,0xad,0xb4,0xbb,0xc2,0xc9,0xd0,0xd7,0xde,0xe5,0xde,0xd7,0xd0,0xc9,0xc2,0xbb,0xb4,0xad,0xa6,0x9f,0x98,0x91,0x8a,0x83,0x7c,0x75,0x6e,0x67,0x60,0x59,0x52,0x4b,0x44,0x3d,0x36,0x2f,0x28,0x21,};uchar code Squaretab[2]={0x56,0xaa};uchar code disp1[]={"Sine Wave ""Triangle Wale ""Square Wave "};uchar idata disp2[16]={"Frequency:Hz"};uchar code Coef[3]={10,100,200};uchar idata WaveFre[3]={1,1,1};uchar code WaveTH[]={0xfc,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfc,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, };uchar code WaveTL[]={0xf2,0x78,0xfb,0x3c,0x63,0x7d,0x8f,0x9d,0xa8,0xb1, 0x17,0x0b,0xb2,0x05,0x37,0x58,0x70,0x82,0x90,0x9b, 0x4d,0xa7,0xc4,0xd3,0xdc,0xe2,0xe6,0xea,0xec,0xee };uchar Wavecount,THtemp,TLtemp;uchar Waveform;sbit rs=P2^5;sbit rw=P2^6;sbit e=P2^7;sbit DA=P2^0;sbit KEY=P3^2;void delay(uchar i){uchar j;for(;i>;0;i--)for(j=20;j>;0;j--);}void busy(){uchar temp;temp=0x00;rs=0;rw=1;while((temp&0x80)==0x80) {P0=0xff;e=1;temp=P0;e=0;}}void WR_Com(uchar temp) {busy();rs=0;rw=0;P0=temp;e=1;e=0;}void WR_Data(uchar num){busy();rs=1;rw=0;P0=num;e=1;e=0;}void disp_lcd(uchar addr,uchar *temp1) {uchar i;WR_Com(addr);delay(100);for(i=0;i;0;i--){P0=0x30;rs=0;rw=0;e=1;e=0;delay(100);P0=0x38;rs=0;rw=0;e=1;e=0;delay(100);}void lcd_Reset(){WR_Com(0x01);delay(100);WR_Com(0x06);delay(100);WR_Com(0x0c);delay(100);}void SineOUT(uchar Wavecount) {DAdata=Sinetab[Wavecount++]; Wavecount=0;DA=0;}void TriangleOUT(uchar Wavecount) {DAdata=Triangletab[Wavecount++]; if(Wavecount>;57)Wavecount=0;DA=0;DA=1;}void SquareOUT(uchar Wavecount) {DAdata=Squaretab[Wavecount++];if(Wavecount>;1)Wavecount=0;DA=0;DA=1;}void timer() interrupt 1{TH0=THtemp;TL0=THtemp;if(Waveform==0)SineOUT(Wavecount); else if(Waveform==1)TriangleOUT(Wavecount); else if(Waveform==2)SquareOUT(Wavecount); }void key_int() interrupt 0 {uchar keytemp,keytemp1;uint WaveCoef;EA=0;TR0=0;keytemp1=0;delay(10);while(!KEY);keytemp=~P2&0x1e; keytemp>;>;=1;while(keytemp!=8){keytemp=~P2&0x1e;keytemp>;>;=1;if(keytemp!=keytemp1){keytemp1=keytemp;switch(keytemp){case 1:if(++Waveform==3)Waveform=0;break;case 2:if(++WaveFre[Waveform]==11)WaveFre[Waveform]=1;break;case 4:if(--WaveFre[Waveform]==0)WaveFre[Waveform]=10;break;}THtemp=WaveTH[Waveform*16+(WaveFre[Waveform]-1)]; TLtemp=WaveTL[Waveform*16+(WaveFre[Waveform]-1)];WaveCoef=WaveFre[Waveform]*Coef[Waveform]; disp2[13]=WaveCoef%10+0x30;WaveCoef/=10;disp2[12]=WaveCoef%10+0x30;WaveCoef/=10;disp2[11]=WaveCoef%10+0x30;WaveCoef/=10;disp2[10]=WaveCoef%10+0x30;WaveCoef/=10;disp_lcd(0x80,&disp1[Waveform*16]);disp_lcd(0xc0,disp2);}}TH0=THtemp;TL0=THtemp;Wavecount=0;TR0=1;}void main(){uint WaveCoef;uchar i;lcd_ini();lcd_Reset();WaveCoef=WaveFre[Waveform]*Coef[Waveform]; disp2[13]=WaveCoef%10+0x30;WaveCoef/=10;disp2[12]=WaveCoef%10+0x30;WaveCoef/=10;disp2[11]=WaveCoef%10+0x30;WaveCoef/=10;disp2[10]=WaveCoef%10+0x30;WaveCoef/=10;disp_lcd(0x80,&disp1[Waveform*16]);disp_lcd(0xc0,disp2);i=0;DAdata=0x00;DA=0;TMOD=0x01;IT0=1;ET0=1;EX0=1;EA=1;while(1);}。
一种采用单片机获得SPWM波形的设计方法

o ar r aeacrtl i l nigo esl tdf q e c atrw v . jc n rp r a o i noteivr rad S nT es d fcre v cuae mpe t ft e ce r u nyo C re ae i et gpoe r nc it h net n O o.h t y i w y me n h e e f i n i hm s e u
(. 北紫 电 电气 设备 有 限公 司 湖北 1湖
湖北
荆州
442 ) 3 0 0
【 摘 要】 本文分析 了 S WM 产生的基本原理 , 出了一种基 于 MC 5 P 提 S 1系列单片机的全数字式 S WM 发 生器, P 文章介 绍其运行原理、 系 统构成、 工作特点等 本设计 的电路 简单、 控制灵活、 成本极低, 别适 用于 U S 太阳能用户等逆 变电源电路 中使用。 特 P、 并对广泛应 用的调制方法 输 出的波形进 行谐波 分析 . 讨论 了谐波产生的各种因素. 并提 出了相应的谐波抑制策略 , 如选择 正确的载 波频率 、 精确 实现选择的载波频率 、 在 逆变器 中注入谐 波电流等 . 根据研究结果表明这些措施是 可行的 。还对波形输 出的驱动电路 的设计 、 器件的选取也进行 了简要 的介 绍。 【 关键词 】P S WM 逆变器 ; 波分析 ; 谐 谐波抑制 ; 驱动电路 【 bt c]h x aa ss h acp ni et t p r ue hs r oe i f e — p i ld ilP ou tg A s at i t t n ye tebs r c l h WM po cs a po s ak do nw t ewt a it WM m dli r T se l i i p aS d , p d n y h l ga an
基于单片机的波形发生器设计

基于单片机的波形发生器设计摘要:本文用单片机作为核心芯片,设计出一款高精度频率信号发生器,具有体积小功率低等优点。
为了实现幅度可控的功能,选用了2个数模转换器片完成此功能,其中一个用来产生波形,另外一个设计成程控放大器进行改变幅度,它的放大倍数通过转换器的数字端口来实现,根据设定的输出幅值,单片机只需要通过公式换算出给予的对应电平。
所有要输出的参数都能通过液晶屏显示。
关键词:信号发生器;单片机;数模转换器1、引言在波形发生器的发展中,高频率的波形发生器技术大部分都掌握在外国手中,我国的波形发生器也有很大突破,在中低端频率的波形发生器中,我国的成本低,波形发生器效果好,远比国外,但是在高端波形发生器中,还是落后于国外。
波形发生器在现代测算领域和教学领域有着很大的应用,产生的频率大小,幅度大小,相位调节,能产生大量的波形,对于各种调试,调控,实验,工业使用,自动控制都有着重大的意义。
2、方案设计本此设计是用单片机为控制主体,对系统进行初始化主要完成对键盘的控制、液晶显示的控制。
使用51系列的单片机,它有着32个接口,且STC系列的单片机可以在工作的过程中进行编程、调试,能很方便的实现程序在下载过程中进行整机的调试。
3、硬件设计(1)液晶显示模块用STC12C5A60S2的P0口作为数据线,用P1.2、P1.1、P1.0分别作为LCD 的EN、R/W、RS。
其中EN是下降沿触发的片选信号,R/W是读写信号,RS是寄存器选择信号。
(2)键盘模块本按键模块使用的是多位独立按键,按键一端接IO口,一端接地,由于单片机的IO口都有内部上拉,因此当按键没有按下的时候,IO检测到的时候高电平,当按键按下的时候,相当于IO短接地,因此这时候单片机检测到的电平为低电平,通过检测不同时刻的IO口状态就可以判断按下的是那个按键。
4个按键分别代表以下功能,第一为功能按键,可以切换不同参数设置界面,第二个为切换按键,可以切换波形、频率和幅值等参数进行设置,第三个为增加按键,第四个为减少按键。
基于51单片机汇编程序波形发生器实训报告

单片机实训报告(波形发生器)一、设计方案(1)、硬件基本设计思路本设计方案采用8051单片机和DAC0832将数字信号转化成模拟信号,并通过LM324运算放大器将信号进行处理,最终得到各种波形。
其中,波形的切换采用矩阵键盘通过外部中断0来实现。
(2)、软件基本设计思路首先,将基本波形通过程序进行编写,并调试成功;其次,再编写按键扫描子程序;最后,将按键程序放入中断中,并进行整体调试,直到调通为止。
(3)、程序说明略二、原理图波形发生器原理图三、程序JUCHI E QU 50HSANJI EQU 51HFANGB EQU 52HTIXIN EQU 53HKU EQU 55HORG 0000H ;程序入口AJMP MAIN ;指向主程序ORG 0003H ;主程序入口地址AJMP INTT0 ;指向按键中断程序ORG 0030H ;中断程序入口地址MAIN: ;主程序MOV P2,#00H ;将P2口初始化为0SETB EA ;开总中断SETB EX0 ;开启外部中断0SETB IT0 ;将外部中断0设置为下降沿有效MOV DPTR,#00FFH ;设置输入寄存器地址MOV JUCHI,#00H ;初始化MOV SANJI,#00HMOV FANGB,#00H;***************************************************START:MOV A,KU ;将键码送累加器ACJNE A,#00H,W1 ;将累加器A和00H比较,如果相等,则00键按下顺序执行,否则跳到W1再判断01键是否按下MOV SANJI,#00H ;屏蔽其他波形MOV FANGB,#00HMOV TIXIN,#00HAJMP JCB ;跳转到锯齿波形W1: CJNE A,#01H,W2 ;判断01键是否按下MOV JUCHI,#00H ;屏蔽其他波形MOV FANGB,#00HMOV TIXIN,#00HAJMP SJB ;跳转到三角波形W2: CJNE A,#02H,W3 ;判断02键是否按下MOV TIXIN,#00HMOV JUCHI,#00H ;屏蔽其他波形MOV SANJI,#00HAJMP FB ;跳转到方波W3: CJNE A,#03H,W4 ;判断03键是否按下,没有按下,跳转回去继续循环扫描MOV JUCHI,#00H ;屏蔽其他波形MOV FANGB,#00HAJMP TXB ;跳转到梯形波W4: AJMP START;**********************************************INTT0: ;中断程序;***********键盘扫描子程序KEY*****************KEY: ACALL KS ;调按键查询子程序,判断是否有键按下JNZ K1 ;有键按下,转移 WEI1跳转ACALL DELAY ;无键按下,调延时程序去抖AJMP K4 ;继续查询按键;***********键盘逐列扫描程序***********************************K1: ACALL DELAYACALL KS ;再次判别是否有键按下JNZ K2 ;有键按下,转移AJMP K4K2: MOV R3,#0FEH ;首列扫描字送R3MOV R4,#00H ;首列号送R4K3: MOV A,R3MOV P2,A ;列扫描字送P2口MOV P1,#0FFH ;初始化P1口MOV A,P1 ;读取行扫描值JB ACC.0,L1 ;第零行无键按下转查第一行为1跳转MOV A,#00H ;第零行有键按下,行首键号送AAJMP LK ;转求键号L1: JB ACC.1,NEXT ;第一行无键按下,转查下一列MOV A,#03HAJMP LK ;键扫描结束,返回;************************************************************NEXT:INC R4 ;修改列号MOV A,R3JNB ACC.2,KEY ;三列扫描完返回按键查询状态RL A ;未扫描完,改为下列扫描字MOV R3,A ;扫描字暂存R3AJMP K3 ;转列扫描程序LK: ADD A,R4 ;形成键码送AMOV KU,APUSH ACC ;键码入栈保护;**********************************************K4:ACALL KS ;等待键释放JNZ K4POP ACC ;键释放,弹栈送ARETI ;中断返回;**********按键查询子程序**************************************KS: ;MOV A,#00HMOV P2,#00H ;全扫描字送p2口MOV P1,#0FFHMOV A,P1 ;读入P1口状态CPL A ;变正逻辑,高电平表示有键按下ANL A,#0FH ;屏蔽高四位RET ;子程序返回;****************锯齿波***********************JCB:MOV A,JUCHI ;转换初值WW: MOVX @DPTR,A ;D/A转换INC A ;A自加1NOP ;延时CJNE A,#255,WW ;判断A是否加到255,若没有返回到WW继续加MOV JUCHI,AAJMP START;******************三角波********************SJB:MOV A,SANJI ;转换初值EE: MOVX @DPTR,A ;D/A转换INC ANOPCJNE A,#255,EEDEC AQQ: MOVX @DPTR,ADEC ANOPCJNE A,#00,QQMOV SANJI,AAJMP START;******************方波********************* FB:MOV A,FANGBMOVX @DPTR,AACALL DELAY3ACALL DELAY3CPL AMOVX @DPTR,AACALL DELAY3ACALL DELAY3MOV FANGB,APOP ACCAJMP START;***************梯形波**********************TXB:MOV A,TIXINSS: MOVX @DPTR,AINC AACALL DELAY3CJNE A,#255,SSACALL DELAY3ACALL DELAY3DEC AZZ: MOVX @DPTR,ADEC AACALL DELAY3CJNE A,#00,ZZACALL DELAY3ACALL DELAY3MOV TIXIN,AAJMP START;*******************************************************1ms DELAY3: MOV R0,#7DHDEL7: NOPNOPDJNZ R0,DEL7RET;*******************************************50毫秒延时子程序DELAY2: MOV R0,#05DEL5: MOV R1,#10DEL4: MOV R2,7DHDEL3: NOPNOPDJNZ R2,DEL3DJNZ R1,DEL4DJNZ R0,DEL5RET;******************************************END四、实训总结通过两周的实训,我们对单片机有了一个基本的认识和了解,我们学到了怎样从一个设计课题入手去编写相关程序,并通过硬件实现。
基于51的波形发生器设计

目录1 概述 (1)1.1 研究背景 (1)1.2 设计思想及基本功能 (1)2 总体方案设计 (2)2.1 方案选取 (2)2.2 系统框图 (2)3 硬件电路设计 (3)3.1 设计思路、元件选型 (3)3.2 原理图 (3)3.3 主要芯片介绍 (4)3.4 硬件连线图 (11)4 系统软件设计 (11)4.1 锯齿波的产生过程 (13)4.2 三角波的产生过程 (14)4.3 矩形波的产生过程 (15)4.4 梯形波的产生过程 (16)4.5正弦波的产生过程 (17)5 总结 (19)参考文献 (20)1 概述1.1 研究背景波形发生器作为一种常用的信号源,是现代测试领域内应用最为广泛的通用仪器之一。
在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都学要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。
信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。
它可以产生多种波形信号,如正弦波,三角波,方波等,因而广泛用于通信、雷达、导航、宇航等领域。
波形发生器是能够产生大量的标准信号和用户定义信号,并保证高精度、高稳定性、可重复性和易操作性的电子仪器。
函数波形发生器具有连续的相位变换、和频率稳定性等优点,不仅可以模拟各种复杂信号,还可对频率、幅值、相移、波形进行动态、及时的控制,并能够与其它仪器进行通讯,组成自动测试系统,因此被广泛用于自动控制系统、震动激励、通讯和仪器仪表领域。
1.2 设计思想及基本功能随着电子技术的飞快发展,单片机也应用得越来越广泛,基于单片机的智能仪器的设计技术不断成熟。
单片机构成的仪器具有高可靠性,高性价比。
单片机技术在智能仪表和自动化等诸多领域有了极为广泛的应用,并用到各种家庭电器,单片机技术的广泛应用推动了社会的进步。
采用AT89C51单片机和DAC0832芯片,直接连接键盘和显示。