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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3477|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

多模式帶音樂跑馬燈單片機(jī)程序+Proteus仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:744356 發(fā)表于 2020-11-13 12:36 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

共有6個(gè)模式,可以顯示速率和模式。

單片機(jī)源程序如下:
  1. #include <reg51.h>

  2. #define uchar unsigned cha
  3. #define uint  unsigned int
  4. //定義特殊功能寄存器的位變量
  5. sbit key1=P3^2;//按key1可自動(dòng)//外部中斷
  6. sbit key2=P3^3;//按key2可切換//外部中斷
  7. sbit fm=P3^7;//蜂鳴器連續(xù)的IO口
  8. sbit key3=P3^4;   
  9. sbit key4=P3^5;
  10. sbit wei=P3^0;
  11. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共陰極數(shù)碼管顯示碼制0~F
  12. uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共陰極數(shù)碼管顯示碼制0~F
  13. //速度模式共有5種
  14. unsigned char code SpeedCode[]={100,60,30,14,5};                                                                 
  15. uchar count2=1,RunMode=1;//音樂、流水燈標(biāo)志
  16. uchar zd=1;                //自動(dòng)播放標(biāo)志
  17. uchar timeh,timel,i;
  18. uint LEDIndex = 0;//LED位置,聲明8位變量LEDIndex,用來(lái)指示8個(gè)LED哪個(gè)燈被點(diǎn)亮
  19. bit LEDDirection = 1,LEDFlag = 1;//LED方向,LED亮滅
  20. uint Timer0Count,SystemSpeed;//跑馬燈速度,系統(tǒng)速度
  21. char SystemSpeedIndex=1;//速度模式參數(shù)
  22. //---------------------------簡(jiǎn)譜---------------------------------------
  23. //編程規(guī)則:字節(jié)高位是簡(jiǎn)譜,低位是持續(xù)時(shí)間,
  24. //代表多少個(gè)十六分音符
  25. //1-7代表中央C調(diào),8-E代表高八度,0代表停頓
  26. //最后的0是結(jié)束標(biāo)志
  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.                 //七色的國(guó)度 不斷飄逸風(fēng)中
  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.                 //一朵花傳來(lái)誰(shuí)經(jīng)過的溫柔
  42.                 0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,
  43.                 //穿越千年的傷痛
  44.                 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
  45.                 //只為求一個(gè)結(jié)果
  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.                 //最美麗的感動(dòng) 會(huì)值得
  56.                 0x42,0x82,0x88,0x02,0x74,0x94,0x89,0xff//結(jié)束標(biāo)志
  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.                 //白色油桐風(fēng)中紛飛
  64.                 0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,
  65.                 //落花似人有情 這個(gè)季節(jié)
  66.                 0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,
  67.                 //河畔的風(fēng)放肆拼命地吹
  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.                 //那樣濃烈的愛再也無(wú)法給
  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.                 //當(dāng)記憶的線纏繞過往支離破碎
  76.                 0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,
  77.                 //是慌亂占據(jù)了心扉                                                        
  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.                 //夜深人靜獨(dú)徘徊
  84.                 0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,
  85.                 //當(dāng)幸福戀人寄來(lái)紅色分享喜悅
  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.                 //寂寞沙洲我該思念誰(shuí)
  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.         //----------------------------簡(jiǎn)譜音調(diào)對(duì)應(yīng)的定時(shí)器初值---------------------------
  112.         //適合11.0592M的晶振
  113.         uchar code chuzhi[]={
  114.                 0xff,0xff,//占位
  115.                         0xFC,0x8E,//中央C調(diào)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.                
  135.         }
  136.         
  137.         //速度選擇函數(shù)
  138.         void SetSpeed(unsigned char Speed)
  139.         {
  140.                 SystemSpeed =SpeedCode[Speed];//速度模式
  141.         }
  142.         
  143.         void delay(uint z)        //延時(shí)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)        //延時(shí)1MS
  150.         {        uint x,y;
  151.         for(x=z;x>0;x--)
  152.                 for(y=112;y>0;y--);
  153.         }
  154.         //模式1(一個(gè)燈右移)
  155.         void Mode_1(void)
  156.         {
  157.                 LEDShow(0x80>>LEDIndex);
  158.                 LEDIndex = (LEDIndex+1)%8;//LEDIndex+1對(duì)8取余,保證LEDIndex在0~7之間
  159.         }
  160.         
  161.         //Mode 2
  162.         void Mode_2(void)
  163.         {
  164.                 if(LEDDirection)      //選擇LED方向
  165.                         LEDShow(~(0x01<<LEDIndex)); //LED一個(gè)滅的燈左移
  166.                 else
  167.                         LEDShow(~(0x80>>LEDIndex));//LED一個(gè)滅的燈右移
  168.                 if(LEDIndex==7)
  169.                         LEDDirection = !LEDDirection;//改變方向
  170.                 LEDIndex = (LEDIndex+1)%8;//循環(huán)
  171.         }
  172.         
  173.         //Mode 3
  174.         void Mode_3(void)
  175.         {
  176.                 if(LEDDirection)
  177.                 {
  178.                         if(LEDFlag) //LED滅
  179.                                 LEDShow(0xAA<<LEDIndex);  //四滅的燈左移
  180.                         else
  181.                                 LEDShow(~(0x55>>LEDIndex));//四個(gè)亮的燈右移
  182.                 }
  183.                 else
  184.                 {
  185.                         if(LEDFlag)
  186.                                 LEDShow(0x7F>>LEDIndex); //一個(gè)滅的燈右移
  187.                         else
  188.                                 LEDShow(~(0xFE<<LEDIndex));//一個(gè)亮的燈左移
  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);        //四個(gè)右燈左移
  203.                 else
  204.                         LEDShow(0xF0>>LEDIndex);        //四個(gè)左燈右移
  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));//左四個(gè)燈左移
  215.                 else
  216.                         LEDShow(~(0xF0>>LEDIndex));//四個(gè)燈右移
  217.                 if(LEDIndex==7)
  218.                         LEDDirection = !LEDDirection;
  219.                 LEDIndex = (LEDIndex+1)%8;
  220.         }
  221.         //Mode 6
  222.   void Mode_6(void)
  223.   {
  224.          if(LEDDirection)
  225.                         LEDShow(~(0x1F<<LEDIndex));//左五個(gè)燈左移
  226.                 else
  227.                         LEDShow(~(0x30>>LEDIndex));//兩個(gè)燈右移
  228.                 if(LEDIndex==7)
  229.                         LEDDirection = !LEDDirection;
  230.                 LEDIndex = (LEDIndex+1)%8;
  231.   }
  232.         void Timer0EventRun(void)
  233.         {
  234.                 switch(RunMode)
  235.                 {
  236.                 case 1:Mode_1();break;
  237.                 case 2:Mode_2();break;
  238.                 case 3:Mode_3();break;
  239.                 case 4:Mode_4();break;
  240.                 case 5:Mode_5();break;
  241.     case 6:Mode_6();break;
  242.                 default:break;
  243.                 }
  244.         }
  245.         
  246.         void song()
  247.         {
  248.                 uint temp;
  249.                 uchar jp;//jp是簡(jiǎn)譜
  250.                 i=0;
  251.                 while(1)
  252.                 {      
  253.                           if(key3==0)
  254.       {
  255.       delay1(7);
  256.          if(key3==0)
  257.                                 {   
  258.            
  259.                P2=tab[SystemSpeedIndex];
  260.                                         SystemSpeedIndex++;                //選擇速度
  261.                                         if(SystemSpeedIndex>5)
  262.                                                 SystemSpeedIndex=1;
  263.                                         SetSpeed(SystemSpeedIndex);
  264.                                 }
  265.         while(!key3);
  266.                         }
  267.        if(key4==0)
  268.           {
  269.            delay1(7);
  270.           if(key4==0)
  271.                                 {  
  272.    
  273.                P2=tab[SystemSpeedIndex];
  274.                                         SystemSpeedIndex--;
  275.                                         if(SystemSpeedIndex<1)
  276.                                                 SystemSpeedIndex=5;
  277.                                         SetSpeed(SystemSpeedIndex);
  278.                                  }
  279.         while(!key4);
  280.        }
  281.                         P0=table[RunMode]; //共陰極數(shù)碼管顯示碼制
  282.         P2=tab[SystemSpeedIndex];//速度顯示
  283.                         if(count2==0)
  284.                         {        
  285.                                 break;
  286.                         }
  287.                         if(count2==1)        //千年之戀
  288.                                 temp=qnzl[i];
  289.                         if(count2==2)        //寂寞沙洲冷
  290.                                 temp=jmszl[i];
  291.                         if(count2==3)        //生日快樂
  292.                                 temp=srkl[i];
  293.                         if(count2==4)        //康定情歌
  294.                                 temp=goon[i];
  295.                         if(temp==0xff)
  296.                                 break;
  297.                         jp=temp/16; //取數(shù)的高4位
  298.                         
  299.                         if(jp!=0)
  300.                         {
  301.                                 timeh = chuzhi[jp*2];
  302.                                 timel = chuzhi[jp*2+1];
  303.                                 TR0=1;//定時(shí)器T0的開定時(shí)器位,TR0=1表示開定時(shí)器
  304.                         }
  305.                         else
  306.                         {
  307.                                 TR0=0;//定時(shí)器T0的開定時(shí)器位,TR0=0表示關(guān)定時(shí)器
  308.                                 fm=0;//關(guān)蜂鳴器
  309.                         }
  310.                         delay(temp%16); //取數(shù)的低4位
  311.                         TR0=0;                //唱完一個(gè)音停15MS,//定時(shí)器T0的開定時(shí)器位,TR0=0表示關(guān)定時(shí)器
  312.                         fm=0;
  313.                         i++;
  314.                 }        
  315.                 TR0=0;//定時(shí)器T0的開定時(shí)器位,TR0=0表示關(guān)定時(shí)器
  316.                 fm=0;        
  317.         }
  318.         
  319.         main()
  320.         {        
  321.                 EX1=1;//開外部中斷1
  322.                 IT1=1;//外部中斷1下降沿觸發(fā)方式
  323.                 EX0=1;//開外部中斷0
  324.                 IT0=1;//外部中斷0下降沿觸發(fā)方式
  325.                 TMOD=0x11;//定時(shí)器0,1工作在方式1
  326.                 TH0=0;TL0=0;
  327.                 TH1=0xFC;//定時(shí)器1 的高8位里寫入十六進(jìn)制值 0xFC
  328.                 TL1=0xFB;
  329.                 ET0=1;//定時(shí)器0的中斷允許開關(guān)
  330.                 ET1=1;
  331.                 TR0=0;//定時(shí)器T0的開定時(shí)器位,TR0=0表示關(guān)定時(shí)器
  332.    wei=1;
  333.                 P0=table[1];//共陰(陽(yáng))極數(shù)碼管顯示碼制0~F
  334.     P2=tab[1];
  335.                 SetSpeed(0);
  336.                 EA=1;//開總中斷
  337.                 TR1=1;//啟動(dòng)定時(shí)器T
  338.                 while(1)
  339.                 {
  340.                         song();
  341.                         delay1(50);
  342.                         if(zd)//自動(dòng)播放標(biāo)志zd=1
  343.                         {
  344.                                 count2++;
  345.                                 if(count2>4)
  346.                                         count2=1;
  347.                                 RunMode++;
  348.                                 if(RunMode>6)
  349.                                         RunMode=1;
  350.         SystemSpeedIndex++;
  351.         if(SystemSpeedIndex>5)
  352.                                                 SystemSpeedIndex=1;
  353.         if(SystemSpeedIndex<1)
  354.                                                 SystemSpeedIndex=5;
  355.                         }
  356.                 }
  357.         }
  358.         
  359.         void int1() interrupt 2                //自動(dòng)播放歌曲和跑馬燈,外部中斷1
  360.         {
  361.                 EA=0;//關(guān)總中斷
  362.                 if(key2==0)
  363.                 {
  364.      delay1(7);
  365.                         if(key2==0)
  366.                         {
  367.                                 zd = 0;
  368.                                 TR0=1;        //定時(shí)器T0的開定時(shí)器位,TR0=1表示開定時(shí)器
  369.                                 i=0;//從頭開始唱
  370.                                 delay1(5);
  371.                                 count2++;
  372.                                 if(count2>4)//音樂標(biāo)志
  373.                                         count2=1;
  374.                                 RunMode++;
  375.                                 if(RunMode>6)//流水燈標(biāo)志
  376.                                         RunMode=1;
  377.                         }
  378.         while(!key2);
  379.                 }
  380.                 EA=1;//開總中斷
  381. }
  382. void int0() interrupt 0
  383. {
  384. EA=0;
  385. delay1(7);
  386. if(key1==0)
  387. {
  388.   delay1(5);
  389.   if(key1==0)
  390.   {
  391.    zd=1;
  392.   }
  393.   while(!key1);
  394. }
  395. EA=1;
  396. }
  397. void timer0() interrupt 1
  398. {
  399. EA=0;
  400. TR0=0;
  401. TH0=timeh;
  402. TL0=timel;
  403.   fm=~fm;
  404.   TR0=1;
  405. EA=1;
  406. }
  407. void Timer1() interrupt 3
  408. {
  409.   EA=0;
  410.   TR1=0;
  411.   TH1=0XFC;
  412.   TL1=0xfB;
  413.   Timer0Count++;
  414.   if(Timer0Count>=SystemSpeed)
  415.   {
  416.   Timer0Count=0;
  417.   Timer0EventRun();
  418.   }
  419.   TR1=1;
  420.   EA=1;
  421. }
