标题:
简易单片机信号发生器实现
[打印本页]
作者:
yangjie6666
时间:
2019-7-5 11:07
标题:
简易单片机信号发生器实现
这是我单片机完成的课题。
可以实现方波正弦波三角波
并且利用视觉暂留原理显示频率
protues仿真和keil程序已打包上传
单片机源程序如下:
ORG 00H
SEL EQU 50H ;存波形地址 00方波,01三角波,02正弦波
RANGE EQU 51H;存幅度
FREQ EQU 52H;存频率
INC_1 EQU 55H;
INC_2 EQU 56H;
RAN_SIN EQU 57H;三角波幅度
;定义按键的地址
AN_SEL EQU P3.2 ;选择波形
AN_FREQ EQU P3.3;调节频率
AN_RANGE EQU P3.4;调节幅度
AN_RST EQU P3.5;恢复
MOV R0, #00H ;发光管的显示频率.由于电流小不够负载驱动管
MOV R1, #05H
MOV R2, #00H
MOV R3, #00H
MOV R4, #00H
LJMP MAIN
ORG 0003H
LJMP SEL_FUNC
ORG 000BH
LJMP FREQ_FUNC
ORG 0013H
LJMP RANGE_FUNC
ORG 001BH
LJMP SEL_RST
ORG 0100H
MAIN:
MOV SP,#60H
CLR A
CLR C
MOV SEL,#00H ;默认为方波
MOV RANGE,#7FH;RANGE为中间值,且不变
MOV FREQ,#00
MOV P1,#00H ;P1口数据位输出
MOV INC_1,#00H ;三角波上升
MOV INC_2,#00H ;三角波下降
MOV RAN_SIN,#01H
SETB IT1
SETB EX1
MOV TMOD,#66H
MOV TL0,#0FFH
MOV TH0,#0FFH ;外部计数 ,按一下马上跳转
MOV TL1,#0FFH
MOV TH1,#0FFH
SETB TR0
SETB TR1
SETB ET0 ;启动各种中断
SETB ET1
SETB IT0
SETB EX0
SETB EA
LCALL LED_SHOW
MAIN_L:MOV A,SEL
MOV DPTR,#WAVE
JMP @A+DPTR ;和250的散转指令对应,无中断就在此循环,显示波形
SJMP MAIN_L
SQUARE:
LCALL LED_SHOW
MOV R5,SEL
CJNE R5,#00H,WAVE_BACK
MOV P1,RANGE;幅值
LCALL DELAY_Xus ;把SEL值给R5, 设定方波占空比为50%
LCALL DELAY_1000us
MOV P1,#00H
LCALL DELAY_Xus
LCALL DELAY_100us
SJMP SQUARE
R_SEL:;三角波
LCALL LED_SHOW
MOV R5,SEL
CJNE R5,#01H,WAVE_BACK
LCALL JINC_F
RECT: DJNZ INC_1,RECT
INC P1 ;三角波上升下降
MOV A,P1
;LCALL DELAY_100us
CJNE A,RANGE,RECT
MOV INC_1,INC_2
DOWN: DJNZ INC_2,DOWN
DEC P1
MOV R0,P1
CJNE R0,#00H,DOWN
MOV INC_2,INC_1
LJMP R_SEL
RET
;MOV P1,#00H
;MOV R0,P1
;CJNE R0,#00H,DOWN
;MOV INC_F2,INC_F1
;LJMP R_SEL
;RET
JINC_F: MOV A,#0FFH
MOV B,RANGE
DIV AB ;检查是不是在一个循环内部;B的值会改变;
MOV INC_1,B ;一样才循环
MOV INC_2,B
RET
SIN:
MOV DPTR,#TABLE_SIN
S_SEL: MOV R5,SEL
CJNE R5,#02H,WAVE_BACK
SL: CLR A
MOVC A, @A+DPTR ;数表的值和B运算得到幅度变化。
MOV B,RAN_SIN
DIV AB
MOV P1,A
LCALL DELAY_10us
INC DPTR
MOV A,#01H
MOVC A,@A+DPTR
CJNE A,#21H,S_SEL
LJMP SIN
WAVE_BACK:RET
FREQ_FUNC: INC FREQ
AN0:
MOV R4,#0AH
CJNE R4,#0AH,BACK
LCALL DELAY1
LJMP AN1
AN1:
INC R3
CJNE R3,#0AH,BACK
LCALL DELAY1
LJMP AN2
AN2:
MOV R3,#00H
INC R2
CJNE R2,#0AH,BACK
LJMP AN3
AN3:
MOV R2,#00H
INC R1
CJNE R1,#0AH,BACK
LJMP AN4
AN4:
MOV R1,#00H
INC R0
CJNE R0,#0AH,BACK
LJMP AN5
AN5:
MOV R0,#00H
RETI
BACK:RETI ;R3-R0分别是个十百千位,每一个计数满进位
RANGE_FUNC:INC RANGE
INC RAN_SIN
MOV R6,RAN_SIN
CJNE R6,#00H,FUNC_RET
MOV RAN_SIN,#01H
RETI
SEL_FUNC: INC SEL
MOV R6,SEL
CJNE R6,#03H,FUNC_RET
MOV SEL,#00H
RETI
FUNC_RET:RETI
SEL_RST:CLR A
CLR C
MOV SEL,#00H
MOV RANGE,#7FH
MOV FREQ,#00
MOV P1,#00H
MOV INC_1,#00H
MOV INC_2,#00H
MOV RAN_SIN,#01H
RETI
LED_SHOW: ;LED显示
SETB P2.5 ; p2.5是数码管总开关
MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
SETB P2.0 ;P2.0 2.1 2.2 2.3 置为0 四个 让之前的四位频率显示
MOV P0,A
LCALL DELAY
CLR P2.0
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
SETB P2.1
MOV P0,A
LCALL DELAY
CLR P2.1
MOV A,R2
MOV DPTR, #TABLE
MOVC A,@A+DPTR
SETB P2.2
MOV P0,A
LCALL DELAY
CLR P2.2
MOV A,R3
MOV DPTR,#TABLE
MOVC A,@A+DPTR
SETB P2.3
MOV P0,A
LCALL DELAY
CLR P2.3
RET
TABLE: DB 90H,80H,0F8H,92H,99H,0B0H,82H,0A4H,0F9H,0C0H ;数码管0-9数字
DELAY1:MOV R6,#0FFH
LP:MOV R7,#0FFH
LP1:NOP
DJNZ R7,LP1
DJNZ R6,LP
RET
DELAY:MOV R6,#0FH
LP2:MOV R7,#10
LP3:NOP
DJNZ R7,LP3
DJNZ R6,LP2
RET
DELAY_100us: NOP
MOV R6,#04H
L1:MOV R7,#0AH
L2:DJNZ R7,L2
DJNZ R6,L1
RET
DELAY_1000us: NOP
MOV R6,#0AAH
L111:MOV R7,#0AH
L222:DJNZ R7,L2
DJNZ R6,L1
RET
DELAY_Xus:MOV A,FREQ
MOV R6,FREQ
JZ DE_BACK
NOP
L11:MOV R7,#0AH
L22:DJNZ R7,L22
DJNZ R6,L11
RET
DELAY_10us:MOV A,FREQ
JZ DE_BACK
MOV R3,FREQ
DJNZ R3,$
DE_BACK:RET
WAVE:LCALL SQUARE
LCALL R_SEL
LCALL SIN
TABLE_SIN:
DB 80H,83H,86H,89H,8DH,90H,93H,96H
DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH
DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H
DB 0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8H
DB 0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H
DB 0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5H
DB 0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH
DB 0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH
DB 0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H
DB 0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH
DB 0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAH
DB 0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7H
DB 0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1H
DB 0AEH,0ABH,0A8H,0A5H,0A2H,09FH,09CH,099H
DB 096H,093H,090H,08DH,089H,086H,083H,080H
DB 080H,07CH,079H,078H,072H,06FH,06CH,069H
DB 066H,063H,060H,05DH,05AH,057H,055H,051H
DB 04EH,04CH,048H,045H,043H,040H,03DH,03AH
DB 038H,035H,033H,030H,02EH,02BH,029H,027H
DB 025H,022H,020H,01EH,01CH,01AH,018H,016H
DB 015H,013H,011H,010H,00EH,00DH,00BH,00AH
DB 09H,08H,07H,06H,05H,04H,03H,02H
DB 02H,01H,00H,00H,00H,00H,00H,00H
DB 0AH,0BH,0DH,0EH,10H,11H,13H,15H
DB 16H,18H,1AH,1CH,1EH,20H,22H,25H
DB 27H,29H,2BH,2EH,30H,33H,35H,38H
DB 3AH,3DH,40H,43H,45H,48H,4CH,4EH
DB 51H,55H,57H,5AH,5DH,60H,63H,66H
DB 69H,6CH,6FH,72H,76H,79H,7CH,80H,21H ;21H为 结束标志位
END
复制代码
所有资料51hei提供下载:
Protues.rar
(68.45 KB, 下载次数: 23)
2019-7-5 11:07 上传
点击文件名下载附件
下载积分: 黑币 -5
keil.rar
(29.85 KB, 下载次数: 20)
2019-7-5 11:07 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
元元元。。。
时间:
2023-6-26 18:55
可以实现什么频率,频率选择怎么样
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1