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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2203|回復: 12
打印 上一主題 下一主題
收起左側

一邊點陣屏顯示生日快樂,一邊生日歌 同時進行 求單片機程序思路?

[復制鏈接]
跳轉到指定樓層
樓主
一邊點陣屏顯示生日快樂,一邊生日歌,怎么寫。(同時進行)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:624769 發表于 2022-1-24 22:59 | 只看該作者
你是要思路還是代碼?
思路是:
如果對生日歌要求不高,
兩個定時器
一個控制點陣的動態掃描以及滾動。
一個負責定時器頻率輸出驅動揚聲器,播放生日歌。

對生日歌有要求的,可以買一個音樂IC也就幾毛錢的東西,接揚聲器播放生日歌。
對生日歌要求高的,可以買一個MP3播放芯片,又單片機控制播放生日歌。

這個思路,一般會寫代碼的都能想到。
想不到的……,估計代碼是寫不出來的……
回復

使用道具 舉報

板凳
ID:57657 發表于 2022-1-25 10:19 | 只看該作者
需要兩個定時器和頻率輸出控制寄存器,只有STC部分型號可以實現。
回復

使用道具 舉報

地板
ID:453974 發表于 2022-1-25 15:25 | 只看該作者
第一種方案,51單片機有操作系統,可以使用一下
第二種方案,可以考慮用兩個單片機進行串口通信
第三種方案,買一個儲存好音樂的音樂片,由單片機控制放歌,然后再顯示
回復

使用道具 舉報

5#
ID:57657 發表于 2022-1-25 17:25 | 只看該作者
累不死的狗 發表于 2022-1-25 15:25
第一種方案,51單片機有操作系統,可以使用一下
第二種方案,可以考慮用兩個單片機進行串口通信
第三種方 ...

沒用過操作系統,要啥串口通信? 音樂片? 你自己編的曲都可以放進去。
回復

使用道具 舉報

6#
ID:891164 發表于 2022-1-25 19:59 | 只看該作者
npn 發表于 2022-1-25 10:19
需要兩個定時器和頻率輸出控制寄存器,只有STC部分型號可以實現。

