欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 新人請教一個12864顯示程序與音樂程序怎樣模塊化,主函數(shù)怎樣寫?謝謝 [打印本頁]

作者: George1    時間: 2018-2-23 19:12
標(biāo)題: 新人請教一個12864顯示程序與音樂程序怎樣模塊化,主函數(shù)怎樣寫?謝謝
#include <regx52.h>

sfr  P4  = 0xE8;//定義P4端口地址
sbit P4_4 = P4^4;//定義P4.4口位地址
sbit      speaker=P4^4;
#define BUZZER P4_4 //定義蜂鳴器控制端口
#define ON 0 //端口低電平時蜂鳴器開啟
#define OFF 1 //端口高電平時蜂鳴器關(guān)閉

unsigned char timer0h,timer0l,time;
        //生日歌
code unsigned char sszymmh[]={5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,
         5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,
         5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2,
         4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4};
       // 音階頻率表 高八位
code unsigned char FREQH[]={
                                0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
                                0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
                                0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
                                0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
                               } ;
         // 音階頻率表 低八位
code unsigned char FREQL[]={
                                 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
                                 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
                                 0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
                                 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
                                };
void delay(unsigned char t)
   {
   unsigned char t1;
   unsigned long t2;
   for(t1=0;t1<t;t1++)
   {
    for(t2=0;t2<8000;t2++)
       {
        ;
        }
   }
   TR0=0;
}
void t0int() interrupt 1
{
TR0=0;
speaker=!speaker;
TH0=timer0h;
TL0=timer0l;
TR0=1;
}
void song()
{
TH0=timer0h;
TL0=timer0l;
TR0=1;
delay(time);                       
}
void main(void)
{
unsigned char k,i;
TMOD=1; //置CT0定時工作方式1
EA=1;
ET0=1;//IE=0x82 //CPU開中斷,CT0開中斷
while(1)
      {
       i=0;  
       while(i<75){         //音樂數(shù)組長度 ,唱完從頭再來        
       k=sszymmh[i]+7*sszymmh[i+1]-1;
       timer0h=FREQH[k];
       timer0l=FREQL[k];
       time=sszymmh[i+2];
       i=i+3;
       song();
        }
      }
  }


作者: bailoao    時間: 2018-2-23 23:56
多任務(wù)一般用RTOS的hwi、swi、task等進(jìn)行處理,如果僅是您貼的代碼中需加入屏幕顯示功能,您這里用的51,可以在播放音樂時插中斷刷新屏幕。
作者: George1    時間: 2018-2-24 12:32
謝謝指教,我想讓顯示和音樂播放同時進(jìn)行,寫頭文件模塊化,主函數(shù)中斷進(jìn)行兩個程序的執(zhí)行,可以嗎?怎樣寫
?
作者: cxdtrj    時間: 2018-2-24 17:58
有p4嗎?
作者: angmall    時間: 2018-2-25 10:04

有P4, STC12 就有

STC12C5A60S2-35I-PDIP40

STC12C5A60S2-35I-PDIP40.png (84.3 KB, 下載次數(shù): 53)

STC12C5A60S2-35I-PDIP40

STC12C5A60S2-35I-PDIP40

作者: 其二v    時間: 2018-2-25 10:36
調(diào)用函數(shù)
作者: George1    時間: 2018-3-1 16:20
其二v 發(fā)表于 2018-2-25 10:36
調(diào)用函數(shù)

請賜教主函數(shù)調(diào)用函數(shù)的源程序代碼,謝謝!
void main(){
        code unsigned char top[] = "^_^ 學(xué)習(xí) ^_^ ";
        code unsigned char li0[] = "方案設(shè)計";
        code unsigned char li1[] = "為學(xué)習(xí)添活力!";
        code unsigned char bottom[] = "QQ:XXXXX";
        LCD_Init();
        while(1)
        {
                LCD_Clear();
                LCD_ShowImg(IMG);
                delay(65535);
                LCD_Flash();
                LCD_Clear();
                LCD_ShowString(0,0,top);
                delay(10000);
                LCD_ShowString(0,1,li0);
                delay(10000);
                LCD_ShowString(0,2,li1);
                delay(10000);
                LCD_ShowString(0,3,bottom);
                LCD_Flash();
                delay(65535);
        }
}
  和
void main(void)
{
unsigned char k,i;
TMOD=1; //置CT0定時工作方式1
EA=1;
ET0=1;//IE=0x82 //CPU開中斷,CT0開中斷
while(1)
      {
       i=0;  
       while(i<75){         //音樂數(shù)組長度 ,唱完從頭再來        
       k=sszymmh[ i]+7*sszymmh[i+1]-1;
       timer0h=FREQH[k];
       timer0l=FREQL[k];
       time=sszymmh[i+2];
       i=i+3;
       song();
        }
      }
  }
