维修网

 找回密码
 注册

QQ登录

只需一步,快速开始

微信扫码 , 快速开始

查看: 656|回复: 7

我制作的函数发生器

[复制链接]

classn_11

发表于 2010-2-23 22:17:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
我制作的低频函数发生器,可以实现1~20K步进1HZ可调,可以有正弦波,方波,三角波,任意波形.只要把波形数据存在2864存储器中即可.8个数码管显示,16个按键控制.并且自己制作了一个波形数据产生器,希望与大家共享!
: M2 p8 n$ n6 e, d: p/ ]. o2 X- x& M$ R# u8 p1 v( {- {. h4 [9 F
0264eb9c.jpg 1 i. t" k& f5 M( M0 g

0 f3 ~& t5 b4 D2 f& q7 _ 55f97f63.jpg ; ~% y2 j# F4 o9 m, ?7 D
, f% i5 D$ X2 T! S6 f! P  S
67a6d7dc.rar (6.23 KB, 下载次数: 2)

点评

技术: 3.0
技术: 3
技术文章  发表于 2011-5-9 11:41

手机扫码浏览

classn_11

 楼主| 发表于 2010-2-23 22:17:39 | 显示全部楼层
BIT_COUNT DATA 7FH ;2005.5.17.我的硬件 Write By ClimberWinTIMER DATA 7EHTIMER1 DATA 7DHTEN DATA 7CHDATA_IN DATA 20HDATA_OUT DATA 21H  S& Z; R" e0 M, N( w) _
8 K9 @( ^  R, x
SMG6 DATA 50H ;数码管值所存的地址SMG5 DATA 51HSMG4 DATA 52HSMG3 DATA 53H;****************TEN0 DATA 40H ;TEN1 DATA 41HTEN2 DATA 42HTEN3 DATA 43H
6 e) a2 c) I+ L: r6 R9 h4 g8 q9 `- g( i5 A5 M% R6 M6 M$ `
;*************** ;R4 R5 R6 R7分别存数码管数据DAT BIT P2.2KEY BIT P2.1CS BIT P2.4CLK BIT P2.3 ;;;;;;;;;;;;;;;;A0 EQU P1.5A1 EQU P1.4CS1 EQU P1.3WR EQU P1.1RD EQU P1.2;;;;;;;;;;;;;;;;;;A8 EQU P1.6A9 EQU P1.7
  n) p. C! i  R' o5 ~0 b! \
. w% i) D0 k. @ ORG 00H JMP ST ORG 13H JMP INT1ST: MOV IE, #10000100B ;设置INT0中断使能 MOV TCON,#00000000B ;设置中断为电平触发 MOV TMOD,#01010000B MOV SMG3,#00H MOV SMG4,#00H MOV SMG5,#00H MOV SMG6,#00H MOV 27H,#20H ;计数器低8位 MOV 28H,#03H ;计数器高8位 JMP START MOV R0,#00H MOV R6,#00H MOV 2DH,#03H ;波形选择 MOV 70H,#01H MOV 54H,#00H ;用于确定,让调节的不再闪动。0AH这个键控制(80H是P0口
$ G# h8 X5 }1 W. U, q7 `: @' |0 z- r  @% F( `/ r2 m0 K
MOV 21H,#20H ;设置8254的计数器值 ;计数器1 MOV 3FH,#00H MOV 22H,#4EH CALL MODE1 ;计数器0 NOP MOV 27H,#20H CALL MODE2 ;计数器1
4 v/ ~0 j6 d) q0 N4 s* |7 N' g
' L- b1 o0 I* ], `: SSTART: MOV SP,#2FH ; ; CLR P2.2 ;A10 ;CLR P2.3 ;A11 ; CLR P2.4 ;A12 CLR A8 CLR A9 CLR DAT CLR CLK MOV TIMER,#50 ;ST_DELAY: MOV TIMER1,#255ST_DELAY1JNZ TIMER1,ST_DELAY1 DJNZ TIMER,ST_DELAY MOV DATA_OUT,#10100100B ; 清屏 CALL SEND;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8 S4 p# t; v6 {  @" L( t
+ o' K8 C. _0 B7 j8 D
;******************************************** MOV DATA_OUT,#10000001B ;显示 ".HZ."* CALL SEND ;H ;* MOV DATA_OUT,#0CH ;* CALL SEND ;* ;++++++++++++++++++++++++++++++ ;* MOV DATA_OUT,#10000000B ;* CALL SEND ;* MOV DATA_OUT,#82H ; Z ;* CALL SEND ;*;++++++++++++++++++++++++++++++ ;* MOV DATA_OUT,#10000010B ;.点亮小数点;* CALL SEND ;* MOV DATA_OUT,#10001111B ;* CALL SEND ;*;++++++++++++++++++++++++++++++ ;* ;用个定时器就可以让小数点一闪一闪了;********************************************* ;MOV DATA_OUT,#98H ;这里的7位消隐 ;CALL SEND ; MOV DATA_OUT,#11111101B ; CALL SEND SETB CS;*********************************************MAIN: JB KEY,$ ;
9 v- x" G! c# b4 w+ `3 f) c9 A6 m+ g. X& V7 ?/ S3 U
CLR A MOV DATA_OUT,#15H ; 键盘读取指令 CALL SEND CALL RECEIVE SETB CS MOV A,DATA_IN MOV R0,#00H ;用来测试按键的对应值 MOV R0,A ;;;;;;;;;;;;;;;;;;;;;;;;; ;键值编码 CALL JUDGE CJNE A,#05H,LL MOV DATA_OUT,#0A4H ; 清屏 CALL SEND JMP START ;;;;;;;;;;;;;;;;;;;;;;;LL: MOV A,70H CJNE A,#01,L1 ;判断哪个数码管显示 JMP SM3L1: CJNE A,#02,L2 JMP SM4L2: CJNE A,#03,L3 JMP SM5L3: CJNE A,#04,L4 JMP SM6L4: CJNE A,#05,L5L5: MOV 70H,#01H% E4 h0 K( t0 ^  y' n; S

