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

📄 lcd._c

📁 用avr单片机接收GPS的数据的c语言程序
💻 _C
📖 第 1 页 / 共 2 页
字号:
 	DDRA&=0x03;
	DDRC&=0XFC;
}

//向lcd_cs1写数据函数
void lcd_wr1_data (unsigned char lcd_wr_buffer)
{
    unsigned char lcd_wr_temp;
 	e_off;										  //读lcd状态
 	rw_on;
 	di_off;
 	cs1_on;
 	DDRA&=0x03;
 	PORTA&=0x03;
	DDRC&=0xFC;
 	PORTC&=0xFC;
 	e_on;
 	NOP();
 	NOP();
 	NOP();
 	lcd_wr_temp=(PINA&0XFC);
	lcd_wr_temp|=(PINC&0x03);
 	e_off;
 	cs1_off;
 	while(lcd_wr_temp&0x90)
 	{
        e_off;					  				  //读lcd状态
	 	rw_on;
	 	di_off;
 	 	cs1_on;
 	 	DDRA&=0x03;
 		PORTA&=0x03;
		DDRC&=0xFC;
 		PORTC&=0xFC;
 		e_on;
 		NOP();
 		NOP();
 		NOP();
 		lcd_wr_temp=(PINA&0XFC);
		lcd_wr_temp|=(PINC&0x03);
	 	e_off;
	 	cs1_off;
    }
 	e_off;										  //向lcd写数据
 	rw_off;
 	di_on;
 	cs1_on;
 	PORTA&=0x03;
 	PORTA|=(lcd_wr_buffer&0xFC);
	PORTC&=0xFC;
 	PORTC|=(lcd_wr_buffer&0x03); 
 	DDRA|=0xFC;
	DDRC|=0X03;
 	e_on;
 	NOP();
 	NOP();
 	NOP();
 	NOP();
 	e_off;
 	cs1_off;
 	NOP();
 	NOP();	
 	DDRA&=0x03;
	DDRC&=0XFC;
}

//写lcd的cs2命令寄存器函数
void lcd_wr2_ins (unsigned char lcd_wr_buffer)
{
    unsigned char lcd_wr_temp;
 	e_off;										  //读lcd状态
 	rw_on;
 	di_off;
 	cs2_on;
 	DDRA&=0x03;
 	PORTA&=0x03;
	DDRC&=0xFC;
 	PORTC&=0xFC;
 	e_on;
 	NOP();
 	NOP();
 	NOP();
 	lcd_wr_temp=(PINA&0XFC);
	lcd_wr_temp|=(PINC&0x03);
 	e_off;
 	cs2_off;
 	while(lcd_wr_temp&0x90)
 	{
        e_off;					  				  //读lcd状态
	 	rw_on;
	 	di_off;
 	 	DDRA&=0x03;
 		PORTA&=0x03;
		DDRC&=0xFC;
 		PORTC&=0xFC;
 		e_on;
 		NOP();
 		NOP();
 		NOP();
 		lcd_wr_temp=(PINA&0XFC);
		lcd_wr_temp|=(PINC&0x03);
	 	e_off;
	 	cs2_off;
    }
 	e_off;										  //写lcd命令
 	rw_off;
 	di_off;
 	cs2_on;
 	PORTA&=0x03;
 	PORTA|=(lcd_wr_buffer&0xFC);
	PORTC&=0xFC;
 	PORTC|=(lcd_wr_buffer&0x03); 
 	DDRA|=0xFC;
	DDRC|=0X03;
 	e_on;
 	NOP();
 	NOP();
 	NOP();
 	NOP();
 	e_off;
 	cs2_off;
 	NOP();
 	NOP();	
 	DDRA&=0x03;
	DDRC&=0XFC;
}

//向lcd_cs2写数据函数
void lcd_wr2_data (unsigned char lcd_wr_buffer)
{
    unsigned char lcd_wr_temp;
 	e_off;										  //读lcd状态
 	rw_on;
 	di_off;
 	cs2_on;
 	DDRA&=0x03;
 	PORTA&=0x03;
	DDRC&=0xFC;
 	PORTC&=0xFC;
 	e_on;
 	NOP();
 	NOP();
 	NOP();
 	lcd_wr_temp=(PINA&0XFC);
	lcd_wr_temp|=(PINC&0x03);
 	e_off;
 	cs2_off;
 	while(lcd_wr_temp&0x90)
 	{
        e_off;					  				  //读lcd状态
	 	rw_on;
	 	di_off;
 	 	cs2_on;
 	 	DDRA&=0x03;
 		PORTA&=0x03;
		DDRC&=0xFC;
 		PORTC&=0xFC;
 		e_on;
 		NOP();
 		NOP();
 		NOP();
 		lcd_wr_temp=(PINA&0XFC);
		lcd_wr_temp|=(PINC&0x03);
	 	e_off;
	 	cs2_off;
    }
 	e_off;										  //向lcd写数据
 	rw_off;
 	di_on;
 	cs2_on;
 	PORTA&=0x03;
 	PORTA|=(lcd_wr_buffer&0xFC);
	PORTC&=0xFC;
 	PORTC|=(lcd_wr_buffer&0x03); 
 	DDRA|=0xFC;
	DDRC|=0X03;
 	e_on;
 	NOP();
 	NOP();
 	NOP();
 	NOP();
 	e_off;
 	cs2_off;
 	NOP();
 	NOP();	
 	DDRA&=0x03;
	DDRC&=0XFC;
}