我用的是STC 80C52,調試了好久,沒能實現,不知啥情況。這是我的代碼。
  1. #include "reg51.h"                         //此文件中定義了單片機的一些特殊功能寄存器
  2. #include "intrins.h"
  3. typedef unsigned int u16;          //對數據類型進行聲明定義
  4. typedef unsigned char u8;
  5. u8 w;
  6. u16 j,n,m;

  7. sbit SRCLK=P3^6;
  8. sbit RCLK=P3^5;
  9. sbit SER=P3^4;
  10. sbit speaker=P1^5;

  11. u8 code led[9][10]={      
  12. {0x28,0xBF,0x24,0x01,0xF7,0x98,0xF7,0x01},       //祝
  13. {0x44,0x48,0x5F,0x69,0x49,0x49,0x4F,0x40},       //石
  14. {0x25,0x6D,0xB5,0x25,0x00,0x41,0x7F,0x41},       //紅
  15. {0x24,0x28,0xFF,0x28,0x00,0x5F,0xDF,0x5F},       //梅
  16. {0x15,0x25,0x65,0x25,0xFF,0x25,0x25,0x25},       //生
  17. {0x00,0x7F,0x49,0x49,0x49,0x49,0x7F,0x00},       //日
  18. {0x38,0xFF,0x38,0x01,0x2A,0xFC,0x2A,0x39},       //快
  19. {0x18,0x29,0x4A,0x88,0xBF,0x88,0x0A,0x09},       //樂

  20. };
  21. unsigned char timer0h,timer0l,time;
  22. //生日歌
  23. code unsigned char sszymmh[]={5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,
  24. 5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,
  25. 5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2,
  26. 4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4};
  27. // 音階頻率表 高八位
  28. code unsigned char FREQH[]={
  29. 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
  30. 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
  31. 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
  32. 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
  33. } ;
  34. // 音階頻率表 低八位
  35. code unsigned char FREQL[]={
  36. 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
  37. 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
  38. 0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
  39. 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
  40. };

  41. void delay(unsigned char t)
  42. {
  43. unsigned char t1;
  44. unsigned long t2;
  45. for(t1=0;t1<t;t1++)
  46. {
  47. for(t2=0;t2<8000;t2++)
  48. {
  49. ;
  50. }
  51. }
  52. TR1=0;
  53. }
  54. void t0int() interrupt 1
  55. {
  56. TR0=0;
  57. speaker=!speaker;
  58. TH0=timer0h;
  59. TL0=timer0l;
  60. TR0=1;
  61. }
  62. void song()
  63. {
  64. TH0=timer0h;
  65. TL0=timer0l;
  66. TR0=1;
  67. delay(time);
  68. }
  69. void play()
  70. {
  71.         
  72.                 unsigned char k,i;
  73.         TMOD=1; //置CT0定時工作方式1
  74.         EA=1;
  75.         ET0=1;//IE=0x82 //CPU開中斷,CT0開中斷
  76.         while(1)
  77.         {  
  78.                 int a=0;
  79.                    i=0;
  80.            while(i<75){ //音樂數組長度 ,唱完從頭再來
  81.            k=sszymmh[i]+7*sszymmh[i+1]-1;
  82.            timer0h=FREQH[k];
  83.            timer0l=FREQL[k];
  84.            time=sszymmh[i+2];
  85.            i=i+3;
  86.                    song();}}}  

  87. /*******************************************************************************
  88. * 函 數 名         : delay
  89. * 函數功能                   : 延時函數,i=1時,大約延時10us
  90. *******************************************************************************/
  91. void delay1(u16 i)
  92. {
  93.         while(i--);        
  94. }

  95. /*******************************************************************************
  96. * 函數名         : Hc595SendByte(u8 dat)
  97. * 函數功能                   : 向74HC595發送一個字節的數據
  98. * 輸入           : 無
  99. * 輸出                  : 無
  100. *******************************************************************************/
  101. void Hc595SendByte(u8 dat)
  102. {
  103.         u8 a;
  104.         SRCLK=0;
  105.         RCLK=0;
  106.         for(a=0;a<8;a++)
  107.         {
  108.                 SER=dat>>7;
  109.                 dat<<=1;

  110.                 SRCLK=1;
  111.                 _nop_();
  112.                 _nop_();
  113.                 SRCLK=0;        
  114.         }

  115.         RCLK=1;
  116.         _nop_();
  117.         _nop_();
  118.         RCLK=0;
  119. }

  120. void deng()
  121. {

  122.                 while(1)
  123.                 {
  124.            for(n=0;n<8;n++)        //第一維下標取值范圍為祝、石、紅、梅、生、日、快、樂,7個字符
  125.             {for(m=0;m<200;m++)        //每個字符掃描顯示200次,控制每個字符顯示漢字
  126.                   {         w=0x01; //行初值
  127.                      for(j=0;j<9;j++) //第二維下標取值范圍為0~7,控制8行
  128.                           {Hc595SendByte(w); //行控制
  129.                            P0=~led[n][j]; //列控制,將指定數組元素取反后賦值給P0口,顯示碼
  130.                            delay1(60);
  131.                            w<<=1; //行變量左移指向下一行
  132.                            P0=0xff;
  133.                                                    }
  134.                                    }
  135.                      }}}
  136.                         
  137. void init()
  138. {
  139.     TMOD=0x01;
  140.         TL0=0;
  141.         TH0=0;
  142.         ET0=1;
  143.         EA=1;
  144.         TR0=1;
  145. }                                                         
  146. /*******************************************************************************
  147. * 函 數 名       : main
  148. * 函數功能                 : 主函數
  149. * 輸    入       : 無
  150. * 輸    出             : 無
  151. *******************************************************************************/
  152. void main()
  153. {
  154. init();
  155.    while(1)
  156.    {   
  157.    
  158.    deng();
  159.    }   
  160. }
  161. void time0() interrupt 3  
  162. {
  163. play();                                                                                                                                      
  164. }   
復制代碼
     
回復

使用道具 舉報

7#
ID:213173 發表于 2022-1-26 08:07 | 只看該作者
pingfunny 發表于 2022-1-25 19:59
我用的是STC 80C52,調試了好久,沒能實現,不知啥情況。這是我的代碼。

