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

📄 jifeng_jieshou.c

📁 非常适合实用的无线射频芯片NRF905
💻 C
📖 第 1 页 / 共 2 页
字号:
	Hign_LCD_RS;		//RS=1 时为写数据
	LCD_Delay(1);
	for(i=0;i<8;i++)
	{
		Low_LCD_SCL;
		if(temp&0x80)
		{
		Hign_LCD_SI;
		}
		else
		{
		Low_LCD_SI;
		}
		LCD_Delay(1);
		temp=temp<<1;
		Hign_LCD_SCL;
		LCD_Delay(1);
		Low_LCD_SCL;
	}
	Low_LCD_RS;
	Hign_LCD_CS;    //先cs置0,然后把数据都送到口上准备好(产生上升沿),最后才置片选cs为1	
}
//---------------------------------LCD写命令函数--------------------------------
void Lcd_Write_command(uchar COMMAND)
{
	uchar i,temp;
	temp = COMMAND;
	Hign_LCD_RS;		
	Hign_LCD_CS;
	Hign_LCD_SCL;
	LCD_Delay(1);
	Low_LCD_RS;		//RS=0 为写命令
	Low_LCD_CS;
	Low_LCD_SCL;
	LCD_Delay(1);
	for(i=0;i<8;i++)
	{
		Low_LCD_SCL;
		if(temp&0x80)
		{
		Hign_LCD_SI;
		}
		else
		{
		Low_LCD_SI;
		}
		temp=temp<<1;	
		LCD_Delay(1);
		Hign_LCD_SCL;
		LCD_Delay(1);
		Low_LCD_SCL;
	}
	Hign_LCD_RS;
	Hign_LCD_CS;      //用了temp后,原来的command的就不会变了
}
//-------------------------------LCD光标函数------------------------------------
void Lcd_CURSOR(uchar add_page,uchar add_col)               //光标定位	//8页(<0fh), 且128列(>0fh)
{                                                           //每页8行
	Lcd_Write_command(0xB0+(add_page&0x0f));     //+号为合成为一个字节(其实就是或)B0+0x
	Lcd_Write_command(0x10|(add_col>>4)); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
	Lcd_Write_command(add_col&0x0f);      //Set column address LSB(00+xx)即Y3 Y2 Y1 Y0
}
//-------------------------------LCD清屏函数------------------------------------
void Lcd_Clear(void)                         //128x64字节,实际中一般要多
{	
	uchar i,j;
	for(i=0;i<9;i++)                     //>8页
	{
		 Lcd_CURSOR(i,0);		
		 for(j=0;j<132;j++)          //>128列
		 {	
		 	 Lcd_CURSOR(i,j);      //列在变,光标也在不停的换列
		 	 Lcd_Write_Data(0); //定好一页后,再一列一列的写00h,列在变
		 }		
	}
}	
//--------------------------------LCD测试---------------------------------------
void Test_LCD(void)
{	
	uchar i,j;
	for(i=0xB0;i<0xB8;i++)		//B0-B8共8页
	{
		Lcd_Write_command(i);     //+号为合成为一个字节(其实就是或)B0+0x
		Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
		Lcd_Write_command(0x01); 
		 Lcd_CURSOR(i,0);
		 for(j=0;j<132;j++)
		 {	                        //每读写一次,列会自动加1
		 	 Lcd_CURSOR(i,j);       //列在变,光标也在不停的换列,重新进行定位
		 	 Lcd_Write_Data(0x01);  //检测写进f0h???4点亮4点暗
		 }
		 		
	}
}
/*
//------------------------------------------------------------------------------
void dis_biankuang()			//边框设计
{	
	uchar i,j,k;
	for(i=0xB0;i<0xB8;i++)		//2页16行
	{
		Lcd_Write_command(i);     	//+号为合成为一个字节(其实就是或)B0+0x
		Lcd_Write_command(0x10); 	//Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
		Lcd_Write_command(0x01); 
		Lcd_CURSOR(i,0);
		 for(j=0;j<132;j++)
		 {	                        //每读写一次,列会自动加1
		 	 Lcd_CURSOR(i,j);       //改变列位置,列在变,光标也在不停的换列,重新进行定位
		 	 Lcd_Write_Data(0x03);  //检测写进f0h???4点亮4点暗
		 }
		 for(k=0xB0;k<0xB7;k++)
		 {
		 for(j=2;j<6;j++)
		 {
		  Lcd_CURSOR(k,j);       //改变列位置,列在变,光标也在不停的换列,重新进行定位
		  Lcd_Write_Data(0xff);
		 }
		 for(j=130;j<132;j++)
		 {
		  Lcd_CURSOR(k,j);       //改变列位置,列在变,光标也在不停的换列,重新进行定位
		  Lcd_Write_Data(0xff);
		 }
		 }
		 i=i+7;
		 for(j=0;j<132;j++)      
		 {	                        //每读写一次,列会自动加1
		 	 Lcd_CURSOR(i,j);       //列在变,光标也在不停的换列,重新进行定位
		 	 Lcd_Write_Data(0x03);  //检测写进f0h???4点亮4点暗
		 }

			
	}
}
*/
//------------------------------16*16汉字显示-----------------------------------
void dis_1616hz(uchar x1,uchar x2,uchar row,const uchar hz[])			//16*16
{	
	uchar i,j;
	for(i=x1;i<x2;i++)		//2页16行
	{
		Lcd_Write_command(i);     	//+号为合成为一个字节(其实就是或)B0+0x
		Lcd_Write_command(0x10); 	//Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
		Lcd_Write_command(0x01); 
		Lcd_CURSOR(i,0);
		 for(j=0;j<16;j++)
		 {	                        //每读写一次,列会自动加1
		 	 Lcd_CURSOR(i,j+row);       //改变列位置,列在变,光标也在不停的换列,重新进行定位
		 	 Lcd_Write_Data(hz[j]);  //检测写进f0h???4点亮4点暗
		 }
		 i++;
		 for(j=0;j<16;j++)      
		 {	                        //每读写一次,列会自动加1
		 	 Lcd_CURSOR(i,j+row);       //列在变,光标也在不停的换列,重新进行定位
		 	 Lcd_Write_Data(hz[j+16]);  //检测写进f0h???4点亮4点暗
		 }		
	}
}
/*------------------------------------------------------------------------------
void Dis16x16(uchar add_page, uchar add_col,const uchar *pHZ,uchar state)
{
    uchar i;
    Lcd_CURSOR(add_page, add_col);
    for(i=0;i<16;i++) 
    {                                                //一个汉字2行,16列,32个字节
    	if(state)                                    //state(选亮,黑)
    	{
    		Lcd_Write_Data(pHZ[i]);              //光标定位后沿着行开始写16列的字模数据??????
    	}
    //	else
    //	{
    	    	Lcd_Write_Data(~pHZ[i]);	    //如果列变,光标也会不停的换列,这里光标只换页不换列
    //	}                                           //那还是一列一列的写吗????(写一次会自动加1列)
     // }                                             //而清时在不停的换列
    Lcd_CURSOR(add_page-1, add_col);                //加或减都行,只是取模方向不同
    for(;i<32;i++)
    {  
    	if(state)
    	{
    		Lcd_Write_Data(pHZ[i]);
    	}
    //	else
    //	{
    	//	Lcd_Write_Data(~pHZ[i]);
    	}
    }
}
*/
//-----------------------------16*8点阵显示-------------------------------------
void dis_168hz(uchar x1,uchar row,const uchar hz[])			//16*16
{	
	uchar a,b,j;
	a=x1;
	b=x1+1;
		Lcd_Write_command(a);     	//+号为合成为一个字节(其实就是或)B0+0x
		Lcd_Write_command(0x10); 	//Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
		Lcd_Write_command(0x01); 
		Lcd_CURSOR(a,0);
		 for(j=0;j<8;j++)
		 {	                        //每读写一次,列会自动加1
		 	 Lcd_CURSOR(a,j+row);       //改变列位置,列在变,光标也在不停的换列,重新进行定位
		 	 Lcd_Write_Data(hz[j]);  //检测写进f0h???4点亮4点暗
		 }
		 Lcd_Write_command(b);     	//+号为合成为一个字节(其实就是或)B0+0x
		Lcd_Write_command(0x10); 	//Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
		Lcd_Write_command(0x01); 
		Lcd_CURSOR(b,0);
		 for(j=0;j<8;j++)      
		 {	                        //每读写一次,列会自动加1
		 	 Lcd_CURSOR(b,j+row);       //列在变,光标也在不停的换列,重新进行定位
		 	 Lcd_Write_Data(hz[j+8]);  //检测写进f0h???4点亮4点暗
		 }		
	
}
void dis_shuzi(uchar x,uchar y,uchar shuzi)	
{
	switch	(shuzi)
	{
	//case 0x0f:dispaly[2]=9;break;
	//case 0x0e:dispaly[2]=9;break;
	//case 0x0d:dispaly[2]=8;break;
	//case 0x0c:dispaly[2]=8;break;
	//case 0x0b:dispaly[2]=7;break;
	//case 0x0a:dispaly[2]=6;break;
	case 0x09:dis_168hz(x,y,jiu16);break;
	case 0x08:dis_168hz(x,y,ba16);break;
	case 0x07:dis_168hz(x,y,qi16);break;
	case 0x06:dis_168hz(x,y,liu16);break;
	case 0x05:dis_168hz(x,y,wu16);break;
	case 0x04:dis_168hz(x,y,si16);break;
	case 0x03:dis_168hz(x,y,san16);break;
	case 0x02:dis_168hz(x,y,er16);break;
	case 0x01:dis_168hz(x,y,yi16);break;
	case 0x00:dis_168hz(x,y,ling16);break;
	default:break;
	}
}
//-----------------------------------------------------------------------------

