利用MAXQ3210产生压电信号
通过改变循环计数器LC[0]装载的数值来改变输出频率(对应于产生的音符)。通过改变循环计数器LC[1]装载的数值来改变音符持续时间。把这些代码打包到一个简单宏中,定义几个常数,就很容易产生播放一小段音乐的代码。
本文引用地址://m.amcfsurvey.com/article/179206.htm#define NOTE_C 261#define NOTE_C_SH 277#define NOTE_D_FL 277#define NOTE_D 294#define NOTE_D_SH 311#define NOTE_E_FL 311#define NOTE_E 330#define NOTE_F 349#define NOTE_F_SH 370#define NOTE_G_FL 370#define NOTE_G 392#define EIGHTH 1 ; 120 beats per minute, 4/4 time#define QUARTER 2 ; 120 beats per minute, 4/4 time#define QUARTERDOT 3 ; 120 beats per minute, 4/4 time#define HALF 4 ; 120 beats per minute, 4/4 time#define WHOLE 8 ; 120 beats per minute, 4/4 timeplay macro note, durationlocal L1, L2move HRNC, #1move LC[1], #(note * duration / 8)L1:move PO0.0, #1 ; Switch output high.move LC[0], #(1785000 / note)djnz LC[0], $ ; Decrement and jump, if not zero, to current ; instruction.move PO0.0, #0 ; Switch output low.move LC[0], #(1785000 / note)djnz LC[0], $ ; Decrement and jump, if not zero, to current ; instruction.djnz LC[1], L1 ; Decrement and jump, if not zero, to top of loop.move HRNC, #1move LC[1], #50 ; 50ms of silenceL2:move LC[0], #3570 ; 1ms (inner loop) djnz LC[0], $djnz LC[1], L2endm
评论