導航:首頁 > 操作系統 > 基於單片機簡易電子琴

基於單片機簡易電子琴

發布時間:2025-04-03 07:17:32

㈠ 高分求用8051單片機設計8按鍵電子琴

一、設計題目:
設計一簡易電子琴,要求能夠發出1、2、3、4、5、6、7等七個音符。
使用元件:AT89C51、LM324,喇叭,按鍵等

二、 設計目的
(1)能夠對電子電路、電子元器件、印製電路板等方面的知識有進一步的認識,獨立對其進行測試與檢查。
(2)熟悉8051單片機的內部結構和功能,合理使用其內部寄存器,能夠完成相關軟體編程設計工作。
(3)為實現預期功能,能夠對系統進行快速的調試,並能夠對出現的功能故障進行分析,及時修改相關軟硬體。
(4)對軟體編程、排錯調試、焊接技術、相關儀器設備的使用技能等方面得到較全面的鍛煉和提高。

三、系統硬體圖

原理:
(一) 音樂產生原理及硬體設計
由於一首音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的音樂了,當然對於單片機來產生不同的頻率非常方便,我們可以利用單片機的定時/計數器T0來產生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應頻率關系弄正確即可。
本次設計中單片機晶振為12MHZ,那麼定時器的計數周期為1MHZ,假如選擇工作方式1,那T值便為T= 216--5﹡105/相應的頻率 ,那麼根據不同的頻率計算出應該賦給定時器的計數值,列出不同音符與單片機計數T0相關的計數值如下表所示:
音符 頻率(HZ) 簡譜碼(T值)
中 1 DO 523 64580
中 2 RE 587 64684
中 3 M 659 64777
中 4 FA 698 64820
中 5 SO 784 64898
中 6 LA 880 64968
中 7 SI 988 65030

採用查表程序進行查表時,可以為這個音符建立一個表格,有助於單片機通過查表的方式來獲得相應的數據:
TABLE DW 64580,64684,64777,64820,64898,64968,65030