//LCD显示刷屏函数,起始地址放在lcd_display2_buffer[0][0]中
//使用的全局变量:*lcd_display_rdp; 
//API function
void lcd_display2(void)
{
    const unsigned char *asc_rdp;
 	unsigned char lcd_row_counter;
 	unsigned char lcd_column_counter;
 	unsigned char lcd_asc;
 	unsigned char lcd_asc_column; 
 	unsigned char lcd_buffer1;
 	unsigned char lcd_invter;
 	lcd_wr1_ins(0xc0);							 //显示起始行为0
 	lcd_wr2_ins(0xc0);							 //显示起始行为0
 	*lcd_display_rdp=lcd_display2_buffer[0][0];   
 	for (lcd_row_counter=0;lcd_row_counter<=7;lcd_row_counter++)  //显示的0~7行循环计数
    {
  	    lcd_wr1_ins(lcd_row_counter+0xb8);			 //设置x页地址
 	   	lcd_wr2_ins(lcd_row_counter+0xb8);			 //设置x页地址
 	   	lcd_wr1_ins(0x40);						 	 //y地址清零
 	   	lcd_wr2_ins(0x40);						 	 //y地址清零
       	for (lcd_column_counter=0;lcd_column_counter<=9;lcd_column_counter++)  //显示的0~20列循环计数(cs1为0~9列)
	    {
	  	    lcd_asc=*lcd_display_rdp;					          //要显示的字符ASC码放在lcd_asc中		 
		    lcd_display_rdp++;
			if (lcd_asc&BIT(7))
			{
			    lcd_invter|=BIT(0);
				lcd_asc&=(~BIT(7));
			}
			else
			{
			    lcd_invter&=(~BIT(0));
			}
		    if ((lcd_asc<0x20)||(lcd_asc>=0x80))
		    {
		        lcd_asc=0x20;
		    }
		    lcd_asc=lcd_asc-0x20;
		    for (lcd_asc_column=0;lcd_asc_column<=0x04;lcd_asc_column++)	  //显示的5列的循环
		    {
		        asc_rdp=&asc[lcd_asc][lcd_asc_column];		  //取出当前字符的每列内容
		        lcd_buffer1=*asc_rdp;						  //要写入lcd的数据放入lcd_buffer1中
	            if(lcd_invter&BIT(0))
			    {
				    lcd_buffer1=~lcd_buffer1;
			    }
				lcd_wr1_data(lcd_buffer1);			  			 
		    }
		    if(lcd_invter&BIT(0))
		    {
				   lcd_wr1_data(0xff);
			}
			else
			{
				   lcd_wr1_data(0x00);
			}
	   	}
	    lcd_asc=*lcd_display_rdp;					          //要显示的字符ASC码放在lcd_asc中		 
	    lcd_display_rdp++;
	    if (lcd_asc&BIT(7))
		{
			lcd_invter|=BIT(0);
			lcd_asc&=(~BIT(7));
		}
	    else  
		{
			lcd_invter&=(~BIT(0));
		}
	    if ((lcd_asc<0x20)||(lcd_asc>=0x80))
	    {
		    lcd_asc=0x20;
	   	}
	    lcd_asc=lcd_asc-0x20;
	    for (lcd_asc_column=0;lcd_asc_column<=0x03;lcd_asc_column++)	  //显示的5列的循环
	    {
	        asc_rdp=&asc[lcd_asc][lcd_asc_column];		  //取出当前字符的每列内容
		 	lcd_buffer1=*asc_rdp;						  //要写入lcd的数据放入lcd_buffer1中
	     	if(lcd_invter&BIT(0))
			{
				lcd_buffer1=~lcd_buffer1;
			}
			lcd_wr1_data(lcd_buffer1);			  			 
	   	}
	    asc_rdp=&asc[lcd_asc][lcd_asc_column];		  	  //取出当前字符的每列内容
	    lcd_buffer1=*asc_rdp;						  	  //要写入lcd的数据放入lcd_buffer1中
	    if(lcd_invter&BIT(0))
		{
			lcd_buffer1=~lcd_buffer1;
		}
	    lcd_wr2_data(lcd_buffer1);
	    if(lcd_invter&BIT(0))
		{
			 lcd_wr2_data(0xff);
		}
	    else 
	    {
			lcd_wr2_data(0x00);
		}	
	    for (lcd_column_counter=11;lcd_column_counter<=20;lcd_column_counter++)  //显示的0~20列循环计数(cs2为11~20列)
	   	{
	  	    lcd_asc=*lcd_display_rdp;					          //要显示的字符ASC码放在lcd_asc中		 
		    lcd_display_rdp++;
			if (lcd_asc&BIT(7))
			{
				lcd_invter|=BIT(0);
				lcd_asc&=(~BIT(7));
			}
			else  
			{
			    lcd_invter&=(~BIT(0));
			}
		    if ((lcd_asc<0x20)||(lcd_asc>=0x80))
		    {
		        lcd_asc=0x20;
		    }
		    lcd_asc=lcd_asc-0x20;
		    for (lcd_asc_column=0;lcd_asc_column<=0x04;lcd_asc_column++)	  //显示的5列的循环
		    {
		        asc_rdp=&asc[lcd_asc][lcd_asc_column];		  //取出当前字符的每列内容
		        lcd_buffer1=*asc_rdp;						  //要写入lcd的数据放入lcd_buffer1中
	            if(lcd_invter&BIT(0))
				{
					lcd_buffer1=~lcd_buffer1;
				}
				lcd_wr2_data(lcd_buffer1);			  			 
		    }
			if(lcd_invter&BIT(0))
			{
				lcd_wr2_data(0xff);
			}
			else
			{
				lcd_wr2_data(0x00);
			}
	    }
	    lcd_wr2_data(0x00);
	    lcd_wr2_data(0x00);
    }
    lcd_wr1_ins(0x3f);	  				  		 //lcd模块1显示
    lcd_wr2_ins(0x3f);	  				  		 //lcd模块2显示 
}

⌨️ 快捷键说明

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