久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 基于51單片機(jī)的電子琴設(shè)計全套資料分享(PCB原理圖+仿真+源碼+文檔) [打印本頁]

作者: LIuwEI.    時間: 2018-10-24 15:17
標(biāo)題: 基于51單片機(jī)的電子琴設(shè)計全套資料分享(PCB原理圖+仿真+源碼+文檔)
設(shè)計內(nèi)容是電子琴設(shè)計,分為高中低三個音域
有哆唻咪發(fā)嗖拉嘻七個音符
有仿真圖,文檔,原理圖,源程序,PCB圖
希望幫助到大家!


仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



Altium Designer畫的單片機(jī)電子琴設(shè)計原理圖和PCB圖如下:(51hei附件中可下載工程文件)





單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. typedef unsigned int  uint;   
  4. typedef unsigned char uchar;
  5. sbit SDA1=P0^2;//串行數(shù)據(jù)輸入,對應(yīng)595的14腳SER
  6. sbit SCL1=P0^1;//移位寄存器時鐘輸入,對應(yīng)595的11腳SCK
  7. sbit SCL2=P0^0;//存儲寄存器時鐘輸入,對應(yīng)595的12腳RCK
  8. sbit W1=P0^3;
  9. sbit W2=P0^4;
  10. sbit k1=P1^0;
  11. sbit k2=P1^1;
  12. sbit k3=P1^2;
  13. sbit k4=P1^3;
  14. sbit k5=P1^4;
  15. sbit k6=P1^5;
  16. sbit k7=P1^6;
  17. sbit D1=P2^6;//播放音樂模式
  18. sbit D2=P2^7;//彈奏模式
  19. sbit k8=P3^2;//功能切換鍵
  20. sbit k9=P3^3;//低音
  21. sbit k10=P3^4;//中音
  22. sbit k11=P3^5;//高音
  23. sbit beep=P2^2;//蜂鳴器接口
  24. uchar code table1[]={   
  25.                                                 0x3F,/*0*/
  26.                                                 0x06,/*1*/
  27.                                                 0x5B,/*2*/
  28.                                                 0x4F,/*3*/
  29.                                                 0x66,/*4*/
  30.                                                 0x6D,/*5*/
  31.                                                 0x7D,/*6*/
  32.                                                 0x07,/*7*/
  33.                                                 0x7F,/*8*/
  34.                                                 0x6F,/*9*/
  35.                                                 0x37,/*N*///中音        
  36.                                                 0x38,/*L*///低音
  37.                                                 0x76,/*H*///高音
  38.                                                 0x79 /*E*/
  39.                                         };//共陰極數(shù)碼管
  40. uchar code table2[]={                 
  41.                                                 0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,//中音
  42.                                                 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,//低音的高8位
  43.                                                 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
  44.                         };//音階頻率表 低八位
  45. uchar code table3[]={               
  46.                                                 0x8E,0xED,0x44,0x6B,0xB4,0xF4,0x2D,//中音
  47.                                                 0x21,0xDB,0x87,0xD7,0x68,0xE8,0x5B,//低音的低8位
  48.                                                 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
  49.                                         };
  50. uchar code table4[]={
  51.                                                 1,2,3,1,      
  52.                                                 1,2,3,1,      
  53.                                                 3,4,5,   
  54.                                                 3,4,5,     
  55.                                                 5,6,5,4,3,1,   
  56.                                                 5,6,5,4,3,1,   
  57.                                                 1,12/*低音5*/,1,     
  58.                                                 1,12,1
  59.                                         };
  60. uchar code table5[]={
  61.                                                 4,4,4,4,   
  62.                                                 4,4,4,4,     
  63.                                                 4,4,8,   
  64.                                                 4,4,8,     
  65.                                                 2,1,2,1,4,4,   
  66.                                                 2,1,2,1,4,4,   
  67.                                                 4,4,6,      
  68.                                                 4,4,6
  69.                                         };
  70. uchar i;
  71. uchar key,aa=0;
  72. uchar bb,cc;
  73. bit flag=0;
  74. //延時子函數(shù)
  75. void delay(uint z)
  76. {
  77.         uint x,y;
  78.         for(x=z;x>0;x--)
  79.                 for(y=340;y>0;y--);               
  80. }
  81. void in(uchar Data)
  82. {
  83.         uchar i;
  84.         for(i=0;i<8;i++)   //循環(huán)8次,剛好移完8位
  85.         {
  86.               Data<<=1;
  87.                   SCL1=CY;
  88.                   SDA1=1;        //先將移位寄存器控制引腳置為低   
  89.               _nop_();
  90.                   _nop_();
  91.               SDA1=0;
  92.         }
  93. }
  94. void out()
  95. {
  96.         SCL2=0;   //先將存儲寄存器引腳置為低
  97.         _nop_();
  98.         SCL2=1;    //再置為高,產(chǎn)生移位時鐘上升沿,上升沿時移位寄存器的數(shù)據(jù)進(jìn)入數(shù)據(jù)存儲寄存器,更新顯示數(shù)據(jù)。
  99.         _nop_();
  100.         SCL2=0;
  101. }
  102. //初始化子函數(shù)
  103. void init()
  104. {
  105.         beep=0;
  106.         D1=1;
  107.         D2=0;
  108.         EA=1;//開總中斷
  109.         TCON=0x01;//外部中斷0設(shè)置為邊沿觸發(fā)
  110.         EX0=1;//開外部中斷0
  111.         ET0=1;
  112.         ET1=1;
  113.         TMOD=0x11;//定時器0,1工作在定時狀態(tài),均為方式1
  114. }
  115. //數(shù)碼管顯示子函數(shù)
  116. void display1()
  117. {
  118.         in(table1[aa]);  //再傳段碼
  119.         out();
  120.         W1=0;;
  121.         delay(1);             //延遲時間2ms以內(nèi)
  122.         W1=1;
  123.         in(table1[cc+1]);  //再傳段碼
  124.         out();
  125.         W2=0;
  126.         delay(1);             //延遲時間2ms以內(nèi)
  127.         W2=1;
  128. }
  129. //高低音選擇子函數(shù)
  130. void yinjie()
  131. {
  132.         if(k10==0)
  133.         {        
  134.                 delay(5);
  135.                 if(k10==0)
  136.                 {   
  137.                         aa=10;
  138.                         bb=0;//返回10為seg[10]顯示C
  139.                 }
  140.         }
  141.         if(k9==0)
  142.         {        
  143.                 delay(5);
  144.                 if(k9==0)
  145.                 {        
  146.                         aa=11;
  147.                         bb=1;//返回11為seg[11]顯示L
  148.                 }
  149.         }
  150.         if(k11==0)
  151.         {        
  152.                 delay(5);
  153.                 if(k11==0)
  154.                 {        
  155.                         aa=12;
  156.                         bb=2;//返回12為seg[12]顯示H
  157.                 }
  158.         }
  159.         if(aa==0)
  160.         {
  161.                 aa=13;
  162.         }
  163. }
  164. //播放音樂子函數(shù)
  165. void display_music()
  166. {        
  167.         TH0=table2[table4[i]-1];
  168.         TL0=table3[table4[i]-1];
  169.         while(flag==0)
  170.         {        
  171.                 if(i<32)
  172.                 {
  173.                         TR0=1;
  174.                         delay(57*table5[i]);
  175.                         i++;
  176.                 }
  177.                 if(i==32)
  178.                 {
  179.                         i=0;
  180.                 }
  181.         }        
  182. }
  183. //演奏模式子函數(shù)
  184. void display_play()
  185. {
  186.         TR0=0;
  187.         TR1=0;
  188.         yinjie();
  189.         in(table1[aa]);  //再傳段碼
  190.         out();
  191.         W1=0;;
  192.         delay(1);             //延遲時間2ms以內(nèi)
  193.         W1=1;
  194.         if(aa!=13&&flag==1)
  195.         {        
  196.                 if(k1==0)
  197.                 {        
  198.                         TH1=table2[7*bb+cc];
  199.                         TL1=table3[7*bb+cc];
  200.                         TR1=1;        
  201.                         while(k1==0)
  202.                         {        
  203.                                 cc=0;
  204.                                 display1();
  205.                         }
  206.                 }
  207.                 if(k2==0)
  208.                 {        
  209.                         TH1=table2[7*bb+cc];
  210.                         TL1=table3[7*bb+cc];
  211.                         TR1=1;
  212.                         while(k2==0)
  213.                         {        
  214.                                 cc=1;
  215.                                 display1();
  216.                         }
  217.                 }        
  218.                 if(k3==0)
  219.                 {               
  220.                         TH1=table2[7*bb+cc];
  221.                         TL1=table3[7*bb+cc];
  222.                         TR1=1;
  223.                         while(k3==0)
  224.                         {        
  225.                                 cc=2;
  226.                                 display1();
  227.                         }
  228.                 }
  229.                 if(k4==0)
  230.                 {
  231.                         TH1=table2[7*bb+cc];
  232.                         TL1=table3[7*bb+cc];
  233.                         TR1=1;
  234.                         while(k4==0)
  235.                         {        
  236.                                 cc=3;
  237.                                 display1();               
  238.                         }
  239.                 }
  240.                 if(k5==0)
  241.                 {        
  242.                         TH1=table2[7*bb+cc];
  243.                         TL1=table3[7*bb+cc];
  244.                         TR1=1;
  245.                         while(k5==0)
  246.                         {
  247.                                 cc=4;
  248.                                 display1();
  249.                         }
  250.                 }
  251.                 if(k6==0)
  252.                 {        
  253.                         TH1=table2[7*bb+cc];
  254.                         TL1=table3[7*bb+cc];
  255.                         TR1=1;
  256.                         while(k6==0)
  257.                         {
  258.                                 cc=5;
  259.                                 display1();                                                        
  260.                         }
  261.                 }
  262.                 if(k7==0)
  263.                 {               
  264.                         TH1=table2[7*bb+cc];
  265.                         TL1=table3[7*bb+cc];
  266.                         TR1=1;        
  267.                         while(k7==0)
  268.                         {
  269.                                 cc=6;
  270.                                 display1();        
  271.                         }
  272.                 }               
  273.         }
  274. }
  275. //主函數(shù)
  276. void main()
  277. {
  278.         init();
  279.         while(1)
  280.         {        
  281.                 if(flag==0)
  282.                         display_music();
  283.                 else
  284.                         display_play();
  285.         }
  286. }
  287. //外部0中斷子函數(shù)
  288. void wb0() interrupt 0
  289. {
  290.         if(k8==0)
  291.         {
  292.                 delay(5);
  293.                 while(k8==0);
  294.                 flag=~flag;
  295.                 D1=~D1;
  296.                 D2=~D2;
  297.         }               
  298. }
  299. //定時器0中斷子函數(shù)
  300. void t0() interrupt 1
  301. {        
  302.         TR0=0;
  303.         TH0=table2[table4[i]-1];
  304.         TL0=table3[table4[i]-1];
  305.         beep=~beep;
  306.         TR0=1;
  307. }
  308. //定時器1中斷子函數(shù)
  309. void t1() interrupt 3
  310. {        
  311.         TR1=0;
  312.         TH1=table2[7*bb+cc];
  313.         TL1=table3[7*bb+cc];
  314.         beep=~beep;
  315.         TR1=1;
  316. }
