⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 suzigongfang.c

📁 包括电源开关判断程序
💻 C
字号:
#include <AT89X51.H>
#include<intrins.h>
#include "diver.h"
/*各种显示的级数为十六级显示格式为如下:
**************************************
*     VOLUE        13				 *
* @@@@@@@@@@@@@@@@@@@@@@@			 *
**************************************/

/*延时程序*/
void delay(uchar j)
{
  uchar m,n,s;
  for(m=j;m>0;m--)
 { for(n=20;n>0;n--)
  for(s=248;s>0;s--);}
}






/*数据缓冲*/
 void KM(uchar vol)  //VOL
{A[0]=0x20;
 A[1]=0x20;
 A[2]=DC[(vol/100)];
 A[3]=DC[((vol%100)/10)];
 A[4]=DC[(vol%10)];
}






/*I2C的开始发送程序*/
I2C_start()     
{SDA=1;
 SCL=1;
 _nop_(); _nop_(); _nop_(); _nop_();
 SDA=0;
_nop_(); _nop_(); _nop_(); _nop_();
SCL=0;
     }






	 
/*I2C的停止发送程序*/
I2C_stop()    
{SCL=0;
SDA=0;
_nop_(); _nop_(); _nop_(); _nop_();
SCL=1;
_nop_(); _nop_(); _nop_(); _nop_();
SDA=1;
    }







/*I2C等待数码电位
      的应答信号*/
wait_ack()         
{SDA=1;
_nop_(); _nop_(); _nop_(); _nop_();
SCL=1;
_nop_(); _nop_(); _nop_(); _nop_();
while(SDA==1);   //////////////////////////////////
 }





 /*I2C向数字电位器发送一字节得数据*/
 I2C_sendbyte(uchar a)      
 {
 uchar i=8;
 while (i--)
 {
 SCL=0;
 _nop_();
 SDA=(a&0x80); a<<=1; 
 _nop_(); _nop_(); _nop_(); _nop_();
 SCL=1;
 _nop_(); _nop_(); _nop_(); _nop_();
 }
 SCL=0;
 }
 
 
 
 
 
 
 
 
 /*发送命令到液晶*/
 lcd_com(char b)      

{_nop_();_nop_();_nop_();_nop_();
RS=0;
RW=0;
E=1;
_nop_();_nop_();_nop_();_nop_();
P0=b;
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
E=0;}










/*发送数据到液晶*/
lcd_data(char a)  
{_nop_();_nop_();_nop_();_nop_();
RS=1;
RW=0;
E=1;

_nop_();_nop_();_nop_();_nop_();
P0=a;
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
E=0;}









/*液晶显示缓冲*/
Lcd_dis(uchar k[],char M)  ////////////////////////////////////////////////////////////
{char i,j;
lcd_com(0x01);
delay(1);          /////////////////////////////////////
for(i=0;i<M;i++)
{lcd_data(k[i]);
}
for(j=0;j<5;j++)
{lcd_data(A[j]);}
}










/*电源开程序*/
 power_on()           
{char i;
lcd_com(0x01);   //清屏
delay(10);
OFF_ON=0;
lcd_com( 0x0c);        //开显示
for(i=0;i<14;i++)
{lcd_data(ONd[i]);}

delay(200);

SPEAK=0;
K=0;
}







/*电源关程序*/                  //////////////////////////////////////////////////////////////////
power_off()    
{char i;
lcd_com(0x01);   //清屏
delay(10);
SPEAK=1;
for(i=0;i<14;i++)
{lcd_data(OFFd[i]);}
delay(244);
OFF_ON=1;
//lcd_com( 0x08);
K=1;}







/*电源开关判断程序*/
offon()     
{if(K==1)
{power_on();}
else
{power_off();}
    }
	
	
	
	
	
	
	
	/*键盘扫描*/
uchar key(void)
{uchar sccode,recode;
P1=0xf0;
if((P1&0xf0)!=0xf0)
{delay(2);       //要更改一下
if((P1&0xf0)!=0xf0)
{sccode=0xfe;
while((sccode&0x10)!=0)
{P1=sccode;
if((P1&0xf0)!=0xf0)
{recode=(P1&0xf0)|0x0f;       /************/
P1=0xf0;
return((~sccode)+(~recode));
    }
 else
 sccode=(sccode<<1)|0x01;
 }
     }
        }
P1=0xf0;
return(0);
	}

	
	
	
	
	
	
	
	/*I2C发送缓冲*/
