版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于51单片机的音乐盒设计成绩课程设计,嵌入式系统应用题目名称,基于51单片机的音乐盒设计1 设计的任务,包含设计的内容和设计的目标,设计内容:本设计是一个基于AT89C52K列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器和点阵组成。使用按键控制音乐盒,三个用来切换歌曲,一个用来暂停音乐和开启LED点阵,一个用来从暂停位置开始播放音乐。本音乐盒共有三首歌曲,点阵式样有四种。播放歌曲时,蜂鸣器发出某个音调。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试。设计目标:初始:点阵显示作者
2、信息;按键1:播放歌曲1;按键2:播放歌曲2;按键3:播放歌曲3;按键A:暂停播放,点阵显示当前歌曲的名字;按键B:从暂停位置继续播放。2 设计的过程2.1 基本结构1、总体设计框图按键输入蜂鸣器AT89C52单片机晶振复位电路点阵2、AT89C5价绍AT89S52g一种低功耗、高性能CMOS的微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储技术制造,与工业器80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广
3、泛应用。AT89S52M有以下标准功能:8k字节Flash,256字节RAM32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工用行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM定时器/计数器、串口、中断继续工作。掉电保护方式下,RA岫容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数
4、据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0不具有内部上拉电阻。在flash时,编程P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)o止匕外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。在flash编程和校验时,P1口接收低
5、8位地址字节。引脚号第二功能:P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出e i,£:工产1TSfiiFI二,二匚3FED#33«-r3Ff:5CbpcmXn*£;,» 3吒工卡崎PC£nN二F二3年小廿ll&i*C:”?AHspnai二山二二Z!P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5MOSI(在系统编程用)P1.6MISO(在系统编程用)P1.7SCK(在系统编程用)P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1”时
6、,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVXDPTR),P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址(如MOVXRI)问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,p3输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用
7、时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52W殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。引脚第二功能:P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INTO(外中断0)P3.3INT1(外中断1)P3.4TO(定时/计数器0)P3.5T1(定时/计数器1)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)止匕外,P3口还接收一些用于FLAS幽存编程和程序校验的控制信号。RST:复位输入。当振荡器工作时,RSHI脚出现两个机器周期以上高电平将是单片机复位。ALE/PR
8、OGS访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH#储器编程期间,该引脚还用于输入编程脉冲(PROG)如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX口MOV凿令才能将ALE激活。止匕外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。PSEN程序储存允许(PSEN)t出是外部程序存储器的读选通信
9、号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSENt效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSENB号。EA/VPP:外部访问允许,欲使CPUR访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPUTCJ执行内部程序存储器的指令。FLASHY储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反
10、相放大器的输出端。2.2 软件设计过程包含软件设计思路,如果使用中断,说明中断类型等在本程序中设置了两个标志count和jy_count,分别初始化为0和0。按键1、2、3、A使得count在0和、1、2、3之间切换,jy_count记录歌曲的状态,能在暂停时播放歌曲的名字,同时在按键B返回时能知道count的值。程序检测count的值,count等于1时播放第一首歌曲,等于2时播放第二首,等于3时播放第三首。另一方面根据jy_count的值来控制点阵显示歌曲名。1、音调、节拍以及编码的确定方法一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出
11、多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。1.1音调的确定不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone把C、DE、F、GA、B这一组音的距离分成12个等份,每一个等份叫一个“半音”。两个音之间的距离有两个“半音”,就叫“全音”。在钢琴等键盘乐器上,C-DD-E、F-GG-A、A-B两音之间隔着一个黑键,他们之间的距离就是全音
12、;E-F、B-C两音之间没有黑键相隔,它们之间的距离就是半音。通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上,号或者b号的叫变化音。,叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294Hz)的一倍。1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期
13、除以2,即为半周期的时间。利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。2)利用AT89C51的内部定时器使其工作在计数器模式MODE1,改变计数值TH0及TL0以产生不同频率的方法。此外结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH则产生相应的停顿效果3)例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次技术956次时将I/O反相,就可得到中音DO(523Hz)。计数脉冲值与频率
14、的关系公式如下:,N=Fi2FrN:计算值;Fi:内部计时一次为1us,故其频率为1MHz;4) 其计数值的求法如下:,T=65536-N=65536-Fi2Fr例如:设K=65536,F=1000000=Fi=1MHz球低音DO(261Hz>中音DO(523Hz>高音的DO(1046Hz)l勺计算值,T=65536-N=65536-Fi2Fr=65536-10000002Fr=65536-500000/Fr低音DO的T=65536-500000/262=63627低音DO的T=65536-500000/523=64580低音DO的T=65536-500000/1047=65059
15、5) C调各音符频率与计数值T的对照表如表4.1所示。表4.1C调各音符频率与计数值T的对照表低音频率T参数中音频率T参数高音频率T参数Do2621908229Do523956115Do10465757Do2771805217Do554903108Do11095454,Re2941701204Re587852102Re11755151Re3111608193Re62280497Re12454848,Mi3301515182Mi65975991Mi13184545Fa3491433172Fa69871686Fa13974343Fa,3701351162Fa,74067681Fa,14804141
16、So3921276153So78463877So15683838So,4151205145So,83160272So,16613636La4401136136La88056868La17603434La,4641078129La,93253664La,18653232Si4941012121Si98850661Si197630301.2节拍的确定,光有音调是不够的,还需要节拍,让音乐具有旋律(固定若要构成音乐的律动),而且可以调节各个音的快满度。“节拍”,即Beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。若1拍实0.5s,则1/4拍为0.125s。至于1拍多少s,并没有严格规
17、定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。了解音乐的一些基础知识,我们可知产生不同频率的音频脉冲即能产生音乐。对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。表4.2节拍与节拍码对照节拍码节拍数节拍码节拍数1 1/4拍11/8拍2 2/4拍2
18、1/4拍33/4拍33/8拍41拍42/1拍51又1/4拍55/8拍61又1/2拍63/4拍82拍81拍A2又1/2拍A1又1/4拍C3拍C1又1/2拍F3又3/4拍每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,图5.2为节拍码的对照。如果1拍为0.4秒,1/4拍实0.1秒,只要设定延迟时间就可求得节拍的时间。假设1/4拍为1DELAY则1拍应为4DELAY以此类推。所以只要求得1/4拍的DELAY寸问,其余的节拍就是它的倍数,如图5.3为1/4和1/8节拍的时间设定。表4.31/4和1/8节拍的时间设定曲调值DELAY曲调值DELAY调4/4125毫秒调4/462毫
19、秒调3/4187毫秒调3/494毫秒调2/4250毫秒调2/4125毫秒1.3编码doremifasolasi分别编码为17,重音do编为8,重音re编为9,停顿编为0。播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。以0xff作为曲谱的结束标志。举例1:音调do,发音长度为两拍,即二分音符,将其编码为0x18。举例2:音调re,发音长度为半拍,即八分音符,将其编码为0x22歌曲播放的设计。先将歌曲的简谱进行编码,储存在一个数据类型为unsigne
20、dchar的数组中。程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。表4.4简谱对应的简谱码、T值、节拍数简谱发音简谱码T值节拍码节拍数5 低音SO16426011/4拍6 低音LA26440022/4拍7 低音TI36452433/4拍1 中音DO46458041拍2 中音RE56468451又1/4拍3 中音MI66477761又1/2拍4 中音FA76482082拍5 中音SO864898A2又1/2拍6 中音LA964968C3拍7 中音TIA65030F3又3/
21、4拍1 高音DOB650582 高音REC651103 高音MID651574 高音FAE651785 高音SOF652172、中断使用情况C52系列有3个定时/计数器(T0、T1、T2),通过编程设置,每个定时器/计数器可以根据系统时钟实现定时,也可以对外部信号计数。每个定时器/计数器都有多种工作方式(方式选才¥TMOD)每个定时器/计数器都会在预设定时计数(TL0,TH1)时间到时产生溢出,通过中断方式(中断允许一一EAET0)处理。(1) 中断初始化EA=1;/开总中断TMOD=0x01;/定时器0工作在方式1TH0=0;/初值为0TL0=0;/初值为0ET0=1;(2) 中断
22、函数voidtimer0()interrupt1/用于产生各种音调TH0=timeh;TL0=timel;fm=fm;2.3程序流图及说明如果包含多个函数,分别给出流程(具体到如何操作、赋值),通过文字对流程图以及函数功能进行说明(1)song()函数voidsong()uinttemp;ucharjp;/jp是简谱while(1)if(count=0)while(1)if(count=0)TR0=0;fm=1;if(jy_count=0)display_school();elseif(jy_count=1)display_mlh();elseif(jy_count=2)display_jms
23、zl();elseif(jy_count=3)display_qnzl();if(count=1)/选曲temp=mlhi;if(count=2)temp=jmszli;if(count=3)temp=qnzli;if(temp=0xff)break;jp=temp/16;/取数的高4位if(jp!=0)timeh=cuzhijp*2;timel=cuzhijp*2+1;elseTR0=0;fm=1;/关蜂鸣器delay(temp%16);/取数的低4位TR0=0;/唱完一个音停10MSfm=1;delay1(10);TR0=1;i+;keyscan();TR0=0;fm=1;标题Song()
24、函数开始Uinttemp;Ucharjp;否否否count=0count=1cunt=2count=3是TR0=0;temp=mlhi;temp=jmszli;temp=qnzli;fm=1;否否否jy_coumt=0jy_count=1jy_count=2jy_count=2是temp=0xff是是是是display_school();display_mlh();display_jmszl();display_qnzl();否jp=temp/16结束否jp=0?是TR0=0;timeh=cuzhijp*2;timel=cuzhijp*2+1;fm=1;/关蜂鸣器delay(temp%16);
25、TR0=0;fm=1;delay1(10);TR0=1;i+;keyscan();(2)keyscan()函数voidkeyscan()uintsw;P1=0xfe;sw=P1;if(sw=0xee)delay1(5);if(sw=0xee);count=1;i=0;while(1)i=0;song();keyscan();if(sw=0xde)delay1(5);if(sw=0xde)count=2;i=0;while(1)i=0;song();keyscan();if(sw=0xbe)delay1(5);if(sw=0xbe)count=3;i=0;while(1)i=0;song();k
26、eyscan();if(sw=0x7e)delay(5);if(sw=0x7e)jy_count=count;count=0;while(1)song();keyscan();P1=0xfd;sw=P1;if(sw=0x7d)delay(5);if(sw=0x7d)count=jy_count;while(1)song();keyscan();开始UintSw;P1=0xfe;Sw=P1否否P1=0xfd;否否Sw=0xeeSw=0xdeSw=0xbeSw=0x7eSw=P1;旦旦旦旦是是是是delay(5)delay(5)delay(5)Sw=0x7ddelay(5)是delay(5)Sw=
27、0xeeSw=0xdeSw=0xbeSw=0x7e旦旦旦旦旦是是是是是jy_count=coucount=1;count=2;count=3;Sw=0x7dnt;i=0;i=0;i=0;count=0;i=0;i=0;i=0;count=jy_cousong();song();song();song();nt;keyscan();keyscan();keyscan();keyscan();song();keyscan();(3) 主函数main()EA=1;/开总中断TMOD=0x01;/定时器0工作在方式1TH0=0;TL0=0;ET0=1;while(1)keyscan();song();
28、/delay1(1000);开始EA=1;/开总中断TMOD=0x01;/症时器0工作在方式1TH0=0;TL0=0;ET0=1;keyscan();song();3运行结果或者测试结果运行结果:(1) 程序下载到单片机后,点阵即显示作者信息;(2) 按键1:播放歌曲1;(3) 按键2:播放歌曲2;(4) 按键3:播放歌曲3;(5) 按键A:暂停播放歌曲,同时点阵显示当前正在播放歌曲名(6)按键B:从暂停位置重新播放歌曲;4遇到的问题及解决的方法(1)问题:插空太小,排阵插不进去。解决方法:把排阵折断,一个一个装。(2)问题:蜂鸣器怎么发出音乐,解决办法:通过查阅资料我们得知:一般说来,单片机
29、演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音(只有一种音色)。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。(3)问题:暂停时count已置0,怎么在点阵中显示当前播放歌曲名,解决办法:设置变量jy_count来记录count的值,通过判断jy_count的值来判定播放的歌曲。(4)问题:暂停后重新播放怎么从暂停位置继续播放解决办法:在暂停时,记录歌曲位置的i值不置0,在重新播放时i值不变,即可就在暂停位置继续播放。(5)问题:当程序超过一定时便编译不通过。解决办法:由于点阵的汉字、歌曲的歌谱等暂用较大
30、存储空间,造成程序较大,而软件限制程序的大小,我们删除了部分功能。5总结代码:1.h#defineucharunsignedchar#defineuintunsignedintucharcodeqnzl=/千年之恋0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x2
31、2,0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,0x61,0x71,0x82,0x71,0x62,0xA
32、3,0x73,0x62,0x53,0x42,0x63,0x83,0x83,0x91,0x91,0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff/结束标志;ucharcodejmszl=/寂寞沙洲冷0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,0x21,0x31,0x51,0x52,0
33、x31,0x52,0x61,0x15,0x14,0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,0x26,0x32,0
34、x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,0x31,0x81,0x81,0x81,0x61,0x91,0x82,0x51,0x51,0x51,0x51,0x31,0x61,0x53,0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,0x31,0x31,0x81,0
35、x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,0xff;ucharcodemlh=/茉莉花0x34,0x34,0x54,0x62,0x82,0x84,0x64,0x54,0x52,0x62,0x54,0x34,0x34,0x54,0x62,0x82,0x84,0x64,0x54,0x52,0x62,0x54,0x54,0x54
36、,0x54,0x32,0x52,0x64,0x64,0x64,0x54,0x34,0x34,0x22,0x32,0x54,0x32,0x22,0x14,0x12,0x22,0x14,0x32,0x22,0x12,0x32,0x22,0x32,0x54,0x62,0x82,0x54,0x24,0x32,0x52,0x22,0x32,0x12,0x62,0x54,0x64,0x14,0x22,0x32,0x12,0x22,0x12,0x62,0x54,0x04,0xff;/简谱音调对应的定时器初值/适合11.0592M的晶振ucharcodecuzhi=0xff,0xff,/占位0xFC,0x8E
37、,/中央C调1-70xFC,0xED,0xFD,0x43,0xFD,0x6A,0xFD,0xB3,0xFD,0xF3,0xFE,0x2D,0xFE,0x47,/高八度1-70xFE,0x76,0xFE,0xA1,0xFE,0xC7,0xFE,0xD9,0xFE,0xF9,0xFF,0x16;2.hcodeunsignedcharcheng32=/程0x08,0x04,0x1D,0xFE,0xF1,0x04,0x11,0x04,0x11,0x04,0xFF,0x04,0x11,0x0FC,0x38,0x00,0x37,0xFE,0x54,0x20,0x50,0x28,0x91,0xFC,0x10
38、,0x20,0x10,0x24,0x17,0x0FE,0x10,0x00,;codeunsignedcharjing32=/晶0x0F,0xE0,0x08,0x20,0x08,0x20,0x0F,0xE0,0x08,0x20,0x08,0x20,0x0F,0xE0,0x08,0x24,0x7E,0xFE,0x42,0x84,0x42,0x84,0x7E,0xFC,0x42,0x84,0x42,0x84,0x7E,0xFC,0x42,0x84,;codeunsignedcharqian32=/千0x00,0x20,0x00,0xF0,0x3F,0x00,0x01,0x00,0x01,0x00,0
39、x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,;codeunsignedcharnian32=/年0x08,0x00,0x08,0x08,0x1F,0xFC,0x11,0x00,0x21,0x00,0x41,0x10,0x1F,0xF8,0x11,0x00,0x11,0x00,0x11,0x04,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,;code
40、unsignedcharzhi32=/之0x02,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x7F,0xF8,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x01,0x00,0x02,0x00,0x0C,0x00,0x30,0x00,0x48,0x06,0x07,0xFC,0x00,0x00,;codeunsignedcharlian32=/恋0x02,0x00,0x01,0x04,0xFF,0xFE,0x04,0x40,0x0C,0x60,0x0C,0x58,0x14,0x4C,0x24,0x44,0x44,0x40,0x02
41、,0x00,0x29,0x10,0x29,0x28,0x28,0x24,0x48,0x24,0x07,0xE0,0x00,0x00,;codeunsignedcharji_232=/寂0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x88,0x04,0x0E,0xF8,0x08,0x08,0x08,0x88,0xFF,0x88,0x08,0x50,0x2C,0x50,0x2B,0x20,0x49,0x20,0x88,0x50,0x28,0x8E,0x13,0x04,;codeunsignedcharmo32=/寞0x01,0x00,0x7F,0xFE,0x44
42、,0x42,0x84,0x54,0x3F,0xF8,0x04,0x40,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x01,0x04,0xFF,0xFE,0x02,0x80,0x0C,0x60,0x30,0x1C,;codeunsignedcharsha32=/沙0x00,0x40,0x20,0x40,0x18,0x40,0x08,0x40,0x81,0x50,0x61,0x48,0x22,0x46,0x0A,0x42,0x14,0x48,0x20,0x48,0xE0,0x50,0x20,0x20,0x20,0x40,0x20,0x80
43、,0x23,0x00,0x2C,0x00,;codeunsignedcharzhou32=/洲0x01,0x04,0x41,0x04,0x31,0x24,0x11,0x24,0x81,0x24,0x65,0xB4,0x23,0x6C,0x0B,0x6C,0x11,0x24,0x21,0x24,0xE1,0x24,0x21,0x24,0x22,0x24,0x22,0x24,0x24,0x04,0x20,0x04,;codeunsignedcharleng32=/冷0x00,0x80,0x40,0x80,0x31,0x40,0x12,0x20,0x04,0x10,0x09,0x08,0x10,0x
44、8E,0x10,0x84,0x27,0xF0,0xE0,0x10,0x20,0x20,0x20,0x40,0x22,0x80,0x21,0x00,0x20,0xC0,0x00,0x40,;codeunsignedcharmo_232=/mo0x04,0x40,0x04,0x44,0xFF,0xFE,0x05,0x40,0x01,0x04,0xFF,0xFE,0x01,0x00,0x01,0x08,0x7F,0xFC,0x03,0x80,0x05,0x40,0x09,0x30,0x31,0x0E,0xC1,0x04,0x01,0x00,0x01,0x00,;codeunsignedcharli3
45、2=/0x08,0x20,0x08,0x24,0xFF,0xFE,0x08,0x20,0x06,0x08,0x78,0x48,0x08,0x48,0x08,0x48,0xFF,0x48,0x08,0x48,0x1C,0x48,0x1A,0x48,0x2A,0x48,0x48,0x08,0x88,0x28,0x08,0x10,;codeunsignedcharhua32=0x08,0x20,0x08,0x24,0xFF,0xFE,0x08,0x20,0x08,0x20,0x08,0x80,0x10,0x88,0x10,0x98,0x30,0xA0,0x50,0xC0,0x90,0x80,0x11
46、,0x80,0x12,0x82,0x14,0x82,0x10,0x7E,0x10,0x00,;#include<reg52.h>#include"1.h"#include"2.h"/#include"3.h"#defineucharunsignedchar#defineuintunsignedint/蜂鸣器初始化sbitfm=P3A4;/蜂鸣器连续的IO口uchartimeh,timel;uchari=0;uintcount=0;uintjy_count=0;voiddelay1(uintz);/延时1MSvoiddela
47、y(uintz);/延时165Ms即十六分音符voidsong();/点阵初始化#defineDATE_OUTP0/指定P2口做为输出sbitDATA=DATE_OUTA0;歹U数据输出位sbitSCLH=DATE_OUTA1;歹U扫描时钟位sbitSCLT=DATE_OUTA2;歹U数据锁存位sbitAB=DATE_OUTA3;行数据输出位sbitSCK=DATE_OUTA4;/行扫描时钟位uchardate32;/32字节RAM故为16*16点阵屏显示缓存voiddisplay();/做为点阵扫描函数,将显示缓存的数据输出到点阵屏voiddisplay_time(unsignedintti
48、mer);/指定时间扫描显示voiddisplay_school();voiddisplay_jmszl();voiddisplay_qnzl();voiddisplay_mlh();voidkeyscan();main()EA=1;/开总中断TMOD=0x01;/定时器0工作在方式1TH0=0;TL0=0;ET0=1;while(1)keyscan();song();/delay1(1000);用于产生各种音调voidtimer0()interrupt1/TH0=timeh;TL0=timel;fm=fm;voidsong()uinttemp;ucharjp;/jp是简谱while(1)if
49、(count=0)/ucharj=0;while(1)if(count=0)TR0=0;fm=1;if(jy_count=0)display_school();elseif(jy_count=1)display_mlh();elseif(jy_count=2)display_jmszl();elseif(jy_count=3)display_qnzl();if(count=1)/选曲temp=mlhi;if(count=2)temp=jmszli;if(count=3)temp=qnzli;if(temp=0xff)break;jp=temp/16;/取数的高4位if(jp!=0)timeh=
50、cuzhijp*2;timel=cuzhijp*2+1;elseTR0=0;fm=1;/关蜂鸣器delay(temp%16);/取数的低4位TR0=0;/唱完一个音停10MSfm=1;delay1(10);TR0=1;i+;keyscan();TR0=0;fm=1;voiddelay(uintz)延时165Ms即十六分音符uintx,y;for(x=z;x>0;x-)for(y=19000;y>0;y-);voiddelay1(uintz)/延时1MSuintx,y;for(x=z;x>0;x-)for(y=112;y>0;y-);voidkeyscan()uintsw
51、;P1=0xfe;sw=P1;if(sw=0xee)delay1(5);if(sw=0xee);count=1;i=0;while(1)i=0;song();keyscan();if(sw=0xde)delay1(5);if(sw=0xde)count=2;i=0;while(1)i=0;song();keyscan();if(sw=0xbe)delay1(5);if(sw=0xbe)count=3;i=0;while(1)i=0;song();keyscan();if(sw=0x7e)delay(5);if(sw=0x7e)jy_count=count;count=0;while(1)son
52、g();keyscan();P1=0xfd;sw=P1;if(sw=0x7d)delay(5);if(sw=0x7d)count=jy_count;while(1)song();keyscan();/*显示函数*/voiddisplay()ucharm,ia,n,tmp;/定义变量DATE_OUT=0XFF;/置位高电平做准备/AB=0;/将行数据位清0,准备移位for(m=0;m<16;m+)/循环输出16行数据SCK=0;/为行移位做准备SCLT=0;/为列锁存做准备for(ia=2;ia>0;)/每行16个点,循环位移两个字节ia-;/循环两次tmp=datem*2+ia;/读取点阵数据做输出,这里用到ia目的是先读取点阵数据的第二位字节,因一行16个点由两个字节组成,/电路中的移位寄存器最后一位对应最后一列,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高二化学选择性必修2(人教版)同步课件 第二章 第三节 第2课时 分子间的作用力 分子的手性
- 湖南省长沙市长沙市麓共体联考2024-2025学年九年级上学期12月月考语文试题(含答案)
- 高一 上册 人教版 英语 必修 第五单元《Lesson Five Reading for writing》课件
- 医学教材 肠穿孔的护理学习资料
- 勿忘国耻爱我中华中国人民抗日战争暨世界反法西斯战争胜利70周年专题党课宣讲课件
- 2.5 分压式偏置共射放大电路的分析
- 《肺的淋巴引流》课件
- 2024年高一上学期期末物理考点《有关牛顿第二定律的瞬间问题》含答案解析
- 《病毒与亚病毒》课件
- 《组织切片技术》课件
- 新生儿外科伤口护理
- 《2024至2025年江苏省专业市场深度调研及前景预测报告》范文
- 糖尿病中医治疗方法
- 冰雪运动赛事组织
- 研发项目管理培训课件讲解
- 护理不良事件分级分类
- 人际交往与人际沟通
- 第47届世界技能大赛江苏省选拔赛平面设计技术项目技术工作文件
- DB11T 2078-2023 建筑垃圾消纳处置场所设置运行规范
- 2024-2030年全球及中国程序化广告的需求方平台(DSP)行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 网络安全技能竞赛(CTF)考试题及答案
评论
0/150
提交评论