视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
简单的PT2314BT2314 音调程序
2025-09-29 17:11:14 责编:小OO
文档
/**********************************************************************************************/

//PT2314的音量调节, 高低音调节 ,声道选择, 静音, 红外遥控,

/**********************************************************************************************/

#include"reg52.h"

#include"intrins.h"

#define uchar unsigned char

#define uint  unsigned int

#define ulong unsigned long

/*pt2314写入地址*/

#define WriteDeviceAddress 0x88

/*红外0/1代码时长定义*/

#define Imax 14000

#define Imin 8000

#define Inum1 1450   

#define Inum2 700

#define Inum3 3000

/*对应音量+, 音量-,高音+,高音-,低音+,低音-  静音,音源选择 */

                                 /*菜单,静音,加,减,dvd,vcd,cd,aut*/

#define Vol_Cut              0x08/*静音*/

#define up                   0x07

#define down                 0x0a

#define menu_Choose          0x05/*包括 treble ,   bass, vol*/

     /*#define vol_bass_up      0x05    遥控器的便捷扩展按键

       #define vol_bass_down    0x06

       #define vol_treble_up    0x03

       #define vol_treble_down  0x04*/

#define menu_road_Choose  0x03 //菜单选择包括了下面 按一下就跳变次

    /*  #define Choose_dvd       0x09   遥控器的便捷扩展按键

        #define Choose_cd        0x10

        #define Choose_mp3       0x11

        #define Choose_mp4       0x12  */

/*显示定义*/

//unsigned char Bass=0x60;

//unsigned char Treble=0x70;

/////////////////////

#define vol 0x00;

#define bass 0x60;

#define treble 0x70;

#define aud_Choose 0x40;

///////////////////////////////////////////////送到显示程序中的数组

unsigned char tab_display[]={0x7c,0x3a,0xfe,0xfc,0x04};//C:0x9c  D:0xfc V:0x7c o:0x3a B:0xfe A:0xee

///////////////////////////////////////////////共阴数MR6625显示 T:0x1e r:0x0e

unsigned char code dis_code[]={

                                0xfc,/*0*/

                                0x60,/*1*/

                                0xDA,/*2*/

                                0xF2,/*3*/

                                0x66,/*4*/

                                0xB6,/*5*/

                                0xBE,/*6*/

                                0xE0,/*7*/

                                0xFE,/*8*/

                                0xF6/*9*/

                              };

/////////////////////////////////////////////

unsigned char vol_iic[]={0,0,0,0x5c,0,0};/*vol,bass,treble,aud_Choose ,左声道静音量 右声道静音量, 传到iiC的数据  */

/////////////////////////////////////////////

unsigned char Choose_vbt[]={38,8,8};/*vol,bass,vtreble 音量调节变量存储*/

/////////////////////////////////////////////////MR-6625 最后一位显示表格

//unsigned char code MR_6625[]={0X20,0X01,0X02,0X04,0X08,0X10,0X40};//mp4,播放,暂停,DVD,CD,点,mp3 正

  unsigned char code MR_6625[]={0X04,0X80,0X40,0X20,0X10,0X08,0X02};//mp4,播放,暂停,DVD,CD,点,mp3 反

///////////////////////////////////////////////////////////////////////音量表格

/*unsigned char code vol_10db[]={0x00,0x08,0x10,0x18,

                      0x20,0x28,0x30,0x38};//10db增量

unsigned char code vol_1_25db[]={0x00,0x01,0x02,0x03,0x04,

                         0x05,0x06,0x07}; //1.25db增量

*/

