80c51单片机课程设计_第1页
80c51单片机课程设计_第2页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机课程设计报告题目基于51单片机发光牌与伴奏音乐系统专业班级 机械111班_姓 名一、设计目的(一)、以 AT89C51AT89C51 单片机为主体,设计一个有伴奏音乐的发光牌。1 1、功能放光牌用数码管显示,分别按顺序显示出“ 2 2”、“0 0”、“ 1 1”、“3 3”的数字样 而且不断的循环从左到右显示。同时还伴有歌名为“同一首歌”的旋律。发光牌由数码管进行设置,歌声的旋律则由蜂鸣器来实现。2 2、效果即数码管为发光牌,同时伴有歌声发光牌效果图可如下mH7二、硬件系统AT89C51AT89C51 单片机是美国 ATMEATME 公司生产的低电压、高性能 CMOSCMOS 位单片机,

2、具有 丰富的内部资源:4kB4kB 闪存、128BRAM128BRAM 3232 根 I/OI/O 口线、2 2 个 1616 位定时/ /计数器、 5 5 个向量两级中断结构、2 2 个全双工的串行口,具有 4.254.255.50V5.50V 的电压工作范 围和 0 024MHz24MHz 工作频率,使用 AT89C51AT89C51 单片机时无须外扩存储器。(1 1)、硬件总电路图如下其中 AT89C51AT89C51 单片机的设置如下选择 12MH 的晶振,该单片机选用24V 的电压。其中电路图中的7447 芯片中的A,B,C,D,E,F,G 引脚是引出来用来分别接四个数码管的。其中低

3、电平代表通电,其数码管的09 的数字代码如下:0X010X01、0X120X12、0X240X24、0X380X38、0X410X41、0X520X52、0X640X64、0X780X78、0X810X81、0X92.0X92.丄C2InFXI1C1|fr119IBU1XTAL2ALEF10d 9k 3_- 11 rj- nb7r同曲同曲同灿更闿fl1 J J 5 fi 7 u- u- u-DIDIDIDI nrnr DIDI nrnr _DI_DI nrnr DIDI阳円-U:1111a琲2a11cfiKGDGCQLT1AT跚91EAF13MBP1PAPPCUNCUNrjrj并通过 p2.0

