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

📄 lcd.c

📁 dsp 控制sed1330的 程序 直接可以调用
💻 C
📖 第 1 页 / 共 2 页
字号:
/***************************************************************/
/*   LCD--DM50174(302*240 POINT IC-SEC1330) OF ALL PROGRAM     */       
/***************************************************************/
#include	 "init.h"
ioport	unsigned int	port2000;
ioport	unsigned int	port2001; 
 
#define		Lcd_wc		port2001	 /*LCD写指令*/
#define 	Lcd_wd		port2000	 /*LCD写参数*/
#define		Lcd_rs		port2000
#define		Lcd_rd		port2001  
unsigned int	Lcd_Systab[]=
		{0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00};
unsigned int	Lcd_Scrtab[]=
		{0x00,0x00,0xf0,0x00,0x40,0xf0,0x00,0x80,0x00,0x00};  
extern unsigned int Ascii[13][16];  

#define		SYSTEM_SET	0x40	/*初始化设置*/
#define		SCROLL		0x44	/*显示域设置*/
#define		SLEEP_IN	0x53	/*休闲模式设置*/
#define		DISP_ON		0x59	/*显示状态设置显示开*/
#define		DISP_OFF	0x58	/*显示关*/
#define		OVLAY		0x5b	/*显示合成设置*/
#define		HDOT_SCR	0x5a	/*点位移设置*/
#define		CSRFORM		0x5d	/*光标形状设置*/
#define		CGRAM_ADR	0x5c	/*CGRAM首址设置*/
#define		CSRDIR_RG	0x4c	/*光标移动方式设置光标右移*/
#define		CSRDIR_LF	0x4d	/*光标左移*/
#define		CSRDIR_UP	0x4e	/*光标上移*/
#define		CSRDIR_DW	0x4f	/*光标下移*/
#define		CSRW		0x46	/*光标指针设置*/
#define		CSRR		0x47	/*读取光标指针*/
#define		MWRITE		0x42	/*数据写入设置*/
#define		MREAD		0x43	/*数据读取设置*/
#define LCDWAIT	Wait;Wait; Wait;Wait;
#define		Lcd_AP		0x28	/*显示屏一行所占字节数*/
typedef 	volatile unsigned int pointer; /*定义指针类型*/

/************************************************/
/*						*/
/*	Lcd_Clear:	清显示区子程序		*/
/*						*/
/*	Data_Add1:	显示区首址		*/
/*	Data_Add2:	显示区末址		*/
/*	Data:		显示数据		*/
/*						*/
/************************************************/

