课程设计-数字音乐盒
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计-数字音乐盒
课程设计要求:1.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少三首乐曲,每首不少于30秒)2.采用LCD显示信息
3.开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称)
4.可通过功能键选择乐曲,暂停,播放。
5.选作内容:显示乐曲播放时间或剩余时间
硬件电路:本设计中用到了89C51单片机,4*4键盘,蜂鸣器,16*2 LCD,七段
显示数码管LED。
原理说明:当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。同时启动定时器T1,显示乐曲播放的时间,并动LCD,显示歌曲号及播放时间。也可在LED显示歌曲号。
(1)硬件电路中用P1.0~P1.7控制按键,其中P1.0~P1.3扫描行,P1.4~P1.7扫描列。
(2)用P0.0~P0.7,P2.0~P2.7控制LED,其中P0.0~P0.7控制七段码a,b,c,d,e,f,g,用P2.0~P2.7为数码管位选信号。
(3)用,P2.0~P2.2作为LCD的RS,R/W,E的控制信号。用P0.0~P0.7作为LCD的D0~D7的控制信号。
(4)用P3.7口控制蜂鸣器。
(5)电路为12MHZ晶振频率工作,起振电路中C1,C2均为30pf。
电路图:
【试验时请仔细阅读后文说明!此图仅为我站制作,并不代表原作者意愿;若您制作成功,望在网络推广。】实验控制流程图如下:
S BIT P2.0 ;定义液晶显示端口标号
RW BIT P2.1
E BIT P2.2
;******************************************** L50MS EQU 60H
L1MS EQU 61H
L250MS EQU 62H
SEC EQU 65H
MIN EQU 64H
HOU EQU 63H
;******************************************* org 0000h
ljmp main
ORG 000BH
LJMP TT0
ORG 001BH
LJMP T1INT
org 1000h
main:
;-----------------------;液晶初始化
MOV SP,#70H
MOV P0,#01H ;清屏
CALL ENABLE
MOV P0,#38H ;8位,2行显示
lCALL ENABLE MOV P0,#0FH ;屏显on,光标on,闪烁on lCALL ENABLE MOV P0,#06H ;计数地址加1,显示幕on lCALL ENABLE ;-------------------------------内存初始化lcall initil ;------------------------------- key1: lcall key lcall modd ljmp key1 ;---------------------键盘扫描key: nop nop lcall ks jnz k1 ;有按键转到K1 lcall kaiji lcall SOP xn: ljmp key k1: lcall modd lcall modd lcall ks jnz k2 ljmp key k2:
mov R2,#0feh ;读键盘
mov R4,#00h
k3:
mov A,R2
mov P1,A
mov A,P1
JB ACC.4,L1 ;为1跳转,第一行无按键
mov a,#00h
ljmp lk
L1:
jb acc.5,L2
mov a,#04h
ljmp lk
L2:
jb acc.6,L3
mov a,#08h
ljmp lk
L3:
jb acc.7,next1
mov a,#0ch
;------------------------------------------------------- lk:
add a,R4
push acc
k4:
lcall delay1 ;若同时有其他按键,则等待
lcall ks
jnz k4
;--------------------------------------------------------
mov r3,#07h clr a mov r0,#30h mov r1,#31h mm1: mov a,@r1 mov @r0,a inc r0 inc r1 djnz r3,mm1 pop acc mov @r0,a RET
;------------------------------------------------------ next1: inc R4 ;------列扫描mov a,R2 JNB acc.3,n2 ljmp n1 n2:
ljmp key n1:
rl a mov R2,a ljmp k3 ;---------------------------------------------- ks:
mov a,#0f0h ;判断P1口mov P1,a
nop nop mov a,P1 cpl a anl a,#0f0h RET
;-------------------------------------------------- DELAY1: SETB RS0 dl: mov R5,#0ah dl2: mov R6,#63 dl3: nop nop djnz R6,dl3 djnz R5,dl2 CLR RS0 RET
;--------------------------------------------------- ;30H-37H初值为零;---------------------------------------------------- initil: mov r3,#08h mov r0,#30h m1: mov @r0,#00h inc r0