找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14771|回复: 8
打印 上一主题 下一主题
收起左侧

51单片机制作任意波形发生器设计资料 附汇编语言程序

  [复制链接]
跳转到指定楼层
楼主
ID:543077 发表于 2019-5-20 18:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

本次设计的任务是设计制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。示意图如下:

基本要求如下:

(1)具有产生正弦波、方波周期性波形的功能;

(2)输出波形的频率范围为100Hz~20kHz(非正弦波频率按10次谐波计算);重复频率可调,频率步进间隔≤100Hz;

(3)输出波形幅度范围0~5V(峰-峰值),可按步进0.1V(峰-峰值)调整;

(4)具有显示输出波形的类型、重复频率(周期)和幅度的功能。



1.1 方案

方案一:采用单片函数发生器可产生正弦波、方波等,操作简单易行,用 D/A 转换器的输出来改变调节电压,可以实现数控调整频率,但产生信号的频率稳定度不高。

方案二:利用芯片组成的电路输出波形,MAX038是MAXIM公司生产的一个只需要很少外部元件的精密高频波形产生器,它能产生准确的高频正弦波、三角波、方波。输出频率和占空比可以通过调整电流、电压或电阻来分别地控制。所需的输出波形可由在A0和A1输入端设置适当的代码来选择,且具有输出频率范围宽、波形稳定、失真小、使用方便等特点。

方案三:采用Atmel公司的AT89C51单片机编程方法实现,该方案可以通过编程的方法控制信号波形的频率和幅度,而在硬件电路不便的情况下,通过程序实现频率的变化和输出波形的选择,并同时在显示器显示相应的结果。

方案一输出信号频率不够稳定;方案二成本高,程序复杂度高;方案三软硬件结合,硬件成本低,软件起点低,用汇编语言即可完成,优化型相对比较好,容易实现,且满足设计要求。综合考虑,我们采用了方案三,用AT89C51单片机设计多功能信号发生器,能够满足信号的频率稳定性和精度的准确性。

1.2 系统描述

    本方案以AT89C51为控制核心,主要模块包括复位电路、时钟信号发生电路、键盘控制电路、D/A转化及LED显示电路,其原理框图如下:


键盘控制电路

键盘电路分为独立式按键和矩阵式键盘,为了简化程序,我们采用了独立式键盘。独立式按键是指直接用I/O口线构成的单个按键电路。每个独立式按键单独占有一根I/O口线,每根I/O口线的工作状态不会影响其他I/O口线的工作状态,这是一种最简单易懂的按键结构。电路图如下所示:

图5 键盘输入电路

2.5 LED显示电路
2.5.1 数码管功能介绍

    数码管的外形结构如下图所示,由图可见它由8个发光二极管构成,通过不同的组合用来显示0—9,A—F及小数点“.”等符号。数码管通常有共阴极和共阳极两种型号,共阴极数码管的发光二极管阴极必须接低电平,当某发光二极管的阳极为高电平(一般为+5V)时,此二极管点亮;共阳极数码管的发光二极管是阳极并接到高电平,对于需点亮的发光二极管使其阴极接地电平即可(一般接地)。显然,要显示某字形就应使此字形的相应字段点亮,实际就是送不同电平组合代表的数据至数码管。这种装入数码管显示字形的数据称字形码。

图6 数码管原理图

要使数码管显示不同的数字或者字符,需要使端口输出相应的字型码,显示器的字形与字码关系如下图所示:

图7 段码表

2.5.2 LED动态显示原理及电路

LED数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

本次设计采用6位共阴极数码管,选取AT89C51的P0口作为信号输出端口,并外接两片锁存器74HC573,用于驱动数码管,其中一片作为数码管的段选信号输入端,另一片作为数码管的位选信号输入端,选取AT89C51的P2.6和P2.7分别作为两片锁存器的片选信号输入端,电路图如下所示:

图8 LED显示电路


2.6 D/A转换及放大电路
2.6.1 DAC0832功能介绍

DAC0832是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。其引脚图如下所示:

图9 DAC0832引脚图

关于DAC0832的引脚功能如下:

D0~D7:数字信号输入端。

ILE:输入寄存器允许,高电平有效。

CS:片选信号,低电平有效。

