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

標題: 基于51單片機的LED燈顯示電子琴制作 原理圖與源程序 [打印本頁]

作者: 懋封@益達    時間: 2021-2-26 02:48
標題: 基于51單片機的LED燈顯示電子琴制作 原理圖與源程序
電路原理圖如下:


單片機源程序如下:
  1. sfr P4=0xe8;// 定義 P4組 I0 口
  2. #include<reg51.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit speaker=P1^4;// 喇叭接 30 腳
  6. sbit key1=P1^0;// 流水燈按鍵 (暫時)
  7. sbit key2=P1^1;// 播放音樂按鍵(暫定)
  8. uchar a,b,num1,s1num,n1,n2;
  9. char num;// 定義 num為可以負數
  10. uchar code yinfu[]={0xfb,0xe9, //Do
  11. 0xfc,0x5c, //Re
  12. 0xfc,0xc1, //Mi
  13. 0xfc,0xef, //Fa
  14. 0xfd,0x45, //So
  15. 0xfd,0x92, //La
  16. 0xfd,0xd0, //Si
  17. 0xfd,0xee, //Do#
  18. 0x00,0x00, // 間隔
  19. };

  20. uchar code shengri_tone[]={ 1,0,1,2,1,4,3,0, // 生日快樂音調
  21. 1,0,1,2,1,5,4,0,
  22. 1,0,1,8,6,4,3,2,0,
  23. 7,0,7,6,4,5,4,0 //0 代表不發聲,即停頓;數字即為音調
  24. };
  25. uchar code shengri_beat[]={ 24,1,24,48,48,48,72,5,// 節拍
  26. 24,1,24,48,48,48,72,5,
  27. 24,1,24,48,48,48,48,72,5,
  28. 24,1,24,48,48,48,72,5 // 節拍,即tone 表各音調的延時
  29. };
  30. uchar code ledtable[]={0x7f,0xbf,0xdf,0xef, // 取反
  31. 0xf7,0xfb,0xfd,0xfe};//P0 組口的發光二極管代碼(焊接過程可能會相反,具體更改)
  32. uchar code ledtable2[]={0x7f,0xbf,0xdf,0xef, // 取反
  33. 0xf7,0xfb,0xfd,0xfe};//P2 組口發光二極管代碼 , 相反!
  34. void check_key();// 改為 P3組為按鍵
  35. void keyscan();
  36. void turn();// 順時針流動
  37. void back();
  38. void qianhou();
  39. void dangshuang();
  40. void delay(uint z);// 延時函數聲明
  41. void delay1(void);// 聲明第二個延時函數
  42. void play1(void);// 播放生日快樂
  43. void main()
  44. {
  45. s1num=0;// 流水燈種類標志
  46. key1=1;
  47. key2=1;
  48. TMOD=0x01;
  49. TH0=a;
  50. TL0=b;
  51. ET0=1;// 打開定時器,但是未允許中斷
  52. TR0=1;
  53. while(1)
  54. {
  55. check_key();
  56. keyscan();
  57. }
  58. }
  59. void time0() interrupt 1
  60. {
  61. TH0=a;
  62. TL0=b;
  63. speaker=~speaker;
  64. }
  65. void check_key()
  66. {
  67. P3=0xff;// 先賦給 P2組口高電平
  68. switch(P3)// 按下一個鍵相應 4 個燈亮
  69. {
  70. case 0xfe:P0=0xee;P2=0x77;a=0xfb;b=0xe9;EA=1;break;//P0,P2 組為發光二極管組
  71. case 0xfd:P0=0xdd;P2=0xbb;a=0xfc;b=0x5c;EA=1;break;// 注意: EA不能改為 TR0
  72. case 0xfb:P0=0xbb;P2=0xdd;a=0xfc;b=0xc1;EA=1;break;
  73. case 0xf7:P0=0x77;P2=0xee;a=0xfc;b=0xef;EA=1;break;
  74. case 0xef:P0=0xee;P2=0x77;a=0xfd;b=0x45;EA=1;break;
  75. case 0xdf:P0=0xdd;P2=0xbb;a=0xfd;b=0x92;EA=1;break;
  76. case 0xbf:P0=0xbb;P2=0xdd;a=0xfd;b=0xd0;EA=1;break;
  77. case 0x7f:P0=0x77;P2=0xee;a=0xfd;b=0xee;EA=1;break;
  78. default:EA=0;speaker=0;//P0=0xff;P2=0xff ;
  79. }
  80. }
  81. void delay(uint z)
  82. {
  83. uint x,y;
  84. for(x=z;x>0;x--)
  85. for(y=110;y>0;y--);
  86. }
  87. void keyscan()
  88. {
  89. if(key1==0)
  90. {
  91. delay(5);
  92. if(key1==0)
  93. {
  94. s1num++;
  95. while(!key1);
  96. if(s1num==1)
  97. {
  98. turn();
  99. }
  100. }
  101. if(s1num==2)
  102. {
  103. back();
  104. }
  105. if(s1num==3)
  106. {
  107. qianhou();
  108. }
  109. if(s1num==4)
  110. {
  111. dangshuang();
  112. }
  113. if(s1num==5)
  114. s1num=1;
  115. }
  116. if(key2==0)
  117. {
  118. delay(5);
  119. while(~key2);
  120. play1();
  121. }
  122. }
  123. void delay1(void)// 第二個延時函數
  124. {
  125. uchar n=15;
  126. while(n--)
  127. {
  128. uchar i;
  129. for(i=0;i<125;i++);
  130. }
  131. }
  132. void play1(void)// 播放生日快樂
  133. {
  134. uchar m=0;
  135. uchar s;
  136. uchar c=1;
  137. P0=0xaa;
  138. P2=0x55;
  139. while(1)
  140. {
  141. EA=0;
  142. c=shengri_tone[m]; // 取音符
  143. s=shengri_beat[m]; // 取節拍
  144. a=yinfu[2*c-2];
  145. b=yinfu[2*c-1];
  146. EA=1;
  147. while(s--)
  148. {
  149. delay1();
  150. P0=~P0;
  151. P2=~P2;
  152. }
  153. m++;
  154. if(m>=33) return; // 數值是 shengri相關表中的元素數量
  155. }
  156. }
  157. /* 以下為 N種流水燈流動花式 */
  158. void turn()// 流水燈順時針走動( 5 次)
  159. {
  160. for(num1=0;num1<8;num1++)
  161. {
  162. for(num=0;num<8;num++)
  163. {
  164. P0=ledtable[num];
  165. delay(30);// 時間暫定
  166. }
  167. P0=0xff;// 之后關閉 P1組
  168. for(num=7;num>-1;num--)
  169. {
  170. P2=ledtable2[num];
  171. delay(30);
  172. }
  173. P2=0xff;// 之后關閉 P2組
  174. }
  175. }
  176. void back()// 逆時針流動
  177. {
  178. for(num1=0;num1<8;num1++)
  179. {
  180. for(num=0;num<8;num++)
  181. {
  182. P2=ledtable[num];
  183. delay(30);
  184. }
  185. P2=0xff;
  186. for(num=7;num>-1;num--)
  187. {
  188. P0=ledtable2[num];
  189. delay(30);
  190. }
  191. P0=0xff;
  192. }
  193. }
  194. void qianhou()// 前后來回
  195. {
  196. for(num1=0;num1<10;num1++)
  197. {
  198. for(num=0;num<8;num++)
  199. {
  200. P0=ledtable[num];
  201. P2=ledtable2[num];
  202. delay(30);
  203. }
  204. P0=0xff;
  205. P2=0xff;
  206. for(num=7;num>-1;num--)
  207. {
  208. P0=ledtable[num];
  209. P2=ledtable2[num];
  210. delay(30);
  211. }
  212. P0=0xff;
  213. P2=0xff;
  214. }
  215. }
  216. void dangshuang()// 單數雙數
  217. {
  218. for(num1=0;num1<15;num1++)
  219. {
  220. P0=0x55;
  221. P2=0xaa;
  222. delay(150);
  223. P0=0xaa;
  224. P2=0x55;
  225. delay(150);
  226. }
  227. }
