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

📄 g.c

📁 红外遥控时钟温度计语音报时间和温度deshejifangan
💻 C
字号:
/*********************************************************************/
/*																	 */
/*		本程序由胡寓洋编写,仅供学习使用							 */
/*															         */
/*																	 */
/*																	 */
/*********************************************************************/





 #include<at89x52.h>
#include<intrins.h>
//#define ovf P3_6
#define cs P3_7 	//片选
#define pd P3_6		//功耗选择
#define oem P3_5	//放音时的一端结束标志,低有效
#define pr P3_4		//高时为放音,低时为录音

#define a8 P1_1		 //为十条地址线 
#define a9 P1_0
#define date P0
#define deng P1_6
#define deng1 P1_7
#define uchar unsigned char 
#define uint unsigned int 
void play1(void);
uchar  display[6]={0x08,0x09,0x10,0x05,0x07,0x09};
void play(uchar a);
uchar addr[19]={0x00,0x0a,0x14,0x1e,0x28,
		    	0x32,0x3c,0x46,0x50,0x5a,
				0x64/*10*/,0x6e/*.点..*/,0x8c/*现在温度是*/,
				0xaa/*摄氏度*/,0xb4/*分*/,0xbe/*秒*/,0xc8/*现在时间是*/,0xdc};//0到9的地址每个地址有1秒钟时间


void delay(uchar a);

 uchar num;
 uchar numb,numb1;
void play2(void);
/**********************************************
                   放音程序
***********************************************/
void play(uchar a)
{uchar b8=0,b9=0;
														 
cs=1;												
pd=0;
if(addr[a]|0x0a==addr[a++])
	{
	date=addr[a];
	a8=b8;
	a9=b9;
	pr=1;_nop_();_nop_();_nop_();
	cs=0;
	while(oem==1);
	cs=1;
	pd=1;_nop_();_nop_();_nop_();
	}
}
void play2(void)
{
	uchar g;		
for(g=7;g<19;g++)
{
    	play(g);
	delay(1500);
}	

}
void play3(void)
{
	uchar ak;		
for(ak=0;ak<19;ak++)
{		delay(40000);
    	play(ak);
	
}	

}


/************************************************************
                     录音程序
 **********************************************************/
void record(uchar a)
{ uchar b8=0,b9=0;

cs=1;
pd=0;
if(addr[a]|0x0a==addr[a++])
{
	date=addr[a];
	a8=b8;
	a9=b9;
	pr=0;_nop_();_nop_();_nop_();
	cs=0;
	while(!P2_0);

	cs=1;
	pd=1;_nop_();_nop_();_nop_();
	P2_1=1;
}
}




/*****************************************************************************
                            录音主程序
ISD2560内部存储器共分600段地址,每一段对应0.1秒,故总共60秒,随便你分几段来用;
该段程序的用法:当按下某段的录音键时开始录音,当放开该键时录音结束,按一下该段
                的放音键,可听听录音效果,不过该段录音时间要把握,以免覆盖到下
				段地址去
*******************************************************************************/


/*******************************************
                  按键扫描
**********************************************/
void delay(uchar a)
{uchar i,j;
	for(i=0;i<a;i++)
		for(j=0;j<110;j++);
}


void keyscan()
{

		if(P2_0==0)
		{
			delay(10);
			if(P2_0==0)
			{	
		
			TMOD=0x01;
	  	 	TH0=0x15;
			TL0=0Xa0;
			EA=1;
			ET0=1;
			TR0=1;
			deng=0;
	 	    delay(500);
			delay(50);
		if(P2_0==1)
		{
			delay(10);
			if(P2_0==1)
			{
				num++;
			}
		}
	  	
		if(num==19)
	{	deng1=0;
		num=0;
	
	} 
			while(!P2_0);
			deng=1;	
			}
		  }

		 
	if(P2_1==0)
		{
	 	   delay(10);
		   	if(P2_1==0)
			{	
				play(numb);
				while(!P2_1);
				numb++;	
			}
			if(numb==15)
			{
				numb=0;
			} 

		}
	if(P2_2==0)
		{
			delay(10);
			if(P2_2==0)																			 
			{
			  play2();
			}
		}
	if(P2_3==0)
		{
			delay(10);
			if(P2_3==0)
			{
			  delay(10000);
			  play3();
			}
		}
		if(P2_6==0)
		{
			delay(10);
			if(P2_6==0)
			{ 
			
			  delay(510);
			  play(12);
			  delay(510);
			  play(display[0]);
			  delay(510);
			  play(10);
			  delay(510);
			  play(display[1]);
			 delay(510);
			  play(11);
			  delay(510);
		    	
			  play(display[5]);
			  delay(110);
			   	 play(16);
			 
			}
		}
}


void t0(void) interrupt 1 using 0
 {
 	  
	   EA=0;
	  ET0=0;
	  TR0=0;
	  deng1=1;
	   	record(num);
		
 }
/*void te(void) interrupt 2 using 1
 {
 	  EA=0;
	  ET1=0;
	  TR1=0;
	  deng=1;
	  numb1++;
		if(numb1==15)
	{	
		numb1=0;
	
	} 
 

} */						 //0346

void main()
{P2=0xff;
 P1=0xff;
 P0=0xff;
 P3=0xff;
 num=16;
 numb=0 ;
 // numb1=9 ;
while(1)
{	
	keyscan();
 }
}

⌨️ 快捷键说明

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