搜索
您的当前位置:首页正文

正弦信号发生器 完整版 调幅调频

来源:易榕旅网
OUTBIT equ 08002h ; 位控制口 OUTSEG equ 08004h ; 段控制口 IN equ 08001h ; 键盘读入口 DP equ 25h

LEDBuf equ 60h ; 显示缓冲 ORG 0000H ljmp Start ORG 000BH AJMP DINGSHI

LEDMAP: ; 八段管显示码

db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h

Delay: ; 延时子程序 mov r7, #0 DelayLoop:

djnz r7, DelayLoop djnz r6,delayLoop ret

DisplayLED:

mov r0, #LEDBuf

mov r1, #6 ; 共6个八段管 mov r2, #00100000b ; 从左边开始显示 Loop:

mov dptr, #OUTBIT mov a, #0

movx @dptr, a ; 关所有八段管

mov a, @r0

mov dptr, #OUTSEG movx @dptr, a

mov dptr, #OUTBIT mov a, r2

movx @dptr, a ; 显示一位八段管

mov r6, #1 call Delay

mov a, r2 ; 显示下一位 rr a

mov r2, a

inc r0

djnz r1, Loop

ret

TestKey:

mov dptr, #OUTBIT mov a, #0

movx @dptr, a ; 输出线置为0 mov dptr, #IN

movx a, @dptr ; 读入键状态 cpl a

anl a, #0fh ; 高四位不用

ret

KeyTable: ; 键码定义 db 16h, 15h, 14h, 0ffh db 13h, 12h, 11h, 10h db 0dh, 0ch, 0bh, 0ah db 0eh, 03h, 06h, 09h db 0fh, 02h, 05h, 08h db 00h, 01h, 04h, 07h

GetKey:

mov dptr, #OUTBIT mov P2, dph

mov r0, #Low(IN) mov r1, #00100000b mov r2, #6 KLoop:

mov a, r1 ; 找出键所在列 cpl a

movx @dptr, a cpl a rr a

mov r1, a ; 下一列

movx a, @r0 cpl a

anl a, #0fh

jnz Goon1 ; 该列有键入

djnz r2, KLoop

mov r2, #0ffh ; 没有键按下, 返回 0ffh sjmp Exit Goon1:

mov r1, a ; 键值 = 列 X 4 + 行

mov a, r2 dec a rl a rl a

mov r2, a ; r2 = (r2-1)*4

mov a, r1 ; r1中为读入的行值 mov r1, #4 LoopC:

rrc a ; 移位找出所在行 jc Exit

inc r2 ; r2 = r2+ 行值 djnz r1, LoopC Exit:

mov a, r2 ; 取出键码 mov dptr, #KeyTable movc a, @a+dptr mov r2, a

WaitRelease:

mov dptr, #OUTBIT ; 等键释放 clr a

movx @dptr, a

mov r6, #10 call Delay call TestKey jnz WaitRelease

mov a, r2 ret

chuzhi:MOV A,20H ;将四个数转换成一四位数 MOV R0,#0E8H ;第一个数乘以1000 MOV R1,#03H MOV B,R0

MUL AB MOV 61H,B

MOV 60H,A ;低8位 MOV A,20H MOV B,R1 MUL AB ADD A,61H

MOV 61H,A ;高8位

CLR C

MOV A,21H

MOV R0,#64H MOV B,R0 MUL AB ADD A,60H

MOV 62H,A MOV A,61H ADDC A,B

MOV 63H,A

CLR C

MOV A,22H

MOV R0,#0AH MUL AB ADD A,62H

MOV 64H,A MOV A,63H ADDC a,B

MOV 65H,A

CLR C

MOV A,23H ADD A,64H

MOV 66H,A MOV A,65H ADDC A,#0h

MOV 67H,A

MOV R7,66H MOV R6,67H MOV R3,#0H MOV R2,#0H MOV R4,#27H

;第2个数乘以100 ;低8位 ;高8位 ;第3个数乘以10 ;低8位 ;高8位 ;频率值的低八位 ;频率值的高八位 MOV R5,#10H

DIVD: CLR C ;比较被除数和除数 MOV A,R3 SUBB A,R7 MOV A,R2 SUBB A,R6 JC DVD1

SETB OV ;溢出 RET

DVD1: MOV B,#10H ;计算双字节商

DVD2: CLR C ;部分商和余数同时左移一位 MOV A,R5 RLC A MOV R5,A MOV A,R4 RLC A MOV R4,A MOV A,R3 RLC A MOV R3,A XCH A,R2 RLC A XCH A,R2

MOV F0,C ;保存溢出位 CLR C

