欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6709|回復(fù): 1
收起左側(cè)

stc15f2k60s2單片機(jī)電子琴的源程序和仿真

[復(fù)制鏈接]
ID:340212 發(fā)表于 2018-5-28 23:10 | 顯示全部樓層 |閱讀模式
作為保存吧
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png

單片機(jī)源程序如下:
  1. #include "stc15f2k60s2.h"                //調(diào)系統(tǒng)頭文件

  2. #define Display P0                //定義數(shù)碼管顯示端
  3. #define Speak P24        //定義蜂鳴器接口
  4. #define         uint unsigned int
  5. #define         uchar unsigned char
  6. unsigned char sth,stl;                    //定義全局變量 sth stl
  7. unsigned int i,j;                                //定義循環(huán)變量i j

  8. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定義數(shù)碼管顯示 0-9,A-F
  9.    
  10. unsigned char code Music_Code[]={                 //八個(gè)音符        do re mi fa so la si 高音do
  11.         0xf8,0x8b,0xf9,0x5b,0xfa,0x14,0xfa,0x66,
  12.         0xfb,0x03,0xfb,0x8f,0xfc,0x0b,0xfd,0xee};                                                                          

  13. void delay_ms(unsigned int time)        //毫秒延時(shí)函數(shù)
  14. {                                                               
  15.         uint z;
  16.         uchar x,y;
  17.         for(z=0;z<time;z++)
  18.         for(x=5;x>0;x--)
  19.         for(y=97;y>0;y--);
  20. }

  21. void Time0_Init()                        //定時(shí)器T0初始化函數(shù)               
  22. {
  23.         TMOD=0x01;        //工作方式1
  24.         TH0=sth;    //定時(shí)器高八位賦初值     
  25.         TL0=stl;        //定時(shí)器低八位賦初值
  26.         ET0=1;                //使能T0中斷
  27.         EA=1;                //打開(kāi)全局中斷
  28.         TR0=0;                //關(guān)閉定時(shí)器T0
  29. }

  30. void main()         //主函數(shù)入口
  31. {
  32.         Time0_Init();        //定時(shí)器T0初始化
  33. P2=0x00;
  34.         Speak=1;                //蜂鳴器端口置1 停止工作。
  35.         while(1)        //無(wú)限循環(huán)       
  36.         {
  37.                 switch(P1)                //switch語(yǔ)句判斷檢測(cè) P1按鍵狀態(tài)
  38.                 {  
  39.                         case 0xfe:        //P1=0xfe    "do"按鍵按下                        
  40.                                                 delay_ms(10);        //延時(shí)去抖       
  41.                                                 if(P1==0xfe)        //再判斷"do"按鍵是否按下
  42.                                                 {                               
  43.                                                         Display=table[1];        //數(shù)碼管顯示"1"       
  44.                                                         i=0;                        //i置0
  45.                                     TR0=0;                  //關(guān)閉定時(shí)器T0
  46.                                                         sth=Music_Code[2*i];        //定時(shí)器高八位賦值 "do"
  47.                                                     stl=Music_Code[2*i+1];        //定時(shí)器低八位賦值 "do"
  48.                                                         TR0=1;                        //啟動(dòng)定時(shí)器T0
  49.                                                         for(j=0;j<=1000;j++)        //軟件延時(shí),在一定時(shí)間里檢測(cè)
  50.                                                         {                                                                                        
  51.                                                                 delay_ms(10);                //延時(shí)一下
  52.                                                                 if(P1==0xfe) continue;        //"do"按鍵按下,跳出(繼續(xù)發(fā)音)
  53.                                                                 else break;                        //松開(kāi)了,則返回
  54.                                                         }
  55.                                                         Display=0x00;        //關(guān)閉數(shù)碼管顯示
  56.                                                         Speak=1;        //蜂鳴器端口置1 停止工作。                                                                        TR0=0;                //關(guān)閉定時(shí)器T0
  57.                                                         for(;;)       
  58.                                                         {
  59.                                                                 while(P1==0xfe);        //等待按鍵松開(kāi)                                                                                                        
  60.                                                                 delay_ms(10);                //延時(shí)去抖
  61.                                                                 if(P1==0xfe) continue;       
  62.                                                                 else break;                        //確定松開(kāi),退出
  63.                                                         }
  64.                                                         TR0=0;                //關(guān)閉定時(shí)器T0
  65.                                                 }
  66.                                                 break;                        //返回
  67.                         case 0xfd:        //P1=0xfd        "re"按鍵按下                
  68.                                                 delay_ms(10);        //延時(shí)去抖
  69.                                                 if(P1==0xfd)        //再判斷"re"按鍵是否按下
  70.                                         {
  71.                                                         Display=table[2];        //數(shù)碼管顯示"2"
  72.                                                         i=1;                        //i置1
  73.                                                         TR0=0;                  //關(guān)閉定時(shí)器T0
  74.                                                         sth=Music_Code[2*i];        //定時(shí)器高八位賦值 "re"
  75.                                                         stl=Music_Code[2*i+1];        //定時(shí)器低八位賦值 "re"
  76.                                                         TR0=1;                        //啟動(dòng)定時(shí)器T0               
  77.                                                         for(j=0;j<=1000;j++)        //軟件延時(shí),在一定時(shí)間里檢測(cè)
  78.                                                         {                                                                                                        
  79.                                                                 delay_ms(10);        //延時(shí)一下       
  80.                                                                 if(P1==0xfd) continue;        //"re"按鍵按下,跳出(繼續(xù)發(fā)音)       
  81.                                                                 else break;                //松開(kāi)了,則返回
  82.                                                         }
  83.                                                         Display=0x00;        //關(guān)閉數(shù)碼管顯示
  84.                                                         Speak=1;        //蜂鳴器端口置1停止工作。                                                                        TR0=0;                //關(guān)閉定時(shí)器T0
  85.                                                         for(;;)
  86.                                                         {
  87.                                                                 while(P1==0xfd);        //等待按鍵松開(kāi)
  88.                                                                 delay_ms(10);                //延時(shí)去抖
  89.                                                                 if(P1==0xfd) continue;       
  90.                                                                 else break;                        //確定松開(kāi),退出
  91.                                                         }
  92.                                                 }
  93.                                                 TR0=0;                        //關(guān)閉定時(shí)器T0
  94.                                                 break;                        //返回
  95.                         case 0xfb:        //        "mi"按鍵按下
  96.                                                 delay_ms(10);        //延時(shí)去抖                       
  97.                                                 if(P1==0xef)        //再判斷"mi"按鍵是否按下
  98.                                                 {
  99.                                                         Display=table[3];        //數(shù)碼管顯示"3"
  100.                                                         i=2;                        //i置2       
  101.                                                         TR0=0;                  //關(guān)閉定時(shí)器T0       
  102.                                                         sth=Music_Code[2*i];        //定時(shí)器高八位賦值 "mi"       
  103.                                                         stl=Music_Code[2*i+1];        //定時(shí)器低八位賦值 "mi"
  104.                                                         TR0=1;                        //啟動(dòng)定時(shí)器T0       
  105.                                                         for(j=0;j<=1000;j++)        //軟件延時(shí),在一定時(shí)間里檢測(cè)
  106.                                                         {                                                                                        
  107.                                                                 delay_ms(10);        //延時(shí)一下
  108.                                                                 if(P1==0xef) continue;        //"mi"按鍵按下,跳出(繼續(xù)發(fā)音)
  109.                                                                 else break;                //松開(kāi)了,則返回
  110.                                                         }
  111.                                                         Display=0x00;        //關(guān)閉數(shù)碼管顯示
  112.                                                         Speak=1;        //蜂鳴器端口置1,停止工作。
  113.                                                         TR0=0;                //關(guān)閉定時(shí)器T0
  114.                                                         for(;;)
  115.                                                         {
  116.                                                                 while(P1==0xef);        //等待按鍵松開(kāi)       
  117.                                                                 delay_ms(10);                //延時(shí)去抖
  118.                                                                 if(P1==0xef) continue;
  119.                                                                 else break;                        //確定松開(kāi),退出
  120.                                                         }
  121.                                                 }
  122.                                                 TR0=0;                        //關(guān)閉定時(shí)器T0
  123.                                                 break;                        //返回       
  124.                                                
  125.                         case 0xf7:        //"fa"按鍵按下
  126.                                                 delay_ms(10);        //延時(shí)去抖       
  127.                                                 if(P1==0xf7)        //再判斷"fa"按鍵是否按下
  128.                                                 {
  129.                                                         Display=table[4];        //數(shù)碼管顯示"4"
  130.                                                         i=3;                        //i置3
  131.                                                         TR0=0;                  //關(guān)閉定時(shí)器T0       
  132.                                                         sth=Music_Code[2*i];        //定時(shí)器高八位賦值 "fa"       
  133.                                                         stl=Music_Code[2*i+1];        //定時(shí)器低八位賦值 "fa"
  134.                                                         TR0=1;                        //啟動(dòng)定時(shí)器T0       
  135.                                                         for(j=0;j<=1000;j++)        //軟件延時(shí),在一定時(shí)間里檢測(cè)       
  136.                                                         {                                                                                        
  137.                                                 delay_ms(10);        //延時(shí)一下
  138.                                                                 if(P1==0xf7) continue;        //"fa"按鍵按下,跳出(繼續(xù)發(fā)音)
  139.                                                                 else break;                //松開(kāi)了,則返回
  140.                                                         }
  141.                                                         Display=0x00;        //關(guān)閉數(shù)碼管顯示
  142.                                                         Speak=1;        //蜂鳴器端口置1停止工作。                                                                        TR0=0;                //關(guān)閉定時(shí)器T0
  143.                                                         for(;;)
  144.                                                         {
  145.                                                                 while(P1==0xf7);        //等待按鍵松開(kāi)
  146.                                                                 delay_ms(10);                //延時(shí)去抖
  147.                                                                 if(P1==0xf7) continue;
  148.                                                                 else break;                        //確定松開(kāi),退出
  149.                                                         }
  150.                                                 }
  151.                                                 TR0=0;                //關(guān)閉定時(shí)器T0       
  152.                                                 break;                //返回
  153.                         case 0xef:         //"so"按鍵按下
  154.                                                 delay_ms(10);        //延時(shí)去抖                       
  155.                                                 if(P1==0xef)        //再判斷"so"按鍵是否按下
  156.                                                 {
  157.                                                         Display=table[5];        //數(shù)碼管顯示"5"       
  158.                                                         i=4;                        //i置4                       
  159.                                                         TR0=0;                  //關(guān)閉定時(shí)器T0               
  160.                                                         sth=Music_Code[2*i];        //定時(shí)器高八位賦值 "so"
  161.                                                         stl=Music_Code[2*i+1];        //定時(shí)器低八位賦值 "so"
  162.                                                         TR0=1;                        //啟動(dòng)定時(shí)器T0               
  163.                                                         for(j=0;j<=1000;j++)        //軟件延時(shí),在一定時(shí)間里檢測(cè)       
  164.                                                         {                                                                                                        
  165.                                                                 delay_ms(10);                //延時(shí)一下
  166.                                                                 if(P1==0xef) continue;        //"so"按鍵按下,跳出(繼續(xù)發(fā)音)
  167.                                                                 else break;                        //松開(kāi)了,則返回
  168.                                                         }
  169.                                                         Display=0x00;        //關(guān)閉數(shù)碼管顯示
  170.                                                         Speak=1;        //蜂鳴器端口置1 停止工作。                                                                        TR0=0;                //關(guān)閉定時(shí)器T0
  171.                                                         for(;;)
  172.                                                         {
  173.                                                                    while(P1==0xef);        //等待按鍵松開(kāi)               
  174.                                                                 delay_ms(10);                //延時(shí)去抖
  175.                                                                 if(P1==0xef) continue;
  176.                                                                 else break;                        //確定松開(kāi),退出
  177.                                                         }
  178.                                                   }
  179.                                                 TR0=0;                //關(guān)閉定時(shí)器T0
  180.                                                 break;                //返回
  181.                         case 0xdf:         //"la"按鍵按下
  182.                                                 delay_ms(10);        //延時(shí)去抖
  183.                                                 if(P1==0xdf)        //再判斷"la"按鍵是否按下
  184.                                                 {
  185.                                                         Display=table[6];        //數(shù)碼管顯示"6"
  186.                                                         i=5;                        //i置5
  187.                                                         TR0=0;                  //關(guān)閉定時(shí)器T0
  188.                                                         sth=Music_Code[2*i];        //定時(shí)器高八位賦值 "la"
  189.                                                         stl=Music_Code[2*i+1];        //定時(shí)器低八位賦值 "la"
  190.                                                         TR0=1;                        //啟動(dòng)定時(shí)器T0               
  191.                                                         for(j=0;j<=1000;j++)        //軟件延時(shí),在一定時(shí)間里檢測(cè)       
  192.                                                         {                                                                                        
  193.                                                                 delay_ms(10);                //延時(shí)一下
  194.                                                                 if(P1==0xdf) continue;        //"la"按鍵按下,跳出(繼續(xù)發(fā)音)
  195.                                                                 else break;                        //松開(kāi)了,則返回
  196.                                                         }
  197.                                                         Display=0x00;        //關(guān)閉數(shù)碼管顯示
  198.                                                         Speak=1;        //蜂鳴器端口置1停止工作。
  199.                                                         TR0=0;                //關(guān)閉定時(shí)器T0
  200.                                                         for(;;)
  201.                                                         {
  202.                                                                 while(P1==0xdf);        //等待按鍵松開(kāi)       
  203.                                                                 delay_ms(10);                //延時(shí)去抖
  204.                                                                 if(P1==0xdf) continue;
  205.                                                                 else break;                        //確定松開(kāi),退出
  206.                                                         }       
  207.                                                 }
  208.                                                 TR0=0;                //關(guān)閉定時(shí)器T0       
  209.                                                 break;                //返回
  210.                         case 0xbf:         //"si"按鍵按下
  211.                                                 delay_ms(10);        //延時(shí)去抖
  212.                                                 if(P1==0xbf)        //再判斷"si"按鍵是否按下
  213.                                                 {
  214.                                                         Display=table[7];        //數(shù)碼管顯示"7"       
  215.                                                         i=6;                        //i置6
  216.                                                         TR0=0;                  //關(guān)閉定時(shí)器T0
  217.                                                         sth=Music_Code[2*i];        //定時(shí)器高八位賦值 "si"
  218.                                                         stl=Music_Code[2*i+1];        //定時(shí)器低八位賦值 "si"
  219.                                                         TR0=1;                        //啟動(dòng)定時(shí)器T0       
  220.                                                         for(j=0;j<=1000;j++)        //軟件延時(shí),在一定時(shí)間里檢測(cè)       
  221.                                                         {                                                                                        
  222.                                                                 delay_ms(10);                //延時(shí)一下
  223.                                                                 if(P1==0xbf) continue;        //"si"按鍵按下,跳出(繼續(xù)發(fā)音)
  224.                                                                 else break;                        //松開(kāi)了,則返回
  225.                                                         }
  226.                                                         Display=0x00;        //關(guān)閉數(shù)碼管顯示
  227.                                                         Speak=1;        //蜂鳴器端口置1停止工作。                                                                        TR0=0;                //關(guān)閉定時(shí)器T0
  228.                                                         for(;;)
  229.                                                         {
  230.                                                                 while(P1==0xbf);        //等待按鍵松開(kāi)
  231.                                                                 delay_ms(10);                //延時(shí)去抖
  232.                                                                 if(P1==0xbf) continue;
  233.                                                                 else break;                        //確定松開(kāi),退出
  234.                                                         }
  235.                                                 }
  236.                                                 TR0=0;                //關(guān)閉定時(shí)器T0
  237.                                                 break;                //返回
  238.                         case 0x7f:        //"高音do"按鍵按下
  239.                                                 delay_ms(10);        //延時(shí)去抖       
  240.                                                 if(P1==0x7f)        //再判斷"高音do"按鍵是否按下
  241.                                                 {
  242.                                                         Display=0x86;  //數(shù)碼管顯示"1"帶小數(shù)點(diǎn)(1.)
  243.                                                         i=7;                //i置7               
  244.                                                         TR0=0;          //關(guān)閉定時(shí)器T0
  245.                                                         sth=Music_Code[2*i];        //定時(shí)器高八位賦值 "高音do"
  246.                                                         stl=Music_Code[2*i+1];        //定時(shí)器低八位賦值 "高音do"
  247.                                                         TR0=1;                //啟動(dòng)定時(shí)器T0                       
  248.                                                         for(j=0;j<=1000;j++)        //軟件延時(shí),在一定時(shí)間里檢測(cè)               
  249.                                                         {                                                                                        
  250. ……………………

  251. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png
所有資料51hei提供下載:
111.rar (71.71 KB, 下載次數(shù): 96)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:482565 發(fā)表于 2019-3-3 16:01 | 顯示全部樓層
你好,請(qǐng)教下你,你這個(gè)源程序能生成hex文件嗎?仿真不成功。能幫幫忙看看問(wèn)題出在哪?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表