這學(xué)期做的關(guān)于51單片機(jī)電子琴的一個(gè)課程設(shè)計(jì)
本次設(shè)計(jì)首先對(duì)單片機(jī)設(shè)計(jì)簡(jiǎn)易電子琴仔細(xì)分析,接著制作硬件電路和編寫軟件的程序,最后進(jìn)行軟硬件的調(diào)試運(yùn)行。并且從原理圖,主要芯片,各模塊的原理和各個(gè)模塊的程序調(diào)試來(lái)闡述。利用單片機(jī)產(chǎn)生不同頻率來(lái)獲得我們要求的音階,實(shí)現(xiàn)高、中、低共21個(gè)音符的發(fā)音和顯示和音樂(lè)播放時(shí)的控制顯示,并且能自動(dòng)播放程序中編排的音樂(lè)。系統(tǒng)運(yùn)行穩(wěn)定,其優(yōu)點(diǎn)是硬件電路簡(jiǎn)單,軟件功能完善,控制系統(tǒng)可靠,性價(jià)比高等,具有一定的使用和參考價(jià)值。 文件中有詳細(xì)的課程設(shè)計(jì)解說(shuō),還有整套程序和仿真原理圖,可供做課程設(shè)計(jì)的同學(xué)們做參考!
仿真原理圖:
0.png (16.17 KB, 下載次數(shù): 72)
下載附件
2018-2-4 01:33 上傳
論文截圖:
0.png (23.88 KB, 下載次數(shù): 67)
下載附件
2018-2-4 01:34 上傳
單片機(jī)源程序如下:
- #include<reg52.h>
- #define keyport P1
- #define uchar unsigned char
- #define uint unsigned int
- uchar high,low; //定時(shí)器預(yù)裝值的高8位和低8位
- sbit speak=P3^0;
- sbit gao=P3^5;
- sbit di=P3^6;
- sbit zdbf=P3^7;
- uchar yinjie=1;
- uchar time;
- uchar n=0;
- uchar bo=0;
- uchar code fre[][2]= { 0x8c,0xf8,0x5b,0xf9,0x15,0xfa,0x67,0xfa,0x90,0xfb,0xae,0xfb,0x0c,0xfc, //低音
- 0x44,0xfc,0xac,0xfc,0x09,0xfd,0x34,0xfd,0x82,0xfd,0xc2,0xfd,0x06,0xfe, //中音
- 0x22,0xfe,0x56,0xfe,0x85,0xfe,0x9a,0xfe,0xc1,0xfe,0xe4,0xfe,0x03,0xff, //高音
- };
- void delay(uint );
- void ITimer0(void);//定時(shí)器初始化
- void key(void);
- void dtxs(int,int);
- void song()
- {
- TH0=high;
- TL0=low;
- TR0=1;
- delay(time*240);
- }
- void yinyue()
- {
- uchar code hls[]={ 5,2,2, 3,2,1, 5,2,1, 1,3,4, 6,2,2, 1,3,2, 5,2,4, 5,2,2, 1,2,1, 2,2,1 ,3,2,2 ,2,2,1,1,2,1 ,2,2,6, 5,2,2, 3,2,1, 5,2,1, 1,3,3, 7,2,1, 6,2,2, 1,3,2, 5,2,4, 5,2,2, 2,2,1, 3,2,1, 4,2,3, 7,1,1, 1,2,6, 6,2,2, 1,3,2, 1,3,4, 7,2,2, 6,2,1, 7,2,1, 1,3,4 ,6,2,1,7,2,1, 1,3,1 ,6,2,1, 6,2,1 ,5,2,1 ,3,2,1, 1,2,1, 2,2,6, 5,2,2, 3,2,1, 1,2,1, 1,3,3, 7,2,1, 6,2,2, 1,3,2, 5,2,4, 5,2,2, 2,2,1, 3,2,1, 4,2,3, 7,1,1, 1,2,6
- };
- uchar m;
- n=0;
- while(n<174)
- {
- m=hls[n]+7*(hls[n+1]-1)-1;
- high=fre[m][1];
- low=fre[m][0];
- time=hls[n+2];
- n=n+3;
- song();
- }
- }
- void main (void)
- {
- uchar num;
- ITimer0();
- speak=0;
- while(1)
- {
- key();
- switch(keyport)
- {
- case 0xfe:num=1;break;
- case 0xfd:num=2;break;
- case 0xfb:num= 3;break;
- case 0xf7:num= 4;break;
- case 0xef:num= 5;break;
- case 0xdf:num= 6;break;
- case 0xbf:num= 7;break;
- case 0x7f:num= 8;break;
- default:num= 0;break;
- }
- if(num==0)
- {
- TR0=0;
- speak=0;
- }
- else
- {
- high=fre[7*yinjie+num-1][1];
- low=fre[7*yinjie+num-1][0];
- TR0=1;
- }
- dtxs(yinjie,num);
- }
- }
- void ITimer0(void)
- {
- TMOD |= 0x01; //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響
- EA=1; //總中斷打開(kāi)
- ET0=1; //定時(shí)器中斷打開(kāi)
- TR0=1; //定時(shí)器開(kāi)關(guān)打開(kāi)
- }
- void Timer0_isr(void) interrupt 1
- {
- TH0=high;
- TL0=low;
- speak=!speak;
- if(zdbf==0)
- {
- delay(100);
- if(zdbf==0)
- {
- bo++;
- if(bo/2==1)
- { delay(100);
- if(n<174)n=500; //n賦值大于174,跳出while,停止音樂(lè)
- else n=0;
- dtxs(3,0);
- }
- if(bo%2==0)
- { delay(100);
- n=500; //n賦值大于174,跳出while,停止音樂(lè)
- }
- }
- }/**/
- }
- void key()
- {
- if(zdbf==0)
- {delay(100);
- if(zdbf==0)
- yinyue();
- }
- if(gao==0)
- {
- delay(100);
- if(gao==0)
- {
- delay(100);
- if(yinjie==2)
- yinjie=1;
- else yinjie=2;
- }
- }
- if(di==0)
- {
- delay(100);
- if(di==0)
- {
- delay(100);
- if(yinjie==0)
- yinjie=1;
- else yinjie=0;
- }
- }
- }
- void delay(unsigned int x)
- {
- int a,b;
- for(a=x;a>0;a--)
- for(b=110;b>0;b--);
- }
- void dtxs(k,l)//k是按鍵號(hào),l是工作方式
- {
- char seg[14]={ 0x3F,/*0*/
- 0x06,/*1*/
- 0x5B,/*2*/
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png (62.42 KB, 下載次數(shù): 80)
下載附件
2018-2-4 01:35 上傳
所有資料51hei提供下載:
單片機(jī)終極版.rar
(311.89 KB, 下載次數(shù): 707)
2018-2-3 10:31 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|