源程序:
方案一:產生按鍵音符
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP BREAK
MAIN: MOV TMOD,#01H ;設置定時器0的工作方式
SETB EA
SETB ET0 ; 設置定時器0中斷
SETB TR0 ; 啟動定時器0
WAIT1: LCALL KEY ; 調用KEY子程序,判斷有鍵按下否?第幾個鍵?
CLR EA ;屏蔽中斷
CJNE R3,#00H,WAIT1 ;如果R3=0,表示有鍵按下
MOV A,22H ;將22H里存放的按鍵號送給A
RL A ; 因為查表裡都是字,所以得乘2查得數據
MOV DPTR,#TABLE ;指向表頭
MOVC A,@A+DPTR ; 查表
MOV TH0,A ;將數據高位送TH0
MOV 21H,A ; 將高位備份
MOV A,22H ;將22H里存放的按鍵號送給A
RL A ;因為查表裡都是字,所以得乘2查得數據
INC A ;取低位數據
MOVC A,@A+DPTR
MOV TL0,A
MOV 20H,A
WAIT2: LCALL KEY
SETB EA
CJNE R3,#00H,WAIT1
JMP WAIT2
KEY: MOV R3,#00H ; KEY子程序,判斷有鍵按下否?第幾個鍵?
MOV R1,#0FFH
MOV R0,#00H
MOV A,R1
MOV P2,A
MOV A,P2
CLR C
CPL C ;利用標志位CY來判斷是哪個鍵按下
MOV R2,#08H
WAIT3: RLC A ;移位判斷
JNC STORE
INC R0
DJNZ R2,WAIT3
STORE: MOV 22H,R0 ; 將按鍵號存22H,R3=0有鍵按下
MOV R3,#00H
RET
BREAK: PUSH ACC ; 中斷產生方波,從P1.0口輸出
PUSH PSW
MOV TL0,20H
MOV TH0,21H
CPL P1.0
POP PSW
POP ACC
RETI
TABLE: DW 65030,64968,64898,64820,64777,64684,64580 ; 7,6,5,4,3,2,1
END
方案二:產生按鍵音符
ORG 0000H
SJMP START
ORG 000BH
AJMP INT_0
ORG 0030H
START: MOV P1,#00H
SETB EA
SETB ET0 ;計數器0
MOV TMOD,#02H
MOV TH1,#09CH
MOV TL1,#09CH ;定時器初植
CLR TR0 ;定時器不允許
SCAN: ;鍵盤掃描
MOV A,P2 ;判斷鍵盤按下,跳到SCAN_1,若未按,繼續掃描
CJNE A,#0FFH,SCAN_1
NOP
SJMP SCAN
SCAN_1:ACALL DELAY ;是不是真的要按下?如果是,則跳轉SU_KEY查詢是哪個按下?
MOV A,P2
CJNE A,#0FFH,SU_KEY
NOP
SJMP SCAN
SU_KEY:JNB P2.1,MU_1 ;判斷是哪個鍵按下?
JNB P2.2,MU_2
JNB P2.3,MU_3
JNB P2.4,MU_4
JNB P2.5,MU_5
JNB P2.6,MU_6
JNB P2.7,MU_7
SJMP SCAN
;R1信號周期
MU_1: MOV R1,#19 ;如果第一個按鍵按下,則R1=19,同時程序轉NEXT
SJMP NEXT
MU_2: MOV R1,#17
SJMP NEXT
MU_3: MOV R1,#15
SJMP NEXT
MU_4: MOV R1,#14
SJMP NEXT
MU_5: MOV R1,#13
SJMP NEXT
MU_6: MOV R1,#11
SJMP NEXT
MU_7: MOV R1,#10
SJMP NEXT
NEXT: MOV A,R1
MOV R0,A
SETB TR0 ;啟動定時器0
NEXT_1:MOV A,P2 ; 沒鍵按下繼續執行,有鍵按下,返回讀引腳
CJNE A,#0FFH,NEXT_1
ACALL DELAY
MOV A,P2 ;真的沒鍵按下?
CJNE A,#0FFH,NEXT_1
CLR TR0 ;不響
AJMP SCAN ;掃描鍵盤去
INT_0: ;中斷程序
DJNZ R0,RE ;R0不等於0時,返回
CPL P1.0
MOV A,R1
MOV R0,A
RE: RETI
DELAY:MOV R7,#100 ;延長時間等待,鍵盤消抖
D1: MOV R6,#10
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END

生日快樂歌:(擴展功能部分程序)

ORG 0000H
JMP MAIN
ORG 000BH
JMP TT0
MAIN: MOV TMOD,#01H ;設置定時器0工作方式
MOV IE,#82H ;設置中斷
MAIN0:MOV 30H,#00H
NEXT: MOV A,30H
MOV DPTR,#TABLE ;查表
MOVC A,@A+DPTR
MOV R2,A
JZ STOP
ANL A,0FH
MOV R5,A
MOV A,R2
SWAP A
ANL A,#0FH
JNZ SING
CLR TR0
JMP W1
SING: DEC A
MOV 22H,A
RL A
MOV DPTR,#TABLE1 ;查表
MOVC A,@A+DPTR
MOV TH0,A
MOV 21H,A
MOV A,22H
RL A
INC A
MOVC A,@A+DPTR
MOV TL0,A
MOV 20H,A
SETB TR0
W1: CALL DELAY
INC 30H
JMP NEXT
STOP: CLR TR0
JMP MAIN0
TT0: PUSH ACC ;中斷服務程序
PUSH PSW
MOV TL0,20H
MOV TH0,21H
CPL P1.0
POP PSW
POP ACC
RETI
DELAY:MOV R7,#2 ;延時187ms
W2: MOV R4,#187
W3: MOV R3,#248
DJNZ R3,$
DJNZ R4,W3
DJNZ R7,W2
DJNZ R5,DELAY
RET
TABLE1:DW 64260,64400,64524,64580 ;音符計數植
DW 64684,64777,64820,64898
DW 64968,65030,65058,65110
DW 65157,65178,65217

