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

📄 lcd12864.c

📁 NT7532 LCD驱动 包含液晶显示
💻 C
📖 第 1 页 / 共 2 页
字号:
#define   LCD_GLOABLE
#include "config.h"
#include "charzimo.h"
//设备sn
char            Device_SN[]={"S/N:0808188102 C"};
char            MsgBuf[256],Old_MsgBuf[256];
char            msg_start_time[11];
char            msg_end_time[11];
char            current_time[11];
volatile   uint8  display_finish;
extern volatile Menu_Status * Menu;
extern char Main_Menu;
extern volatile Wg_Input_Data wg_input_data;
#define    ZIMO_ADDR (( uint8  *)(0x83032000))
const uint8 ComTable[]={3,2,1,0,7,6,5,4,};
 
/*----------------------菜单显示-----------------------*/


extern void Sys_WaitinMS(unsigned int time);


void  DelayNS(uint16 dly)
{  
    uint16  i;  
	for(; dly>0; dly--) 
	{
		for(i=0; i<10; i++);
	}
    
	
}


unsigned char LCD_Data_Read(void)
{
	unsigned char address_data;
	
	OS_ENTER_CRITICAL();
	READ_DATA;
	address_data=LCD_ADDRESS; 
	READ_OK;
	
	OS_EXIT_CRITICAL();  
    return(address_data);
}
unsigned char LCD_Cmd_Read(void)
{
	unsigned char address_cmd;
	
	OS_ENTER_CRITICAL();
	READ_STATUS;
	address_cmd=LCD_ADDRESS; 
	READ_OK;
	
	OS_EXIT_CRITICAL();  
  return(address_cmd);
}
void LCD_Cmd_Write(unsigned char cmd)
{
	
	OS_ENTER_CRITICAL();
	LCD_ADDRESS=cmd;
	
	WRITE_COMMAND;	
	WRITE_COMMAND_OK;
    OS_EXIT_CRITICAL();  
   
}
void LCD_Data_Write(unsigned char data)
{
	
	OS_ENTER_CRITICAL();
	
	
	//LCD_Chk_Busy(); 
   
    LCD_ADDRESS=data;
   
    
    WRITE_DATA;
    WRITE_DATA_OK;
	OS_EXIT_CRITICAL();  
}


void LCD_Chk_Busy(void)
{
	unsigned char busy;//,times;
	//times=100;
	do
	{
	
		busy =(LCD_Cmd_Read() & 0x80);
		//times--;
		
	}while(busy);// && times); 
	
}


void LCD_Back_OnOff(uint8 OnOff)
{
	if(OnOff==1)
	{
		IO0SET |=KEY_BL_PIN;
		IO3SET |=LCD_BL_PIN;
	}
	else
	{
		IO0CLR |=KEY_BL_PIN;
		IO3CLR |=LCD_BL_PIN;
	}
}