/*void LCDtime(uchar x,uchar nian1,uchar nian2,uchar nian3,uchar nian4,
		     uchar yue1,uchar yue2,
		     uchar ri1,uchar ri2,
		     uchar shi1,uchar shi2,
		     uchar fen1,uchar fen1,)    //LCD时间显示函数
*/
//------------------------------------------------------------------------------
/*
void LCDtime()	                         
	{
	dis_168hz(0xB6,5,er16);          	 //n1
	dis_168hz(0xB6,13,ling16);	 		 //n2
	dis_168hz(0xB6,21,ling16);	 		 //n3	
	dis_168hz(0xB6,29,qi16);	 		 //n4
	dis_168hz(0xB6,37,heng16);
	dis_168hz(0xB6,45,yi16);	 		 //y1
	dis_168hz(0xB6,53,ling16);	 		 //y2
	dis_168hz(0xB6,61,heng16);	 	
	dis_168hz(0xB6,69,yi16);	 		 //r1
	dis_168hz(0xB6,77,ling16);       	 //r2
	///////////////////////////////////////////////
	dis_168hz(0xB6,90,yi16);	 		//s1
	dis_168hz(0xB6,98,san16);           //s2
	dis_168hz(0xB6,106,maohao16);	 	//
	dis_168hz(0xB6,114,yi16);        	//f3
	dis_168hz(0xB6,122,liu16);       	//f4
	}
*/
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------