復(fù)制代碼
全部資料51hei下載地址:
多模式帶音樂跑馬燈.rar (61.6 KB, 下載次數(shù): 82)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 九九热精品视频 | 久久久久久久久久久久久久av | 日本黄色的视频 | 国偷自产av一区二区三区 | 一区二区蜜桃 | 最近最新中文字幕 | 青青草原综合久久大伊人精品 | 一区二区在线免费观看 | 黄色在线免费播放 | 91传媒在线观看 | 亚洲精品视频免费观看 | 欧美极品在线播放 | 亚洲精品在线看 | 精品久久久久久亚洲综合网站 | 天天操天天射天天舔 | 欧美一区二区久久 | 欧美中文字幕一区二区三区亚洲 | 亚洲精品国产成人 | 欧美综合在线观看 | 黄网站免费在线看 | 一区二区三区精品在线视频 | 精品美女视频在线观看免费软件 | 国产在线麻豆精品入口 | 久久久久国产精品人 | 国产黄色在线观看 | 国产久视频 | 国内精品一区二区 | 美女日皮网站 | 欧美日韩国产欧美 | 免费黄色录像视频 | 亚洲午夜网 | www.天天操.com| 久草网免费 | re久久| 成人久久18免费网站麻豆 | 日韩精品视频一区二区三区 | 亚洲性网 | 国产美女一区 | 色视频在线观看 | 香蕉久久a毛片 | 久久中文字幕一区 |