SUBB A,R7 ;计算(R2R3-R6R7) MOV R1,A MOV A,R2 SUBB A,R6

ANL C,/F0 ;结果判断 JC DVD3

MOV R2,A ;够减,存放新的余数 MOV A,R1 MOV R3,A

INC R5 ;商的低位置一

DVD3: DJNZ B,DVD2 ;计算完16位商(R4,R5) MOV A,R4 ;将商移到R2R3中 MOV R2,A MOV A,R5 MOV R3,A

CLR OV ;设立成功标志 MOV 67H,R2 MOV 66H,R3

MOV R0,#00H ;求定时器初值 MOV R1,#00H MOV R3,#01H CLR C MOV A,R0 SUBB A,66H

MOV 50H,A ;初值的低八位 MOV A,R1 SUBB A,67H

MOV 51H,A ;初值的高八位 ret

L1: call displayled ;显示F call testkey jz L1 call getkey

mov 30h,a ;在30H中存放电压幅值 anl a, #1fh ; 显示键码 mov dptr, #LEDMap movc a, @a+dptr mov LEDBuf+5, a L2: call displayled call testkey jz L2 call getkey cjne a,#16h,L2 mov a,#0ch anl a, #1fh

mov dptr, #LEDMap movc a, @a+dptr mov LEDBuf+4, a

L31: call displayled ;显示C call testkey jz L31 call getkey mov 23h,a anl a,#1fh

mov dptr,#ledmap movc a,@a+dptr mov ledbuf+3,a L32: call displayled call testkey jz L32 call getkey

cjne a,#16h,LN2 ljmp L4 LN2:mov r1,23h mov 22h,r1 mov 23h,a anl a,#1fh

mov dptr,#ledmap movc a,@a+dptr

mov ledbuf+2,ledbuf+3 mov ledbuf+3,a L33: call displayled call testkey jz L33 call getkey

cjne a,#16h,LN3 ljmp L4

LN3: mov r1,22h mov 21h,r1 mov r1,23h mov 22h,r1 mov 23h,a anl a,#1fh

mov dptr,#ledmap movc a,@a+dptr mov r0,ledbuf+2 mov ledbuf+1,r0 mov r0,ledbuf+3 mov ledbuf+2,r0 mov ledbuf+3,a L34: call displayled call testkey jz L34 call getkey

cjne a,#16h,LN4 ljmp L4

LN4:mov r1,21h mov 20h,r1 mov r1,22h mov 21h,r1 mov r1,23h mov 22h,r1 mov 23h,a anl a,#1fh

mov dptr,#ledmap

movc a,@a+dptr mov r0,ledbuf+1 mov ledbuf+0,r0 mov r0,ledbuf+2 mov ledbuf+1,r0 mov r0,ledbuf+3 mov ledbuf+2,r0 mov ledbuf+3,a L4: call displayled call testkey jz L4

call getkey cjne a,#16h,L4 mov a,#0Ah anl a,#1fh

mov dptr,#ledmap movc a,@a+dptr mov ledbuf+4,a ret

Start:

mov LEDBuf+0, #3fh ; 显示 0.0.0.0. mov LEDBuf+1, #3fh mov LEDBuf+2, #3fh mov LEDBuf+3, #3fh mov LEDBuf+4, #3fh mov LEDBuf+5, #3fh MLoop:

lcall DisplayLED ; 显示 lcall TestKey ; 有键入?

jz MLoop ; 无键入, 继续显示 lcall GetKey ; 读入键码 cjne a,#13h,mloop mov a,#0fh

anl a, #1fh ; 显示键码 mov dptr, #LEDMap movc a, @a+dptr mov LEDBuf+4, a call L1 start1:mov r1,#064h mov a,#00h mov r7,a

lcall CHUZHI

mov r4,30h

cjne r4,#1,LOOP2 ljmp LOOP7

LOOP2: cjne r4,#2,LOOP3 MOV A,#0 ljmp LOOP8

LOOP3: cjne r4,#3,LOOP4 MOV A,#0 ljmp LOOP9

LOOP4: cjne r4,#4,LOOP5 MOV A,#0 ljmp LOOP10 LOOP5:

MOV A,#0 LJMP LOOP11 loop7: mov a,#0 LOOP6:

mov 40h,a

MOV DPTR,#SIN1 MOVC A,@A+DPTR

mov dptr,#0a000h movx @dptr,a

call DINGSHI

mov a,40h inc a

djnz r1,LOOP6 mov a,#0h mov r1,#64h lcall testkey jz LOOP6 ljmp start LOOP8:

mov 40h,a