void	Lcd_Clear(unsigned int Data_Add1,unsigned int Data_Add2,unsigned int Data)
{unsigned int 	Counter;
	Lcd_wc=CSRDIR_RG;	LCDWAIT 
	Lcd_wc=CSRW;	LCDWAIT;
		Lcd_wd=0x00;	LCDWAIT;
		Lcd_wd=0x00;		LCDWAIT;
	Lcd_wc=MWRITE;		LCDWAIT;
	for(Counter=Data_Add1;Counter<Data_Add2;Counter++)	
		{
			Lcd_wd=Data;
				LCDWAIT;
		}
	Lcd_wc=CSRDIR_DW;		LCDWAIT;
} 
/************************************************/
/*						*/
/*	Lcd_Init:	初始化液晶子程序	        */
/*						*/
/************************************************/
void Lcd_Init()
{ unsigned int	i;
 Lcd_wc=SYSTEM_SET; LCDWAIT;  LCDWAIT;
       for(i=0;i<8;i++)	
 	  {Lcd_wd=Lcd_Systab[i];
 	       	LCDWAIT; LCDWAIT;
 	  }
 Lcd_wc=SCROLL;		LCDWAIT;LCDWAIT;
       for(i=0;i<10;i++)
	  {
	   Lcd_wd=Lcd_Scrtab[i];
		    	LCDWAIT;  LCDWAIT;
	  }
 Lcd_wc=HDOT_SCR;   	LCDWAIT; LCDWAIT;
 Lcd_wd=0x00;	    	LCDWAIT; LCDWAIT;
 Lcd_wc=OVLAY;	   	LCDWAIT; LCDWAIT;
 Lcd_wd=0x08;      	LCDWAIT; LCDWAIT;
 
 Lcd_Clear(0,0x8000,0);  /*0x6580*/
 Lcd_wc=DISP_ON;		LCDWAIT;  LCDWAIT;
 	Lcd_wd=0x54;		LCDWAIT; /*0x54*/ LCDWAIT;
 Lcd_wc=CSRFORM;		LCDWAIT;  LCDWAIT;
 	Lcd_wd=0x07;		LCDWAIT;  LCDWAIT;
	Lcd_wd=0x87;		LCDWAIT;  LCDWAIT;
 Lcd_wc=CSRDIR_DW;		LCDWAIT;  LCDWAIT;
}/*============================================*/
/************************************************/
/*						*/
/*	Lcd_Pointer:	画点子程序		*/
/*						*/
/*	Dot_X:	x坐标(0-319)			*/
/*	Dot_Y:	y坐标(0-239)			*/
/*						*/
/************************************************/
void  Lcd_Point(unsigned int Dot_X,unsigned int Dot_Y)
{	unsigned int	Cursor_X,Cursor_Y;
	unsigned int	Counter;
	unsigned int	Read_Data,i;
	Counter=Dot_X&0x0007;
	Cursor_X=(Dot_Y*Lcd_AP+(Dot_X>>3)+0x4000)&0x00ff;
	Cursor_Y=((Dot_Y*Lcd_AP+(Dot_X>>3)+0x4000)&0xff00)>>8;
	Lcd_wc=CSRW;	LCDWAIT;
	Lcd_wd=Cursor_X;  LCDWAIT;
	Lcd_wd=Cursor_Y;  LCDWAIT;
	Lcd_wc=MREAD;	LCDWAIT;
	Read_Data=Lcd_rd&0x00ff;LCDWAIT;
	Lcd_wc=CSRW;	LCDWAIT; 
	Lcd_wd=Cursor_X;     LCDWAIT; 
	Lcd_wd=Cursor_Y;  	  LCDWAIT; 
	Lcd_wc=MWRITE; 	 LCDWAIT; 
    Lcd_wd=(0x80>>Counter)|Read_Data;
     LCDWAIT;
}/*==============================================*/
/************************************************/
/*						*/
/*	Lcd_Line:	划线子程序		*/
/*						*/
/*	(X0,Y0):	起始点坐标		*/
/*	(X1,Y1):	终止点坐标		*/
/*						*/
/*	X0,X1:	0-319				*/
/*	Y0,Y1:	0-239				*/
/*						*/
/************************************************/
void  Lcd_Line(unsigned int X0,unsigned int Y0,unsigned int X1,unsigned int Y1)
{	unsigned int	Cursor_X,Cursor_Y;
	unsigned int	Counter,Dot_Type;                         
	unsigned int	Read_Data;
	double	k; 
	if(X0==X1)
		{if (Y0>Y1)	{Counter=Y0;Y0=Y1;Y1=Counter;}
		 if (Y1>=239)	Y1=239;
		 for (Counter=Y0;Counter<=Y1;Counter++)
		 	Lcd_Point(X0,Counter); 
		}
	else if(Y0==Y1)
		{if (X0>X1)	{Counter=X0;X0=X1;X1=Counter;}
		 if (X1>=319)	X1=319;
		 Cursor_X=(Y0*Lcd_AP+(X0>>3)+0x4000)&0x00ff;
		 Cursor_Y=((Y0*Lcd_AP+(X0>>3)+0x4000)&0xff00)>>8;
		 if ((X0>>3)==(X1>>3))
		  {	Dot_Type=0xff>>(X0&0x07);
		 	Read_Data=0xff<<(7-X1&0x07);
		 	Dot_Type=Dot_Type&Read_Data;
		 	Lcd_wc=CSRDIR_RG; LCDWAIT;	
		 	Lcd_wc=CSRW;	  LCDWAIT;
				Lcd_wd=Cursor_X;  LCDWAIT;
				Lcd_wd=Cursor_Y;LCDWAIT;	
		 	Lcd_wc=MREAD; LCDWAIT;  
			Read_Data=Lcd_rd&0x00ff;   LCDWAIT;
		    Lcd_wc=CSRW;	LCDWAIT;
			Lcd_wd=Cursor_X; LCDWAIT;
			Lcd_wd=Cursor_Y;  LCDWAIT;
			Lcd_wc=MWRITE;	    LCDWAIT;
			Lcd_wd=Dot_Type|Read_Data;	LCDWAIT;
		  }
		 else
		  { Dot_Type=0xff>>(X0&0x07);
		 	Lcd_wc=CSRDIR_RG;	LCDWAIT;
		 	Lcd_wc=CSRW;	    LCDWAIT;
			Lcd_wd=Cursor_X;	LCDWAIT;
			Lcd_wd=Cursor_Y;	LCDWAIT;
		 	Lcd_wc=MREAD;	    LCDWAIT;
			Read_Data=Lcd_rd&0x00ff;  LCDWAIT;	
			Lcd_wc=CSRW;	 LCDWAIT;
			Lcd_wd=Cursor_X;    LCDWAIT;
			Lcd_wd=Cursor_Y;    LCDWAIT;
		 	Lcd_wc=MWRITE;	    LCDWAIT;
		 	Lcd_wd=Dot_Type|Read_Data;   LCDWAIT;
		for (Counter=(X0>>3);Counter<((X1>>3)-1);Counter++)
		 		{Lcd_wd=0xff; LCDWAIT;
		 		}
		 Lcd_wc=CSRW;	   LCDWAIT;
		 Lcd_wd=Cursor_X+(X1>>3)-(X0>>3); LCDWAIT;		
		 Lcd_wd=Cursor_Y;LCDWAIT;	
		 Lcd_wc=MREAD;	  LCDWAIT; 
		 Read_Data=Lcd_rd&0x00ff;  LCDWAIT;
		 Lcd_wc=CSRW;   LCDWAIT;
		 Lcd_wd=Cursor_X+(X1>>3)-(X0>>3); LCDWAIT;
		 Lcd_wd=Cursor_Y;  LCDWAIT;
		 Lcd_wc=MWRITE;	  LCDWAIT;
		 Dot_Type=(0x00ff<<(7-X1&0x07))&0x00ff;
		 Lcd_wd=Dot_Type|Read_Data;	    LCDWAIT;
		 }
		}
    else if(abs((int)X1-(int)X0)>fabs((int)Y1-(int)Y0))
		{k=((double)Y1-(double)Y0)/((double)X1-(double)X0);      
 		 if (X0>X1)	
			{for(Cursor_X=X1;Cursor_X<=X0;Cursor_X++)
		 		{Cursor_Y=(int)((double)(Cursor_X-X1)*k+(double)Y1);
		 	 	 Lcd_Point(Cursor_X,Cursor_Y);
		 		}
			}
         else
		 	{for(Cursor_X=X0;Cursor_X<=X1;Cursor_X++)
		 		{Cursor_Y=(int)((double)(Cursor_X-X0)*k+(double)Y0);
		 	 	 Lcd_Point(Cursor_X,Cursor_Y);
		 		}
		 	}
		}				
    else
		{k=((double)X1-(double)X0)/((double)Y1-(double)Y0);      
 		 if (Y0>Y1)	
			{for(Cursor_Y=Y1;Cursor_Y<=Y0;Cursor_Y++)
		 		{Cursor_X=(int)((double)(Cursor_Y-Y1)*k+(double)X1);
		 	 	 Lcd_Point(Cursor_X,Cursor_Y);
		 		}
			}
         else
		 	{for(Cursor_Y=Y0;Cursor_Y<=Y1;Cursor_Y++)
		 		{Cursor_X=(int)((double)(Cursor_Y-Y0)*k+(double)X0);
		 	 	 Lcd_Point(Cursor_X,Cursor_Y);
		 		}
		 	}
		}				
}/*==============================================*/ 
void  Lcd_Point1(unsigned int Dot_X,unsigned int Dot_Y)
{	unsigned int	Cursor_X,Cursor_Y;
	unsigned int	Counter;
	unsigned int	Read_Data,i;
	Counter=Dot_X&0x0007;
	Cursor_X=(Dot_Y*Lcd_AP+(Dot_X>>3)+0x4000)&0x00ff;
	Cursor_Y=((Dot_Y*Lcd_AP+(Dot_X>>3)+0x4000)&0xff00)>>8;
	Lcd_wc=CSRW;	LCDWAIT;
	Lcd_wd=Cursor_X;  LCDWAIT;
	Lcd_wd=Cursor_Y;  LCDWAIT;
	Lcd_wc=MREAD;	LCDWAIT;
	Read_Data=Lcd_rd&0x00ff;LCDWAIT;

⌨️ 快捷键说明

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