利用MAXQ3210產生壓電信號
通過改變循環計數器LC[0]裝載的數值來改變輸出頻率(對應于產生的音符)。通過改變循環計數器LC[1]裝載的數值來改變音符持續時間。把這些代碼打包到一個簡單宏中,定義幾個常數,就很容易產生播放一小段音樂的代碼。
本文引用地址:http://www.104case.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
評論