MOV DPTR,#SIN2 MOVC A,@A+DPTR

mov dptr,#0a000h movx @dptr,a

call DINGSHI

mov a,40h inc a

;置D\\A转换地址;调用定时 ;置D\\A转换地址;调用定时 djnz r1,LOOP8 mov a,#0h mov r1,#64h lcall testkey jz LOOP8 ljmp start LOOP9:

mov 40h,a

MOV DPTR,#SIN3 MOVC A,@A+DPTR

mov dptr,#0a000h movx @dptr,a

call DINGSHI

mov a,40h inc a

djnz r1,LOOP9 mov a,#0h mov r1,#64h lcall testkey jz LOOP9 ljmp start LOOP10:

mov 40h,a

MOV DPTR,#SIN4 MOVC A,@A+DPTR

mov dptr,#0a000h movx @dptr,a

call DINGSHI

mov a,40h inc a

djnz r1,LOOP10 mov a,#0h mov r1,#64h lcall testkey jz LOOP10 ljmp start LOOP11:

mov 40h,a

MOV DPTR,#SIN5

;置D\\A转换地址;调用定时 ;置D\\A转换地址;调用定时 MOVC A,@A+DPTR

mov dptr,#0a000h ;置D\\A转换地址 movx @dptr,a

call DINGSHI ;调用定时

mov a,40h inc a

djnz r1,LOOP11 mov a,#0h mov r1,#64h lcall testkey jz LOOP11 ljmp start

DINGSHI:

clr tf0

mov tmod,#01h ;定时器 mov th0,#00 mov tl0,#01 setb tr0 nov: jbc tf0,ovr sjmp nov ovr: ret

SIN1: DB 26,28,29,31,32,34,36,37,39,40,41,43,44,45,46 DB 47,48,49,50,50,51,51,52,53,53,53,52,52,52,51 DB 51,50,50,49,48,47,46,45,44,43,41,40,39,37,36 DB 34,32,31,29,28,26,24,23,21,20,18,16,15,13,12 DB 11,9,8,7,6,5,4,3,2,2,2,1,1,1,0 DB 0,0,0,1,1,2,2,2,3,4,5,6,7,8,9

DB 11,12,13,15,16,18,20,21,23,24,26

SIN2: DB 51,54,57,61,64,67,70,73,76,78,81,84,86 DB 88,90,92,94,96,97,98,100,100,101,102,102,102 DB 102,102,101,100,100,98,97,96,94,92,90,88,86 DB 84,81,78,76,73,70,67,64,61,57,54,51,48 DB 45,41,38,35,32,29,26,24,21,18,16,14,12 DB 10,8,6,5,4,2,2,1,0,0,0,0,0 DB 1,2,2,4,5,6,8,10,12,14,16,18,21 DB 24,26,29,32,35,38,41,45,48,51

SIN3: DB 76,81,86,90,95,99,104,108,113,117,121,124,128,131,135

DB 137,140,143,145,147,148,150,151,151,152,152,152,151,151,150 DB 148,147,145,143,140,137,135,131,128,124,121,117,113,108,104 DB 99,95,90,86,81,76,71,66,62,57,53,48,44,39,35 DB 31,28,24,21,17,15,12,9,7,5,4,2,1,1,0 DB 0,0,1,1,2,4,5,7,9,12,15,17,21,24,28

DB 31,35,39,44,48,53,57,62,66,71,76

SIN4: DB 102,108,115,121,127,134,140,145,151,157,162,167,172,176,181 DB 185,188,191,194,197,199,201,202,203,204,204,204,203,202,201 DB 199,197,194,191,188,185,181,176,172,167,162,157,151,145,140 DB 134,127,121,115,108,102,96,89,83,77,70,64,59,53,47 DB 42,37,32,28,23,19,16,13,10,7,5,3,2,1,0 DB 0,0,1,2,3,5,7,10,13,16,19,23,28,32,37 DB 42,47,53,59,64,70,77,83,89,96,102

SIN5: DB 127,135,143,151,159,166,174,181,188,195,202,208,214,220,225 DB 230,234,238,242,245,248,250,252,253,254,254,254,253,252,250 DB 248,245,242,238,234,230,225,220,214,208,202,195,188,181,174 DB 166,159,151,143,135,127,119,111,103,95,88,80,73,66,59 DB 52,46,40,34,29,24,20,16,12,9,6,4,2,1,0 DB 0,0,1,2,4,6,9,12,16,20,24,29,34,40,46 DB 52,59,66,73,80,88,95,103,111,119,127 end

因篇幅问题不能全部显示,请点此查看更多更全内容

Top