当前位置:   article > 正文

51单片机 — MorseCode、《晴天》、计时器)_51单片机音乐代码晴天

51单片机音乐代码晴天

目录

写在最前:本项目附视频效果展示,可点击文内链接查看。

一,模块化编程

二,功能介绍

三,bilibili链接视频

四,编写灵感


写在最前:本项目附视频效果展示,可点击文内链接查看。


一,模块化编程

模块化编程是一种软件设计技术,它强调将程序的功能分为独立的,可互换的模块,以使每个模块都包含执行所需功能的一个方面所必需的一切。

在本项目中具体实现方式是将Nixie.h、Nixie.c、Delay.h、Delay.c模块化

Nixie.h

  1. #ifndef __NIXIE_H__
  2. #define __NIXIE_H__
  3. void Nixie(unsigned char Location,Number,xms);
  4. #endif

Nixie.c

  1. #include <REGX52.H>
  2. #include "Delay.h"
  3. unsigned char NixieNumber[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  4. void Nixie(unsigned char Location,Number,xms)
  5. {
  6. P0=0x00;
  7. switch(Location)
  8. {
  9. case 1:
  10. P0=0x01;break;//1ÁÁ 0Ãð
  11. case 2:
  12. P0=0x02;break;
  13. }
  14. P2=NixieNumber[Number];
  15. Delay(xms);
  16. //P2=0x00;//0ÁÁ 1Ãð
  17. }

Delay.h

  1. #ifndef __DELAY_H__
  2. #define __DELAY_H__
  3. void Delay(unsigned int xms);
  4. #endif

Delay.c

  1. void Delay(unsigned int xms) //@12.000MHz
  2. {
  3. while(xms--)
  4. {
  5. unsigned char i, j;
  6. i = 2;
  7. j = 239;
  8. do
  9. {
  10. while (--j);
  11. } while (--i);
  12. }
  13. }

前部定义

  1. #include <REGX52.H>
  2. #include "Delay.h"
  3. #include "Nixie.h"
  4. sbit L1=P1^0;
  5. sbit L2=P1^1;
  6. sbit L3=P1^2;
  7. sbit L4=P1^3;
  8. sbit L5=P1^4;
  9. sbit L6=P1^5;
  10. sbit L7=P1^6;
  11. sbit L8=P1^7;
  12. unsigned int i;
  13. unsigned int j;
  14. int P=0x00;
  15. int Hour=0;
  16. int Min=0;
  17. int S=0;

二,功能介绍

  • Morse Code

 本项目中,八个发光二极管全亮表示MorseCode中的长横杠,第一个发光二极管亮表示小点。

代码展示0~9的Morse Code,其中数码管显示正表示的数字,发光二极管负责显示MorseCode。

实现代码如下:

  1. //0
  2. for(i=0;i<100;i++)
  3. {Nixie(1,0,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  4. P1=0xff;
  5. Delay(100);
  6. for(i=0;i<100;i++)
  7. {Nixie(1,0,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  8. P1=0xff;
  9. Delay(100);
  10. for(i=0;i<100;i++)
  11. {Nixie(1,0,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  12. P1=0xff;
  13. Delay(100);
  14. for(i=0;i<100;i++)
  15. {Nixie(1,0,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  16. P1=0xff;
  17. Delay(100);
  18. for(i=0;i<100;i++)
  19. {Nixie(1,0,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  20. P1=0xff;
  21. P0=0x00;
  22. Delay(300);
  23. //1
  24. for(i=0;i<100;i++)
  25. {Nixie(1,1,5);L1=0;}
  26. P1=0xff;
  27. Delay(100);
  28. for(i=0;i<100;i++)
  29. {Nixie(1,1,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  30. P1=0xff;
  31. Delay(100);
  32. for(i=0;i<100;i++)
  33. {Nixie(1,1,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  34. P1=0xff;
  35. Delay(100);
  36. for(i=0;i<100;i++)
  37. {Nixie(1,1,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  38. P1=0xff;
  39. Delay(100);
  40. for(i=0;i<100;i++)
  41. {Nixie(1,1,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  42. P1=0xff;
  43. P0=0x00;
  44. Delay(300);
  45. //2
  46. for(i=0;i<100;i++)
  47. {Nixie(1,2,5);L1=0;}
  48. P1=0xff;
  49. Delay(100);
  50. for(i=0;i<100;i++)
  51. {Nixie(1,2,5);L1=0;}
  52. P1=0xff;
  53. Delay(100);
  54. for(i=0;i<100;i++)
  55. {Nixie(1,2,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  56. P1=0xff;
  57. Delay(100);
  58. for(i=0;i<100;i++)
  59. {Nixie(1,2,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  60. P1=0xff;
  61. Delay(100);
  62. for(i=0;i<100;i++)
  63. {Nixie(1,2,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  64. P1=0xff;
  65. P0=0x00;
  66. Delay(300);
  67. //3
  68. for(i=0;i<100;i++)
  69. {Nixie(1,3,5);L1=0;}
  70. P1=0xff;
  71. Delay(100);
  72. for(i=0;i<100;i++)
  73. {Nixie(1,3,5);L1=0;}
  74. P1=0xff;
  75. Delay(100);
  76. for(i=0;i<100;i++)
  77. {Nixie(1,3,5);L1=0;}
  78. P1=0xff;
  79. Delay(100);
  80. for(i=0;i<100;i++)
  81. {Nixie(1,3,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  82. P1=0xff;
  83. Delay(100);
  84. for(i=0;i<100;i++)
  85. {Nixie(1,3,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  86. P1=0xff;
  87. P0=0x00;
  88. Delay(300);
  89. //4
  90. for(i=0;i<100;i++)
  91. {Nixie(1,4,5);L1=0;}
  92. P1=0xff;
  93. Delay(100);
  94. for(i=0;i<100;i++)
  95. {Nixie(1,4,5);L1=0;}
  96. P1=0xff;
  97. Delay(100);
  98. for(i=0;i<100;i++)
  99. {Nixie(1,4,5);L1=0;}
  100. P1=0xff;
  101. Delay(100);
  102. for(i=0;i<100;i++)
  103. {Nixie(1,4,5);L1=0;}
  104. P1=0xff;
  105. Delay(100);
  106. for(i=0;i<100;i++)
  107. {Nixie(1,4,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  108. P1=0xff;
  109. P0=0x00;
  110. Delay(300);
  111. //5
  112. for(i=0;i<100;i++)
  113. {Nixie(1,5,5);L1=0;}
  114. P1=0xff;
  115. Delay(100);
  116. for(i=0;i<100;i++)
  117. {Nixie(1,5,5);L1=0;}
  118. P1=0xff;
  119. Delay(100);
  120. for(i=0;i<100;i++)
  121. {Nixie(1,5,5);L1=0;}
  122. P1=0xff;
  123. Delay(100);
  124. for(i=0;i<100;i++)
  125. {Nixie(1,5,5);L1=0;}
  126. P1=0xff;
  127. Delay(100);
  128. for(i=0;i<100;i++)
  129. {Nixie(1,5,5);L1=0;}
  130. P1=0xff;
  131. P0=0x00;
  132. Delay(300);
  133. //6
  134. for(i=0;i<100;i++)
  135. {Nixie(1,6,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  136. P1=0xff;
  137. Delay(100);
  138. for(i=0;i<100;i++)
  139. {Nixie(1,6,5);L1=0;}
  140. P1=0xff;
  141. Delay(100);
  142. for(i=0;i<100;i++)
  143. {Nixie(1,6,5);L1=0;}
  144. P1=0xff;
  145. Delay(100);
  146. for(i=0;i<100;i++)
  147. {Nixie(1,6,5);L1=0;}
  148. P1=0xff;
  149. Delay(100);
  150. for(i=0;i<100;i++)
  151. {Nixie(1,6,5);L1=0;}
  152. P1=0xff;
  153. P0=0x00;
  154. Delay(300);
  155. //7
  156. for(i=0;i<100;i++)
  157. {Nixie(1,7,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  158. P1=0xff;
  159. Delay(100);
  160. for(i=0;i<100;i++)
  161. {Nixie(1,7,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  162. P1=0xff;
  163. Delay(100);
  164. for(i=0;i<100;i++)
  165. {Nixie(1,7,5);L1=0;}
  166. P1=0xff;
  167. Delay(100);
  168. for(i=0;i<100;i++)
  169. {Nixie(1,7,5);L1=0;}
  170. P1=0xff;
  171. Delay(100);
  172. for(i=0;i<100;i++)
  173. {Nixie(1,7,5);L1=0;}
  174. P1=0xff;
  175. P0=0x00;
  176. Delay(300);
  177. //8
  178. for(i=0;i<100;i++)
  179. {Nixie(1,8,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  180. P1=0xff;
  181. Delay(100);
  182. for(i=0;i<100;i++)
  183. {Nixie(1,8,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  184. P1=0xff;
  185. Delay(100);
  186. for(i=0;i<100;i++)
  187. {Nixie(1,8,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  188. P1=0xff;
  189. Delay(100);
  190. for(i=0;i<100;i++)
  191. {Nixie(1,8,5);L1=0;}
  192. P1=0xff;
  193. Delay(100);
  194. for(i=0;i<100;i++)
  195. {Nixie(1,8,5);L1=0;}
  196. P1=0xff;
  197. P0=0x00;
  198. Delay(300);
  199. //9
  200. for(i=0;i<100;i++)
  201. {Nixie(1,9,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  202. P1=0xff;
  203. Delay(100);
  204. for(i=0;i<100;i++)
  205. {Nixie(1,9,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  206. P1=0xff;
  207. Delay(100);
  208. for(i=0;i<100;i++)
  209. {Nixie(1,9,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  210. P1=0xff;
  211. Delay(100);
  212. for(i=0;i<100;i++)
  213. {Nixie(1,9,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}
  214. P1=0xff;
  215. Delay(100);
  216. for(i=0;i<100;i++)
  217. {Nixie(1,9,5);L1=0;}
  218. P1=0xff;
  219. P0=0x00;
  220. Delay(300);
  221. //爆闪
  222. L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;
  223. Delay(100);
  224. L1=1;L2=1;L3=1;L4=1;L5=1;L6=1;L7=1;L8=1;
  225. Delay(100);
  226. L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;
  227. Delay(100);
  228. L1=1;L2=1;L3=1;L4=1;L5=1;L6=1;L7=1;L8=1;
  229. Delay(100);
  • 《晴天》

本项目,八个发光二极管展示音乐频谱,数码管显示歌词简谱。

实现代码如下:

  1. for(i=0;i<100;i++)
  2. {Nixie(1,3,5);L1=0;L2=0;L3=0;}
  3. L1=1;L2=1;L3=1;
  4. for(i=0;i<100;i++)
  5. {Nixie(1,2,5);L1=0;L2=0;}
  6. L1=1;L2=1;
  7. for(i=0;i<100;i++)
  8. {Nixie(1,4,5);L1=0;L2=0;L3=0;L4=0;}
  9. L1=1;L2=1;L3=1;L4=1;
  10. for(i=0;i<100;i++)
  11. {Nixie(1,3,7);L1=0;L2=0;L3=0;}
  12. L1=1;L2=1;L3=1;
  13. for(i=0;i<100;i++)
  14. {Nixie(1,1,5);L1=0;}
  15. L1=1;
  16. for(i=0;i<100;i++)
  17. {Nixie(1,5,4);L1=0;L2=0;L3=0;L4=0;L5=0;}
  18. L1=1;L2=1;L3=1;L4=1;L5=1;
  19. for(i=0;i<100;i++)
  20. {Nixie(1,7,4);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;}
  21. L1=1;L2=1;L3=1;L4=1;L5=1;L6=1;L7=1;
  22. for(i=0;i<100;i++)
  23. {Nixie(1,1,5);L1=0;}
  24. L1=1;
  25. for(i=0;i<100;i++)
  26. {Nixie(1,7,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;}
  27. L1=1;L2=1;L3=1;L4=1;L5=1;L6=1;L7=1;
  28. for(i=0;i<100;i++)
  29. {Nixie(1,1,14);L1=0;}
  30. L1=1;
  31. P0=0x00;
  32. Delay(100);
  33. for(i=0;i<100;i++)
  34. {Nixie(1,1,6);L1=0;}
  35. L1=1;
  36. for(i=0;i<100;i++)
  37. {Nixie(1,6,9);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;}
  38. L1=1;L2=1;L3=1;L4=1;L5=1;L6=1;
  39. for(i=0;i<100;i++)
  40. {Nixie(1,6,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;}
  41. L1=1;L2=1;L3=1;L4=1;L5=1;L6=1;
  42. for(i=0;i<100;i++)
  43. {Nixie(1,5,14);L1=0;L2=0;L3=0;L4=0;L5=0;}
  44. L1=1;L2=1;L3=1;L4=1;L5=1;
  45. for(i=0;i<100;i++)
  46. {Nixie(1,4,4);L1=0;L2=0;L3=0;L4=0;}
  47. L1=1;L2=1;L3=1;L4=1;
  48. for(i=0;i<100;i++)
  49. {Nixie(1,3,5);L1=0;L2=0;L3=0;}
  50. L1=1;L2=1;L3=1;
  51. for(i=0;i<100;i++)
  52. {Nixie(1,2,4);L1=0;L2=0;}
  53. L1=1;L2=1;
  54. for(i=0;i<100;i++)
  55. {Nixie(1,3,3);L1=0;L2=0;L3=0;}
  56. L1=1;L2=1;L3=1;
  57. for(i=0;i<100;i++)
  58. {Nixie(1,4,6);L1=0;L2=0;L3=0;L4=0;}
  59. L1=1;L2=1;L3=1;L4=1;
  60. for(i=0;i<100;i++)
  61. {Nixie(1,3,20);L1=0;L2=0;L3=0;}
  62. L1=1;L2=1;L3=1;
  63. P0=0x00;
  64. Delay(1000);
  • 计时器

本项目中,八个发光二极管以二进制计数形式累计秒数,每满60秒刷新以重新计数。数码管一秒内闪烁三次,分别表示时、分、秒。

实现代码如下:
 

  1. for(Hour=0;;Hour++)
  2. {
  3. for(Min=0;Min<60;Min++)
  4. {
  5. P=0x01;
  6. for(i=0;i<60;i++)
  7. {
  8. P1=~P;
  9. Delay(100);
  10. P1=0xff;
  11. P++;
  12. S++;
  13. for(j=0;j<100;j++)
  14. {Nixie(1,Hour/10,1);
  15. Nixie(2,Hour%10,1);}
  16. P2=0xff;
  17. P0=0x03;
  18. P2=0x7f;
  19. Delay(50);//
  20. for(j=0;j<300;j++)
  21. {Nixie(1,Min/10,1);
  22. Nixie(2,Min%10,1);}
  23. P2=0xff;
  24. P0=0x03;
  25. P2=0x7f;
  26. Delay(50);//
  27. for(j=0;j<300;j++)
  28. {Nixie(1,S/10,1);
  29. Nixie(2,S%10,1);}
  30. P2=0xff;
  31. }
  32. S=0;
  33. }
  34. Min=0;
  35. }

三,bilibili链接视频

展示视频链接:单片机组合编程https://www.bilibili.com/video/BV1jS4y1d7rn?share_source=copy_webicon-default.png?t=N7T8https://www.bilibili.com/video/BV1jS4y1d7rn?share_source=copy_web


四,编写灵感

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号