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

📄 driver.c

📁 用avr mega128读取spi串行字库
💻 C
📖 第 1 页 / 共 5 页
字号:
	unsigned long int table_address;
	unsigned int char_buffer_address;
	unsigned long int i,j,k,l,w;
	i=0xa1;
	j=0x5e;
	k=0xa1;
	l=0x20;
	w=0x1000;
	table_address=((qu_code-i)*j+(wei_code-k))*l+w;
	char_buffer_address=table_address%0x100;
	return(char_buffer_address);
}


//************************************************************************
//显示一个ASCII字符 注:可全屏显示
//************************************************************************
void DISP_ASCII(unsigned char page_address,unsigned char column_address,unsigned char asic_data,unsigned char cs) 
{       	 
	unsigned char i=0;
	unsigned char j=0;
	j=cs+1;
	GET_ASCII_MODE(asic_data);
	if((column_address>56)&&(cs!=3))
	{
		WRITE_DATA_ADDRESS(page_address,column_address,cs);
		for(i=0;i<(64-column_address);i++)
		{
			WRITE_DATA(ascii_mode[i],cs);
		}
		WRITE_DATA_ADDRESS(page_address,0,j);
		for(;i<8;i++)
		{
			WRITE_DATA(ascii_mode[i],j);
		}
	}
	else
	{
		WRITE_DATA_ADDRESS(page_address,column_address,cs);
	 	for(i=0;i<8;i++)
		{
			WRITE_DATA(ascii_mode[i],cs);
		}
	}
	if((column_address>56)&&(cs!=3))
	{
		WRITE_DATA_ADDRESS(page_address+1,column_address,cs);
		for(i=8;i<(72-column_address);i++)
		{
			WRITE_DATA(ascii_mode[i],cs);
		}
		WRITE_DATA_ADDRESS(page_address+1,0,j);
		for(;i<16;i++)
		{
			WRITE_DATA(ascii_mode[i],j);
		}
	}
	else
	{
		WRITE_DATA_ADDRESS(page_address+1,column_address,cs);
		for(i=8;i<16;i++)
		{
			WRITE_DATA(ascii_mode[i],cs);
		    //	delay(100);
		}
	}
	DISP_ONE_BYTE(page_address,column_address,cs,0);
}
//************************************************************************
//反显示一个ASCII字符 注:可全屏显示
//************************************************************************
void DISP_ASCII_REVERSE(unsigned char page_address,unsigned char column_address,unsigned char asic_data,unsigned char cs) 
{       	 
	unsigned char i=0;
	unsigned char j=0;
	j=cs+1;
	GET_ASCII_MODE(asic_data);
	if((column_address>56)&&(cs!=3))
	{
		WRITE_DATA_ADDRESS(page_address,column_address,cs);
		for(i=0;i<(64-column_address);i++)
		{
			WRITE_DATA(~ascii_mode[i],cs);
		}
		WRITE_DATA_ADDRESS(page_address,0,j);
		for(;i<8;i++)
		{
			WRITE_DATA(~ascii_mode[i],j);
		}
	}
	else
	{
		WRITE_DATA_ADDRESS(page_address,column_address,cs);
	 	for(i=0;i<8;i++)
		{
			WRITE_DATA(~ascii_mode[i],cs);
		}
	}
	if((column_address>56)&&(cs!=3))
	{
		WRITE_DATA_ADDRESS(page_address+1,column_address,cs);
		for(i=8;i<(72-column_address);i++)
		{
			WRITE_DATA(~ascii_mode[i],cs);
		}
		WRITE_DATA_ADDRESS(page_address+1,0,j);
		for(;i<16;i++)
		{
			WRITE_DATA(~ascii_mode[i],j);
		}
	}
	else
	{
		WRITE_DATA_ADDRESS(page_address+1,column_address,cs);
		for(i=8;i<16;i++)
		{
			WRITE_DATA(~ascii_mode[i],cs);
		    //	delay(100);
		}
	}
	DISP_ONE_BYTE(page_address,column_address,cs,0xff);
}
//*****************************************************
//取ASCII字符的字模(16BYTES)16*8
//*****************************************************
void GET_ASCII_MODE(unsigned char ascii_code)
{
	unsigned char i;
	unsigned int j;
	READ_ONE_PAGE_TO_BUFFER1(ASCII_PAGE_ADDRESS(ascii_code));
	j=ASCII_BUFFER_ADDRESS(ascii_code);
	ascii_mode[0]=READ_BYTE_FROM_BUFFER1(j);
	j++;
	for(i=1;i<16;i++)
	{
		ascii_mode[i]=READ_BYTE_FROM_BUFFER1(j);
		j++;
	}
}
//*****************************************************
//计算ASCII字符的页地址
//*****************************************************
unsigned int ASCII_PAGE_ADDRESS(unsigned char ascii_code)
{
	unsigned int ascii_page_address;
	ascii_page_address=ascii_code/0x10;
	return(ascii_page_address);
}
//*****************************************************
//计算ASCII字符的页内地址
//*****************************************************
unsigned char ASCII_BUFFER_ADDRESS(unsigned char ascii_code)
{
	unsigned char ascii_buffer_address;
	ascii_buffer_address=(ascii_code%0x10)*0x10;
	return(ascii_buffer_address);
}