unsigned char code vol_db[]={0x38|0x07,0x38|0x06,0x38|0x05,0x38|0x04,0x38|0x03,0x38|0x02,0x38|0x01,0x38|0x00,

                              0x30|0x07,0x30|0x06,0x30|0x05,0x30|0x04,0x30|0x03,0x30|0x02,0x30|0x01,0x30|0x00,

                             0x28|0x07,0x28|0x06,0x28|0x05,0x28|0x04,0x28|0x03,0x28|0x02,0x28|0x01,0x28|0x00,

                              0x20|0x07,0x20|0x06,0x20|0x05,0x20|0x04,0x20|0x03,0x20|0x02,0x20|0x01,0x20|0x00,

                             0x18|0x07,0x18|0x06,0x18|0x05,0x18|0x04,0x18|0x03,0x18|0x02,0x18|0x01,0x18|0x00,

                              0x10|0x07,0x10|0x06,0x10|0x05,0x10|0x04,0x10|0x03,0x10|0x02,0x10|0x01,0x10|0x00,

                             0x08|0x07,0x08|0x06,0x08|0x05,0x08|0x04,0x08|0x03,0x08|0x02,0x08|0x01,0x08|0x00,

                              0x00|0x07,0x00|0x06,0x00|0x05,0x00|0x04,0x00|0x03,0x00|0x02,0x00|0x01,0x00|0x00,

                             };

///////////////////////////////////////////////////////////////////////B/T调音声调表格

unsigned char code Tiaoyin[]={0x00,0x01,0x02,0x03,

                      0x04,0x05,0x06,0x07,

                      0x0f,0x0e,0x0d,0x0c,

                      0x0b,0x0a,0x09,0x08};

//////////////////////////////////////////////////////////32位编码接收存储

unsigned char Im[4]={0x00,0x00,0x00,0x00};

 

/////////////////////////////////////////////

unsigned long m,Tc;

unsigned char IrOK; // 码是否正确的标识符

unsigned char f;

unsigned char flag;

//unsigned char h;

unsigned char MenuChoosem;

unsigned char Numer;

unsigned char MenuRoadChoosem;

unsigned char Choose;

unsigned char UpDown;

unsigned char VolCutm;

unsigned char ppp;

///////////////////////////////////////

sbit m74HC1_DATA=P1^0;

sbit m74HC1_CLK=P1^1;

sbit Menu_high=P1^2;

sbit Menu_low=P1^3;

sbit Value_high=P1^4;

sbit Value_low=P2^5;

sbit Postion_Choose=P2^6;

//sbit P17=P1^7;

sbit a0=ACC^0; //累加器做模拟串口传输的数据位定义

//////////////////////////////

sbit K1=P2^0; 

sbit K2=P2^1;   

sbit K3=P2^2;

sbit K4=P2^3;

sbit K5=P2^4;

//////////////////////////////////////////

sbit    SCL=P3^7;//总线端口设置

sbit    SDA=P3^6;

////////////////////////////////////////////////////////////////

void Dely()

      {

         unsigned char m,n,s;

for(s=2;s>0;s--)

for(m=2;m>0;m--)

for(n=2;n>0;n--);

     }

//定时函数

///////////////////////////////////////////

void DelayMs(unsigned int number) //红外延时

{

    unsigned char temp;

    for(;number!=0;number--)

        {

            for(temp=112;temp!=0;temp--) ;

        }

}

//////////////////////////////////////////

void delay(unsigned char ms)   //显示延时程序

{

unsigned char i;

while(ms--)

    {

//for (i=0;i<125;i++);

for (i=0;i<30;i++);

    }

}

///////////////////////////////////////////////////////PT2314 iic程序

//开总线

void Start()

   {

       SDA=1;

       SCL=1;_nop_();_nop_();//_nop_();

       SDA=0;_nop_();_nop_();//_nop_();

       SCL=0;//_nop_();_nop_();_nop_();

   }

///////////////////////////////////////////////////////////

 //结束总线

void Stop()

 {

       SCL=0;

       SDA=0;_nop_();_nop_();//_nop_();

       SCL=1;_nop_();_nop_();//_nop_();

       SDA=1;//_nop_();_nop_();_nop_();

 }

 ///////////////////////////////////////////////////////

//测试ACK

bit TestAck()

 {

   bit ErrorBit;

   SDA=1; _nop_();//_nop_();_nop_();

   SCL=1;_nop_();//_nop_();_nop_();

   ErrorBit=SDA;

   SCL=0;

   return(ErrorBit);

 }

///////////////////////////////////////////////////

  //写入8个bit到PT2314

Write8Bit(uchar input)

{

   uchar temp;

   for(temp=8;temp!=0;temp--)

     {

        SDA=(bit)(input&0x80);

        SCL=1;_nop_();//_nop_();_nop_();_nop_();

        SCL=0;_nop_();//_nop_();_nop_();_nop_();

input=input<<1;

   

     }

}

////////////////////////////////////////////////////

//写入一个字节到PT2314中

void WritePT2314(uchar ch)

 {

   Start();

   Write8Bit(WriteDeviceAddress);

   TestAck();

   Write8Bit(ch);

   TestAck();

   Stop();

   //DelayMs(20);

 }

 

/////////////////////////////////////////////////////////////////////

void change_all()   /*数值处理分配到表格*/

    {

     switch(MenuChoosem)

       {  

          case 0 : tab_display[2]=dis_code[Choose_vbt[0]/10];

                   tab_display[3]=dis_code[Choose_vbt[0]%10];   break; /*vol*/

          case 1 : tab_display[2]=dis_code[Choose_vbt[1]/10];

                   tab_display[3]=dis_code[Choose_vbt[1]%10];   break; /*bass*/

          case 2 : tab_display[2]=dis_code[Choose_vbt[2]/10];

                   tab_display[3]=dis_code[Choose_vbt[2]%10];   break; /*treble*/

         

       }

      /* IIC数据处理*/                

     if(VolCutm==0)

           {

            tab_display[4]=MR_6625[2]|MR_6625[5]|MR_6625[Choose];

            vol_iic[4]=0xdf;//静音

            vol_iic[5]=0xff;

           }

       else

            {

            tab_display[4]=MR_6625[1]|MR_6625[5]|MR_6625[Choose];

            vol_iic[4]=0xc0;//开静音

            vol_iic[5]=0xe0;

            }

    

      vol_iic[0]=vol_db[Choose_vbt[0]]|vol;

      vol_iic[1]=Tiaoyin[Choose_vbt[1]]|bass;

      vol_iic[2]=Tiaoyin[Choose_vbt[2]]|treble;

      if(Choose==0)

          {vol_iic[3]=0x5c;}

      if(Choose==3)

          {vol_iic[3]=0x5d;}

      if(Choose==4)

          {vol_iic[3]=0x5e;}

      if(Choose==6)

          {vol_iic[3]=0x5f;}

    }

void out_74HC1(unsigned char data_buf) /*模拟传输到74HC1*/

 {

     unsigned char i;//y;

     i=8;

     ACC=data_buf;

       do

        {

            m74HC1_DATA=a0; 

            m74HC1_CLK=0;

          

            m74HC1_CLK=1;

ACC=ACC>>1;

         }

           while(--i!=0);

 }

///////////////////////////////////////////////////////////

void display_74HC1()

    { unsigned char m;

   

  

for(m=0;m<3;m++)

           {

             Numer=tab_display[0]; //菜单高位显示

             out_74HC1(Numer);

             Menu_high=0;

             delay(2);

             Menu_high=1;

       

             Numer=tab_display[1]; //菜单低位显示

             out_74HC1(Numer);

             Menu_low=0;

             delay(2);

             Menu_low=1;

       

             Numer=tab_display[2]; //数值高位显示

             out_74HC1(Numer);

             Value_high=0;

             delay(2);

             Value_high=1;

       

             Numer=tab_display[3]; //数值低位显示

             out_74HC1(Numer);

             Value_low=0;

             delay(2);

             Value_low=1;

       

             Numer=tab_display[4]; //点位选择显示

             out_74HC1(Numer);

             Postion_Choose=0;

             delay(2);

             Postion_Choose=1;

       

             }

      m=0;

  

    }

////////////////////////////////////////////////////////////////

void Vol_Cut_m()  /*静音入口*/ 

     {

       VolCutm=~VolCutm ;

      

     }

/////////////////////////////////////////////////////////////

