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

📄 lcd320x240.c

📁 很有用的关于msp430单片机的很多很好的源程序
💻 C
📖 第 1 页 / 共 3 页
字号:
    data4=DATAPORT&0x00ff;    
//=================================    
    RD=1;      // rd=1  pb2
    E=1;       // ce=1  pb5
//=================================
    set_DB_out();
//================================= 
    return(data4);   
}
//==================================================
//==================================================
void clr_textram(void)
{
    unsigned int i;	
   write_lcd_command(0x4c);
   write_lcd_command(0x46);
   write_lcd_data(0);
   write_lcd_data(0);
   write_lcd_command(0x42);
   for(i=0;i<1200;i++)        
   {            
	   write_lcd_data(0x20);       // 文本区写数据  空格符  
	   ClrWdt();   
   }      
}
//==================================================
void clr_grphram(void)
{
    unsigned int i;	
   write_lcd_command(0x4c);
   write_lcd_command(0x46);
   write_lcd_data(0xb0);
   write_lcd_data(0x04);
   write_lcd_command(0x42);
   for(i=0;i<9600;i++)        
   {            
	   write_lcd_data(0x00);       // 图形区写数据  空格符  
	   ClrWdt();    
   }      
}
//==================================================
//==================================================
void lcm_init(void)
{
   unsigned int i,*p; 	
   Reset_lcd();
//---------------------------------
   p=&dataTAB1[0];
   write_lcd_command(0x0040);
   for(i=0;i<8;i++)        
   {            
	   write_lcd_data(*p++);      // 写系统设置数据        
   }    
   p=&dataTAB2[0];
   write_lcd_command(0x0044);
   for(i=0;i<10;i++)        
   {            
	   write_lcd_data(*p++);     // 写显示控制数据        
   }  
    write_lcd_command(0x005a);
    write_lcd_data(0x00);
    write_lcd_command(0x005b);
    write_lcd_data(0x0000);          //0c 
    clr_textram();
    clr_grphram();
    write_lcd_command(0x0059);
    write_lcd_data(0x14);            //text graph on 04 
     
//=================================		
}
//==================================================
//==================================================
void wr_cmd_2(unsigned int uCmd,unsigned int uPar)
{
   lcmcp=uCmd;
   write_lcd_command(lcmcp);  
   
   lcmdp= uPar&0x00ff;
   write_lcd_data(lcmdp);  
   lcmdp=uPar>>8;
   lcmdp&=0x00ff;
   write_lcd_data(lcmdp);
}
//==================================================
void wr_cmd_1(unsigned int uCmd,unsigned int uPar)
{
   lcmcp=uCmd;
   write_lcd_command(lcmcp);  
   lcmdp= uPar;
   write_lcd_data(lcmdp);  
}
//==================================================
void wr_cmd_0(unsigned int uCmd)
{
   lcmcp=uCmd;
   write_lcd_command(lcmcp);  
}
//==================================================
// 画水平线(Y1=Y2) X=8*i
//==================================================
void lineH(unsigned int y1,unsigned int x1,unsigned int y2,unsigned int x2)
{
   unsigned int i,ipos,length1,length2;
   ipos=y1*40+x1/8+1200; 
   length1=y2*40+x2/8+1200;
   length2=length1-ipos;
   wr_cmd_0(0x004c); 
   wr_cmd_2(0x0046,ipos); 
   wr_cmd_0(0x0042);
   for(i=0;i<length2;i++)
   {
    write_lcd_data(0x00ff); 
   }	
} 
//==================================================
//   画点
//==================================================
 void  pixel(unsigned int PointX,unsigned int PointY)
{    
	unsigned int i, StartAddr;    
	unsigned int dat,dat2,dat3;  
     
	StartAddr=PointY*40 + PointX/8 +1200;
     
	dat=(unsigned int)(7-PointX%8);        //产生点的数据  
	dat2=0x0001;  
	for(i=0;i<dat;i++) 
	{
		dat2<<=1;
	} 
 
	wr_cmd_0(0x004c); 
	wr_cmd_2(0x0046,StartAddr);           //读该点所在单元地址内容
	wr_cmd_0(0x0043);
	dat3=read_lcd_data();
	dat2|=dat3;	
 	
 	wr_cmd_0(0x004c); 
	wr_cmd_2(0x0046,StartAddr);           //设置该点所在单元地址    
	wr_cmd_1(0x0042,dat2);                // 画点位数据 	
}
//==================================================
//  画线(点--点)
//==================================================
void line(unsigned int y1,unsigned int x1,unsigned int y2,unsigned int x2)
{
	unsigned int x,y;    
	float k,b;    
	
	if( abs(y1-y2) <=  abs(x1-x2))            // |k|<=1    
	{        
		k=((float)y2-y1) / ((float)x2-x1) ;        
	    b=y1-k*x1;        
	         if( x1 <= x2 )        
	         {            
	         	for(x=x1;x<=x2;x++)            
	         	{                
	         		y=(unsigned int)(k*x+b);                
	         		pixel(x, y);            
	         	}        
	         }        
	         else
             {            
             	for(x=x2;x<=x1;x++)            
             	{                
             		y=(unsigned int)(k*x+b);                
             		pixel(x, y);            
             	}        
             }    
	}    
	else                                       
	{        
		k=((float)x2-x1) / ((float)y2-y1) ;        
		b=x1-k*y1;        
		if( y1 <= y2 )        
		{            
			for(y=y1;y<=y2;y++)            
			{                
				x=(unsigned int)(k*y+b);                
				pixel(x , y);
	        }        
		}        
		else        
		{            
			for(y=y2;y<=y1;y++)            
			{                
				x=(unsigned int)(k*y+b);                
				pixel(x , y);            
			}        
		}    
	}
}	
//================================================= 
//  显示8*16点阵字符
//=================================================
void showchar8(unsigned int col,unsigned int row,unsigned int chp,unsigned int attribute)
{	
	unsigned int  i,j,char_data,*p;    
            p=&HZ8_DOT_LIB[0];
            chp=chp*16;
            p=p+chp;             
	        col/=8;  		 		         
//========================================= 	 	        
//          显示中文
//=========================================  
	 	if(attribute)
	 	{            
	 	    
	 		for(j=0;j<16;j++)
	 		{	 			
		            char_addr_point_set(row,col);  //设置Vram地址
	 	            write_lcd_command(0x0042);  
	 	            
		            char_data=*p++;  	            
		            write_lcd_data(char_data);          		   	                	          	         
		           
		           row+=1;
		           ClrWdt();   	      	                			 		       
	 		}
	 	}
	 	else
	 	{	 		 
	 	    for(j=0;j<16;j++)
	 		{	 	           
	 			    char_addr_point_set(row,col);  //设置Vram地址
	 	            write_lcd_command(0x0042);
		            char_data=*p++;      
		   	        char_data^=0x00ff;
		   	        write_lcd_data(char_data);    	   	                 	         	    	        	 		                    
		             row+=1;
		            ClrWdt();  			 	
	 		}
	 	}		   	     
}   
//==================================================
// //  显示16*16点阵字符
//==================================================
void showchar16(unsigned int col,unsigned int row,unsigned int chp,unsigned int attribute)
{	
	unsigned int  i,j,char_data,*p;    
            p=&HZ16_DOT_LIB[0];
            chp=chp*32;
            p=p+chp;             
	        col/=8;  		 		         
//========================================= 	 	        
//          显示中文
//=========================================  
	 	if(attribute)
	 	{            
	 	    
	 		for(j=0;j<16;j++)
	 		{	 			
		            char_addr_point_set(row,col);  //设置Vram地址
	 	            write_lcd_command(0x0042);  
	 	            
		            char_data=*p++;  	           //左8位
		            write_lcd_data(char_data);          		   	                	         
	    	        char_data=*p++;  		       //右8位       
		            write_lcd_data(char_data);
		           
		           row+=1;
		           ClrWdt();  	      	                			 		       
	 		}
	 	}
	 	else
	 	{	 		 
	 	    for(j=0;j<16;j++)
	 		{	 	           
	 			    char_addr_point_set(row,col);  //设置Vram地址
	 	            write_lcd_command(0x0042);
		            char_data=*p++;      
		   	        char_data^=0x00ff;
		   	        write_lcd_data(char_data);    	   	                 	         
	    	        char_data=*p++;  
	    	        char_data^=0x00ff;	
	    	        write_lcd_data(char_data);  	 		        
		             
		             row+=1;
		            ClrWdt();  			 	
	 		}
	 	}		   	     
}   
//==================================================
void char_addr_point_set( unsigned int urow,unsigned int ucol)
{
   unsigned int ipos;
   ipos=urow*40+ucol+1200; 
   wr_cmd_0(0x004c); 
   wr_cmd_2(0x0046,ipos);        
}
//==================================================
//    显示24*24点阵字符
 //==================================================
void delaya(unsigned int dat)
{
	unsigned int i,j,datnum;
	datnum=dat;
	for(i=0;i<datnum;i++)
	{
		for (j=0;j<1000;j++)
		{
			ClrWdt();
		}
	}		
}
//==================================================
//eof
//==================================================

⌨️ 快捷键说明

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