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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13517|回復: 14
收起左側

基于單片機的多模式帶音樂跑馬燈設計

  [復制鏈接]
ID:213668 發表于 2017-6-22 12:36 | 顯示全部樓層 |閱讀模式
1、有12個發光二極管做跑馬燈,其中跑馬燈有10種燈亮模式。
2、有鍵盤用以切換跑馬燈的模式,并且對于跑馬燈模式可以對亮燈速度進行控制。
3、每一種跑馬燈模式用LED數碼管進行顯示。
4、當跑馬燈處于一種模式時,伴隨的音樂響起,音樂至少有3首,并可以對其進行切換。

單片機音樂跑馬燈仿真圖:
QQ截圖20170622123345.png


單片機源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int

  4. //定義特殊功能寄存器的位變量
  5. sbit key1=P3^2;//按key1可自動//外部中斷
  6. sbit key2=P3^3;//按key2可切換//外部中斷
  7. sbit fm=P3^7;//蜂鳴器連續的IO口
  8. sbit key3=P3^4;
  9. sbit key4=P3^5;

  10. /*uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
  11. 0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//共陰極數碼管顯示碼制0~F*/

  12. uchar code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共陽極數碼管顯示碼制0~F


  13. //速度模式共有5種
  14. unsigned char code SpeedCode[]={5,14,30,60,100};                                                                 
  15. uchar count2=1,RunMode=1;//音樂、流水燈標志
  16. uchar zd=1;                //自動播放標志
  17. uchar timeh,timel,i;
  18. uint LEDIndex = 0;//LED位置
  19. bit LEDDirection = 1,LEDFlag = 1;//LED方向,LED亮滅
  20. uint Timer0Count,SystemSpeed;//跑馬燈速度,系統速度
  21. char SystemSpeedIndex=0;//速度模式參數

  22. //---------------------------簡譜---------------------------------------
  23. //編程規則:字節高位是簡譜,低位是持續時間,
  24. //代表多少個十六分音符
  25. //1-7代表中央C調,8-E代表高八度,0代表停頓
  26. //最后的0是結束標志
  27. uchar code qnzl[]={         //千年之戀
  28.         0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,
  29.                 //前奏
  30.                 0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,
  31.                 //竹林的燈火 到過的沙漠
  32.                 0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,
  33.                 //七色的國度 不斷飄逸風中
  34.                 0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,
  35.                 //有一種神秘 灰色的旋渦
  36.                 0x32,0x31,0x21,0x32,0x82,0x83,0x71,0x72,0x02,
  37.                 //將我卷入了迷霧中
  38.                 0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,
  39.                 //看不清的雙手
  40.                 0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,
  41.                 //一朵花傳來誰經過的溫柔
  42.                 0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,
  43.                 //穿越千年的傷痛
  44.                 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
  45.                 //只為求一個結果
  46.                 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
  47.                 //你留下的輪廓 指引我
  48.                 0x42,0x61,0x62,0x83,0x83,0x91,0x91,
  49.                 //黑夜中不寂寞
  50.                 0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,
  51.                 //穿越千年的哀愁
  52.                 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
  53.                 //是你在盡頭等我
  54.                 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
  55.                 //最美麗的感動 會值得
  56.                 0x42,0x82,0x88,0x02,0x74,0x94,0x89,0xff//結束標志
  57.                 //用一生守候
  58. };

  59. uchar code jmszl[]={ //寂寞沙洲冷
  60.         0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,
  61.                 //自你走后心憔悴
  62.                 0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,
  63.                 //白色油桐風中紛飛
  64.                 0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,
  65.                 //落花似人有情 這個季節
  66.                 0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,
  67.                 //河畔的風放肆拼命地吹
  68.                 0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,
  69.                 //不斷撥弄離人的眼淚
  70.                 0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,
  71.                 //那樣濃烈的愛再也無法給
  72.                 0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,0x26,
  73.                 //傷感一夜一夜
  74.                 0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,
  75.                 //當記憶的線纏繞過往支離破碎
  76.                 0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,
  77.                 //是慌亂占據了心扉                                                       
  78.                 0x31,0x81,0x81,0x81,0x61,0x91,0x82,
  79.                 //有花兒伴著蝴蝶
  80.                 0x51,0x51,0x51,0x51,0x31,0x61,0x53,
  81.                 //孤雁可以雙飛       
  82.                 0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,
  83.                 //夜深人靜獨徘徊
  84.                 0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,
  85.                 //當幸福戀人寄來紅色分享喜悅
  86.                 0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,
  87.                 //閉上雙眼難過頭也不敢回
  88.                 0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,
  89.                 //仍然撿盡寒枝不肯安歇微帶著后悔
  90.                 0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,
  91.                 //寂寞沙洲我該思念誰
  92.                 0xff};         
  93.        
  94.         uchar  code  srkl[]={0x52,0x52,0x64,0x54,0x84,0x74,//生日快樂
  95.                 0x52,0x52,0x64,0x54,0x94,0x84,
  96.                 0x52,0x52,0xc4,0xA4,0x84,0x74,0x64,
  97.                 0xB2,0xB2,0xA4,0x84,0x94,0x84,
  98.                 0x52,0x52,0x64,0x54,0x84,0x74,
  99.                 0x52,0x52,0x64,0x54,0x94,0x84,
  100.                 0x52,0x52,0xc4,0xA4,0x84,0x74,0x64,
  101.                 0xB2,0xB2,0xA4,0x84,0x94,0x84,0xff};
  102.        
  103.         uchar code  goon[]={0x64,0x84,0x92,0x91,0x81,0x93,0x61,     //康定情歌
  104.                 0x54,0x62,0x82,0x92,0x91,0x81,0x92,
  105.                 0x64,0x62,0x82,0x92,0x91,0x81,0x93,
  106.                 0x61,0x54,0x82,0x62,0x51,0x61,0x51,
  107.                 0x41,0x52,0x24,0x92,0x54,0x82,0x64,
  108.                 0x52,0x42,0x94,0x82,0x62,0x51,0x61,
  109.                 0x51,0x41,0x52,0x24,0xff};
  110.        
  111.         //----------------------------簡譜音調對應的定時器初值---------------------------
  112.         //適合11.0592M的晶振
  113.         uchar code chuzhi[]={
  114.                 0xff,0xff,//占位
  115.                         0xFC,0x8E,//中央C調1-7
  116.                         0xFC,0xED,       
  117.                         0xFD,0x43,       
  118.                         0xFD,0x6A,       
  119.                         0xFD,0xB3,       
  120.                         0xFD,0xF3,       
  121.                         0xFE,0x2D,
  122.                         0xFE,0x47,        //高八度1-7          
  123.                         0xFE,0x76,
  124.                         0xFE,0xA1,
  125.                         0xFE,0xC7,       
  126.                         0xFE,0xD9,
  127.                         0xFE,0xF9,
  128.                         0xFF,0x16
  129.         };
  130.        
  131.         void LEDShow(unsigned int LEDStatus)
  132.         {
  133.                 P1 = ~(LEDStatus&0x00FF);                     //P1輸出低八位
  134.                 //P2 = ~((LEDStatus>>8)&0x00FF);                                  //P2輸出高八位
  135.         }
  136.        
  137.         //速度選擇函數
  138.         void SetSpeed(unsigned char Speed)
  139.         {
  140.                 SystemSpeed =SpeedCode[Speed];//速度模式
  141.         }
  142.        
  143.         void delay(uint z)        //延時165MS,即十六分音符
  144.         {        uint x,y;
  145.         for(x=z;x>0;x--)
  146.                 for(y=19000;y>0;y--);
  147.         }
  148.        
  149.         void delay1(uint z)        //延時1MS
  150.         {        uint x,y;
  151.         for(x=z;x>0;x--)
  152.                 for(y=112;y>0;y--);
  153.         }
  154.         //模式1(一個燈右移)
  155.         void Mode_1(void)
  156.         {
  157.                 LEDShow(0x80>>LEDIndex);
  158.                 LEDIndex = (LEDIndex+1)%8;
  159.         }
  160.        
  161.         //Mode 2
  162.         void Mode_2(void)
  163.         {
  164.                 if(LEDDirection)      //選擇LED方向
  165.                         LEDShow(~(0x01<<LEDIndex)); //LED一個滅的燈左移
  166.                 else
  167.                         LEDShow(~(0x80>>LEDIndex));//LED一個滅的燈右移
  168.                 if(LEDIndex==7)
  169.                         LEDDirection = !LEDDirection;//改變方向
  170.                 LEDIndex = (LEDIndex+1)%8;//循環
  171.         }
  172.        
  173.         //Mode 3
  174.         void Mode_3(void)
  175.         {
  176.                 if(LEDDirection)
  177.                 {
  178.                         if(LEDFlag) //LED滅
  179.                                 LEDShow(0xFE<<LEDIndex);  //滅的燈左移
  180.                         else
  181.                                 LEDShow(~(0x7F>>LEDIndex));//一個亮的燈右移
  182.                 }
  183.                 else
  184.                 {
  185.                         if(LEDFlag)
  186.                                 LEDShow(0x7F>>LEDIndex); //一個滅的燈右移
  187.                         else
  188.                                 LEDShow(~(0xFE<<LEDIndex));//一個亮的燈左移
  189.                 }
  190.                 if(LEDIndex==7)
  191.                 {
  192.                         LEDDirection = !LEDDirection;
  193.                         if(LEDDirection)        LEDFlag = !LEDFlag;
  194.                 }
  195.                 LEDIndex = (LEDIndex+1)%8;
  196.         }
  197.        
  198.         //Mode 4
  199.         void Mode_4(void)
  200.         {
  201.                 if(LEDDirection)
  202.                         LEDShow(0x0F<<LEDIndex);        //四個右燈左移
  203.                 else
  204.                         LEDShow(0xF0>>LEDIndex);        //四個左燈右移
  205.                 if(LEDIndex==7)
  206.                         LEDDirection = !LEDDirection;
  207.                 LEDIndex = (LEDIndex+1)%8;
  208.         }
  209.        
  210.         //Mode 5
  211.         void Mode_5(void)
  212.         {
  213.                 if(LEDDirection)
  214.                         LEDShow(~(0x0F<<LEDIndex));//左四個燈左移
  215.                 else
  216.                         LEDShow(~(0xF0>>LEDIndex));//四個燈右移
  217.                 if(LEDIndex==7)
  218.                         LEDDirection = !LEDDirection;
  219.                 LEDIndex = (LEDIndex+1)%8;
  220.         }
  221.        
  222.         void Timer0EventRun(void)
  223.         {
  224.                 switch(RunMode)
  225.                 {
  226.                 case 1:Mode_1();break;
  227.                 case 2:Mode_2();break;
  228.                 case 3:Mode_3();break;
  229.                 case 4:Mode_4();break;
  230.                 case 5:Mode_5();break;
  231.                 default:break;
  232.                 }
  233.         }
  234.        
  235.         void song()
  236.         {
  237.                 uint temp;
  238.                 uchar jp;//jp是簡譜
  239.                 i=0;
  240.                 while(1)
  241.                 {       
  242.                         if(key3==0)
  243.                         {
  244.                                 if(key3==0)
  245.                                 {
  246.                                         SystemSpeedIndex++;                //選擇速度
  247.                                         if(SystemSpeedIndex>4)
  248.                                                 SystemSpeedIndex=0;
  249.                                         SetSpeed(SystemSpeedIndex);
  250.                                 }
  251.                         }
  252.                         if(key4==0)
  253.                         {
  254.                                 if(key4==0)
  255.                                 {
  256.                                         SystemSpeedIndex--;
  257.                                         if(SystemSpeedIndex<0)
  258.                                                 SystemSpeedIndex=4;
  259.                                         SetSpeed(SystemSpeedIndex);
  260.                                 }
  261.                         }
  262.                        
  263.                         P0=table[RunMode]; //共陰極數碼管顯示碼制
  264.                        
  265.                         if(count2==0)
  266.                         {       
  267.                                 break;
  268.                         }
  269.                         if(count2==1)        //千年之戀
  270.                                 temp=qnzl[i];
  271.                         if(count2==2)        //寂寞沙洲冷
  272.                                 temp=jmszl[i];
  273.                         if(count2==3)        //生日快樂
  274.                                 temp=srkl[i];
  275.                         if(count2==4)        //康定情歌
  276.                                 temp=goon[i];
  277.                         if(temp==0xff)
  278.                                 break;
  279.                         jp=temp/16; //取數的高4位
  280.                        
  281.                         if(jp!=0)
  282.                         {
  283.                                 timeh = chuzhi[jp*2];
  284.                                 timel = chuzhi[jp*2+1];
  285.                                 TR0=1;//定時器T0的開定時器位,TR0=1表示開定時器
  286.                         }
  287.                         else
  288.                         {
  289.                                 TR0=0;//定時器T0的開定時器位,TR0=0表示關定時器
  290.                                 fm=0;//關蜂鳴器
  291.                         }
  292.                         delay(temp%16); //取數的低4位
  293.                         TR0=0;                //唱完一個音停15MS,//定時器T0的開定時器位,TR0=0表示關定時器
  294.                         fm=0;
  295.                         i++;
  296.                 }       
  297.                 TR0=0;//定時器T0的開定時器位,TR0=0表示關定時器
  298.                 fm=0;       
  299.         }
  300.        
  301.         main()
  302.         {       
  303.                 EX1=1;//開外部中斷1
  304.                 IT1=1;//外部中斷1下降沿觸發方式
  305.                 EX0=1;//開外部中斷0
  306.                 IT0=1;//外部中斷0下降沿觸發方式
  307.                
  308.                 TMOD=0x11;//定時器0,1工作在方式1
  309.                 TH0=0;TL0=0;
  310.                 TH1=0xFC;//定時器1 的高8位里寫入十六進制值 0xFC
  311.                 TL1=0xFB;
  312.                 ET0=1;//定時器0的中斷允許開關
  313.                 ET1=1;
  314.                 TR0=0;//定時器T0的開定時器位,TR0=0表示關定時器
  315.                 P0=table[1];//共陰(陽)極數碼管顯示碼制0~F
  316.                 SetSpeed(0);
  317.                 EA=1;//開總中斷
  318.                 TR1=1;//啟動定時器T1
  319.                
  320.                 while(1)
  321.                 {
  322.                         song();
  323.                         delay1(50);
  324.                         if(zd)//自動播放標志
  325.                         {
  326.                                 count2++;
  327.                                 if(count2>4)
  328.                                         count2=1;
  329.                                 RunMode++;
  330.                                 if(RunMode>5)
  331.                                         RunMode=1;
  332.                         }
  333.                 }
  334.         }
  335.        
  336.         void int1() interrupt 2                //自動播放歌曲和跑馬燈,外部中斷1
  337.         {
  338.                 EA=0;//關總中斷
  339.                 if(key2==0)
  340.                 {
  341.                         if(key2==0)
  342.                         {
  343.                                 zd = 0;
  344.                                 TR0=1;        //定時器T0的開定時器位,TR0=1表示開定時器
  345.                                 i=0;//從頭開始唱
  346.                                 delay1(50);
  347.                                 count2++;
  348.                                 if(count2>4)//音樂標志
  349.                                         count2=1;
  350.                                 RunMode++;
  351.                                 if(RunMode>5)//流水燈標志
  352.                                         RunMode=1;
  353.                         }
  354.                 }
  355.                 EA=1;//開總中斷
  356. ……………………

  357. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
源碼.zip (3.48 KB, 下載次數: 217)


回復

使用道具 舉報

ID:373838 發表于 2018-7-18 09:43 | 顯示全部樓層
好東西,感謝分享!!!
回復

使用道具 舉報

ID:461290 發表于 2019-1-3 20:25 | 顯示全部樓層
真的很給力,非常有幫助
回復

使用道具 舉報

ID:461290 發表于 2019-1-3 20:26 | 顯示全部樓層
真的很給力非常有幫助
回復

使用道具 舉報

ID:621014 發表于 2019-10-9 13:47 | 顯示全部樓層
正在學習中
回復

使用道具 舉報

ID:620250 發表于 2019-10-9 19:24 | 顯示全部樓層
新手正在學習中
回復

使用道具 舉報

ID:65956 發表于 2019-10-10 10:52 | 顯示全部樓層
下載學習了,謝謝了
回復

使用道具 舉報

ID:622913 發表于 2019-10-14 09:06 來自手機 | 顯示全部樓層
有沒有高清的仿真圖和元器件清單啊
回復

使用道具 舉報

ID:664846 發表于 2019-12-16 09:46 | 顯示全部樓層
跪求元器件清單表
看不清啊
回復

使用道具 舉報

ID:664971 發表于 2019-12-16 11:24 | 顯示全部樓層
下載了
回復

使用道具 舉報

ID:713716 發表于 2020-3-22 22:58 | 顯示全部樓層
感謝分享,學習!
回復

使用道具 舉報

ID:735159 發表于 2020-4-22 14:02 | 顯示全部樓層
球球發一份
郵箱網盤都可
急需!!!!
回復

使用道具 舉報

ID:208849 發表于 2020-4-22 14:31 | 顯示全部樓層
題目最后一個是什么意思?是音樂切換的時候,跑馬燈也切換嗎?
回復

使用道具 舉報

ID:791853 發表于 2020-6-28 16:49 | 顯示全部樓層
要求不是:‘有12個發光二極管做跑馬燈,其中跑馬燈有10種燈亮模式’,為什么仿真圖上只有八個燈?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产伦一区二区三区久久 | 人人玩人人干 | 亚洲人成一区二区三区性色 | 一区二区成人 | 久久亚洲精品国产精品紫薇 | 羞羞视频在线网站观看 | 天天精品在线 | 国产日韩欧美中文字幕 | 亚洲视频在线一区 | 国色天香成人网 | 久草在线青青草 | 久久噜噜噜精品国产亚洲综合 | 操操操操操| 亚洲第一视频网 | 精品一区二区三区在线观看 | 激情五月综合 | 日韩1区 | 二区欧美 | 999国产精品视频 | 亚洲视频在线观看一区二区三区 | 国产伦精品一区二区三区在线 | 91av在线视频观看 | 亚洲高清免费视频 | 久久久一二三区 | 一级在线| 亚洲综合二区 | 亚洲视频免费在线 | 国产美女精品视频 | 亚洲精品亚洲人成人网 | 亚洲欧美中文日韩在线v日本 | 国产精品色婷婷久久58 | 成人综合久久 | 国产一级在线 | 亚洲一区二区三区四区五区中文 | 久久精品小视频 | 欧美成人一级 | 七七婷婷婷婷精品国产 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 亚洲视频欧美视频 | 91久久| 请别相信他免费喜剧电影在线观看 |