void Lcd_BrightSet(uint8 brightlevel)
{
   
  uint8 i=0;
  if(brightlevel>8)
    {
      brightlevel=0;
       
    }
  
   i=brightlevel*7+7;
  
  LCD_Cmd_Write(0x81);      //Sets V0
  LCD_Cmd_Write(i);         //内部电位器调节对比度
  

} 
void LCM_Inintial(void)
{
	Lcd_contr_level=4;
	LCD_Cmd_Write(0xE2);      //soft reset
	
	LCD_Cmd_Write(0xAE);      //Display OFF
	LCD_Cmd_Write(0xA2);      //1/64 Duty 1/9 Bias
	
	LCD_Cmd_Write(0xE6);
	LCD_Cmd_Write(0xCf);     //      CLOSCK
	
	
	
	LCD_Cmd_Write(0xA0);      //ADC select   --> right
	
	
	LCD_Cmd_Write(0xC0);      //com1 --> com64
	LCD_Cmd_Write(0x25);      //没用,外部Rb/Ra
	
	
	
	Lcd_BrightSet(Lcd_contr_level);
	
	
	LCD_Cmd_Write(0x2C);//power control
	
	LCD_Cmd_Write(0x2E);//
	
	
	
	
	
	LCD_Cmd_Write(0x2F);      //voltage follower ON   regulator ON   booster ON
	
	
	LCD_Cmd_Write(0xA6);      //Normal Display (not reverse dispplay)
	LCD_Cmd_Write(0xA4);      //Entire Display Disable
	
	
	LCD_Cmd_Write(0xAF);      //Display ON
	
	
	LCD_Cmd_Write(0x40);      //Set Display Start Line = com0
	LCD_Cmd_Write(0xB0);      //Set Page Address = 0
	LCD_Cmd_Write(0x10);      //Set Column Address 4 higher bits = 0
	LCD_Cmd_Write(0x01);      //Set Column Address 4 lower bits = 1 , from IC SEG1 -> SEG129
	
}
void LCD_Init(void)//液晶初始化
{
	LcdOn_Count=6000;
	Info_Process_Time=5000;
	Info_Process_Flag=1;
	old_msg_no=19;
	LCD_IO_SET();
	LCD_RST_LOW;
	LCD_RST_HIGHT;
	LCD_Back_OnOff(1);	
	LCM_Inintial();
	
}
void Set_Lcd_Page(uint8 Page,uint8 Col)
{
	LCD_Cmd_Write(ComTable[Page&0x07]|0xB0); //Set Page Address
	LCD_Cmd_Write( ((Col+1)>>4) | 0x10);      //Set Column Address High Byte
	LCD_Cmd_Write( (Col+1)&0x0F );            //Low Byte   Colum from 1 -> 129 auto add
}
void Clr_Display(void)
{
	uint8 i,j;
	LCD_Cmd_Write(0x40);      //Set Display Start Line = com0
	for(i=0;i<8;i++)
	{
		LCD_Cmd_Write(0xB0|ComTable[i]); //Set Page Address
		LCD_Cmd_Write(0x10);      //Set Column Address = 0
		LCD_Cmd_Write(0x01);      //Colum from 1 -> 129 auto add
		for(j=0;j<128;j++)
		{
			LCD_Data_Write( 0 );
		}
	}
	
}
void Display_Capacity(uint8 capcity)
{
	uint8   temp;
	uint8   dis_buf[28];
	uint8   convert_buf[28];
	uint32  i,j,k;
	
	for(i=0;i<28;i++)
	{
		if(i<7)
		{
			temp=0;
			if(capcity>=20)
				temp=0xc0;
			else if(capcity>=19)
				temp=0x80;
			if(i==0 || i==6)
				dis_buf[i]=0xe0;
			else if(i==3)
				dis_buf[i]=temp;
			else
				dis_buf[i]=0x20+temp;

		}
		else if(i>6 && i<14)
		{
			temp=0;
			if(capcity>10)
			{
				if(capcity>=18)
					capcity=18;
				k=capcity-11;
				temp=0x00;
				while(k)
				{
					temp|=(1<<k);
					k--;
				}
				if(capcity==18)
					temp|=1;


			}
			if(i==7 || i==13)
				dis_buf[i]=0xff;
			else 
				dis_buf[i]=temp;
		

		}
		else if(i>13 && i<21)
		{
			temp=0;
			if(capcity>3)
			{
				if(capcity>=10)
					capcity=10;
				k=capcity-3;
				temp=0x00;
				while(k)
				{
					temp|=(1<<k);
					k--;
				}
				if(capcity==10)
					temp|=1;


			}
			if(i==14 || i==20)
				dis_buf[i]=0xff;
			else 
				dis_buf[i]=temp;
		

		}
		else
		{
			temp=0;
			if(capcity>=2)
				temp=0x03;
			else if(capcity>=1)
				temp=0x02;
			if(i==21 || i==27)
				dis_buf[i]=0x07;
			else if(i==24)
				dis_buf[i]=0+temp;
			else
				dis_buf[i]=0x04+temp;
		}
	}
	//画图
	for(i=0;i<28;i++)
	{
		temp= dis_buf[i];
		convert_buf[i]=0;
		for(j=0;j<8;j++)
		{
			convert_buf[i]|=((temp>>j)&0x01)<<(7-j);
		}
		
		
	}
	for(j=0;j<4;j++)
	{
		Set_Lcd_Page(2+j,121);
		
		for(i=0;i<7;i++) 
		{
			
			LCD_Data_Write(convert_buf[7*j+i]);
			
		}	
	}
	

}
void Lcd_Contr_Adjust(uint8 Level)
{
	
	uint8   cursor;
	uint8   cur_num;
	uint8   temp;
	uint8   dis_buf[122];
	uint8   convert_buf[122];
	uint32  i,j,k;
	
	k=0;
	cur_num=0;
	for(i=0;i<122;i++)
	{
		if(i==0 || i==60 || i==61 || i==121)
		{
              dis_buf[i]=0xff;
			  if(i==61)
			  {
				  k=0;
				  cur_num=0;
			  }
		}
		else
		{
			if(i>0 && i<61)
			{
				cursor=0;
				if(i>1 && i<59)
				{
					if(k<6 && (cur_num<Level))
						cursor=0xfc;
					k++;
					if(k>=7)
					{
						k=0;
						cur_num++;
					}
					
				}
				dis_buf[i]=0x01+cursor;
			}
			else
			{
				
				cursor=0;
				if(i>62 && i<119)
				{
					if(k<6 && (cur_num<Level))
						cursor=0x3f;
					k++;
					if(k>=7)
					{
						k=0;
						cur_num++;
					}
					
				}
				dis_buf[i]=0x80+cursor;
			}
		}
	
	}
	for(i=0;i<122;i++)
	{
		temp= dis_buf[i];
		convert_buf[i]=0;
		for(j=0;j<8;j++)
		{
			convert_buf[i]|=((temp>>j)&0x01)<<(7-j);
		}
		
		
	}
	for(j=0;j<2;j++)
	{
		Set_Lcd_Page(2+j,30);
			
		for(i=0;i<61;i++)
		{
			
			LCD_Data_Write(convert_buf[61*j+i]);
		}
	}
	gbchar_disp8(2,18, '-',0,0);
	gbchar_disp8(2,30, '+',1,0);

}
//start:开始的坐标,end:结束的坐标
void Display_WaitCard(uint8 wait)
{
	uint8   cursor;
	uint8   cur_num;
	uint8   temp;
	uint8   dis_buf[244];
	uint8   convert_buf[244];
	uint32  i,j,k;
	
	k=0;
	cur_num=0;
	for(i=0;i<244;i++)
	{
		if(i==0 || i==121 || i==122 || i==243)
		{
              dis_buf[i]=0xff;
			  if(i==122)
			  {
				  k=0;
				  cur_num=0;
			  }
		}
		else
		{
			if(i>0 && i<122)
			{
				cursor=0;
				if(i>1 && i<120)
				{
					if(k<6 && (cur_num<wait))
						cursor=0xfc;
					k++;
					if(k>=7)
					{
						k=0;
						cur_num++;
					}
					
				}
				dis_buf[i]=0x01+cursor;
			}
			else
			{
				
				cursor=0;
				if(i>123 && i<242)
				{
					if(k<6 && (cur_num<wait))
						cursor=0x3f;
					k++;
					if(k>=7)
					{
						k=0;
						cur_num++;
					}
					
				}
				dis_buf[i]=0x80+cursor;
			}
		}
	
	}
	for(i=0;i<244;i++)
	{
		temp= dis_buf[i];
		convert_buf[i]=0;
		for(j=0;j<8;j++)
		{
			convert_buf[i]|=((temp>>j)&0x01)<<(7-j);
		}
		
		
	}
	for(j=0;j<2;j++)
	{
		Set_Lcd_Page(2+j,3);
			
		for(i=0;i<122;i++)
		{
			
			LCD_Data_Write(convert_buf[122*j+i]);
		}
	}
   

}
void Display_Work_Mode(uint8 workMode)
{
	uint8 i,j,k;
	if(workMode==1 || workMode==2)
	{
		for(j=0;j<4;j++)
		{
			
			Set_Lcd_Page(2+j,0);
			for(i=0;i<120;i++) 
			{
				
				LCD_Data_Write(0x00);
				
			}	
		}
		if(System_Para.Language_Select ==LANGUAGE_ENGLISH)
		{
			for(k=0;k<4;k++)
			{
				for(j=0;j<4;j++)
				{
					
					Set_Lcd_Page(2+j,64+k*14);
					for(i=0;i<14;i++) 
					{
						
						LCD_Data_Write(Time_32_32_En[56*k+14*j+i]);
						
					}	
				}
			}
		}
		else
		{
			for(j=0;j<4;j++)
			{
				
				Set_Lcd_Page(2+j,64);
				for(i=0;i<32;i++) 
				{
					
					LCD_Data_Write(Time_32_32[32*j+i]);
					
				}	
			}
		}
		
	}
	if(workMode==1)
	{//下班
		if(System_Para.Language_Select ==LANGUAGE_ENGLISH)
		{
			for(k=0;k<3;k++)
			{
				for(j=0;j<4;j++)
				{
					
					Set_Lcd_Page(2+j,6+k*14);
					for(i=0;i<14;i++) 
					{
						
						LCD_Data_Write(Down_32_32_En[56*k+14*j+i]);
						
					}	
				}
			}
		}
		else
		{
			for(j=0;j<4;j++)
			{
				
				Set_Lcd_Page(2+j,16);
				for(i=0;i<32;i++) 
				{
					
					LCD_Data_Write(Down_32_32[32*j+i]);
					
				}	
			}
		}
	}
	else if(workMode==2)
	{//上班
		if(System_Para.Language_Select ==LANGUAGE_ENGLISH)
		{
			for(k=0;k<2;k++)
			{
				for(j=0;j<4;j++)
				{
					
					Set_Lcd_Page(2+j,20+k*14);
					for(i=0;i<14;i++) 
					{
						
						LCD_Data_Write(Up_32_32_En[56*k+14*j+i]);
						
					}	
				}
			}
		}
		else
		{
			for(j=0;j<4;j++)
			{
				
				Set_Lcd_Page(2+j,16);
				for(i=0;i<32;i++) 
				{
					
					LCD_Data_Write(Up_32_32[32*j+i]);
					
				}	
			}
		}
	}
}
void gbhz_disp32_12(unsigned char pag,unsigned char col,unsigned char mode)
{
    uint32  j=0,i=0;    
	uint8   oribuf[96]; 
	
	
	
	for(i=0;i<48;i++)
	{
		if(mode==1)
			oribuf[i]=Char_32_12[i];
		else
			oribuf[i]=0x00;
		
	}
	
	
	for(j=0;j<4;j++)
	{
		
		Set_Lcd_Page(pag+j,col);
		for(i=0;i<12;i++) 
		{
			
			LCD_Data_Write(oribuf[12*j+i]);
			
		}	
		LCD_Data_Write(0x00);
		LCD_Data_Write(0x00);
		LCD_Data_Write(0x00);
		LCD_Data_Write(0x00);
	}
	
}  
void gbhz_disp32(unsigned char pag,unsigned char col, unsigned char hzk )
{
    uint32  j=0,i=0;    
	uint8   oribuf[96]; 
	
	
	j= hzk;
	for(i=0;i<96;i++)
	{
		oribuf[i]=Char_32_24[96*j+i];
	}	
	
	for(j=0;j<4;j++)
	{
		Set_Lcd_Page(pag+j,col);
		for(i=0;i<24;i++) 
		{
			
			LCD_Data_Write(oribuf[24*j+i]);
			
		}	
	}
	
}
void gbhz_disp16(unsigned char pag,unsigned char col, unsigned char *hzk,uint8 disMod )
{
	unsigned int i=0,j=0;
	unsigned int  ziku_addr;	
	unsigned char temp_char;
	
	unsigned char oribuf[32]; 
	unsigned char chgbuf[32];
	
	
	if(System_Para.Language_Select ==LANGUAGE_CHINESE)
		ziku_addr=(long)32*(long)((long)(hzk[0]-0xa1)*94+(hzk[1]-0xa1));
	else 
		ziku_addr=FANTI_ZIKU_ADDRESS+(long)32*(long)((long)(hzk[0]-0xa1)*94+(hzk[1]-0xa1));

	Read_Nf_Data(ziku_addr,oribuf,32);
	
    
	
	for(i=0;i<8;i++)
	{
		chgbuf[0+i]=  (((oribuf[0] &(0x80>>(i)))<<i)>>7)|(((oribuf[2] &(0x80>>(i)))<<i)>>6)
			|(((oribuf[4] &(0x80>>(i)))<<i)>>5)|(((oribuf[6] &(0x80>>(i)))<<i)>>4)
			|(((oribuf[8] &(0x80>>(i)))<<i)>>3)|(((oribuf[10]&(0x80>>(i)))<<i)>>2)
			|(((oribuf[12]&(0x80>>(i)))<<i)>>1)|(((oribuf[14]&(0x80>>(i)))<<i)>>0);
		
		chgbuf[8+i]=  (((oribuf[1] &(0x80>>(i)))<<i)>>7)|(((oribuf[3] &(0x80>>(i)))<<i)>>6)
			|(((oribuf[5] &(0x80>>(i)))<<i)>>5)|(((oribuf[7] &(0x80>>(i)))<<i)>>4)
			|(((oribuf[9] &(0x80>>(i)))<<i)>>3)|(((oribuf[11]&(0x80>>(i)))<<i)>>2)
			|(((oribuf[13]&(0x80>>(i)))<<i)>>1)|(((oribuf[15]&(0x80>>(i)))<<i)>>0);
		
		chgbuf[16+i]= (((oribuf[16]&(0x80>>(i)))<<i)>>7)|(((oribuf[18]&(0x80>>(i)))<<i)>>6)
			|(((oribuf[20]&(0x80>>(i)))<<i)>>5)|(((oribuf[22]&(0x80>>(i)))<<i)>>4)
			|(((oribuf[24]&(0x80>>(i)))<<i)>>3)|(((oribuf[26]&(0x80>>(i)))<<i)>>2)
			|(((oribuf[28]&(0x80>>(i)))<<i)>>1)|(((oribuf[30]&(0x80>>(i)))<<i)>>0);
		
		chgbuf[24+i]= (((oribuf[17]&(0x80>>(i)))<<i)>>7)|(((oribuf[19]&(0x80>>(i)))<<i)>>6)
			|(((oribuf[21]&(0x80>>(i)))<<i)>>5)|(((oribuf[23]&(0x80>>(i)))<<i)>>4)
			|(((oribuf[25]&(0x80>>(i)))<<i)>>3)|(((oribuf[27]&(0x80>>(i)))<<i)>>2)
			|(((oribuf[29]&(0x80>>(i)))<<i)>>1)|(((oribuf[31]&(0x80>>(i)))<<i)>>0);
	}
	for(i=0;i<32;i++)
	{
		temp_char= chgbuf[i];
		oribuf[i]=0;
		for(j=0;j<8;j++)
		{
			oribuf[i]|=((temp_char>>j)&0x01)<<(7-j);
		}
		
		
	}
	for(j=0;j<2;j++)
	{
		Set_Lcd_Page(pag+j,col);
		for(i=0;i<16;i++) 
		{
			
			if(disMod==0)
				LCD_Data_Write(oribuf[16*j+i]);
			else
				LCD_Data_Write(~oribuf[16*j+i]);
			
		}	
	}

	
}
//////////////////////////////////////////
///////////////////////////////////////////
///////////////////////////////////////////

// 显示标准字库字符8*16
void gbchar_disp8(unsigned char pag,unsigned char col, unsigned char hzk,uint8 left,uint8 disMod)
{
    unsigned int j=0,i=0;
    unsigned long addtemp;
    unsigned char oribuf[16];
    
    
    unsigned int x;    
    addtemp=hzk*16;
    x = (hzk-0x20)*0x10;
    //OS_ENTER_CRITICAL();   
	//提取字模,列扫描
	for(i=0;i<16;i++)
	{
		
		
		oribuf[i]=ASCIIchardot[i+x];
		
		
	}
	
	for(j=0;j<2;j++)
	{
		
		Set_Lcd_Page(pag+j,col+left*64);
		
		for(i=0;i<8;i++) 
		{
			
			if(disMod==0)
				LCD_Data_Write(oribuf[8*j+i]);
			else
				LCD_Data_Write(~oribuf[8*j+i]);
			
		}	
	} 
	
}

unsigned char  Dis_GbStr(unsigned char hang,unsigned char lie, char *str,uint16 disMod/*需要反显的字,列*/)
{
	unsigned char c;

⌨️ 快捷键说明

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