4 a- y6 q8 |0 n0 [7 M. MSM3: MOV DATA_OUT,#10000010B ;数码管3的值存在SMG3地址中 CALL SEND MOV SMG3 ,TEN MOV R4,TEN MOV DATA_OUT,SMG3 MOV TEN ,SMG3 ;取的值存回TEN种,对进位,减位时有用 CALL SEND ;////////////////////////// MOV A,54H CJNE A,#00H,SD MOV DATA_OUT,#88H ;闪动程序 CALL SEND MOV DATA_OUT,#11111011B CALL SEND JMP KK
1 I; O" |# R) m9 N" F0 t$ S1 a2 Z* J+ s  n% D# e& P
SD: CALL NOSD ;调用不闪动子程序 JMP KK ;;;;;;;;;;;
$ V( {& q' K( @
* C- s, ?3 f9 a+ c- sSM4: MOV DATA_OUT,#10000011B CALL SEND MOV SMG4 ,TEN ;数码管4的值存在SMG4地址中 MOV R5,TEN MOV DATA_OUT,SMG4 MOV TEN ,SMG4 CALL SEND ;////////////////////////// MOV A,54H ;用50H的地址值来判断是否抖动显示 CJNE A,#00H,SD ;#00H就抖动程序,#01H就跳到不抖动的程序 MOV DATA_OUT,#88H CALL SEND MOV DATA_OUT,#11110111B CALL SEND JMP KKSM5: MOV DATA_OUT,#10000100B CALL SEND MOV SMG5 ,TEN ;数码管5的值存在SMG5地址中 MOV R6,TEN MOV DATA_OUT,SMG5 MOV TEN ,SMG5 CALL SEND ;/////////////////////// MOV A,54H CJNE A,#00H,SD ;判断是否选择抖动显示程序 MOV DATA_OUT,#88H CALL SEND MOV DATA_OUT,#11101111B CALL SEND JMP KKSM6: MOV DATA_OUT,#10000101B CALL SEND MOV SMG6 ,TEN ;数码管5的值存在SMG5地址中 MOV R7,TEN MOV A,SMG6 ;********************** ADD A,#10000000B ;数码管6的小数点的显示* MOV SMG6,A ;********************** MOV DATA_OUT,SMG6 ANL A,#01111111B MOV SMG6,A MOV TEN ,SMG6 CALL SEND ;/////////////////// ;9 b' K. }+ B: W# L
  A& ^7 j) e- }% |* h* ~
;;;;;;;;;;;;;;;;;;;;;; MOV A,54H CJNE A,#00H,SD MOV DATA_OUT,#88H CALL SEND MOV DATA_OUT,#11011111B CALL SEND
7 H7 w2 K+ u% F# x0 ]& x* @2 f0 _6 o6 w  X9 K/ Q* B
JMP KKKK: SETB CSWAIT: JNB KEY,WAIT ; JMP MAIN;*******************************************
# A. c) f$ e1 U$ n( Q3 W1 e5 o6 g- I
- y. Z. E  v2 _% a! r, h) g; G;*******************************************SEND: MOV BIT_COUNT,#8 ; ;****;LED显示的发送子程序 CLR CS ;**** CALL LDELAY ;****SEND_LOOP: MOV C,DATA_OUT.7 ;**** MOV DAT,C ;**** SETB CLK ;**** MOV A,DATA_OUT ;**** RL A ;**** MOV DATA_OUT,A ;**** CALL SDELAY ;**** CLR CLK ;**** CALL SDELAY ;**** DJNZ BIT_COUNT,SEND_LOOP ;**** CLR DAT ;**** RET ;****;*******************************************
2 \* V- G$ T$ A) T, f. _
  R& {/ D& l* e;*******************************************RECEIVE: MOV BIT_COUNT,#8 ; 按键值接收指令 SETB DAT ; CALL LDELAY ;RECEIVE_LOOP: SETB CLK ; CALL SDELAY ; MOV A,DATA_IN ; RL A ; MOV DATA_IN,A ; MOV C,DAT ; MOV DATA_IN.0,C ; CLR CLK ; CALL SDELAY ; DJNZ BIT_COUNT,RECEIVE_LOOP CLR DAT RET ;;*******************************************JUDGE: CJNE A,#02H,NEXT1 ;按键值的对应设置,即各个按键的功能 MOV TEN,#00H JMP OUTNEXT1: CJNE A,#0BH,NEXT2 MOV TEN,#01H JMP OUTNEXT2: CJNE A,#0AH,NEXT3 MOV TEN,#02H JMP OUTNEXT3: CJNE A,#09H,NEXT4 ;;; MOV TEN,#03H JMP OUTNEXT4: CJNE A,#08H,NEXT5 MOV TEN,#04H JMP OUT ;*******************************NEXT5: CJNE A,#0FH,NEXT6 ;* 键盘对应值 * MOV TEN,#05H ;*0B 0A 09 08 ; 0D 0C 0D 0C JMP OUT ;*03 02 01 00*NEXT6: CJNE A,#0EH,NEXT7 ; 07 06 05 04******************* MOV TEN,#06H JMP OUTNEXT7: CJNE A,#0DH,NEXT8 MOV TEN,#07H JMP OUTNEXT8: CJNE A,#0CH,NEXT9 MOV TEN,#08H JMP OUTNEXT9: CJNE A,#03H,NEXT10 MOV TEN,#09H JMP

classn_11

 楼主| 发表于 2010-2-23 22:17:39 | 显示全部楼层
OUTNEXT10: CJNE A,#06H,NEXT11 MOV TEN,#00H ;切换后后一位数码管显示0 INC 70H ;选择数码管,数码管的切换 JMP OUTNEXT11: CJNE A,#04H,NEXT12 ;确定按钮,按好后数码管不闪动了。 ;************* MOV A,R5 ;** MOV B,#10 ;** MUL AB ;** MOV R3,A ;** ;低2位数值 MOV A,R3 ;** ADD A,R4 ;** CALL CHANGE;* MOV 27H,A ;** ;************ MOV R1,A ;调试用,即高2位放到R1 ;************ MOV A,R7 ;** MOV B,#10 ;** MUL AB ;** MOV R3,A ;** ;高2位数值 MOV A,R3 ;** ADD A,R6 ;** CALL CHANGE;* MOV 28H,A ;** ;************ MOV R2,A ;调试用,即低2位放到R1 CALL MODE2 ;;; ;;;;;;;;;;;;;; MOV A,54H CJNE A,#01H,WIN MOV 54H,#00H JMP OUTWIN: MOV 54H,#01H JMP OUTNEXT12: CJNE A,#01H,NEXT13 INC 27H ;设计计数器INC MOV A,27H CJNE A ,#255,LATER MOV 27H,#01LATER: CALL MODE2 INC TEN ;数码管计数增加 MOV A,TEN CJNE A,#0AH,S1 MOV TEN, #00HS1: MOV A,#01H ;因为跳出此子程序后有个判断A的一个程序,当A为#05的时候清零。 JMP OUT ;所以不加这条指令会产生计数到5的时候屏幕清零这个结果。NEXT13: CJNE A,#00H,NEXT14 DEC 27H ;设计计数器DEC MOV A,27H CJNE A ,#01,LATER1 MOV 27H,#255LATER1: CALL MODE2" [& }- H! P7 s2 r$ o$ n2 q; w
; W- V2 H, W5 ]% v$ H- P
DEC TEN ;数码管计数减少 MOV A,TEN CJNE A,#0FFH,S2 MOV TEN, #09H
) Q+ V$ I- e1 p
; b% R/ O& |* Z+ o3 X' iS2: MOV A,#00H JMP OUTOUT: RET
" L5 F! N" @$ _0 C! f8 t* {5 w% l
2 {4 f# X# }" s+ P* G5 X/ ~' qNEXT14: CJNE A,#11H,NEXT15 ;填写数码管功能 JMP OUTNEXT15: CJNE A,#12H,NEXT16 INC TEN ;数码管计数增加 MOV A,TEN CJNE A,#0AH,OUT MOV TEN, #00H" @9 O1 ?- ^$ K2 \# V
0 g1 g3 E1 [, ]' c* ^" n
JMP OUTNEXT16: CJNE A,#13H,NEXT17 DEC TEN ;数码管计数减少 MOV A,TEN CJNE A,#0FFH,OUT MOV TEN, #09H JMP OUTNEXT17: CJNE A,#11H,NEXT18 ;填写数码管功能 JMP OUTNEXT18: CJNE A,#07H,NEXT19 INC 2DH MOV A,2DH CJNE A,#00,BOXIN1 JMP WAVEA
( H8 [$ i6 G6 D& W. E; M
( ?, u) d5 t  c' {2 w+ ?BOXIN1: CJNE A,#01,BOXIN2 JMP WAVEB
4 G4 N: X+ ?$ v" G  L5 `* E$ _9 B+ {# o! |! H7 d
BOXIN2: CJNE A,#02,BOXIN3 JMP WAVEC
7 s" A0 g. r6 G3 C! e" p! l6 ]9 ^  |% @1 S# C6 F! l
BOXIN3: CJNE A,#03,BOXIN4 JMP WAVEDBOXIN4: MOV 2DH,#00HWAVEA: CALL WAVE1 JMP OUTWAVEB: CALL WAVE2 JMP OUTWAVEC: CALL WAVE3 JMP OUTWAVED: CALL WAVE4 JMP OUTNEXT19: CJNE A,#13H,OUT ;填写数码管功能 JMP OUT
6 [* H" S# t" l5 B; R2 T! |& j6 N, V, d
OUTE: RET;88888888888888888888888888888888888888888NOSD: MOV DATA_OUT,#88H ;不闪动程序 CALL SEND MOV DATA_OUT,#11111111B CALL SEND RET  P8 Y$ ^6 m' Y% j, l2 W8 z  @& ~' |4 y

; e4 Q( }, D7 i9 j; C; v6 ~& X;*******************************************;*******************************************LDELAY: MOV TIMER,#25 ; 50uSDLOOP: DJNZ TIMER,DLOOP RETSDELAY: MOV TIMER,#4 ; 8uSSLP: DJNZ TIMER,SLP RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

classn_11

 楼主| 发表于 2010-2-23 22:17:39 | 显示全部楼层
;8254计数器部分子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WORD: CLR CS1 SETB RD CLR WR SETB A1 SETB A0 RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;TIME0: CLR CS1 SETB RD SETB WR CLR A1 CLR A0 CLR WR RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;TIME1: CLR CS SETB RD SETB WR CLR A1 SETB A0 CLR WR RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;TIME2: CLR CS SETB RD SETB WR CLR A0 SETB A1 CLR WR RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MODE1: CALL WORD MOV A, #00110110B CALL CONVERT MOV P0, A NOP CALL TIME0 MOV A,21H CALL CONVERT MOV P0,A SETB WR NOP CLR WR MOV A,22H CALL CONVERT MOV P0,A SETB WR RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MODE2: CALL WORD MOV A,#01110111B CALL CONVERT MOV P0,A CALL TIME1 MOV A,27H CALL CONVERT MOV P0,A SETB WR NOP CLR WR MOV A,28H CALL CONVERT MOV P0,A SETB WR RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MODE3: CALL WORD ;MOV P0,#10110111B ;先低后高16位10进制计数器 ; CALL TIME2 ; MOV P0,27H ; SETB WR ; NOP ; CLR WR ; MOV P0,28H ; SETB WR ;RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CHANGE: ;例:把"#30H" 转化为 "#48H" ;;; MOV B,#10 ;;; DIV AB ;;; SWAP A ;;; MOV @R0,B ;;; XCHD A,@R0 ;;; RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAVE1: ;************************************** MOV DATA_OUT,#10010111B ;"* CALL SEND ;* MOV DATA_OUT,#01000000B ;* CALL SEND ;* CLR A9 ;选择存储器件地址 ;* CLR A8 ;* ;++++++++++++++++++++++++++++++ ;* RETWAVE2: ;************************************** MOV DATA_OUT,#10010111B ;"* CALL SEND ;* MOV DATA_OUT,#01000001B ;* CALL SEND ;* CLR A9 ;* SETB A8 ;* ;++++++++++++++++++++++++++++++ ;* RETWAVE3: ;************************************** MOV DATA_OUT,#10010111B ;"* CALL SEND ;* MOV DATA_OUT,#01001001B ;* CALL SEND ;* SETB A9 ;* CLR A8 ;* ;++++++++++++++++++++++++++++++ ;* RETWAVE4: ;************************************** MOV DATA_OUT,#10010111B ;"* CALL SEND ;* MOV DATA_OUT,#00011101B ;* CALL SEND ;* SETB A9 ;* SETB A8 ;* ;++++++++++++++++++++++++++++++ ;* RETCONVERT: MOV R5,#08H MOV 2FH,#00H CLR C S:RLC A ;A MOV 2EH,A; MOV A,2FH RRC A MOV 2FH,A MOV A,2EH DJNZ R5, S MOV A,2FH RETINT1: ;; PUSH ACC ;; PUSH PSW ;;XX: JB P3.3,$ ;消除抖动 ;; CALL SDELAY ;; JNB P3.3,XX ;; INC 27H CALL MODE2 INC 3FH MOV A,3FH CJNE A,#01H,MK1 CLR A9 SETB A8 JMP OUT1 MK1: CJNE A,#02H,MK2 SETB A9 CLR A8 JMP OUT1 MK2: MOV 3FH,#00H CLR A9 CLR A8 JMP OUT1OUT1: POP PSW ;; POP ACC ;; RETI ;; % _, F5 l  k9 p* G/ [/ I

5 i! ~! O5 a, s  h9 N3 h END

classn_11

发表于 2010-2-23 22:17:40 | 显示全部楼层
我顶了 正需要呢

classn_11

发表于 2010-2-23 22:17:42 | 显示全部楼层
楼主,谢谢你了,能能否把你的这个发到我的邮箱嘛,我参考哈,做个课程设计,谢谢你了,r568@yahoo.com.cn 帮我指导哈嘛,谢谢你了。

classn_11

发表于 2010-2-23 22:17:42 | 显示全部楼层
下载了呢。谢谢了
  • ta_mind
    开心
    2018-6-13 17:58
  • classn_01: 270 classn_02

    [LV.8]以坛为家I

    发表于 2011-5-9 11:41:14 | 显示全部楼层
    技术文章
    *滑块验证:
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|申请友链|手机版|小黑屋|最新贴|维修网 ( 粤ICP备09047344号

    GMT+8, 2024-4-27 23:53 , Processed in 0.263862 second(s), 37 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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