兩個主函數(shù)怎樣合為一個,謝謝1
作者: 1244895028    時間: 2019-1-23 15:27
明明是世上只有媽媽好的歌,什么生日歌?
作者: shuisheng    時間: 2019-1-23 20:26
12864的案例我空間案例很多,你可以參考一下。你上面的代碼不適合多首歌曲播放,最好的方式是將音符與節(jié)拍編輯好一起放到一個數(shù)組里,
例如0x11,0x04,
其中0x11中的0x1指的是中音,
(uint16 code FreTab_Low[7]={262,294,330,349,392,440,494};      //低音頻率表
uint16 code FreTab_Mid[7]={523,578,659,698,784,880,988};                //中音頻率表
uint16 code FreTab_Hight[7]={1046,1175,1318,1397,1568,1760,1976};        //高音頻率表),
后一個1指向的是 523HZ,那就是說通過0x11能找到高中低音中的音符,0x04表示節(jié)拍(一種音符延時的長短),那么只要保證數(shù)組指針在++就能取出數(shù)組里的參數(shù),一首歌一個數(shù)組就能擺平。

下面是具體一個例子:

#include<reg51.h>       

#define uint8        unsigned char   
#define uint16  unsigned int

sbit Music=P2^0;
sbit sw=P3^0;
void DelayMS(uint16 dly)
{
        uint16 x,y;
        for(x=dly;x>0;x--)
                for(y=247;y>0;y--);
}

uint16 code FreTab_Low[7]={262,294,330,349,392,440,494};                //低音頻率表
uint16 code FreTab_Mid[7]={523,578,659,698,784,880,988};                //中音頻率表
uint16 code FreTab_Hight[7]={1046,1175,1318,1397,1568,1760,1976};        //高音頻率表

//大海啊故鄉(xiāng)
uint8 code  Happy_Birthday1[]={0x11,0x04,0x12,0x04,0x11,0x0a,0x07,0x02,0x06,0x02,
0x05,0x04,0x13,0x04,0x13,0x0f,0x13,0x04,0x14,0x04,
0x13,0x0a,        0x12,0x02,0x11,0x02,0x06,0x04,0x12,0x04,0x12,0x0f,
0x07,0x04,0x11,0x04,0x07,0x0a,0x06,0x02,0x05,0x02,
0x05,0x04,0x12,0x04,0x12,0x0f,0x14,0x0a,0x13,0x04,0x11,0x04,0x06,0x04,0x11,0x18,
0x15,0x04,0x16,0x04,0x15,0x0a,0x13,0x04,0x15,0x04,0x16,0x04,0x15,0x0f,
0x16,0x04,0x15,0x04,0x14,0x04,0x11,0x02,0x11,0x02,0x16,0x04,0x15,0x04,0x15,0x18,
0x13,0x04,0x14,0x04,0x13,0x0a,0x12,0x02,0x11,0x02,0x06,0x04,0x12,0x04,0x12,0x0f,
0x14,0x04,0x15,0x04,0x14,0x04,0x13,0x04,0x11,0x04,0x06,0x04,
0x11,0x18,0x15,0x04,0x16,0x04,0x15,0x0a,0x13,0x04,0x15,0x04,0x16,0x04,0x15,0x0f,
0x16,0x04,0x15,0x04,0x14,0x04,0x11,0x02,0x11,0x02,0x16,0x04,0x15,0x04,0x15,0x18,
0x13,0x04,0x14,0x04,0x13,0x0a,0x12,0x02,0x11,0x02,
0x06,0x04,0x12,0x04,0x12,0x0f,
0x14,0x04,0x15,0x04,0x14,0x04,0x13,0x04,0x11,0x04,0x06,0x04,0x11,0x18,
0x00,0x00
};
//祝你生日快樂
uint8 code  Happy_Birthday2[]={0x11,0x05,0x11,0x05,0x12,0x0a,0x11,0x0a,
0x14,0x0a,0x13,0x14,
0x11,0x05,0x11,0x05,0x12,0x0a,0x11,0x0a,
0x15,0x0a,0x14,0x14,
0x11,0x05,0x11,0x05,0x21,0x0a,0x16,0x0a,
0x14,0x0a,0x13,0x0a,0x22,0x0a,
0x17,0x05,0x17,0x05,0x16,0x0a,0x14,0x0a,
0x15,0x0a,0x14,0x14,0x00,0x00

};
//辣妹子
uint8 code  Happy_Birthday3[]={
       
0x16,0x04,
0x13,0x02,
0x15,0x02,
0x16,0x04,
0x13,0x02,
0x15,0x02,

0x16,0x04,
0x13,0x02,
0x15,0x02,
0x06,0x08,

0x16,0x04,
0x13,0x02,
0x15,0x02,
0x16,0x04,
0x13,0x02,
0x15,0x02,

0x16,0x04,
0x16,0x04,
0x06,0x08,

0x16,0x04,
0x13,0x02,
0x15,0x02,
0x16,0x04,
0x13,0x02,
0x15,0x02,

0x16,0x04,
0x13,0x02,
0x15,0x02,
0x06,0x08,

0x16,0x04,
0x13,0x02,
0x15,0x02,
0x16,0x04,
0x13,0x02,
0x15,0x02,

0x06,0x04,
0x06,0x04,
0x06,0x08,

0x16,0x04,
0x13,0x02,
0x15,0x02,
0x16,0x04,
0x13,0x02,
0x15,0x02,


0x16,0x04,
0x16,0x04,
0x16,0x08,

0x16,0x04,
0x13,0x02,
0x15,0x02,
0x16,0x04,
0x13,0x02,
0x15,0x02,

0x13,0x04,
0x13,0x04,
0x06,0x08,

0x16,0x04,
0x13,0x02,
0x15,0x02,
0x16,0x04,
0x13,0x02,
0x15,0x02,

0x16,0x04,
0x16,0x04,
0x16,0x08,

0x11,0x04,
0x15,0x02,
0x13,0x02,
0x13,0x02,
0x15,0x02,

0x13,0x04,
0x13,0x04,
0x06,0x08,

0x13,0x04,
0x13,0x02,
0x13,0x02,
0x16,0x04,
0x16,0x04,

0x16,0x18,

0x16,0x0a,
0x21,0x04,


0x13,0x04,
0x13,0x04,
0x03,0x08,


0x00,0x00
};



uint16 Fre;  //存放獲取頻率值的變量

                         /*-----------------------------------------------
                         函數(shù)名:Timer_Init()
                         函數(shù)功能:對兩個定時器初始化
                         入口參數(shù):無
------------------------------------------------*/
void Timer_Init()
{
        TMOD=0x11;
        EA=1;
        ET0=1;
        ET1=0;
        TR0=0;
        TR1=0;
}
/*-----------------------------------------------
函數(shù)名:Timer0_Ser()
函數(shù)功能:定時器0的中斷服務(wù)程序,主要是產(chǎn)生需要的頻率
從而驅(qū)動喇叭發(fā)出相應(yīng)的音符
入口參數(shù):無
------------------------------------------------*/
void Timer0_i() interrupt 1
{
        TH0=Fre/256;
        TL0=Fre%256;
        if(Music==0)
                Music=1;
        else Music=0;               
}

/*-----------------------------------------------
函數(shù)名:Music_Play(uchar *MusicTab)
函數(shù)功能:音樂播放函數(shù),
入口參數(shù):*MusicTab  所要播放音樂的首地址
------------------------------------------------*/
void Music_Play(uint8 *MusicTab)
{
        uint8 *pMusic;
        uint8 temp,i;
       
        pMusic=MusicTab;  //將歌曲首地址給指針變量
        while(*pMusic!=0)
        {
                if((*pMusic&0xf0)==0x00)
                        Fre=65536-1000000/FreTab_Low[*pMusic&0x0f];
                else if((*pMusic&0xf0)==0x10)
                        Fre=65536-1000000/FreTab_Mid[*pMusic&0x0f];
                else if((*pMusic&0xf0)==0x20)
                        Fre=65536-1000000/FreTab_Hight[*pMusic&0x0f];
               
                TH0=Fre/256;                //計算頻率初值,賦高八位
                TL0=Fre%256;                //計算頻率初值,賦低八位
                TH1=0x3c;                    //定時器1賦初值,定時50ms
                TL1=0xb0;
               
                pMusic++;                    //獲得節(jié)拍值
                temp=*pMusic;
                TR0=1;                        //開啟定時器T0
                TR1=1;                        //開啟定時器T1
                for(i=0;i<temp;i++)
                {
                        while(TF1==0);        //判斷定時器1是否溢出
                        TH1=0x3c;
                        TL1=0xb0;
                        TF1=0;       
                }
                pMusic++;
        }
}
/*-----------------------------------------------
函數(shù)名:main()
函數(shù)功能:主函數(shù)
入口參數(shù):無
------------------------------------------------*/
void main()
{       
       
           while(1)
        {
                int k;
                Timer_Init();
               
               
                if(sw==0)                      
                {
                        DelayMS(10);                        
                        if(sw==1)           
                                break;
                        while(sw==0);
                        {
                                k++;
                               
                               
                                if(k==1)
                                {
                                        Music_Play(Happy_Birthday1);
                                }
                               
                                else if(k==2)
                                {
                                        Music_Play(Happy_Birthday2);
                                       
                                }
                               
                                else if(k==3)
                                {
                                        Music_Play(Happy_Birthday3);
                                        k=0;
                                }
                               
                               
                               
                        }
                }
        }
}

懂了這個再同12864整合一下就OK了,不是很難



作者: shuisheng60    時間: 2019-3-14 07:45
已經(jīng)有你想要的作品呢,看這里:http://www.raoushi.com/bbs/dpj-152388-1.html




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1