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

📄 智能化家电控制.c

📁 智能化家电控制.c 只有一个.c文件。。工程被删
💻 C
📖 第 1 页 / 共 2 页
字号:
void write_clock(unsigned char ord,unsigned char dd) {
	unsigned char i;
	clock_rst=1;
	s_out(ord);
	s_out(dd);
	clock_rst=0;
}

//=======================================
void s24(void) {
	scl=0;sda=1;scl=1;sda=0;scl=0;
}
void p24(void) {
	sda=0;scl=1;sda=1;
}

unsigned char rd24(void) {
	unsigned char i,dd;
	dd=0;
	sda=1;
	for (i=8;i!=0;i--) {
		dd<<=1;
		scl=1;
		if (sda==1) dd|=1;
		scl=0;
	}
	sda=1;
	scl=1;
	scl=0;
	return(dd);
}


void wd24(unsigned char dd) {
	a=dd;
	sda=a7;scl=1;scl=0;
	_nop_();_nop_();
	sda=a6;scl=1;scl=0;
	_nop_();_nop_();
	sda=a5;scl=1;scl=0;
	_nop_();_nop_();
	sda=a4;scl=1;scl=0;
	_nop_();_nop_();
	sda=a3;scl=1;scl=0;
	_nop_();_nop_();
	sda=a2;scl=1;scl=0;
	_nop_();_nop_();
	sda=a1;scl=1;scl=0;
	_nop_();_nop_();
	sda=a0;scl=1;scl=0;
	_nop_();_nop_();
	sda=1;
	scl=1;
}

void write24(unsigned int address,unsigned char dd){
	s24();wd24(0xa0);wd24((address/256)<<1);scl=0;wd24(address);scl=0;wd24(dd);scl=0;p24();
	while (1) {
		s24();
		wd24(0xa0);
		if (sda==0) break;
		scl=0;
	}
}
unsigned char read24(unsigned int address){
	unsigned char dd;
	s24();wd24(0xa0);wd24(address/256);scl=0;wd24(address);scl=0;
	s24();wd24(0xa1);scl=0;dd=rd24();p24();return(dd);
}













/*	红外线键值转换	*/
unsigned char code inf_key[]={
	0xb8,0x47,	//tape
	0x38,0xc7,	//tuner
	0x78,0x87,	//cd
	0x48,0xb7,	//band
	0xc8,0x37,	//lrn
	0x30,0xcf,	//att
	0x2,0xfd,	//up
	0x82,0x7d,	//down
	0x42,0xbd,	//left
	0xc2,0x3d,	//right
	0xd0,0x2f,	//dec
	0x50,0xaf	//inc
};
#define k_tape 1
#define k_tuner 2
#define k_cd 3
#define k_band 4
#define k_lrn 5
#define k_att 6
#define k_u 7
#define k_d 8
#define k_l 9
#define k_r 10
#define k_dec 11
#define k_inc 12





sbit p_light=P0^4;
sbit p_temp=P0^5;
unsigned char light_time,temp_time,l_t,t_t;

/*	定时器0中断	*/
unsigned char inf_time,key,key_inf,key_push,key_low,key_high,k[4];
int_t00() {
}
void int_t0(void) interrupt 1 {
	unsigned char i;
	TH0=0xf8;
	time++;
	/*	红外线判别	*/
	if (inf_time==0) {
		if ((k[0]==0xb5)&&(k[1]==0x4a)) {
			for (i=0;i<24;i+=2) {
				if ((k[2]==inf_key[i])&&(k[3]==inf_key[i+1])) {
					key_inf=i/2+1;
					break;
				}
			}
			if (i>=24) key_inf=0;
		} else key_inf=0;
	}
	if ((++inf_time)>0x7f) {
		inf_time=0x7f;
		key_inf=0;
	}

	if (key_inf!=0) {
		key_push=key_inf;
		if ((++key_low)>250) {
			key_low=250;
			key=key_push+0x10;
		} else if (key_high!=0) {
			key=key_push;
			key_high=0;
		}
	} else {
		key_low=0;
		if ((++key_high)>10) {
			key_high=10;
			key=0;
		}
	}

	/*	软件a/d转换	*/
	if (p_light==0) light_time++;
	else {
		p_light=0;
		_nop_();
		p_light=1;
		l_t=light_time;
		light_time=0;
	}
	if (p_temp==0) temp_time++;
	else {
		p_temp=0;
		_nop_();
		p_temp=1;
		t_t=temp_time;
		temp_time=0;
	}
}


unsigned char inf_n,inf_d;

/*	红外线检测,当时间间隔大于4ms时纪录	*/
/*	红外线格式32ms一段,共32b 信息,0用768us_|-表达,1780us_|-表达,
	每一段用24ms+5ms+3ms隔开
*/

void int_ex(void) interrupt 0 {
	unsigned char th,i;
//	bit i;
	TR1=0;
	th=TH1;
	TH1=TL1=0;
	TR1=1;
	inf_n++;
	if ((th>=7)&&(th<=9)) i=0;
	else if ((th>=15)&&(th<=17)) i=1;
	else {inf_n=0;inf_d=0;}
	if (inf_n!=0) {
		inf_d<<=1;
		inf_d|=i;
	}
	switch (inf_n) {
	case 8:k[0]=inf_d;break;
	case 16:k[1]=inf_d;break;
	case 24:k[2]=inf_d;break;
	case 32:k[3]=inf_d;inf_d=0;inf_n=0;inf_time=0;break;
	}
	IE0=0;
}
void int_t1(void) interrupt 3 {
	TH1=0x40;
}
/*	显示红外线检测信息	*/
void disp_inf(void) {
/*	unsigned char i,j,d[4];
	while (1) {
		at(0,0);
		for (j=0;j<4;j++) {
			sprintf(d,"%4x",(unsigned int)k[j]);
			for (i=0;i<4;i++) dp(d[i]-0x20);
		}
		sprintf(d,"%4x",(unsigned int)key);
		for (i=0;i<4;i++) dp(d[i]-0x20);
		sprintf(d,"%4x",(unsigned int)t_t);
		if (key==1) back_light=0;
		if (key==2) back_light=1;
	}
*/
}


#define c_h 0x85
#define c_m 0x83
#define c_s 0x81
#define c_day 0x87
#define c_mon 0x89
#define c_week 0x8b
#define c_year 0x8d
#define c_lock 0x8e

void k_w(void) {
	while (key!=0) {}
}

/*	显示日历时钟	*/
void disp_clock(void) {
	unsigned char i,n;
	x=0;y=0;
	da(152,0);
	da(153,0);
	da(134,0);
	da(135,0);

	da(' ',0);
	i=read_clock(0x8b);
	da(i+0x30,0);
	
	at(7,0);
	dp('1'-0x20);
	dp('2'-0x20);
	dp(':'-0x20);
	dp('5'-0x20);
	dp('9'-0x20);
	dp(' '-0x20);
	dp('o'-0x20);
	dp('n'-0x20);

	at(7,1);
	dp('1'-0x20);
	dp('2'-0x20);
	dp(':'-0x20);
	dp('5'-0x20);
	dp('9'-0x20);
	dp(' '-0x20);
	dp('o'-0x20);
	dp('f'-0x20);
	dp('f'-0x20);

	line(53,0,53,18);
	line(0,18,128,18);


	x=0;y=3;
	da(128,0);
	da(129,0);
	da(130,0);
	da(131,0);
	x=0;y=6;
	
	da(132,0);
	da(133,0);
	da(134,0);
	da(135,0);

	da(' ',0);
	da('1',0);
	da('9',0);
	i=read_clock(0x8d);
	da(i/16+0x30,0);
	da(i%16+0x30,0);
	da('-',0);
	i=read_clock(0x89);
	da(i/16+0x30,0);
	da(i%16+0x30,0);
	da('-',0);
	i=read_clock(0x87);
	da(i/16+0x30,0);
	da(i%16+0x30,0);

	x=13;
	y=1;
	while (1) {
		x=6;y=3;
		i=read_clock(0x85);
		da(i/16+0x30,0);
		da(i%16+0x30,0);
		da(':',0);
		i=read_clock(0x83);
		da(i/16+0x30,0);
		da(i%16+0x30,0);
		da(':',0);
		i=read_clock(0x81);
		da(i/16+0x30,0);
		da(i%16+0x30,0);
		
		if (key==6) {
			back_light=!back_light;
			while (key!=0) {}
		}
		//seting 
		if (key==k_band) {
			k_w();
			n=0;
			while (1) {
				switch (n) {
				case 0:
					while (1) {
						k_w();
						i=read_clock(c_h);
						x=6,y=3;
						da(i/16+0x30,1);da(i%16+0x30,1);
						if (key==k_inc) {
							k_w();
							if ((++i)>0x23) i=0;
							write_clock(c_h-1,i);
						} else if (key==k_dec) {
							k_w();
							if ((--i)>23) i=23;
							write_clock(c_h-1,i);
						} else if (key==k_r) {
							n++;
							x=6;y=3;
							da(i/16+0x30,0);
							da(i%16+0x30,0);
							break;
						}
							
					}
					break;
				case 1:
					while (1) {
						k_w();
						i=read_clock(c_m);
						x=9,y=3;
						da(i/16+0x30,1);da(i%16+0x30,1);
						if (key==k_inc) {
							k_w();
							if ((++i)>23) i=0;
							write_clock(c_m-1,i);
						} else if (key==k_dec) {
							k_w();
							if ((--i)>23) i=23;
							write_clock(c_m-1,i);
						} else if (key==k_r) {
							n++;
							break;
						}
							
					}
					break;

				}
			}
		}

	}
}


/*	华容道游戏	*/



void hrd(void) {
	unsigned int i;
	unsigned char k,j;
	char *p;
//	for (i=0;i<1024;i++) dd[i]=1;
//	for (i=0;i<1024;i++) if (dd[i]==1) j++;

	i=1236;
	at(0,0);

	sprintf(p,"%u",i);
	
	at(0,0);
	for (k=0;k<20;k++) {
		j=*p++;
	//	dp((* p)+0x20);
	//	dp(k+0x10);
	//	p++;
	}
	while (1) {}
}

void main(void) {
	unsigned char ad;
	TMOD=0x11;
	EA=1;
	ET0=1;TR0=1;
	EX0=IT0=1;
	TR1=1;ET1=1;
	init();
	write_clock(0x8e,0);
	write_clock(0x80,0);
	
	write_clock(0x8e,0);
	write_clock(0x80,0);


	
	
	
//	disp_inf();	
//	hrd();
	disp_clock();
	while (1) {}	

}	

⌨️ 快捷键说明

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