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

📄 main.c

📁 ISD1420的录音程序,
💻 C
字号:
#include  <reg52.h>


#define  INTERRUPT_EXT0     0
#define  INTERRUPT_EXT1     2
#define  INTERRUPT_TIME0    1
#define  INTERRUPT_TIME1    3
#define  INTERRUPT_COMM     4
#define  INTERRUPT_TIME2    5

/*定义为移植而进行的目标系统无关数据类型*/
typedef unsigned char   UINT8; 
typedef signed   char   INT8;  
typedef unsigned int    UINT16;
typedef signed   int    INT16; 
typedef unsigned long   UINT32;
typedef signed   long   INT32; 

code UINT8 ChgTbl[16]={0,8,4,0x0c,2,0x0a,6,0x0e,1,9,5,0x0d,3,0x0b,0x07,0x0f};

#define port_init() do{\
     	             TMOD = 0x21;\
                     /*TR0  = 1*/;/*定时器0打开*/\
        		     ET0  = 1;/*定时器0中断允许*/\
                     PCON  = 0x80;   /* SMOD = 1, double baud */\
                     SCON  = 0x50;   /* serial mode 1, 8 bit uart, enable receive  */\
                     TH1 = 0xfd;\
                     TL1 = 0xfd;\
                     TR1 = 1;\
					 ES  = 1;\
                  }while(0)
#define  AddrPort     P2
sbit  KeyRecord       =    P0^4;      /*录音开始SW0*/
sbit  KeyPlay         =    P0^5;      /*放音  SW1*/
sbit  KeyAgain        =    P0^6;      /*重新录音*/

sbit  RecordBgn      =    P1^7;      /*起动录间*/
sbit  PlayBgn        =    P1^5;      /*放音起动*/
sbit  PlayEnd        =    P1^6;      /*放音完成*/


volatile UINT8 RecordAddr=0x0;    /*当前录音地址*/
volatile UINT8 PlayAddr=0x0;
volatile UINT8 RecordAddrPre=0x0; /*前一次的录音地址*/
volatile UINT8 cnt=5;

void DelayMs(UINT8 dly)
{
  do{
    UINT8 i;
    for(i=0;i<153;i++)
	{
	  ;
	}
  }while(--dly);
}

void Timer0Int(void) interrupt INTERRUPT_TIME0
{
  TH0=0xa5;
  TL0=0xff;
  cnt--;
  if(cnt==0)
  {
    RecordAddr++;
	SBUF=RecordAddr;
    cnt=5;
  }else
  {
    if(RecordBgn)
	{
	  RecordAddr++;
	  SBUF=RecordAddr;
	  TR0=0;
	}
  }

}

void SerialInt(void)  interrupt INTERRUPT_COMM
{
  if(TI)
  {
    TI=0;
  }else
  {
    PlayAddr=SBUF;
    RecordAddr=PlayAddr;
	AddrPort=ChgTbl[PlayAddr&0x0f]*16+ChgTbl[PlayAddr/16];
	SBUF=PlayAddr;
    RI=0;
  }
}


void main(void)
{
  port_init();
  P2=0xff;          /*地址线拉高*/
  P1=0xff;          /*控制线*/
  EA=1;
  RecordAddr=0x0;
  PlayAddr=0x0;
  RecordAddrPre=0x0;
  AddrPort=0x00;
  cnt=5;
  do{
    KeyRecord=1;
    if(!KeyRecord)   /*如果录音键按下*/
	{
	  DelayMs(20);
	  if(!KeyRecord)
	  {
	    AddrPort=ChgTbl[RecordAddr&0x0f]*16+ChgTbl[RecordAddr/16];
		PlayAddr=RecordAddr;
        RecordAddrPre=RecordAddr;
		SBUF=0xa5;
        TH0=0xa5;
        TL0=0xff;
		cnt=5;
		TR0=1;
	    RecordBgn=0;    /*起动录间*/
		do{
          if( (RecordAddr&0xc0)==0xc0) break;
		}while(KeyRecord==0);
		RecordBgn=1;    /*停止录音*/
		//TR0=0;          /*停止计数*/
	  }
    }
    KeyPlay=1;
	if(!KeyPlay)
	{
	  DelayMs(20);
	  if(!KeyPlay)
	  {
		SBUF=PlayAddr;
		PlayBgn=0x01;
		RecordBgn=0x01;
		PlayEnd=0x01;
	    AddrPort=ChgTbl[PlayAddr&0x0f]*16+ChgTbl[PlayAddr/16];
	    PlayBgn=0x0;
		DelayMs(60);
		SBUF='P';
		//while(PlayEnd);
		PlayBgn=1;
	  }
	}
    KeyAgain=1;
	if(!KeyAgain)
	{  
	  DelayMs(20);
	  if(!KeyAgain)
	  {
	    PlayAddr=RecordAddrPre;
		RecordAddr=RecordAddrPre;
		SBUF=RecordAddr;
	  }
	}
  }while(1);
}

⌨️ 快捷键说明

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