開兩個定時器中斷,一個控制點陣掃描和音樂節奏,另一個控制音樂頻率。具體的輸出內容由主函數調配。不要試圖一次調試成功。可以先顯示一個字符和播放一個音符。調通后再豐富內容就水到渠成了。
回復

使用道具 舉報

8#
ID:213173 發表于 2022-1-26 08:34 | 只看該作者
pingfunny 發表于 2022-1-25 19:59
我用的是STC 80C52,調試了好久,沒能實現,不知啥情況。這是我的代碼。

給你一個簡易電子琴的仿真示例,按這個構架把數碼管動態顯示改為點陣屏,鍵盤改為固定順序演奏。你的愿望就可以實現。 簡易電子琴.rar (89.27 KB, 下載次數: 7)



回復

使用道具 舉報

9#
ID:161164 發表于 2022-1-26 10:00 | 只看該作者
pingfunny 發表于 2022-1-25 19:59
我用的是STC 80C52,調試了好久,沒能實現,不知啥情況。這是我的代碼。

你只是把兩個程序復制粘貼在一起吧
主程序一個while(1)
定時中斷內又一個while(1)
還加上一個內含8000個循環的delay
能跑得起來才怪

想辦法把兩個while(1)合起來
想辦法用其他方法實現8000個循環的delay
就可以成功
回復

使用道具 舉報

10#
ID:584814 發表于 2022-1-28 08:23 | 只看該作者
一邊點陣屏顯示生日快樂,一邊生日歌 同時進行 ? 求思路 ?
款點的做法是送蘋果手機,那個是可以一邊顯一邊歌甚至還可以動用3D,錢的事都不是事;
如果%%還想玩浪,就用手繪嘴唱,反正你也不會寫程序,編程思路對你沒什么用
回復

使用道具 舉報

11#
ID:161164 發表于 2022-1-28 14:14 | 只看該作者
手癢幫你弄了一個0.2倍速版


AT89C52.rar (1.04 KB, 下載次數: 18)




回復

使用道具 舉報

12#
ID:316468 發表于 2022-1-28 19:20 | 只看該作者
幾毛錢一個音樂芯片就可以解決的事情,何必大費周章呢?量產都沒必要去編這些程序吧?畢竟時間也是成本,雖然程序不是太難。
回復

使用道具 舉報

13#
ID:276685 發表于 2022-1-28 22:40 | 只看該作者
你可以建立一個與點陣屏同大小的緩沖區,運用定時器以60hz進行刷屏。主程序只需改變這個緩沖區即可完成滾動,顯示文字的效果。音樂可以考慮MP3存入SD卡,去百度一個解碼庫,然后根據采樣頻率刷新dac,與刷屏共用定時器也可以。SD也可以建立緩沖區,類似環形但是新數據不能覆蓋未播放的老數據。main只需讀取SD卡即可。即保證了音樂不卡頓和刷屏的及時。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩国产三级 | 日韩中文字幕视频 | 久久久久久久久久久蜜桃 | 一区二区久久 | 北条麻妃99精品青青久久 | 一区二区三区在线播放 | 欧美二三区 | 日韩精品在线播放 | 欧美性吧 | 黄网站在线播放 | 久久人爽爽人爽爽 | 欧美成人一区二区 | 亚洲欧洲成人av每日更新 | 一区二区三区中文 | 颜色网站在线观看 | 色一情一乱一伦一区二区三区 | 黄色片在线网站 | 亚洲综合区 | 亚洲视频一区在线 | 91久久精品一区二区二区 | 美女黄网站视频免费 | 91综合网| 精品一二区 | 你懂的在线视频播放 | 国产精品免费一区二区三区 | 午夜激情影院 | 成人亚洲视频 | 免费午夜视频在线观看 | 一级毛片在线视频 | 国产午夜精品一区二区三区四区 | 一区二区三区国产视频 | 国产美女自拍视频 | 日韩成人中文字幕 | 国产精品视频久久久 | 亚洲成av人影片在线观看 | 狠狠干美女 | 亚洲一区二区三区 | 国产精品免费看 | 99精品欧美一区二区蜜桃免费 | 久久久久久久成人 | 日本特黄a级高清免费大片 特黄色一级毛片 |