復制代碼

原理圖是png圖片格式的,以上程序的Keil格式文件下載:已刪除

作者: cn_zhx    時間: 2021-2-26 10:11
厲害,頂一下
作者: Parl    時間: 2021-4-2 11:28
沒有原理圖的文件嗎
作者: znl    時間: 2022-11-10 14:21
原理圖呢?




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 伊人伊成久久人综合网站 | 久久久久久久夜 | 日韩欧美高清 | 国产在线精品一区二区三区 | 懂色中文一区二区三区在线视频 | 中文字幕一区二区三区四区不卡 | 亚洲 成人 av | 欧洲尺码日本国产精品 | 色婷婷亚洲一区二区三区 | 天天干天天玩天天操 | 久久日韩粉嫩一区二区三区 | 在线观看亚洲 | 中文字幕一区二区三区精彩视频 | 色悠悠久| 精品欧美二区 | 精品麻豆剧传媒av国产九九九 | 欧美一区在线视频 | 日韩精品一区二区三区中文在线 | 久久9精品 | 亚洲第一天堂 | 少妇特黄a一区二区三区88av | 精品国产精品一区二区夜夜嗨 | 亚洲精品9999 | 国产精品视频播放 | 亚洲天堂精品久久 | 国产精品国产成人国产三级 | 日韩欧美一区在线 | 久久精品久久综合 | 欧美影院 | 亚洲视频一区在线观看 | 国产成人免费观看 | 久久精品免费观看 | 特黄一级 | 欧美三区在线观看 | 男女久久久| 欧美成人一区二免费视频软件 | 我想看一级黄色毛片 | 三区在线观看 | 亚洲成人久久久 | 国产精品久久网 | 国产在线视频网 |