专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

有爱碗的源程序c51

作者:佚名   来源:本站原创   点击数:  更新时间:2013年01月19日   【字体:
完整的源代码下载:http://www.51hei.com/f/有爱碗参考程序.zip

#include "hongwai.h"
#include <macroconst.h>
//程序由淘宝环宇电子提供,本参考程序只为学习交流,技术支持QQ372451298,
//程序难免有不足支持,欢迎更正指出!!!
uchar dat1[4]={0,0,0,0};
uchar code Disp_Tab[] = {0xfe,0xfd,0xfb,0xfc,0xfa,0xf9,0xf8}; 
bit flag=0;
uchar hongwainum=0;//开始led指示灯通过Disp_Tab[]赋值
						   
void hongwai_initial()	//红外初始化
{
	TMOD=0x01;			//定时器0工作方式1
	EA=1;				//开总中断
	EX0=1;				//开外部中断

}

/************主函数**********************/ 
void main(void )
   
   {   
	hongwai_initial();		 //红外初始化

	while(1)
	{
		if(flag)
		{
		 P1=Disp_Tab[hongwainum];  //到指定的led显示
		 flag=0;				   //关闭接收数据标志
		}   
       
	}
}
void int0(void) interrupt 0
{ 
	uchar i,j;
	EX0=0;				 //关外部中断
	i=10;
	while(--i)
	{
		TH0=0xfc;
    	TL0=0xe7;
		TR0=1;
		while(!TF0); //延时860毫秒
		TF0=0;
		TR0=0;
    	if(irpot) {EX0=1; return ;}
	}

	while(!irpot); 

   	TH0=0xf6;
    TL0=0xff;
	TR0=1;
	while(!TF0);
	TF0=0;
	TR0=0;	  //延时2500毫秒
	if(!irpot)
	{
		EX0=1;		//开外部中断
		return;
	}
	while(irpot);

	for(i=0;i<4;i++)	  //依次存取四个数据,其中dat1[2]为所需数据
	{
		for(j=0;j<8;j++)
		{
			while(!irpot);
   	 		dat1[i]>>=1;
	 		TH0=0xfc;
     		TL0=0xe7;
	 		TR0=1;
			while(!TF0);
	  		TR0=0;
	  		TF0=0; //延时860us	
	  		if(irpot) 
	   		{
	     		dat1[i]|=0x80;	  //dat1[2]为所需数据
	     		while(irpot);
	    	}
		}
	}
	switch(dat1[2])						//dat1[2]为所需数据		   
	{
		case 0x0c: hongwainum=0;break;		//   1
		case 0x18: hongwainum=1;break;		//   2
		case 0x5e: hongwainum=2;break;		//	 3
		case 0x08: hongwainum=3;break;		//	 4
		case 0x1c: hongwainum=4;break;		//	 5
		case 0x5a: hongwainum=5;break;		//   6
		case 0x42: hongwainum=6;break;		//   7
		default:break;	
	} 
	   flag=1;			//接收数据标志位
	   EX0=1;			//开外部中断
	   return;
}
关闭窗口

相关文章