在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → 电子激光竖琴资料

电子激光竖琴资料

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:19.60M
  • 下载次数:9
  • 浏览次数:234
  • 发布时间:2020-07-14
  • 实例类别:嵌入式开发
  • 发 布 人:迷离小天
  • 文件格式:.rar
  • 所需积分:5
 相关标签: 电子 激光 C51

实例介绍

【实例简介】一个非常漂亮的可弹奏激光电子竖琴,用手弹的时候遮挡住激光柱,就会发出相应的声音.包括制作过程,程序,原理,实物图,有需要的话可以参考一下

【实例截图】

【文件目录】

激光琴资料

├── 激光竖琴程序.c
├── 激光竖琴原理图.SCHDOC
├── 激光竖琴原理图.pdf
└── 激光竖琴制作教程.doc

0 directories, 4 files



【核心代码】
  1. 名称:电子琴
  2. 编写:Cgr
  3. 修改:无
  4. 内容:7个激光束控制7个音符7个LED显示,1个控制播放音乐,1个高中低音切换
  5.      
  6. ------------------------------------------------*/
  7. #include "reg52.h"
  8. #include "intrins.h"

  9. sbit SPK    = P3^4;
  10. sbit LED_L  = P3^7;
  11. sbit LED_M  = P3^6;
  12. sbit LED_H  = P3^5;
  13. sbit KEY    = P3^3;

  14. #define KEYDELAY 20
  15. #define KEY_PORT P2
  16. #define LED_PORT P1

  17. bit FT_1ms,FT_250ms;
  18. bit F_PlaySong,F_PlayTone,F_KeyDelay,F_Tone,F_KeyUp,F_Music_Ide;
  19. unsigned char Freq_H,Freq_L,SongLen,PlayIde,i;
  20. unsigned char KeyBuf,KeySure,KeyDelay_Cnt,Timer1_Cnt,KeyDelay_Cnt1;
  21. unsigned char k,Time,PortTemp;

  22.                          //世上只有妈妈好数据表
  23. code unsigned char MUSIC[]={6,2,6,     5,2,2,      3,2,4,    5,2,4,    1,3,4,    6,2,2,    5,2,2,
  24.                             6,2,8,      3,2,4,      5,2,2,    6,2,2,    5,2,4,   3,2,4,    1,2,2,
  25.                             6,1,2,      5,2,2,      3,2,2,    2,2,8,    2,2,6,   3,2,2,    5,2,4,
  26.                             5,2,2,      6,2,2,      3,2,4,    2,2,4,    1,2,8,   5,2,6,    3,2,2,
  27.                             2,2,2,      1,2,2,      6,1,2,   1,2,2,    5,1,12,   0,0,0
  28.                             };
  29. /***********************生日快乐**********************/
  30. code unsigned char MUSIC1[]={
  31.                                  5,1,2, 5,1,2, 6,1,4, 5,1,4, 1,2,4, 7,1,8,
  32.                                  5,1,2, 5,1,2, 6,1,4, 5,1,4, 2,2,4, 1,2,8,
  33.                                  5,1,2, 5,1,2, 5,2,4, 3,2,4, 1,2,4, 7,1,4,
  34.                                  6,1,8, 4,2,2, 4,2,2, 3,2,4, 1,2,4, 2,2,4,
  35.                                  1,2,12, 0,0,0};

  36.                          // 音阶频率表 高八位
  37. code unsigned char FREQH[]={
  38.                                 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 
  39.                                 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
  40.                                 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
  41.                                 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
  42.                                } ;
  43.                          // 音阶频率表 低八位
  44. code unsigned char FREQL[]={
  45.                                  0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
  46.                                  0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
  47.                                  0xEE,0x44, 0x6B,0xB4,0xF4,0x2D, 
  48.                                  0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
  49.                                 };

  50. void TimerInit(void)
  51. {   
  52.     TMOD = 0x11;
  53.     TH1  = (65536 - 1000) / 256;
  54.     TL1  = (65536 - 1000) % 256;
  55.     ET0  = 1;
  56.     ET1  = 1;
  57.     TR0 = 1;
  58.     TR1  = 1;
  59.     EA   = 1;
  60. }
  61. void ScanKey(void)
  62. {
  63.     if(F_KeyDelay)
  64.     {
  65.         KeyDelay_Cnt --;
  66.         if(KeyDelay_Cnt == 0)
  67.         {
  68.             F_KeyDelay = 0;
  69.             KeySure = KeyBuf;
  70.             F_KeyUp = 1;
  71.         }        
  72.     }
  73.     if(KeyBuf != KEY_PORT)
  74.     {
  75.         KeyBuf = KEY_PORT;
  76.         KeyDelay_Cnt = KEYDELAY;
  77.         F_KeyDelay = 1;
  78.     }

  79.     if(!KEY)
  80.     {
  81.         KeyDelay_Cnt1 --;
  82.         if(KeyDelay_Cnt1 == 0)
  83.         {
  84.             if(F_PlaySong == 0)
  85.                 {
  86.                 F_Music_Ide = !F_Music_Ide;
  87.                 F_PlaySong = 1;
  88.                 i = 0;
  89.                 }
  90.         }
  91.     }
  92.     else
  93.     {
  94.          KeyDelay_Cnt1 = KEYDELAY;
  95.     }
  96.     if(PlayIde == 1)
  97.     {
  98.         LED_L = 1;
  99.         LED_M = 0;
  100.         LED_H = 1;
  101.     }
  102.     if(PlayIde == 2)
  103.     {
  104.         LED_L = 1;
  105.         LED_M = 1;
  106.         LED_H = 0;
  107.     }
  108.     if(PlayIde == 0)
  109.     {
  110.         LED_L = 0;
  111.         LED_M = 1;
  112.         LED_H = 1;
  113.     } 
  114. }
  115. void main(void)

  116.     TimerInit();
  117.     F_PlayTone = 0; 
  118.     PortTemp = 0x7f;
  119.     for(i = 0;i < 7;)
  120.     {
  121.         if(FT_250ms)
  122.         {
  123.             FT_250ms = 0;
  124.             i ;
  125.             PortTemp = _crol_(PortTemp,1);
  126.             LED_PORT= PortTemp;
  127.         }
  128.     }
  129.     for(i = 0;i < 7;)
  130.     {
  131.         if(FT_250ms)
  132.         {
  133.             FT_250ms = 0;
  134.             i ;
  135.             PortTemp = _cror_(PortTemp,1);
  136.             LED_PORT= PortTemp;
  137.         }
  138.     }
  139.     LED_PORT = 0xff;
  140.     i = 0;
  141.     while(1)
  142.     {
  143.         if(FT_1ms)
  144.         {
  145.             FT_1ms = 0;
  146.             WDT_CONTR = 0x38;
  147.             ScanKey();
  148.             if(F_PlaySong)
  149.                 {
  150.                 if(FT_250ms)
  151.                     {
  152.                     FT_250ms = 0;
  153.                     if(Time > 0)
  154.                             {
  155.                         Time --;
  156.                             }
  157.                     else
  158.                             {
  159.                         PortTemp = 0x01;
  160.                         F_PlayTone = 1;
  161.                         if(F_Music_Ide)
  162.                                 {
  163.                             k = MUSIC[i] 7 * MUSIC[i 1] - 1;//去音符振荡频率所需数据
  164.                             PlayIde = MUSIC[i 1] - 1;
  165.                             PortTemp <<= (MUSIC[i]-1);
  166.                             Time = MUSIC[i 2] - 1;          //节拍时长           
  167.                             if(! MUSIC[i])
  168.                                         {
  169.                                     i = 0;
  170.                                 F_PlaySong = 0;
  171.                                 LED_PORT = 0xff;
  172.                                 F_PlayTone = 0;
  173.                                     SPK = 1;
  174.                                 PlayIde = 1;
  175.                                 Time = 4;
  176.                                         }
  177.                                 }
  178.                             else
  179.                                 {
  180.                             k = MUSIC1[i] 7 * MUSIC1[i 1] - 1;//去音符振荡频率所需数据
  181.                             PlayIde = MUSIC1[i 1] - 1;
  182.                             PortTemp <<= (MUSIC1[i]-1);
  183.                             Time = MUSIC1[i 2] - 1;          //节拍时长     
  184.                             if(! MUSIC1[i])
  185.                                         {
  186.                                     i = 0;
  187.                                 F_PlaySong = 0;
  188.                                 LED_PORT = 0xff;
  189.                                 F_PlayTone = 0;
  190.                                     SPK = 1;
  191.                                 PlayIde = 1;
  192.                                 Time = 4;
  193.                                         }
  194.                                 }
  195.                         PortTemp = ~PortTemp;
  196.                         LED_PORT = PortTemp;
  197.                         Freq_H = FREQH[k];
  198.                         Freq_L = FREQL[k];
  199.                         i = i 3;
  200.                     }                               
  201.                     }
  202.                 }
  203.             else
  204.             {                
  205.                 switch(KeySure)
  206.                     {
  207.                             
  208.                     case 0x81:  F_Tone = 0;F_PlayTone = 1;  Timer1_Cnt = 0;k=0; LED_PORT = 0xfe;
  209.                         break;
  210.                     case 0x41:  F_Tone = 0;F_PlayTone = 1;  Timer1_Cnt = 0;k=1; LED_PORT = 0xfd;
  211.                         break;
  212.                     case 0x21:  F_Tone = 0;F_PlayTone = 1;  Timer1_Cnt = 0;k=2; LED_PORT = 0xfb;
  213.                         break;
  214.                     case 0x11:  F_Tone = 0;F_PlayTone = 1;  Timer1_Cnt = 0;k=3; LED_PORT = 0xf7;
  215.                         break;
  216.                     case 0x09:  F_Tone = 0;F_PlayTone = 1;  Timer1_Cnt = 0;k=4; LED_PORT = 0xef;
  217.                         break;
  218.                     case 0x05:  F_Tone = 0;F_PlayTone = 1;  Timer1_Cnt = 0;k=5; LED_PORT = 0xdf;
  219.                         break;
  220.                     case 0x03:  F_Tone = 0;F_PlayTone = 1;  Timer1_Cnt = 0;k=6; LED_PORT = 0xbf;
  221.                         break;
  222.                     case 0x00:        
  223.                                 if(F_KeyUp)
  224.                                             {
  225.                                     F_KeyUp = 0;        
  226.                                     PlayIde ;        
  227.                                     if(PlayIde == 3) 
  228.                                                 {                
  229.                                         PlayIde = 0;
  230.                                                     } 
  231.                                             }
  232.                         break;
  233.                     default:         
  234.                         break;
  235.                 }          
  236.                 Freq_H = FREQH[(PlayIde * 7) k];
  237.                 Freq_L = FREQL[(PlayIde * 7) k];
  238.                 if(F_Tone)
  239.                     {
  240.                     F_Tone = 0;
  241.                     F_PlayTone = 0;
  242. ……………………

标签: 电子 激光 C51

实例下载地址

电子激光竖琴资料

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警