TABLE:DB 82H,01H,81H,94H,84H ;節拍表
DB 0B4H,0A4H,04H
DB 82H,01H,81H,94H,84H
DB 0C4H,0B4H,04H

DB 82H,01H,81H,0F4H,0D4H
DB 0B4H,0A4H,94H
DB 0E2H,01H,0E1H,0D4H,0B4H
DB 0C4H,0B4H,04H

DB 82H,01H,81H,94H,84H
DB 0B4H,0A4H,04H
DB 82H,01H,81H,94H,84H
DB 0C4H,0B4H,04H

DB 82H,01H,81H,0F4H,0D4H
DB 0B4H,0A4H,94H
DB 0E2H,01H,0E1H,0D4H,0B4H
DB 0C4H,0B4H,04H
DB 00H
END 謝謝希望採納

㈡ 單片機簡易電子琴程序

22. 電子琴
1. 實驗任務
(1. 由4X4組成16個按鈕矩陣,設計成16個音。
(2. 可隨意彈奏想要表達的音樂。
2. 電路原理圖

圖4.22.1
3. 系統板硬體連線
(1. 把「單片機系統」區域中的P1.0埠用導線連接到「音頻放大模塊」區域中的SPK IN埠上;
(2. 把「單片機系統「區域中的P3.0-P3.7埠用8芯排線連接到「4X4行列式鍵盤」區域中的C1-C4 R1-R4埠上;
4. 相關程序內容
(1. 4X4行列式鍵盤識別;
(2. 音樂產生的方法;
一首音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的音樂了,當然對於單片機來產生不同的頻率非常方便,我們可以利用單片機的定時/計數器T0來產生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應頻率關系弄正確即可。現在以單片機12MHZ晶振為例,例出高中低音符與單片機計數T0相關的計數值如下表所示
音符 頻率(HZ) 簡譜碼(T值) 音符 頻率(HZ) 簡譜碼(T值)
低1 DO 262 63628 # 4 FA# 740 64860
#1 DO# 277 63731 中 5 SO 784 64898
低2 RE 294 63835 # 5 SO# 831 64934
#2 RE# 311 63928 中 6 LA 880 64968
低 3 M 330 64021 # 6 932 64994
低 4 FA 349 64103 中 7 SI 988 65030
# 4 FA# 370 64185 高 1 DO 1046 65058
低 5 SO 392 64260 # 1 DO# 1109 65085
# 5 SO# 415 64331 高 2 RE 1175 65110
低 6 LA 440 64400 # 2 RE# 1245 65134
# 6 466 64463 高 3 M 1318 65157
低 7 SI 494 64524 高 4 FA 1397 65178
中 1 DO 523 64580 # 4 FA# 1480 65198
# 1 DO# 554 64633 高 5 SO 1568 65217
中 2 RE 587 64684 # 5 SO# 1661 65235
# 2 RE# 622 64732 高 6 LA 1760 65252
中 3 M 659 64777 # 6 1865 65268
中 4 FA 698 64820 高 7 SI 1967 65283
下面我們要為這個音符建立一個表格,有助於單片機通過查表的方式來獲得相應的數據
低音0-19之間,中音在20-39之間,高音在40-59之間
TABLE: DW 0,63628,63835,64021,64103,64260,64400,64524,0,0
DW 0,63731,63928,0,64185,64331,64463,0,0,0
DW 0,64580,64684,64777,64820,64898,64968,65030,0,0
DW 0,64633,64732,0,64860,64934,64994,0,0,0
DW 0,65058,65110,65157,65178,65217,65252,65283,0,0
DW 0,65085,65134,0,65198,65235,65268,0,0,0
DW 0
2、音樂的音拍,一個節拍為單位(C調)
曲調值 DELAY 曲調值 DELAY
調4/4 125ms 調4/4 62ms
調3/4 187ms 調3/4 94ms
調2/4 250ms 調2/4 125ms
對於不同的曲調我們也可以用單片機的另外一個定時/計數器來完成。
下面就用AT89S51單片機產生一首「生日快樂」歌曲來說明單片機如何產生的。
在這個程序中用到了兩個定時/計數器來完成的。其中T0用來產生音符頻率,T1用來產生音拍。
5. 程序框圖
貼不了.
7. C語言源程序
#include <AT89X51.H>
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
unsigned char temp;
unsigned char key;
unsigned char i,j;
unsigned char STH0;
unsigned char STL0;
unsigned int code tab[]={64021,64103,64260,64400,
64524,64580,64684,64777,
64820,64898,64968,65030,
65058,65110,65157,65178};

void main(void)
{
TMOD=0x01;
ET0=1;
EA=1;

while(1)
{
P3=0xff;
P3_4=0;
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=0;
break;
case 0x0d:
key=1;
break;
case 0x0b:
key=2;
break;
case 0x07:
key=3;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
}
TR0=0;
}
}

P3=0xff;
P3_5=0;
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=4;
break;
case 0x0d:
key=5;
break;
case 0x0b:
key=6;
break;
case 0x07:
key=7;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
}
TR0=0;
}
}

P3=0xff;
P3_6=0;
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=8;
break;
case 0x0d:
key=9;
break;
case 0x0b:
key=10;
break;
case 0x07:
key=11;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
}
TR0=0;
}
}

