ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:289.34KB ,
资源ID:17560421      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17560421.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字音乐盒的课程设计Word格式.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数字音乐盒的课程设计Word格式.docx

1、AT89C51主要性能参数如下:与MC51产品指令系统完全兼容K字节可编程闪烁存储器 寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源 可编程串行通道低功耗的闲置和掉电模式 2.2时钟电路时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢2。为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个22PF的电容,晶振

2、引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。时钟电路如图3。图3时钟电路2.3 复位电路单片机在启动时都需要进行复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。51系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位3。单片机系统的复位方式有:手动按钮复位和上电复位。复位电路如图4。图4复位电路2.4 按键电路按键的闭合与否,反映在行线输出电压上就呈现高电平或低电平,如果高电平表示键断开,低电平则表示键闭合,通过对

3、行线电平高低状态的检测,便可确认按键按下与否。P1.0,P1.1,P1.4,P1.5作为控制按键,其中P1.0-P1.1扫描行,P1.4-P1.5扫描列;可通过功能键选择乐曲、暂停、播放。按键电路如图5。图5 按键电路2.5 蜂鸣器电路电路中蜂鸣器是发声元件,在其两端施加直流电压(有源蜂鸣器)或者方波(无源蜂鸣器)就可以发声,其主要参数是外形尺寸、发声方向、工作电压、工作频率、工作电流、驱动方式(直流/方波)等4。由于蜂鸣器的工作电流一般比较大,单片机的I/O口是无法直接驱动的(但AVR可以驱动小功率蜂鸣器),所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了。蜂鸣器由一个三极管,两个

4、电阻和一个二极管组成。蜂鸣器电路如图6。图6 蜂鸣器电路2.6 显示电路2.6.1 线段的显示点阵图形式液晶由MN显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共168=128个点组成,屏上6416个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H