WR1:写信号1,低电平有效。

XFER:传送控制信号,低电平有效。

WR2:写信号2,低电平有效。

IOUT1、IOUT2:DAC电流输出端。

RFB:是集成在片内的外接运放的反馈电阻。

VREF:基准电压(-10~10V)。

Vcc:是源电压(+5~+15V)。

AGND:模拟地。

NGND:数字地,可与AGND接在一起使用。

2.6.2 D/A转换电路

由于单片机输出的是数字信号,因此要得到模拟信号的波形就必须对其进行数模转换。我们采用了DAC0832数模转换器,由于其输出为电流输出,需要外加运算放大器OP07使之装换为电压输出,最后通过示波器显示输出的波形。我们选取了AT89C51的P1口作为波形数字信号的输出端口,电路图如下所示:

图10 D/A转换电路


3 系统调试

本次设计的系统仿真在Proteus软件中进行,并采用汇编语言进行程序的编写。

3.1 软件调试3.1.1 三角波产生
  • 输出波形如下图所示:
图11 三角波仿真图
  • 三角波程序如下:
TRI: CJNE R7,#0FFH,GO1
     CLR  20H
GO1: CJNE R7,#00H,GO2
     SETB 20H
GO2: JNB  TF1,GO3  
     CLR  TF1
     JB   20H,GO4
     DEC  R7
     SJMP GO6
GO4: INC  R7
GO6: MOV  P1,R7
     LCALL DISPLAY
GO3: MOV A,P3
     ORL A,#1FH
     CPL A
     JZ  GO5
     LCALL DELAY
     MOV A,P3
     ORL A,#1FH
     CPL A
     JZ  GO5
     LJMP CHANGESTATE
GO5: LJMP TRI
3.1.2 方波产生
  • 输出波形如下图所示:

图12 方波仿真图
  • 方波程序如下:
REC:JNB TF1,GG1

    CLR TF1

    DJNZ R2,GG2

    MOV  R2,#0FFH

    CPL  20H

GG2:JB 20H,GG3

    MOV  P1,#00H

    SJMP GG4

GG3:MOV  P1,#0FFH

GG4:

GG1:MOV A,P3

    ORL A,#0FH

    CPL A

    JZ  GG5

    LCALL DELAY

    MOV A,P3

    ORL A,#0FH

    CPL A

JZ  GG5

GG5:LJMP REC

3.1.3 正弦波产生
  • 输出波形如下图所示:

图13 正弦波仿真图

  • 程序如下:

SIN: JNB  TF1,G1

     CLR  TF1

     INC  R1

     MOV  A,R1

     MOVC A,@A+DPTR

     MOV  P1,A

G1: MOV  A,P3

     ORL  A,#1FH

     CPL  A

     JZ   G2

     MOV A,P3

     ORL  A,#1FH

     CPL  A

     JZ   G2

G2:  LJMP SIN




3.1.4 键盘控制

    通过按键的控制,可以实现波形的相互转换和调频的功能。P3.5和P3.6端口的键盘分别实现频率的加减功能,P3.7端口的键盘实现波形之间的相互转换。其仿真效果如下图所示:

图14 波形转换仿真图
3.1.5 LED显示

本次设计采用6位数码管实现显示功能,其中前3位用于显示波形的类型,REC代表方波,SIN代表正弦波,TRI代表三角波;后3位用于显示波形的频率。其仿真效果如下图所示:

图15 LED仿真图
3.2 硬件调试
本次设计的硬件电路调试结果如下图所示:

图16 硬件效果图

4 系统功能介绍

    本次设计的电路可实现以下三大功能:

  • 波形产生

    本次设计电路可产生方波、三角波、正弦波三种波形,而且通过键盘控制可以实现三种波形之间的相互转换和频率调节的功能。

  • LED显示

本次设计的显示功能通过6位数码管实现,可以显示三种波形的类型和频率。

  • 键盘控制

本次设计的电路具有键盘控制功能,可以进行三种波形之间的任意转换和波形频率的调节,并可以将改变后的结果实时地显示在在数码管上。



5 设计总结

