当前位置:首页 > 行业资料 > 其它行业文档 > 音乐倒数计时器单片机课程设计报告
音乐倒是计时器一、设计要求利用STC89C51单片机结合字符型LCD显示器设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。做一小段时间倒计数,当倒计数为0时,则发出一段音乐声响,通知倒计数终了,该做应当做的事。同时输出控制一个继电器吸合,继电器驱动一个3W的大功率LED灯,亮度可以由单片机控制从50%~100%连续可调。定时闹钟的基本功能如下。字符型LCD(162)显示器。显示格式为“TIME分分:秒秒”。用4个按键操作来设置当前想要倒计数的时间。一旦按下键则开始倒计数,当计数为0时,发出一阵音乐声。1、程序执行后工作指示灯LED闪动,表示程序开始执行,按下操作键K1~K4动作如下。K1—可调整倒计数的时间1~60分钟。K2—设置倒计数的时间为5分钟,显示“0500”。K3—设置倒计数的时间为10分钟,显示“1000”。K4—设置倒计数的时间为20分钟,显示“2000”。2、复位后LCD的画面应能显示倒计时的分钟和秒数,此时按K1键则在LCD上显示出设置画面。此时,若:a.按操作键K2—增加倒计数的时间1分钟。b.按操作键K3—减少倒计数的时间1分钟。c.按操作键K4—设置完成。二、系统硬件说明2.1:音乐倒是计时器要实现一种由单片机控制的带LCD显示的倒数计时器,单片机工作于12MHZ时钟频率,使用其定时/计数器T0,改变计数值TH0和TL0可以产生不同频率的脉冲信号。该设计具有5个功能按键,用户可以通过这些按键设置定时时间和选择控制定时,倒计数为零时,可通过扬声器将音乐播放出来。系统结构图如下图所示。2.2AT89C52AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。主要特性:·兼容MCS51指令系统·8k可反复擦写(1000次)FlashROM·32个双向I/O口·256x8bit内部RAM·3个16位可编程定时/计数器中断·时钟频率0-24MHz·2个串行中断·可编程UART串行通道·2个外部中断源·共8个中断源·2个读写中断口线·3级加密位·低功耗空闲和掉电模式振荡电路复位电路蜂鸣器输出电路89C52芯片LCD显示电路按键控制电路2.3电路原理图如下:2.4电路仿真图如下:三、系统软件设计音乐倒数计时器软件设计关键是实现音乐的播放。利用定时计数器,通过载入不同的计数初值,产生频率不同的方波,输入到蜂鸣器(SOUNER)中,使其发出频率不同的声音。本设计中单片机晶振为11.0592MHz,通过计算各音阶频率,可得1、2、3、4、5、6、7共7个音应赋给定时器的初值为64580、64684、64777、64820、64898、64968、65030。通过K1~K5开关进行控制时间设置来完成其基本功能,当倒计时为零时,通过通过蜂鸣器放出一段音乐。3.1系统基本流程图如下:开始LCD初始化K1是否按下K2是否按下K2、K3是否按下K3是否按下按分钟进行增减时间为5min时间为10minK4是否按下K5是否按下K4是否按下时间为20min设置完成计时结束Music开始计时K6是否按下YYYYYYYYNNNNNNN3.2部分程序如下:#includereg52.h#includeintrins.h#definetime100#defineuintunsignedint#defineucharunsignedcharuintflag,flag0,flag1,flag2,flag3,flag4,flag5,minute,second=60;intt=0,flag6=0;ucharnum,j,i,k=0,time_H,time_L,times,m,n,p;ucharcodetable[]=TIME00:00;ucharcodeFREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,//低音12345670xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,!0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,//高音12345670xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF};//超高音1234567ucharcodeFREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,//低音12345670x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,i0xEE,0x44,0x6B,0xB4,0xF4,0x2D,//高音2345670x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16};//超高音1234567ucharcodeMUSIC[]={3,2,2,3,2,2,3,2,4,3,2,2,3,2,2,3,2,4,3,2,2,5,2,2,1,2,3,2,2,1,3,2,4,4,2,2,4,2,2,4,2,3,4,2,2,4,2,2,3,2,2,3,2,2,3,2,1,3,2,1,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,5,2,3,5,1,2,5,1,2,3,2,2,2,2,2,1,2,2,5,1,3,5,1,1,5,1,1,5,1,2,3,2,2,2,2,2,1,2,2,6,1,3,6,1,2,6,1,2,4,2,2,3,2,2,2,2,2,6,1,3,6,1,2,0,0,0};sbitkey1=P3^3;sbitkey2=P3^4;sbitkey3=P3^5;sbitkey4=P3^6;sbitkey5=P3^7;sbitP1_0=P1^0;sbitRS=P2^5;sbitRW=P2^6;sbitE=P2^7;sbitled_red=P1^3;voidwrite_time(uintaddr,uintdate);voiddelay(uintz)//延时函数//{uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}voiddelay1(unsignedchard)//us延时{while(--d);}voiddelay2(unsignedchard)//延时1mS{while(d--){delay1(245);delay1(245);}}voiddelay3(uchard)//延时125ms,4/4拍{for(m=0;md;m++)delay2(125);TR1=0;}voidSong(){TH1=time_H;//赋值定时器时间,决定频率TL1=time_L;TR1=1;//打开定时器delay3(times);//延时所需要的节拍}voidwrite_com(ucharcom)//1602写命令函数//{RS=0;P0=com;delay(5);E=1;delay(10);E=0;}voidwrite_date(uchardate)//1602写数据函数//{RS=1;P0=date;delay(5);E=1;delay(10);E=0;}voidKEY1()//按键1//{while(flag1){if(key2==0){delay(time);if(key2==0){if(minute60)minute=minute+1;write_time(7,minute);}}if(key3==0){delay(time);if(key3==0){if(minute0)minute=minute-1;write_time(7,minute);}}if(key4==0||key5==0){delay(150);if(key4==0||key5==0){flag1=0;flag=1;TR0=1;}}}}voidKEY2()//按键2//{minute=5;write_time(7,minute);while(flag2){if(key5==0){delay(time);if(key5==0){flag2=0;flag=1;TR0=1;}}}}voidKEY3()//按键3{minute=10;write_time(7,minute);while(flag3){if(key5==0){delay(time);if(key5==0){flag3=0;flag=1;TR0=1;}}}}voidKEY4()//按键4{minute=20;write_time(7,minute);while(flag4){if(key5==0){delay(150);if(key5==0){flag4=0;flag=1;TR0=1;}}}}voidwrite_time(uintaddr,uintdate)//lcd1602初始化{uintge,shi;ge=date%10;shi=date/10;write_com(0x80+addr);write_date(0x30+shi);write_date(0x30+ge);if(addr==7&&date==0)j=1;if(j==1&&addr==10&&date==0){flag0=1;TR0=0;TR1=1;flag5=1;//flag5=1}}voidinit(){P3=0xff;RW=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x80);TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=0xfc;TL1=0x44;ET1=1;ET0=1;TR0=1;EA=1;flag0=1;for(num=0;num12;num++){write_date(table[num]);delay(20);}}voidstart()//按键初始化{if(key1==0){delay(time);if(key1==0){flag0=0;flag1=1;KEY1();}}if(key2==0){delay(time);if(key2==0){flag0=0;flag2=1;KEY2();}}if(key3==0){delay(time);if(key3==0){flag0=0;flag3=1;KEY3();}}if(key4==0){delay(150);if(key4==0){flag0=0;flag4=1;KEY4();}}}voidwrite_time0()//倒计程序的子初始化程序{minute=minute-1;write_time(7,minute);write_time(10,59);flag=0;}voidcounter()//倒计程序{while(flag6){led_red=~led_red;if(flag==1)write_time0();t=0;flag6=0;second=second-1;write_time(10,second);if(k==1&&second==0){if(minute0)minute=minute-1;write_time(7,minute);}if(second==0){k=1;second=59;}}}intmain(){init();while(1){while(flag0)start();counter();while(flag5){TMOD=0x10;//置定时器1工作方式1EA=1;//打开全局中断ET1=1;//打开定时1中断while(1{i=0;while(i140){//音乐数组长度,循环播放n=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振荡频率所需数据time_H=FREQH[n];t
本文标题:音乐倒数计时器单片机课程设计报告
链接地址:https://www.777doc.com/doc-5702351 .html