单片机 电子琴设计 八个声调 三首歌 歌词显示[新版]
系统功能说明:
1、通过八个按键是否按下发出相应的1234567i这8个音调 2、实验中可以播放三首歌曲,通过开关控制 3、播放歌曲时,液晶屏显示播放歌曲号及歌词
附录1:晶振为12M的音乐频率表
音符 频率(Hz) 简谱码(T值)
低1DO 262 63628 TH0=F7H TL0=24H ,1DO# 277 63731 TH0=F8H TL0=F3H 低2RE 294 63835 TH0=F9H TL0=5BH
311 63928 TH0=F9H TL0=B8H ,2RE,
低3M 330 64021 TH0=FAH TL0=15H 低4FA 349 64103 TH0=FAH TL0=67H ,4FA, 370 64185 TH0=FAH TL0=B9H 低5SO 392 64260 TH0=FBH TL0=04H ,5SO, 415 64331 TH0=FBH TL0=4BH 低6LA 440 64400 TH0=FBH TL0=90H ,6 466 64463 TH0=FBH TL0=CFH 低7SI 494 64524 TH0=FCH TL0=0CH 中1DO 523 64580 TH0=FCH TL0=44H ,1DO# 554 64633 TH0=FCH TL0=79H 中2RE 587 64684 TH0=FCH TL0=ACH ,2RE, 622 64732 TH0=FCH TL0=DCH 中3M 659 64777 TH0=FDH TL0=09H
中4FA 698 64820 TH0=FDH TL0=34H
,4FA, 740 64860 TH0=FDH TL0=5CH 中5SO 784 64898 TH0=FDH TL0=82H ,5SO, 831 64934 TH0=FDH TL0=A6H 中6LA 880 64968 TH0=FDH TL0=C8H ,6 932 64994 TH0=FDH TL0=E2H 中7SI 988 65030 TH0=FEH TL0=06H 高1DO 1046 65058 TH0=FEH TL0=22H ,1DO, 1109 65085 TH0=FEH TL0=3DH 高2RE 1175 65110 TH0=FEH TL0=56H ,2RE, 1245 65134 TH0=FEH TL0=6EH 高3M 1318 65157 TH0=FEH TL0=85H 高4FA 1397 65178 TH0=FEH TL0=9AH ,4FA# 1480 65198 TH0=FEH TL0=AEH 高5SO 1568 65217 TH0=FEH TL0=C1H ,5SO, 1661 65235 TH0=FEH TL0=D3H 高6LA 1760 65252 TH0=FEH TL0=E4H ,6 1865 65268 TH0=FEH TL0=F4H 高7SI 1967 65283 TH0=FFH TL0=03H 休止符用TH0=FFH ,TL0=FFH表示
附录2:LCD相关资料
两行液晶显示的地址:(均为十六位计数)
0 1 2 3 4 5 6 7 8 9 A B C D E F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 命令格式要求,设置地址指针的时候第8位为1,后边为地址,即AC0~AC6,就是对应上表
的地址。
附录3:实验程序:
RS BIT P2.0 ;定义液晶显示端口标号
RW BIT P2.1
E BIT P2.2
;********************************************
T0TH EQU 24H ;T0两个暂存变量
T0TL EQU 23H
ORG 0000H
LJMP INITION
ORG 000BH
LJMP T0INT
ORG 0100H
;********************************************
;*************************液晶初始化****************** INITION:
MOV SP,#70H
MOV P0,#01H ;清屏
CALL ENABLE
MOV P0,#38H ;8位,2行显示
CALL ENABLE
MOV P0,#0CH ;屏显on,关光标 CALL ENABLE
MOV P0,#06H ;计数地址加1,自动右移 CALL ENABLE
;****************************************** ;开机提示
;****************************************** MOV P0,#80H
CALL ENABLE
MOV DPTR,#TABLE0 ;写数据的第一行 CALL WRITE1
MOV P0,#00010000B ;光标左移两位 CALL ENABLE
MOV P0,#00010000B
CALL ENABLE
CALL DEL0
LJMP MAIN
;*********************************************写指令
ENABLE:
CLR RS
CLR RW
SETB E
CALL DEL0
CLR E
RET
;**********************************************写数据
WRITE1:
MOV R1,#00H ;查表程序,从表头到表尾 A1:
MOV A,R1
MOVC A,@A+DPTR
CALL WRITE2
INC R1
CJNE A,#00H,A1 ;未到字符串末尾继续 RET
WRITE2:
MOV P0,A ;直接将数据写入液晶屏 SETB RS
CLR RW
SETB E
CALL DEL0
CLR E
RET
DEL0:MOV R4,#020H
C0:MOV R5,#020H
C1: DJNZ R5,C1
DJNZ R4,C0
RET
;****************************************** TABLE0:DB 'WELCOM HERE',00H ;*************************内存初始化******************
INITIAL:
MOV R3,#08H
MOV R0,#30H
M1:
MOV @R0,#00H
INC R0
DJNZ R3,M1
RET
;*************************选择按键播放八个音调******************
MAIN: MOV SP,#80H ;初始化堆栈
MOV TMOD,#11H ;定时器0工作方式0,定时器1工作方式0
SETB EA
SETB ET0 ;计数器0允许
SETB ET1 ;计数器1允许
START: SETB P3.7 ;关蜂鸣器
CLR TR0 ;定时器不允许 SCAN: ;键盘扫描
MOV A,P1
CJNE A,#0FFH,SU_KEY ;判断键盘按下,跳到SU_KEY,若未按,继续扫描
NOP
LJMP SCAN
SU_KEY:
SU_KEY1:
JB P1.0,SU_KEY2 ;如果不是第1个键按下,转
MOV DPH,#0FCH
MOV DPL,#44H
SJMP PLAY
SU_KEY2:
JB P1.1,SU_KEY3 ;如果不是第2个键按下,转
MOV DPH,#0FCH
MOV DPL,#0ACH
SJMP PLAY
SU_KEY3:
JB P1.2,SU_KEY4 ;如果不是第3个键按下,转
MOV DPH,#0FDH
MOV DPL,#09H
SJMP PLAY
SU_KEY4:
JB P1.3,SU_KEY5 ;如果不是第4个键按下,转
MOV DPH,#0FDH
MOV DPL,#34H
SJMP PLAY
SU_KEY5:
JB P1.4,SU_KEY6 ;如果不是第5个键按下,转
MOV DPH,#0FDH
MOV DPL,#82H
SJMP PLAY
SU_KEY6:
JB P1.5,SU_KEY7 ;如果不是第6个键按下,转
MOV DPH,#0FDH
MOV DPL,#0C8H
SJMP PLAY
SU_KEY7:
JB P1.6,SU_KEY8 ;如果不是第7个键按下,转
MOV DPH,#0FEH
MOV DPL,#06H
SJMP PLAY
SU_KEY8:
JB P1.7,KEY1 ;如果不是第8个键按下,转
MOV DPH,#0FEH
MOV DPL,#22H
SJMP PLAY
PLAY:
MOV T0TH,DPH ;存高位字符
MOV T0TL,DPL ;存低位字符
MOV TH0,T0TH
MOV TL0,T0TL
SETB TR0 ;启动定时器0
MOV R2,#01B ;1/4拍
DJNZ R2,PLAY
LCALL DELAY
SJMP JUDGE
JUDGE:
JB P2.4,START ;按键未按下,则继续扫描,否则,开始放音乐
;*************************选择按键播放音乐****************** KEY1:
JB P2.5,KEY2 ;第一个键(P2.5)按下,放音音乐1
MOV R2,#00H
LCALL MODD ;歌曲号显示
MOV DPTR,#MU_TAB1
AJMP MUSIC
KEY2:
JB P2.6,KEY3 ;第二个键(P2.6)按下,放音乐2
MOV R2,#01H
LCALL MODD ;歌曲号显示
MOV DPTR,#MU_TAB2
AJMP MUSIC
KEY3:
JB P2.7, NEXT_2 ;第三个键(P2.7)按下,放音乐3
MOV R2,#02H
LCALL MODD ;歌曲号显示
MOV DPTR,#MU_TAB3
AJMP MUSIC
NEXT_2: LJMP START ;返回
MUSIC:
MOV TMOD,#01H
MOV IE,#82H ;允许T0中断
MOV R7,#00H
LOOP:
CLR A
MOVC A,@A+DPTR ;查表取代码
MOV R1,A ;定时器高八位存R1
INC DPTR
PUSH DPH ;保护现场
PUSH DPL
GECI1:
JB P2.5,GECI2 ;第一个键(P2.5)按下,显示歌词1
MOV DPTR,#GE1
AJMP GECI
GECI2:
JB P2.6,GECI3 ;第二个键(P2.6)按下,显示歌词2
MOV DPTR,#GE2
AJMP GECI
GECI3:
JB P2.7, TIAOCHU ;第三个键(P2.7)按下,显示歌词3
MOV DPTR,#GE3
AJMP GECI
TIAOCHU:LJMP START
GECI:
LCALL QINGCHU
MOV P0,#0C0H ;显示的位置
CALL ENABLE
XIANSHI1: MOV A,R7 ;查表取音乐汉语拼音显示
MOVC A,@A+DPTR
CALL WRITE2
INC R7
CJNE A,#00H,XIANSHI1
MOV P0,#00010000B ;将光标左移一位
CALL ENABLE
MOV P0,#00010000B ;将光标左移一位
CALL ENABLE
POP DPL
POP DPH
CLR A
MOVC A,@A+DPTR
MOV R0,A ;定时器低八位存R0
ORL A,R1
JZ NEXT0 ;相或结果全0为休止符
MOV A,R0
ANL A,R1
CJNE A,#0FFH,NEXT ;相与结果为0FFH表示乐曲结束
MOV P0,#01H ;清屏
CALL ENABLE
LJMP INITION ;从头开始演奏
NEXT: MOV T0TH,R1 ;装定时初值
MOV TH0,T0TH
MOV T0TL,R0
MOV TL0,T0TL
SETB TR0 ;启动定时器
SJMP NEXT1
NEXT0: CLR TR0 ;关闭定时器 NEXT1: CLR A
INC DPTR
MOVC A,@A+DPTR ;查延时常数
MOV R2,A
LOOP1:
ACALL D200
DJNZ R2,LOOP1 ;控制延时次数
INC DPTR
AJMP LOOP
D200: MOV R3,#81H ;延时程序 D200B: MOV A,#0FFH
D200A: DEC A
JNZ D200A
DEC R3
CJNE R3,#00H,D200B
RET
QINGCHU:MOV A,#00100000B
MOV P0,#0C0H ;将第二行的第一位置0
LCALL ENABLE
LCALL WRITE2
MOV A,#00100000B ;将第二行的第二位置0
MOV P0,#0C1H
LCALL ENABLE
LCALL WRITE2
MOV A,#00100000B ;将第二行的第三位置0
MOV P0,#0C2H
LCALL ENABLE
LCALL WRITE2
MOV A,#00100000B ;将第二行的第四位置0
MOV P0,#0C3H
LCALL ENABLE
LCALL WRITE2
MOV A,#00100000B ;将第二行的第五位置0
MOV P0,#0C4H
LCALL ENABLE
LCALL WRITE2
MOV A,#00100000B ;将第二行的第六位置0
MOV P0,#0C5H
LCALL ENABLE
LCALL WRITE2
MOV A,#00100000B ;将第二行的第七位置0
MOV P0,#0C6H
LCALL ENABLE
LCALL WRITE2 ;将第二行的第三位置0
;以上等价程序如下
;GECI:MOV R3,#00H ;控制循环次数
;QINGCHU:
;MOV A,#00100000B ;置空格
;PUSH A
;MOV R4,#0C0H ;地址
;MOV A,R4
;MOV P0,A
;POP A
;INC R4
;DEC R3 ;控制循环次数
;CJNE R3,#00H,QINGCHU ;计满十次则执行转移 ;*************************************************** ;定时器0中断子程序,定时音乐
;*************************************************** T0INT: ;中断服务子程序
MOV TH0,T0TH
MOV TL0,T0TL
CPL P3.7 ;反相输出,演示音乐
RETI
;****************************************** ;显示
;****************************************** MODD:
MOV P0,#8EH
LCALL ENABLE
MOV A,R2
MOV DPTR,#TABLE2
MOVC A,@A+DPTR
LCALL WRITE2
RET
TABLE2:DB 31H,32H,33H
GE1: db 'xin',00h,'nian',00h,'hao',00h,'ya',00h,'xin',00h,'nian',00h,'hao',00h,'ya',00h
db 'zhu',00h,'fu',00h,'da',00h,'jia',00h,'xin',00h,'nian',00h,'hao',00h GE2: DB
'liang',00H,'zhi',00H,'lao',00H,'hu',00H,'liang',00H,'zhi',00H,'lao',00H,'hu',00H,'pao',00H,'de',00H,'
kuai',00H
DB
'pao',00H,'de',00H,'kuai',00H,'yi',00H,'zhi',00H,'mei',00H,'you',00H,'yan',00H,'jing',00H,'yi',00H,'z
hi',00H
DB
'mei',00H,'you',00H,'er',00h,'duo',00h,'zhen',00h,'qi',00h,'guai',00h,'zhen',00h,'qi',00h,'guai',00h
GE3: DB 'wo',00h,'ai',00h,'bei',00h,'jing',00h,'tian',00h,'an',00h,'men',00h,'tian',00h,'an',00h
;*************************延时子程序****************** DELAY:MOV 30H,#100 ;延长时间等待,键盘消抖
D1:MOV R5,#200
D2:DJNZ R5,D2
DJNZ 30H,D1
RET
;*******************新年好****************************** MU_TAB1: DB 0FEH,25H,04H,0FEH,25H,04H
DB 0FEH,25H,06H,0FDH,80H,06H
DB 0FEH,84H,04H,0FEH,84H,04H
DB 0FEH,84H,06H,0FEH,25H,06H
DB 0FEH,25H,04H,0FEH,84H,04H
DB 0FEH,0C0H,04H,0FEH,84H,04H
DB 0FEH,98H,04H,0FEH,84H,04H
DB 0FEH,57H,06H
DB 0FFH,0FFH
;*******************两只老虎**************************** MU_TAB2: DB 0FCH,44H,06H,0FCH,0ACH,06H,0FDH,09H,06H,0FCH,44H,06H
DB 0FCH,44H,06H,0FCH,0ACH,06H,0FDH,09H,06H,0FCH,44H,06H
DB 0FDH,09H,06H,0FDH,34H,06H,0FDH,0A6H,06H
DB 0FDH,09H,06H,0FDH,34H,06H,0FDH,0A6H,06H
DB 0FBH,04H,04H,0FDH,0C8H,04H,0FBH,04H,04H,0FDH,34H,04H
DB 0FDH,09H,04H,0FCH,44H,04H,0FBH,04H,04H,0FDH,0C8H,04H
DB 0FBH,04H,04H,0FDH,34H,04H,0FDH,09H,04H,0FCH,44H,04H
DB 0FCH,44H,06H,0FDH,0A6H,06H,0FCH,44H,06H
DB 0FCH,44H,06H,0FDH,0A6H,06H,0FCH,44H,06H
DB 0FFH,0FFH
;*******************我爱北京天安门****************************
MU_TAB3: DB 0FDH,82H,06H,0FEH,22H,04H,0FDH,82H,04H,0FDH,34H,04H
DB 0FDH,09H,04H,0FCH,0ACH,04H,0FCH,44H,06H
DB 0FFH,0FFH,0FFH,0FFH
本文档为【单片机 电子琴设计 八个声调 三首歌 歌词显示[新版]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。