void menu_road_Choose_m()   //选择mp4,DVD,CD,mp3  /*输入选择*/

     {                   //Choose:  0   3   4   6

       MenuRoadChoosem++;

       if(MenuRoadChoosem==4)

             {

              MenuRoadChoosem=0;

             }

        

       switch(MenuRoadChoosem)

            {

              case 0: Choose=0;    break; /*mp4*/

              case 1: Choose=3;    break; /*DVD*/

              case 2: Choose=4;    break; /*CD*/

              case 3: Choose=6;    break; /*mp3*/

             

         }

     }

/////////////////////////////////////////////////////////////////////

void menu_Choose_m()   /*菜单控制选择*/

     {

       MenuChoosem++;

       if(MenuChoosem==3)

             {

              MenuChoosem=0;

             }

        

          switch(MenuChoosem)        //显示代码

             { 

              case 0:  tab_display[0]=0x7c;

                       tab_display[1]=0x3a;      break; /*vol*/

              case 1:  tab_display[0]=0xfe;

                       tab_display[1]=0xee;      break; /*bass*/

              case 2:  tab_display[0]=0x1e;

                       tab_display[1]=0x0e;      break; /*treble*/

              }

             

     }

///////////////////////////////////////////////////////////////////////////////////

void up_m() /*数值调节+*/

           {

              switch(MenuChoosem)

                   { 

                      case 0 : UpDown=Choose_vbt[0]; break; /*vol*/

                      case 1 : UpDown=Choose_vbt[1]; break; /*bass*/

                      case 2 : UpDown=Choose_vbt[2]; break; /*treble*/

                    }

              UpDown++;

             if(MenuChoosem==0)           /*vol重新存入Choose_vbt[]*/

{ if(UpDown>)

                               {

                                UpDown=;

                         }

                            Choose_vbt[0]=UpDown;

                      }

              

              if((MenuChoosem==1)|(MenuChoosem==2))

                      {

if(UpDown>16)

                             {

                                  UpDown=16;

                       }

                   }

               if(MenuChoosem==1)    /*bass重新存入Choose_vbt[]*/

                      {

                       Choose_vbt[1]=UpDown;

                   }

                if(MenuChoosem==2)   /*treble重新存入Choose_vbt[]*/

                      {

                       Choose_vbt[2]=UpDown;

                   }

             }

////////////////////////////////////////////////////////////////////////////////////

void down_m()/*数值调节-*/

      {

       

      switch(MenuChoosem)

         {

          case 0: UpDown=Choose_vbt[0]; break; /*vol*/

          case 1: UpDown=Choose_vbt[1]; break; /*bass*/

          case 2: UpDown=Choose_vbt[2]; break; /*treble*/

         }

      

if(UpDown>1)

         {

           UpDown--;

         }

        else

         {

         UpDown=0;

         }

       if(MenuChoosem==0)           /*vol重新存入Choose_vbt[]*/

              {   

                 Choose_vbt[0]=UpDown;

              }

 

       if(MenuChoosem==1)    /*bass重新存入Choose_vbt[]*/

              {

               Choose_vbt[1]=UpDown;

              }

        if(MenuChoosem==2)   /*treble重新存入Choose_vbt[]*/

              {

               Choose_vbt[2]=UpDown;

              }

      } 

////////////////////////////////////////////////////////////////////////////////////////

 void  menu()

        { //unsigned char wait;

          if(IrOK==1)

                 {                

                        IrOK=0;

                       switch(Im[2])

                       { 

                          case 0x08 :           Vol_Cut_m();       break; /*静音入口*/

                          case 0x03 :  menu_road_Choose_m();       break;/*输入选择*/

                          case 0x05 :       menu_Choose_m();       break;/*菜单控制选择*/

                          case   0x07 :              up_m();       break;/*数值调节+*/

                          case 0x0a :              down_m();       break;/*数值调节-*/

                          default:  break;

                        }

           change_all();

//for(wait=0;wait<10;wait++)

         //    {

        //    display_74HC1();

        //  }

          switch(MenuChoosem)

               {  case 0  : WritePT2314(vol_iic[0]); break;

                  case 1  : WritePT2314(vol_iic[1]); break;

                  case 2  : WritePT2314(vol_iic[2]); break;

              

               }

             

         

             

            if(VolCutm==0)

                {

                 WritePT2314(vol_iic[4]);

             

                 WritePT2314(vol_iic[5]);

             

                }

           else

                {

                WritePT2314(vol_iic[4]);

          

                WritePT2314(vol_iic[5]);

                }

             

         

         

           WritePT2314(vol_iic[3]);   

/*     WritePT2314(vol_iic[0]);//DelayMs(30);

       WritePT2314(vol_iic[1]);//DelayMs(30);

       WritePT2314(vol_iic[2]);//DelayMs(30);

       WritePT2314(vol_iic[3]);//DelayMs(30);

       WritePT2314(vol_iic[4]);//DelayMs(30);

       WritePT2314(vol_iic[5]);//DelayMs(30);

       */

                  }

       }