//***********************************************************
//显示屏单屏清屏,注:单块屏清
//***********************************************************
void CLEAR_LCD_X(unsigned char cs)
{
	unsigned int i,j;
	WRITE_DATA_ADDRESS(0x00,0x00,cs);
	for(i=0;i<8;i++)
	{
		WRITE_DATA_ADDRESS(i,0x00,cs);
		for(j=0;j<64;j++)
		{
			WRITE_DATA(0x00,cs);
		}
	}
}
//*************************************************************
//显示屏整屏清屏
//*************************************************************
void CLEAR_LCD_ALL(void)
{
	CLEAR_LCD_X(1);
	CLEAR_LCD_X(2);
	CLEAR_LCD_X(3);
}

//*******************************************************显示器界面*********************************************************//


//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&待机界面部分显示&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//


//********************************************************
//进入待机状态
//需要返回待机界面时:lcd_status=0
//********************************************************
void ENTER_ORIGINAL_INTERFACE(void)
{
	CLEAR_LCD_ALL();
  	DISP_CHARACTER(2,32,0xcc,0xa9,1);//泰
  	DISP_CHARACTER(2,48,0xc9,0xad,1);//森
  	DISP_CHARACTER(2,0,0xbf,0xc6,2);//科
  	DISP_CHARACTER(2,16,0xbc,0xbc,2);//技      	
  	DISP_ASCII(4,32,ASCII(hour/10),1);//显示时间
  	DISP_ASCII(4,40,ASCII(hour%10),1);
  	DISP_ASCII(4,48,':',1);
  	DISP_ASCII(4,56,ASCII(minute/10),1);
  	DISP_ASCII(4,0,ASCII(minute%10),2);
 	DISP_ASCII(4,8,':',2);
   	DISP_ASCII(4,16,ASCII(second/10),2);
    DISP_ASCII(4,24,ASCII(second%10),2);
	DISP_CHARACTER(6,0,0xc9,0xee,1);//深
	DISP_CHARACTER(6,16,0xdb,0xda,1);//圳
	DISP_CHARACTER(6,32,0xcc,0xa9,1);//泰
	DISP_CHARACTER(6,48,0xc9,0xad,1);//森   
	DISP_CHARACTER(6,0,0xb5,0xe7,2);//电
	DISP_CHARACTER(6,16,0xd7,0xd3,2);//子
	DISP_CHARACTER(6,32,0xb9,0xab,2);//公
	DISP_CHARACTER(6,48,0xcb,0xbe,2);//司 
	if(main_status!=0)
	{  
	    UPDATE_GPS_DISP();//显示gps信号
	    UPDATE_GSM_DISP();
	    UPDATE_DEFENCE_DISP();
	    UPDATE_NO_ANSWER_DISP();
	}
	else
	{   //设备初始化...
		DISP_CHARACTER(0,0,0xc9,0xe8,1);//设
		DISP_CHARACTER(0,16,0xb1,0xb8,1);//备
		DISP_CHARACTER(0,32,0xb3,0xf5,1);//初
		DISP_CHARACTER(0,48,0xca,0xbc,1);//始   
		DISP_CHARACTER(0,0,0xbb,0xaf,2);//化
	 	DISP_ASCII(0,16,'.',2);
	   	DISP_ASCII(0,24,'.',2);
	    DISP_ASCII(0,32,'.',2);				
	}
    //指南针部分
    UPDATE_COMPASS_DISP();
    lcd_status=1;  
    son_count=0;
}
//*******************************************************
//待机状态
//待机界面只有有变化的部分才更新
//*******************************************************
void ORIGINAL_INTERFACE(void)
{
	if(hour_temp!=hour)
	{
  		DISP_ASCII(4,32,ASCII(hour/10),1);
  		DISP_ASCII(4,40,ASCII(hour%10),1);
  		hour_temp=hour;
  	}
	if(minute_temp!=minute)
	{
  		DISP_ASCII(4,56,ASCII(minute/10),1);
  		DISP_ASCII(4,0,ASCII(minute%10),2);
  		minute_temp=minute;
  	}
	if(second_temp!=second)
	{
   		DISP_ASCII(4,16,ASCII(second/10),2);
    	DISP_ASCII(4,24,ASCII(second%10),2);
    	second_temp=second;
    }
    if(main_status==0)
    {
    	
    }
    else
    {
	    if(gps_status_temp!=gps_status)
	    {
	    	UPDATE_GPS_DISP();
	    	gps_status_temp=gps_status;
	    }
	    if(signal_count_temp!=signal_count)
	    {
	    	UPDATE_GSM_DISP();
	    	signal_count_temp=signal_count;
	    }
	    if(defence_flag_temp!=defence_flag)
	    {
	    	UPDATE_DEFENCE_DISP();
	    	defence_flag_temp=defence_flag;
	    }
	}
    if(logo_change_time>50000)
    {
    	logo_change_time=0;
    	if(logo_mark==0)
    	{
    		logo_mark=1;
    	}
    	else 
    	{
    		logo_mark=0;
    	}
    	if(logo_mark==0)
    	{
		  	DISP_CHARACTER(2,32,0xcc,0xa9,1);//泰
		  	DISP_CHARACTER(2,48,0xc9,0xad,1);//森
		  	DISP_CHARACTER(2,0,0xbf,0xc6,2);//科
		  	DISP_CHARACTER(2,16,0xbc,0xbc,2);//技  
		  	 
			DISP_CHARACTER(6,0,0xc9,0xee,1);//深
			DISP_CHARACTER(6,16,0xdb,0xda,1);//圳
			DISP_CHARACTER(6,32,0xcc,0xa9,1);//泰
			DISP_CHARACTER(6,48,0xc9,0xad,1);//森   
			DISP_CHARACTER(6,0,0xb5,0xe7,2);//电
			DISP_CHARACTER(6,16,0xd7,0xd3,2);//子
			DISP_CHARACTER(6,32,0xb9,0xab,2);//公
			DISP_CHARACTER(6,48,0xcb,0xbe,2);//司    
    	}
    	else         //畅行无阻
    	{
		  	DISP_CHARACTER(2,32,0xb3,0xa9,1);//畅
		  	DISP_CHARACTER(2,48,0xd0,0xd0,1);//行
		  	DISP_CHARACTER(2,0,0xcc,0xec,2);//天
		  	DISP_CHARACTER(2,16,0xcf,0xc2,2);//下   
		  	DISP_ASCII(6,0,0x77,1);   		//w
			DISP_ASCII(6,8,0x77,1);		//w
		  	DISP_ASCII(6,16,0x77,1);			//w
			DISP_ASCII(6,24,0x2e,1);		//.
		  	DISP_ASCII(6,32,0x73,1);			//s
			DISP_ASCII(6,40,0x7a,1);		//z
		  	DISP_ASCII(6,48,0x74,1);			//t	
			DISP_ASCII(6,56,0x61,1);		//a
		  	DISP_ASCII(6,0,0x69,2);         //i
			DISP_ASCII(6,8,0x73,2);		//s
		  	DISP_ASCII(6,16,0x65,2);			//e
			DISP_ASCII(6,24,0x6e,2);		//n
		  	DISP_ASCII(6,32,0x2e,2);			//.
			DISP_ASCII(6,40,0x63,2);		//c
		  	DISP_ASCII(6,48,0x6f,2);			//o
			DISP_ASCII(6,56,0x6d,2);		//m
    	}
    	
    }
    //指南针部分
}
//********************************************************
//更新gps状态图标
//********************************************************
void UPDATE_GPS_DISP(void)
{
    if(gps_status==0) 		  	//Gps无输出时显示空格
    {
		single8[0]=0x00;
		single8[1]=0x00;
		single8[2]=0x00;
		single8[3]=0x00;
		single8[4]=0x00;
		single8[5]=0x00;
		single8[6]=0x00;
		single8[7]=0x00;
		DISP_8X8_PICTURE(0,32,2);
		single8[0]=0x00;
		single8[1]=0x00;
		single8[2]=0x00;
		single8[3]=0x00;
		single8[4]=0x00;
		single8[5]=0x00;
		single8[6]=0x00;
		single8[7]=0x00;
		DISP_8X8_PICTURE(1,32,2);
		single8[0]=0x00;
		single8[1]=0x00;
		single8[2]=0x00;
		single8[3]=0x00;
		single8[4]=0x00;
		single8[5]=0x00;
		single8[6]=0x00;
		single8[7]=0x00;
		DISP_8X8_PICTURE(0,40,2);
		single8[0]=0x00;
		single8[1]=0x00;
		single8[2]=0x00;
		single8[3]=0x00;
		single8[4]=0x00;
		single8[5]=0x00;
		single8[6]=0x00;
		single8[7]=0x00;
		DISP_8X8_PICTURE(1,40,2);
 	}
 	else if(gps_status==1) 	 	//Gps无定位时显示下划线
 	{        	
		single8[0]=0x00;
		single8[1]=0x00;
		single8[2]=0x00;
		single8[3]=0x60;
		single8[4]=0x60;
		single8[5]=0x60;
		single8[6]=0x60;
		single8[7]=0x60;
		DISP_8X8_PICTURE(0,32,2);
		single8[0]=0x00;
		single8[1]=0x00;
		single8[2]=0x00;
		single8[3]=0x00;
		single8[4]=0x00;
		single8[5]=0x00;
		single8[6]=0x00;
		single8[7]=0x00;
		DISP_8X8_PICTURE(1,32,2);
		single8[0]=0x60;
		single8[1]=0x60;
		single8[2]=0x60;
		single8[3]=0x60;
		single8[4]=0x60;
		single8[5]=0x00;
		single8[6]=0x00;
		single8[7]=0x00;
		DISP_8X8_PICTURE(0,40,2);
		single8[0]=0x00;
		single8[1]=0x00;
		single8[2]=0x00;
		single8[3]=0x00;
		single8[4]=0x00;
		single8[5]=0x00;
		single8[6]=0x00;
		single8[7]=0x00;
		DISP_8X8_PICTURE(1,40,2);
 	}
	else if(gps_status==2)   	//Gps有定位时显示G
	{
		single8[0]=0x00;
		single8[1]=0x00;
		single8[2]=0x00;
		single8[3]=0x00;
		single8[4]=0x30;
		single8[5]=0x50;
		single8[6]=0x90;
		single8[7]=0xf0;
		DISP_8X8_PICTURE(0,32,2);
		single8[0]=0x00;
		single8[1]=0x00;
		single8[2]=0x00;
		single8[3]=0x00;
		single8[4]=0x00;
		single8[5]=0x00;
		single8[6]=0x00;
		single8[7]=0x0f;
		DISP_8X8_PICTURE(1,32,2);
		single8[0]=0x90;
		single8[1]=0x50;
		single8[2]=0x30;
		single8[3]=0x00;
		single8[4]=0x00;
		single8[5]=0x00;
		single8[6]=0x00;
		single8[7]=0x00;
		DISP_8X8_PICTURE(0,40,2);
		single8[0]=0x00;
		single8[1]=0x00;
		single8[2]=0x00;
		single8[3]=0x00;
		single8[4]=0x00;
		single8[5]=0x00;
		single8[6]=0x00;
		single8[7]=0x00;
		DISP_8X8_PICTURE(1,40,2);
	}
 	else  							  	//其余显示空格
 	{
		single8[0]=0x00;
		single8[1]=0x00;
		single8[2]=0x00;
		single8[3]=0x00;
		single8[4]=0x00;
		single8[5]=0x00;
		single8[6]=0x00;
		single8[7]=0x00;
		DISP_8X8_PICTURE(0,32,2);
		single8[0]=0x00;
		single8[1]=0x00;
		single8[2]=0x00;
		single8[3]=0x00;
		single8[4]=0x00;
		single8[5]=0x00;
		single8[6]=0x00;
		single8[7]=0x00;
		DISP_8X8_PICTURE(1,32,2);
		single8[0]=0x00;
		single8[1]=0x00;
		single8[2]=0x00;

⌨️ 快捷键说明

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