5、,(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理5。2.6.2 字符的显示用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可6。显示电路如图7。图7 显示电

6、路2.7 总体电路总结时钟电路、复位电路、按键电路、蜂鸣器以及显示电路,把其放入一个电路。得到总体的电路。总体电路如图8。图8 总体电路图3 系统软件设计3.1 程序主要流程流程图如图9所示。图9流程图3.2 程序设计对音乐do re mi fa so la si分别编码为17,重音do编为8,重音re编为9,停顿编为0。播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。以0xff作为曲谱的结束标志7。举例1:音调do,发音长度为两拍,即二分音符,将

7、其编码为0x18。举例2:音调re,发音长度为半拍,即八分音符,将其编码为0x22歌曲播放的设计。先将歌曲的简谱进行编码,储存在一个数据类型为unsigned char的数组中。程序从数组中取出1个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。程序:#include intrins.h#define uchar unsigned char#define uint unsigned intuchar m,n;uchar i,timecount=0,timesec=0,timemin=0,ti

8、mecheck=0;char r0=2;sbit beepIO=P30;typedef unsigned char BYTE;typedef unsigned int WORD;typedef bit BOOL ;sbit rs = P20; sbit rw = P21;sbit ep = P22;sbit pausekey=P11;uchar k,q,f;uchar code dis1 =1 ji mo sha zhou;uchar code dis2 = 2 tong huauchar code dis3 =3 qian nian lianuchar code T492=0,0,0xF8,

9、0x8B,0xF8,0xF2,0xF9,0x5B,0xF9,0xB7,0xFA,0x14,0xFA,0x66,0xFA,0xB9,0xFB,0x03,0xFB,0x4A,0xFB,0x8F,0xFB,0xCF,0xFC,0x0B,0xFC,0x43,0xFC,0x78,0xFC,0xAB,0xFC,0xDB,0xFD,0x08,0xFD,0x33,0xFD,0x5B,0xFD,0x81,0xFD,0xA5,0xFD,0xC7,0xFD,0xE7,0xFE,0x05,0xFE,0x21,0xFE,0x3C,0xFE,0x55,0xFE,0x6D,0xFE,0x84,0xFE,0x99,0xFE,

10、0xAD,0xFE,0xC0,0xFE,0x02,0xFE,0xE3,0xFE,0xF3,0xFF,0x02,0xFF,0x10,0xFF,0x1D,0xFF,0x2A,0xFF,0x36,0xFF,0x42,0xFF,0x4C,0xFF,0x56,0xFF,0x60,0xFF,0x69,0xFF,0x71,0xFF,0x79,0xFF,0x81uchar code music12=0,4, 22,4,22,4,17,4,15,4,15,4,17,12,15,4,15,2,17,2,15,4,13,4,13,4,15,12,0,4,20,4,20,4,20,4,17,4,20,4,20,4,2

11、0,4,17,4,22,4,17,4,17,4,15,4,15,4,17,12,15,4,15,2,17,2,15,4,13,4,13,4,15,12,20,4,20,4,20,2,17,2,17,4,20,4,20,4,20,2,17,2,17,2,17,2,24,4,20,4,20,2,17,2,17,4,20,4,22,12,17,4,22,4,25,4,25,4,17,4,22,4,25,8,24,4,22,2,24,2,22,4,20,4,15,4,17,12,15,4,15,4,15,4,10,4,15,4,17,4,20,8,17,4,24,4,24,4,20,4,15,4,17

12、,12,29,4,27,2,29,2,27,4,25,4,25,4,27,12,29,4,29,2,27,4,25,4,27,6,27,2,25,4,24,4,20,4,20,2,17,2,20,4,20,2,22,2,22,16,0xFF,0xFF;uchar code music22=0,4, 16,6,19,2,19,6,16,2,14,6,0,10,16,6,19,2,19,6,16,2,14,8,0,8,26,8,21,6,24,2,23,6,21,2,19,8,21,16,0,8,16,6,19,2,19,6,16,2,14,8,0,8,26,8,21,6,23,2,21,14,2

13、4,6,23,2,21,6,19,2,16,6,14,2,13,8,14,16,0,4,19,6,19,2,21,6,21,2,23,8,21,4,0,4,19,6,19,2,16,6,19,2,16,8,14,6,0,4,26,16,21,4,26,4,21,4,26,16,21,4,26,16,0,4,16,8,16,8,14,8,16,8,21,4,26,4,21,4,26,4,0,8,16,8,16,8,14,8,16,8,21,4,26,4,21,4,26,4,0,8,19,8,19,6,21,2,16,8,0,8,19,6,21,2,19,6,21,2,16,8,0,8,21,8,

14、26,8,21,4,24,12,23,6,21,2,19,8,21,16,14,4,21,4,14,4,19,4,16,6,14,2,13,8,14,16,uchar code music32=0,4,27,4,19,4,19,4,27,4,26,4,26,2,27,2,24,8,22,4,17,4,24,4,22,4,19,16,15,4,12,4,12,4,15,4,17,8,19,8,26,6,26,2,26,4,24,4,24,4,19,4,19,8,27,4,19,4,19,4,27,4,26,4,26,2,27,2,24,6,24,2,15,4,12,4,12,4,15,4,17,

15、8,19,8,19,6,19,2,19,4,17,4,14,4,14,4,14,4,7,4,12,24,uchar timetable =00:00;void delay(uchar p) uchar i,j; for(;p0;p-) for(i=181;ii-) for(j=181;jj-);BOOL lcd_bz() BOOL result; rs = 0; rw = 1; ep = 1; _nop_(); result = (BOOL)(P0 & 0x80); ep = 0; return result; void lcd_wcmd(BYTE cmd) while(lcd_bz(); r

16、w = 0; P0 = cmd;void lcd_pos(BYTE pos) lcd_wcmd(pos | 0x80);void lcd_wdat(BYTE dat) rs = 1; P0 = dat; void lcd_init() lcd_wcmd(0x38); delay(1); lcd_wcmd(0x0c); lcd_wcmd(0x06); lcd_wcmd(0x01); void pause() for(i=150; for(j=150; void timecount_init() interrupt 3 TH1=(65535-45872)/256; TL1=(65535-45872

17、)%256; timecount+; if(timecount=20) timesec+; timecount=0; if(timesec=60) timesec=0; timemin+; void adfa() interrupt 0 timesec=0; timemin=0; r0+; delay(5); if(r011) r0=11; void adfii() interrupt 2 if(pausekey=0) beepIO=0; while(pausekey=0); while(pausekey=1); delay(8); else timesec=0; r0-; if(r0=0)

18、r0=1;void T0_int() interrupt 1 beepIO=!beepIO; TH0=Tm0; TL0=Tm1;void zhuanhuan()timetable3=timesec/10+0timetable4=timesec%10+timetable2=:timetable0=timemin/10+timetable1=timemin%10+void timedis()if(timecheck!=timesec)timecheck=timesec;zhuanhuan();lcd_pos(0x49);lcd_wdat(timetable0);lcd_wdat(timetable

19、1);lcd_wdat(timetable2);lcd_wdat(timetable3);lcd_wdat(timetable4);void main() uchar i=0,lcd_check=0; TMOD=0x11; PX0=1; PX1=1; EX0=1; EX1=1; EA=1; ET0=1; ET1=1; TR1=1; pausekey=1; lcd_init(); while(1) if(r0=0) delay(1); lcd_pos(0); i = 0; while(dis1i != 0) lcd_wdat(dis222i); i+; if(r0=1) timedis(); i

20、f(lcd_check!=r0) lcd_wcmd(0x01); lcd_check=r0; lcd_pos(0); lcd_wdat(dis1i); m=music1i0;n=music1i1; if(m=0x00) TR0=0;delay(n);i+;/ else if(m=0xFF)delay(30);i=0;timesec=0;timemin=0; else if(m=music1i+10) TR0=1;TR0=0;pause(); if(r0=2) timedis(); if(lcd_check! lcd_check=r0; lcd_pos(0); while(dis2i ! lcd_wdat(dis2i); m=music2i0;n=music2i1; else if(m=music2i+10) 4 系统软件仿真在这里系统仿真我们使用实验室常用的Protues仿真软件,把总电路画入ISIS软件,把程序加入Keil软件,然后进行软件和硬件的统一调试8。图10 仿真初始界面图11 仿真播放第一首图12 仿真播放第

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1