復(fù)制代碼
Keil代碼與Proteus8.8 7.5仿真和文檔下載:
電子琴仿真程序.7z (418.25 KB, 下載次數(shù): 713)

作者: anying    時間: 2018-10-24 19:07
好資料,51黑有你更精彩!!!
作者: 勵志少年    時間: 2018-10-27 16:43
再研究中

作者: 晨曦826    時間: 2018-10-30 23:50
這里面得仿真可以直接用軟件打開使用么
作者: 晨曦826    時間: 2018-10-30 23:51
anying 發(fā)表于 2018-10-24 19:07
兄弟,你是大家的救星!

你好   你下載了嗎?這里面包含仿真和程序么?
作者: WQ5201314    時間: 2019-5-27 18:12
右邊的元件怎么連接
作者: Jacoky    時間: 2019-6-10 13:04
可以聯(lián)系一下您嗎,做實物的時候怎么上電?74hc595驅(qū)動數(shù)碼管有十個引腳,但原理圖只有5個
作者: Jacoky    時間: 2019-6-10 14:48
WQ5201314 發(fā)表于 2019-5-27 18:12
右邊的元件怎么連接

你弄好了嗎
作者: __Un___    時間: 2019-6-10 15:27
keyi非常好
作者: QQQQFRR    時間: 2019-11-25 17:28
非常非常全面
作者: 443892420    時間: 2019-12-17 21:27
咋弄的?

作者: rizuan    時間: 2020-4-8 20:18
能發(fā)出不同音色嗎?
作者: Viola1    時間: 2020-5-10 21:18
瘋狂學(xué)習(xí)中,膜拜
作者: Onerh999    時間: 2020-6-22 15:57
如果需要實現(xiàn)上位機(jī)通訊的話應(yīng)該從哪個思路擴(kuò)展呢

作者: 2043383875arche    時間: 2020-6-27 09:11
感謝分享,正在努力學(xué)習(xí)中
作者: 月涼    時間: 2021-11-4 02:39
可以做實物嗎?
作者: tttzzzyy    時間: 2022-4-30 11:18
可以直接用軟件打開嗎
作者: Yxb1123    時間: 2022-5-24 18:25
晨曦826 發(fā)表于 2018-10-30 23:50
這里面得仿真可以直接用軟件打開使用么

dsn文件是Proteus7.5版本的工程文件,只能用Proteus7.5打開
作者: 渣渣kun    時間: 2022-6-16 16:20
想問一下aa,bb,cc是什么意思
作者: tt98    時間: 2022-7-11 11:29
試試看看好不好用?
作者: tt98    時間: 2022-7-11 14:21
都說內(nèi)容有誤,我來看看
作者: tt98    時間: 2022-7-11 14:30
剛才試過了,仿真正常,文件都正常。謝謝樓主!!!
作者: TUTOO    時間: 2023-6-19 20:20
是一份好資料,解決了我的燃眉之急,點贊,51黑有你更精彩!!!
作者: 青桐與藍(lán)桉    時間: 2023-9-13 15:06
Jacoky 發(fā)表于 2019-6-10 13:04
可以聯(lián)系一下您嗎,做實物的時候怎么上電?74hc595驅(qū)動數(shù)碼管有十個引腳,但原理圖只有5個

可以給他接排針,然后利用燒入器供電,我做了實物,感覺樓主的作品有些小問題

作者: 科林科技    時間: 2023-9-16 09:26
好資料點贊,51黑有你更精彩!!!
作者: @WDADAD    時間: 2024-1-3 00:31
青桐與藍(lán)桉 發(fā)表于 2023-9-13 15:06
可以給他接排針,然后利用燒入器供電,我做了實物,感覺樓主的作品有些小問題

大佬,蜂鳴器是有源的還是無源的

作者: allen98    時間: 2025-5-9 23:39
感謝分享,拿來學(xué)習(xí)了




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 99精品欧美一区二区三区综合在线 | 精品伦精品一区二区三区视频 | 精品乱码一区二区三四区 | 国产精品一区在线观看 | 91久久国产综合久久91精品网站 | 日美女逼逼 | 天堂资源最新在线 | 久久久久国产一区二区 | 中文字幕欧美一区二区 | 国产一区二区视频免费在线观看 | 成人国产免费观看 | 亚洲欧美综合精品另类天天更新 | 日本一区二区三区视频在线 | 一区二区三区高清在线观看 | 国产成人精品一区二区三区在线 | 成人精品一区亚洲午夜久久久 | 涩爱av一区二区三区 | 久久久人成影片免费观看 | 成人在线免费观看 | 伊人二区 | www.夜夜骑.com | 久久在线视频 | 婷婷在线视频 | 国产高清视频一区二区 | 亚洲精品久久久久久久久久久久久 | 欧美一区二区在线观看 | 欧美性生活一区二区三区 | 福利视频大全 | 久久久久久亚洲精品 | 日日射夜夜骑 | 欧美综合国产精品久久丁香 | 精品中文字幕视频 | 国产中文字幕在线 | 国产精品久久久久久久久久久久久 | 四虎最新视频 | 综合第一页 | 精品在线一区二区 | 久久久久国产 | 亚洲成人一区二区 | 九九热精品在线视频 | 国产日韩中文字幕 |