找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2256|回复: 1
收起左侧

简易单片机信号发生器实现

[复制链接]
ID:578338 发表于 2019-7-5 11:07 | 显示全部楼层 |阅读模式
这是我单片机完成的课题。
可以实现方波正弦波三角波
并且利用视觉暂留原理显示频率
protues仿真和keil程序已打包上传

单片机源程序如下:
  1.            ORG 00H   
  2. SEL    EQU 50H ;存波形地址 00方波,01三角波,02正弦波
  3. RANGE  EQU 51H;存幅度
  4. FREQ   EQU 52H;存频率
  5. INC_1 EQU 55H;
  6. INC_2 EQU 56H;
  7. RAN_SIN EQU 57H;三角波幅度

  8. ;定义按键的地址
  9. AN_SEL EQU P3.2 ;选择波形
  10. AN_FREQ EQU P3.3;调节频率
  11. AN_RANGE EQU P3.4;调节幅度
  12. AN_RST EQU P3.5;恢复

  13. MOV R0, #00H           ;发光管的显示频率.由于电流小不够负载驱动管
  14. MOV R1, #05H
  15. MOV R2, #00H      
  16. MOV R3, #00H     
  17. MOV R4, #00H

  18. LJMP MAIN

  19. ORG 0003H
  20. LJMP SEL_FUNC
  21. ORG 000BH
  22. LJMP FREQ_FUNC
  23. ORG 0013H
  24. LJMP RANGE_FUNC
  25. ORG 001BH
  26. LJMP SEL_RST
  27. ORG 0100H
  28. MAIN:
  29. MOV SP,#60H
  30. CLR A
  31. CLR C
  32. MOV SEL,#00H ;默认为方波
  33. MOV RANGE,#7FH;RANGE为中间值,且不变
  34. MOV FREQ,#00         
  35. MOV P1,#00H                                ;P1口数据位输出
  36. MOV INC_1,#00H                   ;三角波上升
  37. MOV INC_2,#00H                   ;三角波下降
  38. MOV RAN_SIN,#01H

  39. SETB IT1
  40. SETB EX1
  41. MOV TMOD,#66H
  42. MOV TL0,#0FFH
  43. MOV TH0,#0FFH                         ;外部计数 ,按一下马上跳转
  44. MOV TL1,#0FFH
  45. MOV TH1,#0FFH
  46. SETB TR0
  47. SETB TR1
  48. SETB ET0                                 ;启动各种中断
  49. SETB ET1
  50. SETB IT0
  51. SETB EX0
  52. SETB EA

  53. LCALL LED_SHOW

  54. MAIN_L:MOV A,SEL
  55.                  MOV DPTR,#WAVE
  56.                 JMP @A+DPTR                                ;和250的散转指令对应,无中断就在此循环,显示波形
  57.        
  58.                
  59.                 SJMP MAIN_L

  60. SQUARE:
  61.         LCALL LED_SHOW

  62.         MOV R5,SEL
  63.         CJNE R5,#00H,WAVE_BACK
  64.         MOV P1,RANGE;幅值
  65.         LCALL DELAY_Xus                                        ;把SEL值给R5,        设定方波占空比为50%
  66.         LCALL DELAY_1000us
  67.         MOV P1,#00H
  68.         LCALL DELAY_Xus                                  
  69.         LCALL DELAY_100us
  70.         SJMP SQUARE

  71. R_SEL:;三角波
  72. LCALL LED_SHOW
  73. MOV R5,SEL
  74.            CJNE R5,#01H,WAVE_BACK
  75.            LCALL JINC_F
  76. RECT:  DJNZ INC_1,RECT
  77.        INC P1                                                                   ;三角波上升下降
  78.        MOV A,P1
  79. ;LCALL DELAY_100us
  80.        CJNE A,RANGE,RECT
  81.        MOV INC_1,INC_2
  82. DOWN: DJNZ INC_2,DOWN               
  83.            DEC P1
  84.            MOV R0,P1
  85.            CJNE R0,#00H,DOWN
  86.            MOV INC_2,INC_1

  87.            LJMP R_SEL
  88.            RET
  89.           ;MOV P1,#00H
  90.            ;MOV R0,P1
  91.            ;CJNE R0,#00H,DOWN
  92.            ;MOV INC_F2,INC_F1
  93.            ;LJMP R_SEL
  94.            ;RET
  95. JINC_F:        MOV A,#0FFH
  96.            MOV B,RANGE
  97.            DIV AB                                                ;检查是不是在一个循环内部;B的值会改变;
  98.            MOV INC_1,B                                        ;一样才循环
  99.            MOV INC_2,B
  100.            RET
  101. SIN:

  102. MOV DPTR,#TABLE_SIN
  103. S_SEL:                MOV R5,SEL
  104.                 CJNE R5,#02H,WAVE_BACK
  105.                
  106. SL:          CLR A
  107.         MOVC A, @A+DPTR                  ;数表的值和B运算得到幅度变化。
  108.                 MOV B,RAN_SIN
  109.                 DIV AB
  110.                 MOV P1,A
  111.                 LCALL DELAY_10us
  112.                 INC DPTR
  113.                 MOV A,#01H
  114.                 MOVC A,@A+DPTR
  115.                 CJNE A,#21H,S_SEL
  116.                 LJMP SIN


  117. WAVE_BACK:RET


  118. FREQ_FUNC:  INC FREQ

  119.     AN0:
  120.         MOV R4,#0AH
  121.         CJNE R4,#0AH,BACK
  122.         LCALL DELAY1
  123.         LJMP AN1
  124.         AN1:
  125.         INC R3
  126.         CJNE R3,#0AH,BACK
  127.         LCALL DELAY1
  128.         LJMP AN2
  129.         AN2:
  130.         MOV R3,#00H
  131.         INC R2
  132.         CJNE R2,#0AH,BACK
  133.         LJMP AN3
  134.         AN3:
  135.         MOV R2,#00H
  136.         INC R1
  137.         CJNE R1,#0AH,BACK
  138.         LJMP AN4
  139.         AN4:
  140.         MOV R1,#00H
  141.         INC R0
  142.         CJNE R0,#0AH,BACK
  143.         LJMP AN5
  144.         AN5:
  145.         MOV R0,#00H
  146.         RETI
  147.         BACK:RETI                                  ;R3-R0分别是个十百千位,每一个计数满进位
  148.         RANGE_FUNC:INC RANGE
  149.                 INC RAN_SIN
  150.                 MOV R6,RAN_SIN
  151.                 CJNE R6,#00H,FUNC_RET
  152.                 MOV RAN_SIN,#01H
  153.                 RETI
  154.         SEL_FUNC: INC SEL
  155.                 MOV R6,SEL
  156.                 CJNE R6,#03H,FUNC_RET
  157.                 MOV SEL,#00H
  158.                 RETI
  159.         FUNC_RET:RETI
  160.         SEL_RST:CLR A
  161.                 CLR C
  162.                 MOV SEL,#00H
  163.                 MOV RANGE,#7FH
  164.                 MOV FREQ,#00
  165.                 MOV        P1,#00H
  166.                 MOV INC_1,#00H
  167.                 MOV INC_2,#00H
  168.                 MOV RAN_SIN,#01H
  169.                 RETI

  170. LED_SHOW:         ;LED显示
  171.                 SETB P2.5                ;  p2.5是数码管总开关
  172.                 MOV A,R0
  173.                 MOV DPTR,#TABLE
  174.                 MOVC A,@A+DPTR
  175.                 SETB P2.0                ;P2.0 2.1 2.2 2.3 置为0        四个  让之前的四位频率显示
  176.                 MOV P0,A
  177.                 LCALL DELAY
  178.                 CLR P2.0

  179.                 MOV A,R1
  180.                 MOV DPTR,#TABLE
  181.                 MOVC A,@A+DPTR
  182.                 SETB P2.1
  183.                 MOV P0,A
  184.                 LCALL DELAY
  185.                
  186.                 CLR P2.1
  187.                 MOV A,R2
  188.                 MOV DPTR, #TABLE
  189.                 MOVC A,@A+DPTR
  190.                 SETB P2.2
  191.                 MOV P0,A
  192.                 LCALL DELAY
  193.           
  194.                 CLR P2.2
  195.                 MOV A,R3
  196.                 MOV DPTR,#TABLE
  197.                 MOVC A,@A+DPTR
  198.                         SETB P2.3
  199.                 MOV P0,A
  200.                 LCALL DELAY
  201.                 CLR P2.3
  202.          
  203.             RET

  204.   TABLE: DB 90H,80H,0F8H,92H,99H,0B0H,82H,0A4H,0F9H,0C0H   ;数码管0-9数字
  205.   DELAY1:MOV R6,#0FFH
  206.   LP:MOV R7,#0FFH
  207.   LP1:NOP

  208.   DJNZ R7,LP1
  209.   DJNZ R6,LP
  210.   RET

  211.   DELAY:MOV R6,#0FH
  212.   LP2:MOV R7,#10
  213.   LP3:NOP
  214.   DJNZ R7,LP3
  215.   DJNZ R6,LP2
  216.   RET
  217.   DELAY_100us: NOP
  218.     MOV R6,#04H
  219.         L1:MOV R7,#0AH
  220.         L2:DJNZ R7,L2
  221.         DJNZ R6,L1
  222.         RET
  223.    DELAY_1000us: NOP
  224.     MOV R6,#0AAH
  225.         L111:MOV R7,#0AH
  226.         L222:DJNZ R7,L2
  227.         DJNZ R6,L1
  228.         RET
  229.   DELAY_Xus:MOV A,FREQ
  230.   MOV R6,FREQ
  231.   JZ DE_BACK

  232.   NOP                       
  233.   
  234.   
  235.   L11:MOV R7,#0AH
  236.   L22:DJNZ R7,L22
  237.             DJNZ R6,L11
  238.           RET
  239.   

  240.   DELAY_10us:MOV A,FREQ
  241.   JZ DE_BACK
  242.   MOV R3,FREQ
  243.   DJNZ R3,$
  244.   DE_BACK:RET

  245.   WAVE:LCALL SQUARE
  246.              LCALL R_SEL
  247.            LCALL SIN
  248.   TABLE_SIN:
  249.         DB    80H,83H,86H,89H,8DH,90H,93H,96H
  250. DB  99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH
  251. DB        0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H
  252. DB        0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8H
  253. DB        0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H
  254. DB        0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5H
  255. DB        0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH
  256. DB  0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
  257. DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH
  258. DB         0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H
  259. DB        0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH
  260. DB        0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAH
  261. DB        0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7H
  262. DB        0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1H
  263. DB        0AEH,0ABH,0A8H,0A5H,0A2H,09FH,09CH,099H
  264. DB        096H,093H,090H,08DH,089H,086H,083H,080H
  265. DB        080H,07CH,079H,078H,072H,06FH,06CH,069H
  266. DB        066H,063H,060H,05DH,05AH,057H,055H,051H
  267. DB        04EH,04CH,048H,045H,043H,040H,03DH,03AH
  268. DB        038H,035H,033H,030H,02EH,02BH,029H,027H
  269. DB        025H,022H,020H,01EH,01CH,01AH,018H,016H
  270. DB        015H,013H,011H,010H,00EH,00DH,00BH,00AH       
  271. DB  09H,08H,07H,06H,05H,04H,03H,02H
  272. DB  02H,01H,00H,00H,00H,00H,00H,00H
  273. DB  0AH,0BH,0DH,0EH,10H,11H,13H,15H
  274. DB  16H,18H,1AH,1CH,1EH,20H,22H,25H
  275. DB  27H,29H,2BH,2EH,30H,33H,35H,38H
  276. DB 3AH,3DH,40H,43H,45H,48H,4CH,4EH
  277. DB 51H,55H,57H,5AH,5DH,60H,63H,66H

  278. DB 69H,6CH,6FH,72H,76H,79H,7CH,80H,21H  ;21H为         结束标志位

  279. END
复制代码

所有资料51hei提供下载:
Protues.rar (68.45 KB, 下载次数: 22)
回复

使用道具 举报

ID:1077459 发表于 2023-6-26 18:55 | 显示全部楼层
可以实现什么频率,频率选择怎么样
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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