我们小组此次的设计题目是波形发生器的设计,通过小组成员将近一个月的努力,并按照本次电子设计竞赛的相关要求,最终完成此次设计。在此次设计中收获颇多,主要有以下几点:

  • 通过对电路的设计,对51系列单片机的原理和功能有了进一步的了解,对之前学过的书本上的电路知识有了更深刻的体会,如复位电路的原理,晶振电路的作用,上拉电阻的功能,LED显示电路的原理等,熟悉了DAC0832芯片的原理和功能,并且能对其进行应用。
  • 通过原理图的绘制,学会了Proteus软件的使用,并且能用它完成一些简单的电路设计,对常用的一些元器件有了一定的了解和认识。
  • 本次设计的硬件电路相对简单,核心部分是程序的编写,考虑到汇编语言与硬件电路联系比较紧密,我们组通过讨论最终选取汇编语言进行程序的编写,方便后期调试过程查找错误。在软件和硬件的调试阶段遇到很多的问题,如LED显示乱码、闪烁、波形失真等,通过不断的查找错误,对程序进行相应的修改,使其达到设计的要求,在这个过程中,认识到有时候一个简单的错误就有可能造成电路无法正常工作,可谓“失之毫厘,差之千里”,培养了我们严谨细致的工作态度,同时对电路的的工作原理有了更深刻的认识。
  • 在本次电路设计的过程中,深刻体会到对于一个功能较为复杂的系统设计,一定要学会划分功能模块,逐个实现,最终再进行整合,切不可眉毛胡子一把抓,那样不仅操作起来麻烦,效率低,而且容易出错。
  • “纸上得来终觉浅,绝知此事要躬行”,通过本次电子设计竞赛,深刻体会到理论联系实践的重要性,要学会活学活用。同时,在实践的过程中,也可以加深对理论知识的认识,提高动手能力。
  • 通过本次电子设计竞赛,我更加深刻的认识到团队合作的重要性,小组成员分工合作,是设计成功的关键,只有大家团结一致,才能更快更好的完成任务。

我们此次的设计基本满足设计的要求,当然还是存在不足的地方,例如当频率过小的时候波形会有些失真,波形的频率调节范围比较小,D/A转换器转换时可以加一个锁存器,放大电路设计上还有待进一步改进,使其具有更强的输出能力等。



附录

1 系统原理图


单片机源程序如下:


  1.      ORG 0000H
  2.      lJMP MAIN

  3. MAIN:
  4.      MOV TMOD,#20H
  5.      MOV R0,#02H
  6.      MOV A,#0FFH
  7.      MOV P3,A
  8.      MOV A,#70H
  9.      MOV SP,A
  10.      MOV R6,#0FFH
  11. REMAIN:CLR TR1
  12.        MOV TH1,R6
  13.        SETB TR1
  14.        LCALL JM

  15.     CJNE R0,#01,SHIFT   
  16. TRI: CJNE R7,#0FFH,GO1
  17.      CLR  20H
  18. GO1: CJNE R7,#00H,GO2
  19.      SETB 20H

  20. GO2: JNB  TF1,GO3  
  21.      CLR  TF1
  22.      JB   20H,GO4
  23.      DEC  R7
  24.      SJMP GO6
  25. GO4: INC  R7
  26. GO6: MOV  P1,R7
  27.      LCALL DISPLAY
  28. GO3:
  29.      MOV A,P3
  30.      ORL A,#1FH
  31.      CPL A
  32.      JZ  GO5
  33.      LCALL DELAY
  34.      MOV A,P3
  35.      ORL A,#1FH
  36.      CPL A
  37.      JZ  GO5
  38.      LJMP CHANGESTATE
  39. GO5: LJMP TRI

  40. SHIFT:JC SIN1
  41. REC:JNB TF1,GG1
  42.     CLR TF1
  43.     DJNZ R5,GG2
  44.     MOV  R5,#0FFH
  45.     CPL  20H
  46. GG2:JB 20H,GG3
  47.     MOV  P1,#00H
  48.     SJMP GG4
  49. GG3:MOV  P1,#0FFH
  50. GG4:LCALL DISPLAY
  51. GG1:MOV A,P3
  52.     ORL A,#1FH
  53.     CPL A
  54.     JZ  GG5
  55.     LCALL DELAY
  56.     MOV A,P3
  57.     ORL A,#1FH
  58.     CPL A
  59.     JZ  GG5
  60.     LCALL  CHANGESTATE
  61. GG5:LJMP REC

  62. SIN1:NOP
  63. MOV  DPTR,#TABSIN
  64. SIN: JNB  TF1,G1
  65.      CLR  TF1
  66.      INC  R1
  67.      MOV  A,R1
  68.      MOVC A,@A+DPTR
  69.      MOV  P1,A
  70.      LCALL DISPLAY
  71. G1:  MOV  A,P3
  72.      ORL  A,#1FH
  73.      CPL  A
  74.      JZ   G2
  75.      LCALL DELAY
  76.      MOV  A,P3
  77.      ORL  A,#1FH
  78.      CPL  A
  79.      JZ   G2
  80.      LCALL  CHANGESTATE
  81. G2:  LJMP SIN

  82. CHANGESTATE:
  83.            JB  P3.7,GOTO1
  84.            INC R0
  85.            CJNE R0,#03H,GOTO1
  86.            MOV  R0,#00H
  87. GOTO1:     JB   P3.6,GOTO2
  88.            INC  R6
  89. GOTO2:     JB   P3.5,GOTO3
  90.            DEC  R6         
  91. GOTO3:     MOV  A,P3
  92.            CPL  A
  93.            JNZ  GOTO3
  94.            LJMP REMAIN

  95. JM:MOV DPTR,#TABNUM
  96.    MOV A,R6
  97.    MOV B,#100
  98.    DIV AB
  99.    MOVC A,@A+DPTR
  100.    MOV 14H,A
  101.    MOV A,B
  102.    MOV B,#10
  103.    DIV AB
  104.    MOVC A,@A+DPTR
  105.    MOV 15H,A
  106.    MOV A,B
  107.    MOVC A,@A+DPTR
  108.    MOV 16H,A

  109.    MOV DPTR,#TABWM
  110.    MOV A,R0
  111.    MOV B,#03H
  112.    MUL AB
  113.    MOV 10H,A
  114.    MOVC A,@A+DPTR
  115.    MOV  11H,A
  116.    INC  DPTR
  117.    MOV  A,10H
  118.    MOVC A,@A+DPTR
  119.    MOV  12H,A
  120.    MOV  A,10H
  121.    INC  DPTR
  122.    MOVC A,@A+DPTR
  123.    MOV  13H,A
  124.    RET


  125. DISPLAY:
  126.    SETB P2.6
  127.    MOV  P0,11H
  128.    CLR  P2.6
  129.    MOV  P0,#0FFH
  130.    SETB P2.7
  131.    MOV  P0,#0FEH
  132.    CLR  P2.7
  133.    MOV  P0,#0FFH
  134.    LCALL DELAY

  135.    SETB P2.6
  136.    MOV  P0,12H
  137.    CLR  P2.6
  138.    MOV  P0,#0FFH
  139.    SETB P2.7
  140.    MOV  P0,#0FDH
  141.    CLR  P2.7
  142.    MOV  P0,#0FFH
  143.    LCALL DELAY

  144.    SETB P2.6
  145.    MOV  P0,13H
  146.    CLR  P2.6
  147.    MOV  P0,#0FFH
  148.    SETB P2.7
  149.    MOV  P0,#0FBH
  150.    CLR  P2.7
  151.    MOV  P0,#0FFH
  152.    LCALL DELAY

  153.    SETB P2.6
  154.    MOV  P0,14H
  155.    CLR  P2.6
  156.    MOV  P0,#0FFH
  157.    SETB P2.7
  158.    MOV  P0,#0F7H
  159.    CLR  P2.7
  160.    MOV  P0,#0FFH
  161.    LCALL DELAY

  162.    SETB P2.6
  163.    MOV  P0,15H
  164.    CLR  P2.6
  165.    MOV  P0,#0FFH
  166.    SETB P2.7
  167.    MOV  P0,#0EFH
  168.    CLR  P2.7
  169.    MOV  P0,#0FFH
  170.    LCALL DELAY

  171.    SETB P2.6
  172.    MOV  P0,16H
  173.    CLR  P2.6
  174.    MOV  P0,#0FFH
  175.    SETB P2.7
  176.    MOV  P0,#0DFH
  177.    CLR  P2.7
  178.    MOV  P0,#0FFH
  179.    LCALL DELAY
  180.    RET
  181. DELAY:MOV R2,#0FFH
  182.       MOV R3,#1
  183. LOOP:
  184.       DJNZ R3,LOOP
  185.       MOV  R3,#2
  186.       DJNZ R2,LOOP
  187.       RET

  188. TABNUM: DB  3FH,06H,5BH,4FH,66H
  189.         DB  6DH,7DH,07H,7FH,6FH
  190. TABWM:  DB  6DH,06H,37H,07H,77H
  191.         DB  30H,77H,79H,39H
  192. TABSIN:
  193.         DB 80H,83H,86H,89H,8DH,90H,93H,96H
  194.         DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH
  195.         DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H
  196.         DB 0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8H
  197.         DB 0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H
  198.         DB 0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5H
  199.         DB 0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH
  200.         DB 0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
  201.         DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH
  202.         DB 0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H
  203.         DB 0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH
  204.         DB 0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAH
  205.         DB 0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7H
  206.         DB 0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1H
  207.         DB 0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH,99H
  208.         DB 96H,93H,90H,8DH,89H,86H,83H,80H
  209.         DB 80H,7CH,79H,78H,72H,6FH,6CH,69H
  210.         DB 66H,63H,60H,5DH,5AH,57H,55H,51H
  211.         DB 4EH,4CH,48H,45H,43H,40H,3DH,3AH
  212.         DB 38H,35H,33H,30H,2EH,2BH,29H,27H
  213.         DB 25H,22H,20H,1EH,1CH,1AH,18H,16H
  214.         DB 15H,13H,11H,10H,0EH,0DH,0BH,0AH
  215.         DB 09H,08H,07H,06H,05H,04H,03H,02H
  216.         DB 02H,01H,00H,00H,00H,00H,00H,00H
  217.         DB 00H,00H,00H,00H,00H,00H,01H,02H
  218.         DB 02H,03H,04H,05H,06H,07H,08H,09H
  219.         DB 0AH,0BH,0DH,0EH,10H,11H,13H,15H
  220.         DB 16H,18H,1AH,1CH,1EH,20H,22H,25H
  221.         DB 27H,29H,2BH,2EH,30H,33H,35H,38H
  222.         DB 3AH,3DH,40H,43H,45H,48H,4CH,4EH
  223.         DB 51H,55H,57H,5AH,5DH,60H,63H,66H
  224.         DB 69H,6CH,6FH,72H,76H,79H,7CH,80H


  225. END