4、p2.0、p2.1p2.1、p2.2p2.2、p2.3p2.3 引脚分别来控制四个数码管的得电顺序。从而实 现发光牌的设置和控制。(2(2)、对蜂鸣器的控制的电路介绍其中 XTAL1XTAL1、XTAL2XTAL2 为般是指时钟电路引脚XTAL1TAL1 :接外部晶振和微调电容的一端,在片内它是振荡器反相放大器的输 入;若使用外部时钟时,该引脚必须接地。XTAL2XTAL2 :接外部晶振和微调电容的另一端,在片内它是振荡器反相放大器的 输出;若使用外部时钟时,该引脚接外部时钟的输入端。利用这两个引脚可以对歌曲的节奏和时间进行控制。其中歌曲的谱音可用代码表示,蜂鸣器可根据不同代码发出声音。从而演

5、奏 出“同一首歌”的旋律。三、软件系统软件编程序用 keilkeil 软件, ,仿真用 protuesprotues 软件其中控制歌曲播放的流程图如下控制歌曲的子程序的功能是可以计算出歌曲的播放时间,与各个音符的停顿(3 3)对数码管控制 a a 数码管的接线图如下其中数码管的放大电路端如下图所示其中连接 R1R1 端的可与 p22p22、p20p20、p21p21、p23p23 连接。b b、对数码管控制的流程图如下tr四、仿真结果仿真效果和预期一样。其仿真用protuesprotues 软件来实现,其仿真电路图如下TPI22VCCAA AAR2R3R4ikik*jR8aoFiR11函R?Z

6、OTR9 aj!RICHXRR5SOPR6 220R- -ZFZF- -/Q1T:忠03TPt22#define DELAYTIME65000 /定义延迟时间常数un sig ned int temp1;void delay(unsigned int temp)/ 延时程序 while(-temp);同一首歌un sig ned char code Music_Same=0 x0F,0 x01, 0 x15,0 x02, 0 x16,0 x02, 0 x17,0 x66, 0 x18,0 x03,0 x17,0 x02, 0 x15,0 x02, 0 x16,0 x01,0 x15,0 x02

7、, 0 x10,0 x02 0 x15,0 x00, 0 x0F,0 x01, 0 x15,0 x02,0 x16,0 x02, 0 x17,0 x02, 0 x17,0 x03, 0 x18,0 x03, 0 x19,0 x02, 0 x15,0 x02, 0 x18,0 x66, 0 x17,0 x03,0 x19,0 x02, 0 x16,0 x03, 0 x17,0 x03, 0 x16,0 x00, 0 x17,0 x01, 0 x19,0 x02, 0 x1B,0 x02, 0 x1B,0 x70,IBXTAL1PQO/ftDCIPD.1/AD1U1PD0隠2XTAL2PD加口3P

8、D.勺心poje/.OiRST*PQ.7W7ATS9C51iT ALE贡P2DCMP21J(M P2.M10P2.A11 P2.4JA12P2.SW13KJ.6JA14 P27AA15P1.0P3.0RXDP11P3.1ODP1.2P32OTPI .3P3.3MTP1 4P3 4/rOP1.5P3J5/H_P1 EP3JrWRP1.7P37.PD-五、附件程序源代码如下#in elude #in elude #in elude Souvoid Delay1ms( un sig ned intcount) un sig ned int i,j;for(i=0;ico unt;i+)for(j=0

9、;j120;j+);XiCl1hFH31q二LJL二二吕LJ1ulUL丄UL亠0 x1A,0 x03, 0 x1A,0 x01, 0 x19,0 x02, 0 x19,0 x03, 0 x1A,0 x03, 0 x1B,0 x02, 0 x1A,0 x0D, 0 x19,0 x03,0 x17,0 x00, 0 x18,0 x66, 0 x18,0 x03, 0 x19,0 x02, 0 x1A,0 x02, 0 x19,0 x0C, 0 x18,0 x0D, 0 x17,0 x030 x16,0 x01, 0 x11,0 x02, 0 x11,0 x03, 0 x10,0 x03, 0 x0

10、F,0 x0C, 0 x10,0 x02, 0 x15,0 x00, 0 x1F,0 x01,0 x1A,0 x01, 0 x18,0 x66, 0 x19,0 x03, 0 x1A,0 x01, 0 x1B,0 x02, 0 x1B,0 x03, 0 x1B,0 x03, 0 x1B,0 x0C,0 x1A,0 x0D, 0 x19,0 x03, 0 x17,0 x00, 0 x1F,0 x01, 0 x1A,0 x01, 0 x18,0 x66, 0 x19,0 x03, 0 x1A,0 x01,0 x10,0 x02, 0 x10,0 x03, 0 x10,0 x03, 0 x1A,0

11、x0C, 0 x18,0 x0D, 0 x17,0 x03, 0 x16,0 x00, 0 x0F,0 x01,0 x15,0 x02, 0 x16,0 x02, 0 x17,0 x70, 0 x18,0 x03, 0 x17,0 x02, 0 x15,0 x03, 0 x15,0 x03, 0 x16,0 x66,0 x16,0 x03, 0 x16,0 x02, 0 x16,0 x03, 0 x15,0 x03, 0 x10,0 x02, 0 x10,0 x01, 0 x11,0 x01, 0 x11,0 x66,0 x10,0 x03, 0 x0F,0 x0C, 0 x1A,0 x02,

12、 0 x19,0 x02, 0 x16,0 x03, 0 x16,0 x03, 0 x18,0 x66, 0 x18,0 x03,0 x18,0 x02, 0 x17,0 x03, 0 x16,0 x03, 0 x19,0 x00, 0 x00,0 x00 ;/*main()InitialSound();while(1)Play(Music_Same,0,3,360);Delay1ms(500);P2=0; /led is offwhile(1)P2=0X24;/ 显示 2,P2 口输出其 BCD 码和扫描码 P2.temp1=DELAYTIMdelay(temp1);P2=0X01;/ 显示

13、 0,P2 口输出其 BCD 码和扫描码 P2.0 temp1=DELAYT delay(temp1);P2=0X12;/ 显示 1,P2 口输出其 BCD 码和扫描码 P2.1 temp1=DELAYTIME;delay(temp1);P2=0X38;/ 显示 3,P2 口输出其 BCD 码和扫描码 P2.3 temp1=DELAYTIME;delay(temp1);*PLAY FOR 51MCUSOUNDCOPYRIGHT(c)2005 BY JJJ.- ALLRIGHTSRESERVED -File Name:SoundPlay.hAuthor:Jiang Jian JunCreated

14、:2005/5/16Modified:NORevision:1.0*/* *曲谱存贮格式 unsigned char code MusicName 音高,音长,音高,音长 , 0,0; 末 尾 :0,0 表示结束 (Important)音高由三位数字组成:个位是表示 17 这七个音符 十位是表示音符所在的音区 :1-低音, 2- 中音, 3- 高音 ; 百位表示这个音符是否要升半音 : 0-不升, 1-升半音。音长最多由三位数字组成: 个位表示音符的时值,其对应关系是:数值(n):|0 |1 |2 |3 | 4 | 5 | 6#define SYSTEM_OSC频率 12000000HZ#de

15、fine SOUND_SPACE的长度分率,/每 4 分音符间隔 sbit BeepIO =12000000/ 定 义 晶 振4/5 /定 义普通 音符演 奏P3A7;/定义输出管脚|几分音符 : |1 |2 |4 |8 |16 |32 |64十位表示音符的演奏效果 (0-2):0-普通, 1-连音, 2-顿音百位是符点位 : 0-无符点, 1-有符点音符=2An调用演奏子程序的格式Play(乐曲名,调号,升降八度,演奏速度);|乐曲名: 要播放的乐曲指针 ,结尾以 (0,0)结束;|调号 (0-11):奏;|升降八度 (1-3)3:升八度 ;|演奏速度 (1-12000):是指乐曲升多少个半

16、音演: 1:降八度,2:不升不降值越大速度越快 ;*/#ifndef _SOUNDPLAY_H_REVISION_FIRST_#define _SOUNDPLAY_H_REVISION_FIRST_/*unsigned int code FreTab12 = 262,277,294,311,330,349,369,392,415,440,466,494 ; /原始频率表unsigned char code SignTab7 = 0,2,4,5,7,9,11 ;/17 在频率表中的位置unsigned char code LengthTab7= 1,2,4,8,16,32,64 ; unsign

17、ed char Sound_Temp_TH0,Sound_Temp_TL0; unsigned char Sound_Temp_TH1,Sound_Temp_TL1;/音符定时器初值暂存/音长定时器初值暂存/*void InitialSound(void)BeepIO = 0;Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256;/ 计算 TL1 应装入的初值(10ms 的初装值 )/ 计算 TH1 应装入的初值TH1 = Sound_Temp_TH1;

18、TL1 = Sound_Temp_TL1;TMOD |= 0 x11;ET0 = 1;ET1= 0;TR0= 0;TR1= 0;EA= 1;void BeepTimer0(void) interrupt 1/音符发生中断BeepIO = !BeepIO;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0;/*void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned intSpeed)unsigned int NewFreTab12;/新的频率表unsign

19、ed char i,j;unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength; unsigned charTone,Length,SL,SH,SM,SLen,XG ,FD;for(i=0;i 11)j = j-12;NewFreTabi = FreTabj*2;elseNewFreTabi = FreTabj;if(Octachord = 1)NewFreTabi=2;else if(Octachord = 3)NewFreTabi=2;SoundLength = 0; while(Sound

20、SoundLength != 0 x00)SoundLength+=2;Point = 0;Tone = SoundPoint;Length = SoundPoint+1; 时值LDiv0 = 12000/Speed;个 10ms)LDiv4 = LDiv0/4;LDiv4 = LDiv4-LDiv4*SOUND_SPACE;TR0= 0;TR1 = 1;while(Point = 2;if (SM=3) CurrentFre = 2;/高音Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);/ 计算计数器初值Sound_Temp_TH0 = Temp_T/256;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论