⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcumusic.txt

📁 单片机课程设计 课程设计名称:数字音乐盒
💻 TXT
📖 第 1 页 / 共 2 页
字号:



 


单片机课程设计
实验报告

课程设计名称:数字音乐盒
课程设计单位:自动化031班
课设小组成员:杜斐斐(030804102)
				   王薄  (030804110)

单片机课程设计实验报告
课程设计题目:数字音乐盒
课程设计要求:1.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少三首乐曲,每首不少于30秒)
              2.采用LCD显示信息
              3.开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称)
              4.可通过功能键选择乐曲,暂停,播放。
              5.选作内容:显示乐曲播放时间或剩余时间
硬件电路:本设计中用到了98C51单片机,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口控制蜂鸣器(J2,J4断开,J3短接)。
(5)	电路为12MHZ晶振频率工作,起振电路中C1,C2均为30pf。
软件设计:本程序可以实现课程设计的基本要求和附加功能,并可以通过按键播放七首歌曲。实验程序如下:
RS   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
      	djnz 	r3,m1         
      	RET
;----------------------------------------------------
;显示     
;---------------------------------------------------
modd:  
        	MOV   	P0,#8EH
        	CALL  	ENABLE         
        	mov 	A,37H
        	mov 	DPTR,#TABLE3         
        	MOVC 	A,@A+DPTR
        	CALL 	WRITE2       
        	RET
;--------------------------------------------------
;开机提示字
;-------------------------------------------------
kaiji:  	mov 	a,37h
       	cjne 	a,#0fh,DFF
        	MOV   	P0,#80H    ;设光标地址 
        	CALL  	ENABLE
        	MOV   	DPTR,#TABLE1;写数据
        	CALL  	WRITE1         
DFF:    	RET
;----------------------------------------------
;按键值播放歌曲
;----------------------------------------------
SOP:   	mov 	a,37h
       	cjne 	a,#01h,A11
       	LCALL 	MODD
       	MOV 	52H,#HIGH TABLE10
       	MOV 	53H,#LOW TABLE10
       	LCALL 	INITILE2
       	lcall 	MAIN0
A11:   	CJNE 	A,#02H,A22
       	LCALL 	MODD
       	MOV 	52H,#HIGH TABLE20
       	MOV 	53H,#LOW TABLE20 
       	LCALL 	INITILE2      
       	lcall 	MAIN0
A22:   	CJNE 	A,#03H,A33
       	LCALL 	MODD
       	MOV 	52H,#HIGH TABLE30
       	MOV 	53H,#LOW TABLE30 
       	LCALL 	INITILE2      
       	lcall 	MAIN0       
A33:   	CJNE 	A,#04H,A44
       	LCALL 	MODD
       	MOV 	52H,#HIGH TABLE40
       	MOV 	53H,#LOW TABLE40 
       	LCALL 	INITILE2      
       	lcall 	MAIN0
A44:   	CJNE 	A,#05H,A55
       	LCALL 	MODD
       	MOV 	52H,#HIGH TABLE50
       	MOV 	53H,#LOW TABLE50 
       	LCALL 	INITILE2      
       	lcall 	MAIN0
A55:   	CJNE 	A,#06H,A66
       	LCALL 	MODD
       	MOV 	52H,#HIGH TABLE60
       	MOV 	53H,#LOW TABLE60 
       	LCALL 	INITILE2      
       	lcall 	MAIN0   
A66:   	CJNE 	A,#07H,A77
       	LCALL 	MODD
       	MOV 	52H,#HIGH TABLE70
       	MOV 	53H,#LOW TABLE70 
       	LCALL 	INITILE2      
       	lcall 	MAIN0      
A77:   	CJNE 	A,#08H,A88
       	LCALL 	MODD
       	MOV 	52H,#HIGH TABLE80
       	MOV 	53H,#LOW TABLE80 
       	LCALL 	INITILE2      
       	lcall 	MAIN0
A88:   	CJNE 	A,#09H,A99
       	LCALL 	MODD
       	MOV 	52H,#HIGH TABLE90
       	MOV 	53H,#LOW TABLE90 
       	LCALL 	INITILE2      
       	lcall 	MAIN0      
A99:   	CJNE 	A,#0AH,AAA
       	LCALL 	MODD
       	MOV 	52H,#HIGH TABLE100
       	MOV 	53H,#LOW TABLE100 
       	LCALL 	INITILE2      
       	lcall 	MAIN0      