P3=0xff;
P3_7=0;
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=12;
break;
case 0x0d:
key=13;
break;
case 0x0b:
key=14;
break;
case 0x07:
key=15;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
}
TR0=0;
}
}
}
}

void t0(void) interrupt 1 using 0
{
TH0=STH0;
TL0=STL0;
P1_0=~P1_0;
}

根據自己的情況稍微改改就好了

㈢ 單片機 是什麼 有什麼用

單片計算機是將電子計算機的基本環節,如:CPU(又稱中央處理器,主要由運算器,控制器組成),存儲器,匯流排,輸入輸出介面等,採用集成電路技術集成在一片硅基片上.由於單片計算機體積很小(僅手指般大小),功能強(具有一個簡單計算機的功能),因而廣泛用於電子設備中作控制器之用.目前,大到導彈火箭國防尖端武器,小至電視機微波爐等現代家用電器,內中都毫無例外地運用單片計算機作為控制器.因此,從控制的觀點,我們也常稱它為單片微控制器.
單片機工作離不開軟體,即固化在存儲器中的已設計好的程序.所有帶單片的電子設備,它的工作原理當然與具體設備有關.但它的最基本的原理是一樣的,即:
1) 從輸入介面接收來自外界的信息存入存儲器.
這些信息主要包括二部分:來自諸如溫度壓力等感測器的信息;
來自人工干預的一些手動信息,如開關按鈕等操作.
2) 單片機中的CPU根椐程序對輸入的數椐進行高速運算
處理.
3) 將運算處理的結果通過輸出介面送去控制執行機構,如繼電器,電機,燈泡等.
當前這個過程不斷重復著,即系統中的微電腦不斷監視著各種信息,並及時作出不同的處理使系統正常運行..

閱讀全文

與基於單片機簡易電子琴相關的資料

熱點內容
可以如何投訴京東伺服器 瀏覽:196
android游戲開發路線 瀏覽:902
在app上怎麼看到全部卡號 瀏覽:230
vue編譯最後才出文件 瀏覽:951
北京伺服器負載均衡品牌雲空間 瀏覽:981
暗黑3如何登錄台灣伺服器 瀏覽:896
叮叮店這樣的app怎麼做的 瀏覽:117
如何在蘋果官網查看購買的app 瀏覽:82
水印寶APP如何保存下載的視頻 瀏覽:624
要不要招年齡大的程序員 瀏覽:28
stk單片機 瀏覽:402
51單片機控制直流電機正反轉 瀏覽:112
免費優盤加密軟體 瀏覽:354
編譯優化柵欄同步 瀏覽:469
飛機姿態控制演算法 瀏覽:232
交換機配置web命令 瀏覽:243
python實現介面請求及封裝 瀏覽:696
折騰python中的tkinter 瀏覽:393
面試pdf下載 瀏覽:1004
壓縮包去掉密碼 瀏覽:704