void  dis_ykxt()
{
//---------------------------第一行“无线遥控系统“-----------------------------
	dis_1616hz(0xB0,0xB1,20,wu);
	dis_1616hz(0xB0,0xB1,36,xian);
	dis_1616hz(0xB0,0xB1,52,yao);
	dis_1616hz(0xB0,0xB1,68,kong);
	dis_1616hz(0xB0,0xB1,84,xi);
	dis_1616hz(0xB0,0xB1,100,tong);
}
//----------------------------第2行“继电器开”-------------------------------------
void dis_jdql()
{
	dis_1616hz(0xB3,0xB4,35,ji);
	dis_1616hz(0xB3,0xB4,51,dian);
	dis_1616hz(0xB3,0xB4,67,qi);
	dis_1616hz(0xB3,0xB4,83,kai);
}	
//---------------------------第3行“蜂明器响“--------------------------------------
void dis_fmqx()
{
	dis_1616hz(0xB3,0xB4,35,feng);
	dis_1616hz(0xB3,0xB4,51,ming);
	dis_1616hz(0xB3,0xB4,67,qi);
	dis_1616hz(0xB3,0xB4,83,xiang);
}
//-------------------------------串口初始化-------------------------------------
void StartUART(void)
{
 	 UCSRA=0x00;	
	 UCSRB=0x18;	
	 UCSRC=0x06;	
	 UBRRL=0x33;
	 UBRRH=0x00;
	 UCSRA=UCSRA|0x08;	
}
//------------------------------串口发送----------------------------------------
void R_S_Byte(uchar R_Byte)
{	
     UDR= R_Byte;  
}
//------------------------------主函数------------------------------------------
void main(void)
{  
	uint i;
	DDRD=0xF2;						  //端口D设置											  
	DDRB=0xB3;					     //端口B设置							
//------------------------------------------------------------------------------				  			 				
	Spi_initial();	                //SPI初始化															  
	system_Init();				   //系统状态初始化												
	Config905();  				  //NRF905初始化	
//------------------------------------------------------------------------------	
	Lcd_init();					 //LCD初始化							  
//------------------------------------------------------------------------------
	StartUART();				//串口初始化9600波特率
	Delay(500);
	Lcd_Clear();				//清屏幕
	
//------------------------------------------------------------------------------
	while(1)
	{
	RX();  					//接收数据
	if(TxRxBuffer[0])
	{
	if(TxRxBuffer[0]==0x29)
	{
	Low_JDQ;			   //打开继电器
	dis_ykxt();
	dis_jdql();
	}
	if(TxRxBuffer[0]==0x30)
	{
	Low_BELL;			   //打开蜂明器
	dis_ykxt();
	dis_fmqx();
	}
	if(TxRxBuffer[0]==0x31)
	{
	Lcd_Clear();		  //清屏幕
	}
	}
	Hign_JDQ;			  //关闭继电器				
	Hign_BELL;			  //关闭蜂明器		
	}
}

⌨️ 快捷键说明

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