复制代码
完整的Word格式文档51黑下载地址:

51单片机实现波形发生器.doc (3.34 MB, 下载次数: 197)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏10 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:430492 发表于 2020-5-4 22:16 | 只看该作者
直接汇编,好NBa的样子!!
回复

使用道具 举报

板凳
ID:771350 发表于 2020-6-7 16:03 | 只看该作者
你好,照着你的proteus和keil,但是仿真的时候显示不对啊
回复

使用道具 举报

地板
ID:847882 发表于 2020-11-23 16:45 | 只看该作者
同问,为啥仿真是出不来波形?
回复

使用道具 举报

5#
ID:911823 发表于 2021-4-25 14:21 | 只看该作者
实际电路怎么连接的啊
回复

使用道具 举报

6#
ID:937594 发表于 2021-6-14 21:23 | 只看该作者
葉SiR 发表于 2020-6-7 16:03
你好,照着你的proteus和keil,但是仿真的时候显示不对啊

请问现在解决了吗?想请教几个问题
回复

使用道具 举报

7#
ID:937572 发表于 2021-6-18 09:49 | 只看该作者
咸鱼Sirrr 发表于 2020-11-23 16:45
同问,为啥仿真是出不来波形?

后来解决了吗
回复

使用道具 举报

8#
ID:927469 发表于 2021-6-20 09:31 | 只看该作者
程序有3个错误
回复

使用道具 举报

9#
ID:328014 发表于 2021-6-20 18:51 | 只看该作者

我编译出来是0个错误,不过我没有电路没有测试功能

asm.7z

15.17 KB, 下载次数: 4, 下载积分: 黑币 -5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表