找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1639|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机并行口简易电子琴程序

[复制链接]
跳转到指定楼层
楼主
ID:269712 发表于 2018-1-1 13:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本程序针对51单片机来设计电子琴
简单io口控制键盘
无源蜂鸣器可发出30几种频率的音频
新手一看就懂

单片机源程序如下:
  1. #define uchar unsigned char //定义一下方便使用
  2. #define uint unsigned int
  3. #define ulong unsigned long  
  4. #include <reg52.h> //包括一个52 标准内核的头文件
  5. char code dx516[3] _at_ 0x003b;//这是为了仿真设置的
  6. sbit BEEP=P1^0; //喇叭输出脚
  7. sbit K1= P2^0;
  8. sbit K2= P2^1;  
  9. sbit K3= P2^2;  
  10. sbit K4= P2^3;  
  11. sbit K5= P2^4;
  12. sbit K6= P2^5;
  13. sbit K7= P2^6;
  14. sbit K8= P2^7;
  15. sbit K9= P1^7;
  16. uchar th0_f; //在中断中装载的T0 的值高8 位
  17. uchar tl0_f; //在中断中装载的T0 的值低8 位
  18. //T0 的值及输出频率对照表
  19. uchar code freq[36*2]={  
  20. 0xA9,0xEF,//00220HZ ,1 //0  
  21. 0x93,0xF0,//00233HZ ,1#  
  22. 0x73,0xF1,//00247HZ ,2  
  23. 0x49,0xF2,//00262HZ ,2#  
  24. 0x07,0xF3,//00277HZ ,3  
  25. 0xC8,0xF3,//00294HZ ,4  
  26. 0x73,0xF4,//00311HZ ,4#  
  27. 0x1E,0xF5,//00330HZ ,5  
  28. 0xB6,0xF5,//00349HZ ,5#  
  29. 0x4C,0xF6,//00370HZ ,6  
  30. 0xD7,0xF6,//00392HZ ,6#  
  31. 0x5A,0xF7,//00415HZ ,7  
  32. 0xD8,0xF7,//00440HZ 1 //12  
  33. 0x4D,0xF8,//00466HZ 1# //13  
  34. 0xBD,0xF8,//00494HZ 2 //14  
  35. 0x24,0xF9,//00523HZ 2# //15  
  36. 0x87,0xF9,//00554HZ 3 //16  
  37. 0xE4,0xF9,//00587HZ 4 //17  
  38. 0x3D,0xFA,//00622HZ 4# //18  
  39. 0x90,0xFA,//00659HZ 5 //19  
  40. 0xDE,0xFA,//00698HZ 5# //20  
  41. 0x29,0xFB,//00740HZ 6 //21  
  42. 0x6F,0xFB,//00784HZ 6# //22  
  43. 0xB1,0xFB,//00831HZ 7 //23  
  44. 0xEF,0xFB,//00880HZ `1  
  45. 0x2A,0xFC,//00932HZ `1#  
  46. 0x62,0xFC,//00988HZ `2  
  47. 0x95,0xFC,//01046HZ `2#  
  48. 0xC7,0xFC,//01109HZ `3  
  49. 0xF6,0xFC,//01175HZ `4  
  50. 0x22,0xFD,//01244HZ `4#  
  51. 0x4B,0xFD,//01318HZ `5
  52. 0x73,0xFD,//01397HZ `5#  
  53. 0x98,0xFD,//01480HZ `6  
  54. 0xBB,0xFD,//01568HZ `6#  
  55. 0xDC,0xFD,//01661HZ `7 //35  
  56. };  //定时中断0,用于产生唱歌频率
  57. timer0() interrupt 1  
  58. {  
  59. TL0=tl0_f;
  60. TH0=th0_f; //调入预定时值
  61. BEEP=~BEEP; //取反音乐输出 IO  
  62. }  //按键控制音阶声音输出(电子琴)
  63. void main(void) // 主程序
  64. {  
  65. ulong n;  
  66. uchar code jie8[8]={12,14,16,17,19,21,23,24};//1234567`1 八个音符在频率表中的位置
  67. TMOD = 0x01; //使用定时器 0 的16 位工作模式
  68. TR0 = 0;  
  69. ET0 = 1;  
  70. EA = 1;  
  71. while(1)  
  72. {  
  73. if(!K1)  
  74. {  
  75. tl0_f=freq[jie8[0]*2]; //置一个音符的值
  76. th0_f=freq[jie8[0]*2+1];  
  77. TR0 = 1;
  78. K9=1;
  79. for(n=0;n<10000;n++); //延时
  80. }  
  81. if(!K2)  
  82. {  
  83. tl0_f=freq[jie8[1]*2]; //置一个音符的值
  84. th0_f=freq[jie8[1]*2+1];  
  85. TR0 = 1;
  86. K9=1;   
  87. for(n=0;n<10000;n++); //延时
  88.   
  89. }  
  90. if(!K3)  
  91. {  
  92. tl0_f=freq[jie8[2]*2]; //置一个音符的值
  93. th0_f=freq[jie8[2]*2+1];  
  94. TR0 = 1;  
  95. K9=1;  
  96. for(n=0;n<10000;n++); //延时
  97. }  
  98. if(!K4)  
  99. {  
  100. tl0_f=freq[jie8[3]*2]; //置一个音符的值
  101. th0_f=freq[jie8[3]*2+1];  
  102. TR0 = 1;  
  103. K9=1;  
  104. for(n=0;n<10000;n++); //延时
  105. }
  106. if(!K5)
  107. {
  108. tl0_f=freq[jie8[4]*2]; //置一个音符的值
  109. th0_f=freq[jie8[4]*2+1];  
  110. TR0 = 1;  
  111. K9=1;  
  112. for(n=0;n<10000;n++); //延时
  113. }
  114. if(!K6)
  115. {
  116. tl0_f=freq[jie8[5]*2]; //置一个音符的值
  117. th0_f=freq[jie8[5]*2+1];  
  118. TR0 = 1;  
  119. K9=1;  
  120. for(n=0;n<10000;n++); //延时
  121. }
  122. if(!K7)
  123. {tl0_f=freq[jie8[6]*2]; //置一个音符的值
  124. th0_f=freq[jie8[6]*2+1];  
  125. TR0 = 1;  
  126. K9=1;  
  127. for(n=0;n<10000;n++); //延时
  128. }
  129. if(!K8)
  130. {
  131. tl0_f=freq[jie8[7]*2]; //置一个音符的值
  132.   
  133. th0_f=freq[jie8[7]*2+1];  
  134. TR0 = 1;  
  135. K9=1;  
  136. for(n=0;n<10000;n++); //延时
  137. }
  138. TR0 = 0;  
  139. K9=0;
  140. }  
  141. }


复制代码

所有资料51hei提供下载:
dzx.docx (15.67 KB, 下载次数: 8)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:366752 发表于 2018-7-11 00:27 | 只看该作者
好多,谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表