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

📄 luyin2.c

📁 单片机实现语音的控制 单片机实现语音的控制单片机实现语音的控制单片机实现语音的控制单片机实现语音的控制
💻 C
字号:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define ulong unsigned long
#define ADC0809 XBYTE[0x7fff]
#define DAC0832 XBYTE[0xbfff]
#define RAM XBYTE[0xc000]
sbit P32=P3^2;
sbit P10=P1^0;
sbit P11=P1^1;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
uchar shijian=0,ly=0,hf=0,anjian=0;       // anjian =1 2 3 4 分别对应 录音,停止,回放,停止
uchar xdata *point;                       //怎样把62256的初地址赋给 p
uchar gw=0;
ulong ram=0;

void delay(void)
{
   uchar i,m;
   for(i=0;i<100;i++)
   {
      for (m=0;m<100;m++)
         ;
   }
}

void timer1(void) interrupt 3
{

	//TR1=0;
	                            //adc0809 eoc 需要否?
	if(anjian==1)
	{
		ly=1;
		hf=0;
		ADC0809=0X00;

	}
	else if(anjian==3)
	{
		ly=0;
		hf=1;
	}
	//TR1=1;
}


void int0(void) interrupt 0
{
        delay();
        while (P32==0)            // 若若按键不释放,则等待
            {;}
        anjian++;
	if(anjian>=5)
		anjian=1;
        delay();
}


void luyin(void)
{
	uchar adnum;
	TH1=0X83;            //TIMER1 125us
	TL1=0X83;
	P10=0;
	P11=0;
	P16=1;               //红指示灯亮
	P17=0;
	P15=0;                     // 选择AD->FILRE->RAM
	TR1=1;
	gw=0;
	ADC0809=0x00;
	point=&RAM;
	while(anjian==1)
	{
		if(ly==1)
		{
			adnum=ADC0809;
			*point=adnum;
			point++;
			ram++;
			if(ram==0x1fff)
			{
				gw++;

				if(gw==0)
				{
			        P10=0;
	                P11=0;
				}
				else if(gw==1)                   //62256 高位选择
				{
					P10=1;P11=0;
				}
				else if(gw==2)
				{
					P10=0;P11=1;
				}
				else if(gw==3)
				{
				    P10=1;P11=1;
				}
				if(gw==4)
				{
					anjian++;
				}

				point=&RAM;
                ram=0;
			}


			ly=0;
		}
		;
	}
}


void huifang(void)
{
	uchar danum;
	TH1=0X83;            //TIMER1 125us
	TL1=0X83;
	P16=0;
	P17=1;              // 绿指示灯亮
        P15=1;// 选择DA->FILRE->LAM386
	TR1=1;
	gw=0;
	point=&RAM;
        ram=0;
	while (anjian==3)
	{
        if(hf==1)
		{
			danum=*point;
			DAC0832=danum;
			point++;
			ram++;
			if(ram==0x1fff)
			{
				gw++;
				if(gw==4)
				{
					gw=0;
				}
				if(gw==0)
				{
			        P10=0;
	                P11=0;
				}
				else if(gw==1)                   //62256 高位选择
				{
					P10=1;P11=0;
				}
				else if(gw==2)
				{
					P10=0;P11=1;
				}
				else if(gw==3)
				{
					P10=1;P11=1;
				}

				point=&RAM;
                ram=0;
			}
			hf=0;
		}
		;
	}
}


void main(void)
{
	//P32=0;
    P1=0x00;
	P10=0;
	P11=0;
    P16=0;
	P17=0;
	TMOD=0x21;            //计时器 0 1 分别工作于方式 1,2
	//TH1=0X93;            //TIMER1 125us
	//TL1=0X93;
	EA=1;
	EX0=1;
	ET0=1;
	ET1=1;
	while(1)
	{
		if(anjian==1)
			luyin();
		else if(anjian==2||anjian==4)
		{
			P16=0;
	        P17=0;
        }
		else if(anjian==3)
		    huifang();
		else
			;
	}
}

⌨️ 快捷键说明

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