I2C_send(uchar a,uchar b,uchar c)   //a为器件地址,b为器件内部地址,c为数据 
{I2C_start();
 I2C_sendbyte(a);
 wait_ack();
I2C_sendbyte(b);
wait_ack();
I2C_sendbyte(c);
wait_ack();
I2C_stop();
}



	/*左右声道一起增大*/
 all_up()  
 {
   if(Vol_R<=254)       //////////////hu   
    {Vol_R++;}
   if(Vol_L<=254)       //////////////hu
    {Vol_L++;}
  VOL=((Vol_L/2)+(Vol_R/2));
  KM(VOL);
 Lcd_dis(VOLUE,7);
I2C_send(0x50,0x12,VOL);    //左
I2C_send(0x50,0x11,VOL);   //右
    }

	
	
	
	
	
	
	/*左右声道一起减少*/
all_down()  
 {
   if(Vol_R>0)
    {Vol_R--;}
   if(Vol_L>0)
    {Vol_L--;}
  VOL=((Vol_L/2)+(Vol_R/2));
  KM(VOL);
  Lcd_dis(VOLUE,7);
I2C_send(0x50,0x12,VOL);    //左
I2C_send(0x50,0x11,VOL);  //右
    }

	
	
	
	
/*右声道高音增大大*/	
high_R_up()
{if(High_R<=254)             ///////////hu
    {High_R++;}
KM(High_R);
  Lcd_dis(HR,7);
I2C_send(0x54,0x11,High_R);    //右
}







/*左声道高音增大大*/
high_L_up()
{if(High_L<=254)          /////////////hu
    {High_L++;}
KM(High_L);
  Lcd_dis(HL,7);
I2C_send(0x54,0x12,High_L);    //左
}







/*左声道高音减少*/
high_L_down()
{if(High_L>0)
    {High_L--;}
KM(High_L);
  Lcd_dis(HL,7);
I2C_send(0x54,0x12,High_L);    //左
}








/*右声道高音减少*/
high_R_down()
{if(High_R>0)
    {High_R--;}
KM(High_R);
  Lcd_dis(HR,7);
I2C_send(0x54,0x11,High_R);    //右
}









/*右声道低音增加*/
bass_R_up()
{if(Bass_R<=254)      //////////hu
    {Bass_R++;}
KM(Bass_R);
  Lcd_dis(BR,7);
I2C_send(0x52,0x11,Bass_R);    //右
}







/*左声道低音增加*/
bass_L_up()
{if(Bass_L<=254)     ///////////hu
    {Bass_L++;}
KM(Bass_L);
  Lcd_dis(BL,7);
I2C_send(0x52,0x12,Bass_L);    //右
}








/*左声道低音减少*/
bass_L_down()
{if(Bass_L>0)
    {Bass_L--;}
KM(Bass_L);
  Lcd_dis(BL,7);
I2C_send(0x52,0x12,Bass_L);    //右
}









/*右声道低音减少*/
bass_R_down()
{if(Bass_R>0)
    {Bass_R--;}
KM(Bass_R);
  Lcd_dis(BR,7);
I2C_send(0x52,0x11,Bass_R);    //右
}










/*声道平衡右*/
balan_R_down()
{if(Vol_R>0)
    {Vol_R--;Vol_L++;}     ////////////hu
KM(Vol_R);
  Lcd_dis(VR,7);
I2C_send(0x50,0x11,Vol_R);    //右
}








/*声道平衡左*/
balan_L_down()
{if(Vol_L>0)
    {Vol_L--;Vol_R++;}     /////////////hu
KM(Vol_L);
  Lcd_dis(VL,7);
I2C_send(0x50,0x12,Vol_L);    //左
}











/*键盘扫描缓冲*/
void transfer()    
{int j,i;
while(1)
{j=key();
if(j==0x11)
{offon();break;}
else
{switch(j)
{case 0x48:all_up();break;  //表值对应
 case 0x28:all_down();break;
 case 0x41:balan_L_down();break;
 case 0x81:balan_R_down();break;
 case 0x12:high_L_down();break;
 case 0x22:high_L_up();break;
 case 0x42:high_R_down();break;                     
 case 0x82:high_R_up();break;
 case 0x14:bass_L_down();break;
 case 0x24:bass_L_up();break;
 case 0x44:bass_R_down();break;
 case 0x84:bass_R_up();break;
        }
 if(S==1)
{S=0;
for(i=0;i<=100;i++)
{delay(1);   //要改HU
if((P1&0xf0)==0xf0)break;
}
     }
delay(1);     //要改HU
if((P1&0xf0)==0xf0)break;
}}}


void sleep()
{if(slp==0)
   counter++;
 if(counter>65000)
  {counter=0; 
   power_off();
  }
 if(slp==1)
   counter=0;
}





/*主函数*/

main() 
{
//液晶显示初此化
lcd_com(0x14);
lcd_com(0x06);
lcd_com(0x18);
lcd_com(0x01);

I2C_send(0x50,0x12,VOL);    //左hu
I2C_send(0x50,0x11,VOL);   //右hu

P1=0xf0;
while(1)
{if((P1&0xf0)!=0xf0)
{S=1;
transfer();
}
//sleep();
  }
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -