|
設(shè)計(jì)內(nèi)容是電子琴設(shè)計(jì),分為高中低三個(gè)音域
有哆唻咪發(fā)嗖拉嘻七個(gè)音符
有仿真圖,文檔,原理圖,源程序,PCB圖
希望幫助到大家!
0.png (28.02 KB, 下載次數(shù): 104)
下載附件
2018-10-24 17:47 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (157.19 KB, 下載次數(shù): 71)
下載附件
2022-5-24 19:22 上傳
捕獲1.PNG (68.46 KB, 下載次數(shù): 110)
下載附件
2018-10-24 15:23 上傳
Altium Designer畫的單片機(jī)電子琴設(shè)計(jì)原理圖和PCB圖如下:(51hei附件中可下載工程文件)
捕獲3.PNG (41.06 KB, 下載次數(shù): 114)
下載附件
PCB圖
2018-10-24 15:25 上傳
0.png (4.07 KB, 下載次數(shù): 86)
下載附件
2018-10-24 17:48 上傳
捕獲2.PNG (12.59 KB, 下載次數(shù): 94)
下載附件
元件清單
2018-10-24 15:24 上傳
捕獲.4PNG.PNG (3.56 KB, 下載次數(shù): 77)
下載附件
2018-10-24 15:27 上傳
單片機(jī)源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- typedef unsigned int uint;
- typedef unsigned char uchar;
- sbit SDA1=P0^2;//串行數(shù)據(jù)輸入,對(duì)應(yīng)595的14腳SER
- sbit SCL1=P0^1;//移位寄存器時(shí)鐘輸入,對(duì)應(yīng)595的11腳SCK
- sbit SCL2=P0^0;//存儲(chǔ)寄存器時(shí)鐘輸入,對(duì)應(yīng)595的12腳RCK
- sbit W1=P0^3;
- sbit W2=P0^4;
- sbit k1=P1^0;
- sbit k2=P1^1;
- sbit k3=P1^2;
- sbit k4=P1^3;
- sbit k5=P1^4;
- sbit k6=P1^5;
- sbit k7=P1^6;
- sbit D1=P2^6;//播放音樂模式
- sbit D2=P2^7;//彈奏模式
- sbit k8=P3^2;//功能切換鍵
- sbit k9=P3^3;//低音
- sbit k10=P3^4;//中音
- sbit k11=P3^5;//高音
- sbit beep=P2^2;//蜂鳴器接口
- uchar code table1[]={
- 0x3F,/*0*/
- 0x06,/*1*/
- 0x5B,/*2*/
- 0x4F,/*3*/
- 0x66,/*4*/
- 0x6D,/*5*/
- 0x7D,/*6*/
- 0x07,/*7*/
- 0x7F,/*8*/
- 0x6F,/*9*/
- 0x37,/*N*///中音
- 0x38,/*L*///低音
- 0x76,/*H*///高音
- 0x79 /*E*/
- };//共陰極數(shù)碼管
- uchar code table2[]={
- 0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,//中音
- 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,//低音的高8位
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
- };//音階頻率表 低八位
- uchar code table3[]={
- 0x8E,0xED,0x44,0x6B,0xB4,0xF4,0x2D,//中音
- 0x21,0xDB,0x87,0xD7,0x68,0xE8,0x5B,//低音的低8位
- 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
- };
- uchar code table4[]={
- 1,2,3,1,
- 1,2,3,1,
- 3,4,5,
- 3,4,5,
- 5,6,5,4,3,1,
- 5,6,5,4,3,1,
- 1,12/*低音5*/,1,
- 1,12,1
- };
- uchar code table5[]={
- 4,4,4,4,
- 4,4,4,4,
- 4,4,8,
- 4,4,8,
- 2,1,2,1,4,4,
- 2,1,2,1,4,4,
- 4,4,6,
- 4,4,6
- };
- uchar i;
- uchar key,aa=0;
- uchar bb,cc;
- bit flag=0;
- //延時(shí)子函數(shù)
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=340;y>0;y--);
- }
- void in(uchar Data)
- {
- uchar i;
- for(i=0;i<8;i++) //循環(huán)8次,剛好移完8位
- {
- Data<<=1;
- SCL1=CY;
- SDA1=1; //先將移位寄存器控制引腳置為低
- _nop_();
- _nop_();
- SDA1=0;
- }
- }
- void out()
- {
- SCL2=0; //先將存儲(chǔ)寄存器引腳置為低
- _nop_();
- SCL2=1; //再置為高,產(chǎn)生移位時(shí)鐘上升沿,上升沿時(shí)移位寄存器的數(shù)據(jù)進(jìn)入數(shù)據(jù)存儲(chǔ)寄存器,更新顯示數(shù)據(jù)。
- _nop_();
- SCL2=0;
- }
- //初始化子函數(shù)
- void init()
- {
- beep=0;
- D1=1;
- D2=0;
- EA=1;//開總中斷
- TCON=0x01;//外部中斷0設(shè)置為邊沿觸發(fā)
- EX0=1;//開外部中斷0
- ET0=1;
- ET1=1;
- TMOD=0x11;//定時(shí)器0,1工作在定時(shí)狀態(tài),均為方式1
- }
- //數(shù)碼管顯示子函數(shù)
- void display1()
- {
- in(table1[aa]); //再傳段碼
- out();
- W1=0;;
- delay(1); //延遲時(shí)間2ms以內(nèi)
- W1=1;
- in(table1[cc+1]); //再傳段碼
- out();
- W2=0;
- delay(1); //延遲時(shí)間2ms以內(nèi)
- W2=1;
- }
- //高低音選擇子函數(shù)
- void yinjie()
- {
- if(k10==0)
- {
- delay(5);
- if(k10==0)
- {
- aa=10;
- bb=0;//返回10為seg[10]顯示C
- }
- }
- if(k9==0)
- {
- delay(5);
- if(k9==0)
- {
- aa=11;
- bb=1;//返回11為seg[11]顯示L
- }
- }
- if(k11==0)
- {
- delay(5);
- if(k11==0)
- {
- aa=12;
- bb=2;//返回12為seg[12]顯示H
- }
- }
- if(aa==0)
- {
- aa=13;
- }
- }
- //播放音樂子函數(shù)
- void display_music()
- {
- TH0=table2[table4[i]-1];
- TL0=table3[table4[i]-1];
- while(flag==0)
- {
- if(i<32)
- {
- TR0=1;
- delay(57*table5[i]);
- i++;
- }
- if(i==32)
- {
- i=0;
- }
- }
- }
- //演奏模式子函數(shù)
- void display_play()
- {
- TR0=0;
- TR1=0;
- yinjie();
- in(table1[aa]); //再傳段碼
- out();
- W1=0;;
- delay(1); //延遲時(shí)間2ms以內(nèi)
- W1=1;
- if(aa!=13&&flag==1)
- {
- if(k1==0)
- {
- TH1=table2[7*bb+cc];
- TL1=table3[7*bb+cc];
- TR1=1;
- while(k1==0)
- {
- cc=0;
- display1();
- }
- }
- if(k2==0)
- {
- TH1=table2[7*bb+cc];
- TL1=table3[7*bb+cc];
- TR1=1;
- while(k2==0)
- {
- cc=1;
- display1();
- }
- }
- if(k3==0)
- {
- TH1=table2[7*bb+cc];
- TL1=table3[7*bb+cc];
- TR1=1;
- while(k3==0)
- {
- cc=2;
- display1();
- }
- }
- if(k4==0)
- {
- TH1=table2[7*bb+cc];
- TL1=table3[7*bb+cc];
- TR1=1;
- while(k4==0)
- {
- cc=3;
- display1();
- }
- }
- if(k5==0)
- {
- TH1=table2[7*bb+cc];
- TL1=table3[7*bb+cc];
- TR1=1;
- while(k5==0)
- {
- cc=4;
- display1();
- }
- }
- if(k6==0)
- {
- TH1=table2[7*bb+cc];
- TL1=table3[7*bb+cc];
- TR1=1;
- while(k6==0)
- {
- cc=5;
- display1();
- }
- }
- if(k7==0)
- {
- TH1=table2[7*bb+cc];
- TL1=table3[7*bb+cc];
- TR1=1;
- while(k7==0)
- {
- cc=6;
- display1();
- }
- }
- }
- }
- //主函數(shù)
- void main()
- {
- init();
- while(1)
- {
- if(flag==0)
- display_music();
- else
- display_play();
- }
- }
- //外部0中斷子函數(shù)
- void wb0() interrupt 0
- {
- if(k8==0)
- {
- delay(5);
- while(k8==0);
- flag=~flag;
- D1=~D1;
- D2=~D2;
- }
- }
- //定時(shí)器0中斷子函數(shù)
- void t0() interrupt 1
- {
- TR0=0;
- TH0=table2[table4[i]-1];
- TL0=table3[table4[i]-1];
- beep=~beep;
- TR0=1;
- }
- //定時(shí)器1中斷子函數(shù)
- void t1() interrupt 3
- {
- TR1=0;
- TH1=table2[7*bb+cc];
- TL1=table3[7*bb+cc];
- beep=~beep;
- TR1=1;
- }
復(fù)制代碼 Keil代碼與Proteus8.8 7.5仿真和文檔下載:
電子琴仿真程序.7z
(418.25 KB, 下載次數(shù): 713)
2022-5-24 19:21 上傳
點(diǎn)擊文件名下載附件
文檔原理圖仿真圖都有 下載積分: 黑幣 -5
|
|