AAA:   	RET           
;******************************************
INITILE2:
   	MOV 	L50MS,#20
   	MOV 	L1MS,#00H
   	MOV 	L250MS,#00H
   	MOV 	SEC,#00H
   	MOV 	MIN,#00H
   	MOV 	HOU,#00H

  	MOV 	A,HOU
  	MOV 	B,#10
  	DIV 	AB
  	ADD 	A,#30H         ;将BCD吗转化为ASIIC码

  	MOV   	P0,#0C8H    ;显示小时十位
  	CALL  	ENABLE
  	CALL  	WRITE2

  	MOV 	A,B
  	ADD 	A,#30H
  	MOV   	P0,#0C9H    ;显示小时个位
  	CALL  	ENABLE
  	CALL 	WRITE2

  	MOV 	A,#3AH
  	MOV   	P0,#0DH    ;显示冒号
  	CALL  	ENABLE
  	CALL 	WRITE2

  	MOV 	A,MIN
  	MOV 	B,#10
  	DIV 	AB
  	ADD 	A,#30H

  	MOV   	P0,#0CBH    ;显示分十位
  	CALL  	ENABLE
  	CALL 	WRITE2

  	MOV 	A,B
  	ADD 	A,#30H
  	MOV   	P0,#0CCH    ;显示分个位
  	CALL  	ENABLE
  	CALL 	WRITE2

  	MOV 	A,#3AH
  	MOV   	P0,#0CDH    ;显示冒号
  	CALL  	ENABLE
  	CALL 	WRITE2

  	MOV 	A,SEC
  	MOV 	B,#10
  	DIV 	AB
  	ADD 	A,#30H 
  
  	MOV   	P0,#0CEH    ;显示秒十位
  	CALL  	ENABLE
  	CALL 	WRITE2

  	MOV 	A,B
  	ADD 	A,#30H
  	MOV   	P0,#0CFH    ;显示秒个位
  	CALL  	ENABLE
  	CALL 	WRITE2

  	MOV   	P0,#0C0H    ;设光标地址 
  	CALL  	ENABLE
  	MOV   	DPTR,#TABLE2;写数据
  	CALL  	WRITE1         

  	RET
;*********************************************写指令
ENABLE: 	CLR   	RS
        	CLR   	RW
        	CLR   	E
        	LCALL  	DELAY
        	SETB  	E
        	RET
;**********************************************写数据
WRITE1: 	MOV   	R1,#00H

A1:     	MOV   	A,R1
        	MOVC  	A,@A+DPTR
        	CALL  	WRITE2
        	INC   	R1
        	CJNE  	A,#0FEH,A1   ;未到字符串末尾继续
        	RET

WRITE2: 	MOV   	P0,A
        	SETB  	RS
        	CLR   	RW
        	CLR   	E
        	CALL  	DELAY
        	SETB  	E
        	RET
;**********************************************
DELAY:  	MOV   	R4,#05
D1:     	MOV   	R5,#0FFH
        	DJNZ  	R5,$
        	DJNZ  	R4,D1
        	RET	 
;----------------------------------------------

TAB:    db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
        db 80h,90h,88h,83h,0c6h,0a1h,86h,8eh

TAB1:   db 89h,86h,0c7h,0c7h,0c0h
      
TAB2:   db 0c6h,88h,0c0h

TABLE1: DB    'WELCOM HERE',0FEH

TABLE2: DB    'DFF WB ',0FEH

TABLE4: DB    'CAU',0FEH
      
TABLE3: DB    30H,31H,32H,33h    
        DB    34H,35H,36H,37H
        DB    38h,39H,41H,42H
        DB    43H,44H,45H,46H				
;--------------------------------------------------------------------
;播放歌曲程序
;--------------------------------------------------------------------

MAIN0:	MOV 	TMOD,#11H
	MOV 	IE,#8aH 
       ;MOV TH1,  #3cH
       ;MOV TL1,  #0b0H	  
  	lcall 	ks
	jnz 	TTM12           
	MOV 	40H,#00H
;---------------------------------------------------------
NEXT20: 	MOV 	A,40H
	MOV 	DPH,52H
	MOV 	DPL,53H
	MOVC	A,@A+DPTR
	MOV 	R2,A
	JZ 	STOP
	ANL 	A,#0FH
	MOV 	R1,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,#TABLE00
	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
	SETB  	TR1
W1:     	LCALL 	DELAY30
	INC 	40H
	LCALL 	KS        	;------有键跳出

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -