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

📄 基于at89c51语音存储与回放.txt

📁 基于AT89C51数字化语音存储与回放系统
💻 TXT
字号:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char 
sbit cs_0820=P1^0;
sbit wr_0820=P1^1;
sbit red_0820=P1^2;
sbit int_0820=P1^3;
sbit ncs1=P1^4;
sbit cs2=P1^5;
sbit we=P1^6;
sbit oe=P1^7;
sbit A16=P3^7;
sbit ls373=P3^6;
sbit cs0832=P3^1;
sbit ile=P3^0;
sbit wr1=P3^5;
sbit wr2=P3^4;
uchar key=0;  //键值
uchar keycounter=0;//有新按键标志位
uchar value1,value2,base;	//value1AD读入数据,value2处理后存入RAM数据,base基植。
uchar addressl=0x00,addressh=0x00,s=0x00;//addresslRAM低8位地址, addressh RAM高8位地址。


 void  red0820()    //AD转换数据读取程序//
 {wr_0820=1;
 red_0820=1;
  cs_0820=1;
	_nop_();
  _nop_();
   _nop_();
  cs_0820=0;
   _nop_();
   _nop_(); 
 while(wr_0820!=0){};
 red_0820=0;
  while(int_0820){};
  while(wr_0820==0){};
  _nop_();    
  value1=P0;
  red_0820=1;
  cs_0820=1;
 wr_0820=1;	
 }
  
/*uchar dec0820()      //转换程序//
 { 
  uchar flag,value;
 
  if(value1>=base)
   { flag=0;
     if(value1-base>7)value=7;
     else value=value1-base;
   }
  else
   { flag=1;
     if(base-value1>8)value=8;
     else value=base-value1;
   } 
   return((flag<<3)|value);           ////////////////
  }	  	 */



void w628128()
{
  uchar a,b;//P0=0xff;
  addressl=0;addressh=0;A16=0;s=0; TR0=1;  TF0=0;
 while(1)
{
  
  while(!TF0);                      //////////////////////////////////////////
  TF0=0;
  red0820();
  /*a=dec0820();
  while(!TF0);
  TF0=0;
  red0820();
  b=dec0820();
  value2=(b<<4)|a; */
if(addressl==0xff)
          { if((s==1)&&(addressh==0xff))addressl=0xff;              ////////////
		    else { addressl=0x00;
                if(addressh==0xff){ addressh=0x00;A16=1;s=1;}       //////////
                 else addressh++; }
		  }
  
 else {addressl++;	}
	ls373=1;
	_nop_();
	_nop_();
  P0=addressl;
  _nop_();
  _nop_();
  ls373=0;
  P2=addressh;
  _nop_();
  _nop_(); 
  ncs1=0;
  cs2=1;
  we=0;
  _nop_();
  _nop_();
  _nop_();
  P0=value1;
  _nop_();
  _nop_();
  _nop_();
  we=1;
  ncs1=1;
  cs2=0;
  P0=0xff;
 if(key==0x70){                             //////////////////////////////////
	  while(key==0x70){TR0=0;};
	   TR0=1;
	   }
 if(key==0x5a)break;
 if((addressl==0xff)&&(addressh==0xff)&&(s==1))break; }              //////
  key=0x00;
  TR0=0; 
  TF0=0;
 }

 


uchar  r628128()
 {
    uchar value;
   ls373=1;
   	_nop_();
    _nop_();
   P0=addressl;
   	_nop_();
    _nop_();
   ls373=0;
   	_nop_();
    _nop_();
	P2=addressh;
	_nop_();
    _nop_();
   ncs1=0;
    cs2=1;
	_nop_();
    _nop_();
	P0=0xff;
	oe=0;
	_nop_();
    _nop_();
	value=P0;           //////////////////////////////////////////
   	_nop_();
    _nop_();
   ncs1=1;
   cs2=0;
   oe=1;
   return(value);
   }



 

void  DA0832()
  {
    uchar value,pout1,pout2;
	s=0;
    wr1=1;wr2=1;addressl=0;addressh=0;A16=0;s=0; TR0=1;  TF0=0;
	
 while(1)
  {
	if(addressl==0xff)
          { if((s==1)&&(addressh==0xff))addressl=0xff;              /////////////////////
		    else { addressl=0x00;
                if(addressh==0xff){ addressh=0x00;A16=1;s=1;}       ///////////////////
                 else addressh++; }
		  }
  
 else {addressl++;	}
	value=r628128();
 /* pout1=value&0x0f;
	if(pout1<=7)pout1=pout1+base;
	else  if(pout1==8)pout1=base-8;
	else  pout1=base-(pout1&0x07);
	pout2=value>>4;
	if(pout2<=7)pout2=pout2+base;
	else  if(pout2==8)pout2=base-8;
	else  pout2=base-(pout2&0x07); */	
	while(!TF0);
	TF0=0;
	ile=1;
	cs0832=0;
	
	_nop_();
   _nop_();
    P0=value;
	 _nop_();
   _nop_();
	wr1=0;              /////////////////////////////
  // _nop_();
   //_nop_();         
//	wr1=1;               ////////////////////////
//	_nop_();
   // _nop_();
	wr2=0;
	_nop_();
   _nop_();
   wr1=1;
   wr2=1;
    _nop_();
   _nop_();
   cs0832=1;
   ile=0;
   
/*	while(!TF0);
	TF0=0;
	ile=1;
  	cs0832=0;
	_nop_();
   _nop_();
    P0=pout2;                      //////////////////////////////
	 _nop_();
   _nop_();
	wr1=0;
  // _nop_();
   //_nop_();
//	wr1=1;
//	_nop_();
   // _nop_();
	wr2=0;
	_nop_();
   _nop_();
   wr1=1;
   wr2=1;
    _nop_();
   _nop_();
   ile=0;
   cs0832=1; */
	if(key==0x70){
	   while(key==0x70){TR0=0;};
	   TR0=1;
	   }
	if(key==0x5a)break;
	if((addressl==0xff)&&(addressh==0xff)&&(s==1))break;
	}
	key=0x00;
	TR0=0;
	TF0=0;
  }	 	  



  void delay100ms()                                ///////////////////////////
 {
  uchar i,j,k;
   for(i=0;i<8;i++){
    for(j=0;j<25;j++){
	  for(k=0;k<250;k++);
  }}}

 


void main()
 {
   key_clk=1;key_data=1;
   P0=0xff;
    EX0=1;
    EA=0;
	ET0=0;
   oe=1;
   we=1;
   ncs1=1;
   cs2=0;
   wr_0820=1;
  int_0820=1;
  red_0820=1;
  cs_0820=1;
 
  ile=0;
  cs0832=1;
   TMOD=0x02;
   TH0=0x40;
   TL0=0x40;
   delay100ms();
   delay100ms();
   delay100ms();
   EA=1;
   while(1){
 // keycounter=0;
  // while(keycounter==0){};               ///////////////////////
   if(key==0x69)
    {
	  delay100ms();
	 red0820();
	  
	  base=value1;
	  
	  w628128();
	  addressl=0;
	  addressh=0;
	  A16=0;
	  }
	// keycounter=0;
    //while(keycounter==0){};
	if(key==0x72)
    {
	  TR0=1;
	  DA0832();
	  addressl=0;
	  addressh=0;
	  A16=0;
	  }
	}

 }























 


⌨️ 快捷键说明

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