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

📄 p0902-ird.c

📁 单片机模拟红外线发射
💻 C
📖 第 1 页 / 共 2 页
字号:
	for(i=0; i<8;i++) 
	{
		LCD_write_byte(shuzi[c*16+i],1); 
	} 	
    LCD_set_XY(x*8, y+1);
	for(i=8; i<16;i++) 
	{
		LCD_write_byte(shuzi[c*16+i],1);
	}  
} 
//---------------------------------------
//名称: 初始化函数	
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111  
//----------------------------------------- 
void init()
{
	P2M0=0x0c;
	P2M1=0x00; 
}
//---------------------------------------
//名称: 按键扫描函数	
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111  
//----------------------------------------- 
unsigned char scakey()
{
	h1=0;
	h2=1;
	_nop_();
	if(l1==0)
	{
	 	return 1;		
	}
	else if(l2==0)
	{
	 	return 2;
	}
	h1=1;
	h2=0;
	_nop_();
	if(l1==0)
	{
	 	return 3;
	}
	else if(l2==0)
	{
	 	return 4;
	}
	return 0;
}
//---------------------------------------
//名称: 按键处理函数	
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111  
//----------------------------------------- 
void keypro()
{
	unsigned char buf;
	buf=scakey();
 	if(buf==0)
	{
		if(keybit==0)
		{
		 	if(++keycon>2000)
			{
			 	keycon=0;
				keybit=1;
				LCD_clear();		//清屏幕
			}
		}
	}
	else if(buf==1)			  //K1键处理程序
	{
		if(keybit==1)
		{
		 	keybit=0;			   
			disp16_16(0,0,0);	//已
		   	disp16_16(2,0,1);	//按
		   	disp16_16(4,0,2);	//下
			disp8_16(6,0,20);	//K  
			disp8_16(7,0,1);	//1	 
		   	disp16_16(8,0,3);	//键   
			send_all(0x00,0x08);
			while(l1==0)
			{
			 	repeat();	
			}
		}					
	}
	else if(buf==2)			  //K2键处理程序
	{
		if(keybit==1)
		{
		 	keybit=0;  		
		    disp16_16(0,0,0);	//已
		   	disp16_16(2,0,1);	//按
		   	disp16_16(4,0,2);	//下
			disp8_16(6,0,20);	//K  
			disp8_16(7,0,2);	//2	 
		   	disp16_16(8,0,3);	//键   
			send_all(0x00,0x09);
			while(l2==0)
			{
			 	repeat();	
			}
		}	   		
	}
	else if(buf==3)			  //K3键处理程序
	{
		if(keybit==1)
		{
		 	keybit=0;				
		    disp16_16(0,0,0);	//已
		   	disp16_16(2,0,1);	//按
		   	disp16_16(4,0,2);	//下
			disp8_16(6,0,20);	//K  
			disp8_16(7,0,3);	//3 
		   	disp16_16(8,0,3);	//键 
			send_all(0x00,0x11);  
			while(l1==0)
			{
			 	repeat();	
			}
		} 		
	}
	else if(buf==4)			  //K4键处理程序
	{
		if(keybit==1)
		{
		 	keybit=0;			
		    disp16_16(0,0,0);	//已
		   	disp16_16(2,0,1);	//按
		   	disp16_16(4,0,2);	//下
			disp8_16(6,0,20);	//K  
			disp8_16(7,0,4);	//4 
		   	disp16_16(8,0,3);	//键  
			send_all(0x00,0x0d); 
			while(l2==0)
			{
			 	repeat();	
			}
		}			 		
	}
}
//---------------------------------------
//名称: 发送头码函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081231  
//-----------------------------------------
void send_head(void)
{
    TR0=1;			  
    intcon=0;
    while(intcon<692); 
	TR0=0; 
	irdio=1;  
    intcon=0;
	TR1=1;
	while(intcon<346); 
	TR1=0;
	irdio=1; 
}
//---------------------------------------
//名称: 发送数据0函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081231  
//-----------------------------------------
void send_0(void)
{
    intcon=0;
    TR0=1;   
    while(intcon<43);
	TR0=0; 
	irdio=1;   
    intcon=0;
	TR1=1;
	while(intcon<43);
	TR1=0;
	irdio=1;     
}
//---------------------------------------
//名称: 发送数据1函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081231  
//-----------------------------------------
void send_1(void)
{
    intcon=0;
   	TR0=1;
    while(intcon<43);
	TR0=0;  
	irdio=1;  	
    intcon=0;
	TR1=1;
	while(intcon<130); 
	TR1=0;    	
	irdio=1;
}
//---------------------------------------
//名称: 发送结束码函数		   40ms
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081231  
//-----------------------------------------
void send_over(void)
{
	intcon=0;
 	TR0=1;
    while(intcon<43);
	TR0=0; 
	irdio=1;
    intcon=0;
  	TR1=1;
    while(intcon<3076);	
	TR1=0;	     	
	irdio=1;   
}
//---------------------------------------
//名称: 发送一个字节(8BIT)函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081231  
//-----------------------------------------
void send_data(unsigned char dat)
{
	unsigned char j;    
    for(j=0;j<8;j++)
    {                
        if(dat&(0x01<<j))
        {
           send_1(); 
        }
        else
        {            
           send_0();
        }	
	}	
}
//---------------------------------------
//名称: 发送完整码函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081231  
//-----------------------------------------
void send_all(unsigned char address,unsigned char data1)
{
	send_head();			//发送头码
	send_data(address);     //发地址码
	send_data(~address);    //发地址反码
	send_data(data1);    	//发数据码
	send_data(~data1);    	//发数据反码
	send_over();	    	//发结束码
}
//---------------------------------------
//名称: 发送重复码函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081231  
//-----------------------------------------
void repeat(void)//108ms
{
    intcon=0;
    TR0=1;
    while(intcon<692);//9ms
	TR0=0;
	irdio=1;	    
    intcon=0;
	TR1=1;
	while(intcon<130);//1.69ms  
	TR1=0;
	irdio=1;   
    intcon=0;
	TR0=1;
    while(intcon<43);//0.56ms     
	TR0=0;
	irdio=1;	   	  	
    intcon=0;
	TR1=1;
	while(intcon<7442);//96.75ms
	TR1=0;	    
	irdio=1; 	
}
//---------------------------------------
//名称: T0定时器256us中断函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111  
//----------------------------------------- 
void timer0(void)interrupt 1 using 0   //TIMER0方式1,采用中断方式 
{  
 	intcon++;   	 			
  	irdio=!irdio;    	  
}
//---------------------------------------
//名称: T1定时器256us中断函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111  
//----------------------------------------- 
void timer1(void)interrupt 3 using 1   //TIMER0方式1,采用中断方式 
{  
 	intcon++;
}
//---------------------------------------
//名称: 主函数		 
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081111  
//----------------------------------------- 
void main()
{
	unsigned char k;
	TMOD=0x22;//T0用于延时程序
	TH0=0xf4;
	TL0=0xf4;
	TH1=0xf4;
	TL1=0xf4;
	init();
    init_spi();
	res=0;
	for(k=0;k<250;k++);
	res=1;				//LCD复位
	LCD_init(); 		//初始化LCD模块  	
	LCD_clear(); 		//清屏幕	
	back_led=0;			//开背光
    ET0=1;
	TR0=0; 
	ET1=1;
	TR1=0; 	
	EA=1;
	while(1)
	{		
		keypro();
	}
}

⌨️ 快捷键说明

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