//////////////////////////////////////////////////按键

 void  anjian(void)

     {

      if(K1==0)

           {

                Dely();

                if(K1==0)

                     { 

                     Im[2]=0x08;

                          IrOK=1;

                     do{

                          menu();

                          display_74HC1();

                      

                      }  while(K1==0);

                   }

           }

       if(K2==0)

           {

                Dely();

                if(K2==0)

                     {   Im[2]=0x03;

                          IrOK=1;

                        do{

                          menu();

                          display_74HC1();

                      

                      

                      }  while(K2==0);

                   }

           }

         if(K3==0)

           {

                Dely();

                if(K3==0)

                     { Im[2]=0x05;

                          IrOK=1;

                      do{

                       

                          menu();

                          display_74HC1();

                      

                      }  while(K3==0);

                  }

           }

        if(K4==0)

           {

                Dely();

                if(K4==0)

                     {    Im[2]=0x07;

                          IrOK=1;

                       do{

                          menu();

                          display_74HC1();

                      

                      

                      }  while(K4==0);

                  }

           }

         if(K5==0)

           {

                Dely();

                if(K5==0)

                     { 

                       IrOK=1;

                       Im[2]=0x0a;

                        do{

                         

                          menu();

                          display_74HC1();

                      

                      

                      }  while(K5==0);

                  }

           }

   

     }

/////////////////////////////////////////////////////////////////////////////

void intersvr1(void) interrupt 2 using 1

{

 Tc=TH0*256+TL0;                                               //提取中断时间间隔时长

 TH0=0;

 TL0=0;    //定时中断重新置零

 

if((Tc>Imin)&&(Tc      {

            m=0;

            f=1;

            return;

       }       //找到启始码

   if(f==1)

      {

if(Tc>Inum1&&Tc               {

Im[m/8]=Im[m/8]>>1|0x80; m++; //取1码

               }

if(Tc>Inum2&&Tc               {

Im[m/8]=Im[m/8]>>1; m++; //取0码

               }

          if(m==32)

              {

                     m=0; 

                     f=0;

                     if(Im[2]==~Im[3])

                           {

                            IrOK=1;

                           }

                    else IrOK=0;   //取码完成后判断读码是否正确

                }

              //准备读下一码

        }

 

}

 ////////////////////////////////////////////////////////////////////  红外代码处理 分配到各相应表格 进行控制

void main()

    {m=0;

     f=0;

     VolCutm=0;

     MenuRoadChoosem=0;

     MenuChoosem=0;/*0为VOL*/

     UpDown=15;

 

     EA=1; 

     IT1=1;EX1=1;

     TMOD=0x11;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

     TH0=0;TL0=0;

     TR0=1;

     P1=0x7F;

    

     change_all();

     DelayMs(100);

     DelayMs(100);

     DelayMs(100);

     DelayMs(100);

     DelayMs(100);

     DelayMs(100);

     DelayMs(100);

     DelayMs(100);

    

     WritePT2314(vol_iic[0]);  

     WritePT2314(vol_iic[1]);   

     WritePT2314(vol_iic[2]);   

     WritePT2314(vol_iic[3]);   

     WritePT2314(vol_iic[4]);

     WritePT2314(vol_iic[5]);

  

   

  

        while(1)

           {

           // change_all();

            display_74HC1();

            menu();

            //Dely();

            anjian();

           }

    }

  外观:    

        

 

 

 

 

 下载本文

显示全文
专题