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

📄 lcdio.c

📁 320*240液晶 用SEED1335控制的驱动
💻 C
字号:
#include <reg52.h>
#include <absacc.h>
#include "bb.h"	//汉字
#include "bb1.h"
#include "asc_168.h"
#define  wcadd1 XBYTE[0xc001]  /* 写指令代码地址 */
#define  wdadd1 XBYTE[0xc000]  /* 写参数及显示数据地址 */
#define  rdadd1 XBYTE[0xc001]  /* 读参数及显示数据地址 */
#define  rbadd1 XBYTE[0xc000]  /* 读忙状态地址 */
unsigned char code SYSTAB[8]={0x30,0x87,0x07,0x28,0x42,0xf0,0x28,0x00};
unsigned char code SCRTAB[10]={0x00,0x00,0xf0,0x80,0x25,0xf0,0x00,0x4b,0x80,0x70};
extern char xdata curx,cury;
extern bit cursta;
unsigned char code *pos1;
char xdata c2;
int addr1;

/************************/
/*   初始化子程序函数   */
/************************/
extern void CLEAR()
{
    unsigned int i;
    wcadd1=0x4c;   /* CSRDIR 代码 */
    wcadd1=0x46;   /* CSRW 代码 */
    wdadd1=0x80;   /* 设置参数光标指针低8位 */
    wdadd1=0x25;   /* 设置参数光标指针高8位 */
    wcadd1=0x42;   /* MWRITE 代码 */
         /*清64K的显示存储器*/
    for(i=0;i<9600;i++)     /*写入一行*/
	{
		wdadd1=0x00;     /* 写入数据 */
	}
}
extern void initlcd()
{
     unsigned char i;
     wcadd1=0x40;   /* SYSTEM SET代码 */
     for(i=0;i<8;i++)
        {
          wdadd1=SYSTAB[i];  /* 写入参数 */
        }
      wcadd1=0x44;   /* SCROLL代码 */
      for(i=0;i<10;i++)
      {
          wdadd1=SCRTAB[i];   /* 写入参数 */
      }
      wcadd1=0x5a;   /* HDOT SCR 代码 */
      wdadd1=0x00;   /* 设置参数P1 */
      wcadd1=0x5b;   /* OVLAY 代码 */
      wdadd1=0x0c;   /* 设置参数:显示一,三区为文本属性 */
            /* 调清屏子程序 */
      CLEAR();
      wcadd1=0x59;   /* 显示状态设置 */
      wdadd1=0x10;   /* 设置参数:显示一~四区开显示 */
}

/***************************/
/*  写汉字子程序(图形)函数 */
/***************************/
extern void wchar(char x,char y,char c,char c1,char mode)
{
	char i,j;
	int addr;
	unsigned char code *pos;
	if ((c&0x80)==0)
		pos=chzmk+(c-0x20)*0x10;
	else
		pos=cczmk+((int)(c&0x7f)*128+(int)(c1&0x7f))*0x20;
	pos1=pos;
	c2=c;
	wcadd1=0x4f;
	addr=(int)y+x*320+0x2580;//+x/2*40
	addr1=addr;
	for (i=0;i<2;i++)
	{
		wcadd1=0x46;
		wdadd1=(char)addr;     /* 设置光标地址CSR */
    	wdadd1=(char)(addr>>8);
    	wcadd1=0x42;    /* MWRITE 代码 */
		for (j=0;j<0x10;j++)
		{
			if(mode)
			wdadd1=~(*pos++);
			else
			wdadd1=(*pos++);
		}
		if ((c&0x80)==0)
			break;
		addr++;
	}
}
extern void print(char x,char y,char *s,char mode)
{
	char c,c1,i,j;
	i=x;j=y;
	while (1)
	{
		c=*s++;
		c1=1;
		if ((c&0x80)!=0)
		{
			c1=*s++;
			if (j>38)
			{
				j=y;
				i+=2;
			}
		}
		else
		if (c==0x0d)
		{
			i+=2;
			j=y;
			continue;
		}
		if ((c==0)||(c1==0))
			break;
		wchar(i,j++,c,c1,mode);
		if ((c&0x80)!=0)
			j++;
		if (j>39)  
		{
			j=y;
			i+=2;
		}
	}
}
/***************************/
/*	写大字程序	24*24字阵	*/
/***************************/
extern void wsmall(char x,char y,char c,char mode)
{
	char i,j; 
	int addr;
	unsigned char code *pos;
	if(c==0x20)
		pos=Dczmk+(0x3A-0x30)*0x30;
	else if (c==0x2E)
		pos=Dczmk+(0x3B-0x30)*0x30;
	else
		pos=Dczmk+(c-0x30)*0x30;// 数字0的ASII为0x30 一个数要0x30也就时三行
	wcadd1=0x4f;
	addr=(int)y+x*320+0x2580;//定位
	for (i=0;i<2;i++)	//分左右
	{
		wcadd1=0x46;
		wdadd1=(char)addr;     
	 	wdadd1=(char)(addr>>8);
	    wcadd1=0x42;    
		for (j=0;j<0x18;j++)		//48/2=0x30/2
		{
			if(mode)
				wdadd1=~(*pos++);
			else
			{
				wdadd1=(*pos++);
			}
		}
		addr++;
	}
}
extern void Dprint(char x,char y,char *s,char mode)
{
	char c,i,j;
	i=x;j=y;
	while (1)
	{
		c=*s++;
		if (c==0) break;
		wsmall(i,j,c,mode);
		j=j+2;
		if ((c&0x80)!=0)
			j++;
		if (j>38)			//一行最多19个大字	19*2
		{
			j=y;
			i+=3;
		}
	}
}
/********************************************************************************/
/*写大字程序   32*32字阵         */
/*extern void Lsmall(char x,char y,char c,char mode)
{
	char i,j; 
	int addr;
	unsigned char code *pos;
	if(c==0x20)
		pos=Lczmk+(0x3A-0x30)*0x40;
	else if (c==0x2E)
		pos=Lczmk+(0x3B-0x30)*0x40;
	else
		pos=Lczmk+(c-0x30)*0x40; // 数字0的ASII为0x30 一个数要0x40
	pos1=pos;
	c2=c;
	wcadd1=0x4f;
	addr=(int)y+x*320+0x2580;//定位
	for (i=0;i<2;i++)	//分左右
	{
		wcadd1=0x46;
		wdadd1=(char)addr;     
	 	wdadd1=(char)(addr>>8);
	    wcadd1=0x42;    
		for (j=0;j<0x20;j++)		//64/2=0x40/2
		{
			if(mode)
				wdadd1=~(*pos++);
			else
			{
				wdadd1=(*pos++);
				pos1=pos;
			}
		}
		addr++;
	}
}
extern void Lprint(char x,char y,char *s,char mode)
{
	char c,i,j;
	i=x;j=y;
	while (1)
	{
		c=*s++;
		if (c==0) break;
		c2=c;
		Lsmall(i,j,c,mode);
		j=j+3;
		if ((c&0x80)!=0)
			j++;
		if (j>39)			//一行最多13个大字 13*3
		{
			j=y;
			i+=4;
		}
	}
}
*/
/*
extern void SaveScr(char x1,char y1,char x2,char y2,unsigned int adr)
{
	unsigned int addr,addr1,num;
	char i,j,k,c;
	addr=(int)y1+x1*320+0x2580;//+x/2*40
	addr1=adr;
	num=(unsigned int)(x2-x1+1)*8;
	k=y2-y1+1;
	for (j=0;j<num;j++)
	{
		for (i=0;i<k;i++)
		{
			wcadd1=0x4f;
			wcadd1=0x46;
			wdadd1=(char)addr;     // 设置光标地址CSR
		    wdadd1=(char)(addr>>8);
			wcadd1=0x43;
			c=rdadd1;
			wcadd1=0x46;
			wdadd1=(char)addr1;     // 设置光标地址CSR 
		    wdadd1=(char)(addr1>>8);
		    wcadd1=0x42;  // MWRITE 代码 
			wdadd1=c;
		    addr++;
		    addr1++;
	 	}
		addr=addr+40-k;
	}	
}
*/
/*
extern void LoadScr(char x1,char y1,char x2,char y2,unsigned int adr)
{
	unsigned int addr,addr1,num;
	char i,j,k,c;
	addr=(int)y1+x1*320+0x2580;//+x/2*40
	addr1=adr;
	num=(unsigned int)(x2-x1+1)*8;
	k=y2-y1+1;
	for (j=0;j<num;j++)
	{
		for (i=0;i<k;i++)
		{
			wcadd1=0x4f;
			wcadd1=0x46;
			wdadd1=(char)addr1;     //设置光标地址CSR 
		    wdadd1=(char)(addr1>>8);
			wcadd1=0x43;
			c=rdadd1;
			wcadd1=0x46;
			wdadd1=(char)addr;     // 设置光标地址CSR 
		    wdadd1=(char)(addr>>8);
		    wcadd1=0x42;  // MWRITE 代码 
			wdadd1=c;
		    addr++;
		    addr1++;
	 	}
		addr=addr+40-k;
	}	
}	
*/
extern void clrscr(char line1,char line2)
{
	char i;
	for (i=line1;i<=line2;i++)
		print(i,1,"                                      ",0);
}
extern void SetPixel(unsigned char x,unsigned int y,char mod)
{
 	unsigned int addr;
	unsigned char i,c,d;
	addr=x*40+y/8+0x2580;
	wcadd1=0x4f;
	wcadd1=0x46;
	wdadd1=(char)addr;     /* 设置光标地址CSR */
    wdadd1=(char)(addr>>8);
    i=7-(y%8);
    d=0x01;
    d<<=i;
    wcadd1=0x43;
    c=rdadd1;
	wcadd1=0x46;
	wdadd1=(char)addr;     /* 设置光标地址CSR */
    wdadd1=(char)(addr>>8);
    wcadd1=0x42;  /* MWRITE 代码 */
    if (mod) 
    	wdadd1=c|d;
    else 
    	wdadd1=c&(d^0xff);
}
/*
extern void scrollup(char x,char y,unsigned char num)
{
 	unsigned int addr,addr1;
	unsigned char i,j,k;
	char xdata c;
	addr=(int)y+x*320+0x2580;//+x/2*40
	addr1=addr+640;
	k=40-y;
	num=num*16;
	for (j=0;j<num;j++)
	{
		for (i=0;i<k;i++)
		{
			wcadd1=0x4f;
			wcadd1=0x46;
			wdadd1=(char)addr1;     //设置光标地址CSR /
		    wdadd1=(char)(addr1>>8);
			wcadd1=0x43;
			c=rdadd1;
			wcadd1=0x46;
			wdadd1=(char)addr;     //设置光标地址CSR 
		    wdadd1=(char)(addr>>8);
		    wcadd1=0x42;  // MWRITE 代码 
			wdadd1=c;
		    addr++;
		    addr1++;
	 	}
		addr+=y;
		addr1+=y;
	}
}
*/
/*
extern void scrolldown(char x,char y,unsigned char num)
{
 	unsigned int addr,addr1;
	unsigned char i,j,k;
	char xdata c;
	addr=(int)y+x*320+0x2580;//+x/2*40
	addr1=addr-640;
	k=40-y;
	num=num*16;
	for (j=0;j<num;j++)
	{
		for (i=0;i<k;i++)
		{
			wcadd1=0x4f;
			wcadd1=0x46;
			wdadd1=(char)addr1;     // 设置光标地址CSR
		    wdadd1=(char)(addr1>>8);
			wcadd1=0x43;
			c=rdadd1;
			wcadd1=0x46;
			wdadd1=(char)addr;     // 设置光标地址CSR 
		    wdadd1=(char)(addr>>8);
		    wcadd1=0x42;  // MWRITE 代码 
			wdadd1=c;
		    addr++;
		    addr1++;
	 	}
		addr=addr-80+y;
		addr1=addr-640;
	}
}
*/
extern void xol(char x,char y,unsigned char len)
{
 	unsigned int addr;
	unsigned char i,j;
	char xdata c;
	addr=(int)y+x*320+0x2580;//+x/2*40
	for (j=0;j<16;j++)
	{
		for (i=0;i<len;i++)
		{
			wcadd1=0x4f;
			wcadd1=0x46;
			wdadd1=(char)addr;     // 设置光标地址CSR 
		    wdadd1=(char)(addr>>8);
			wcadd1=0x43;
			c=rdadd1;
			wcadd1=0x46;
			wdadd1=(char)addr;     // 设置光标地址CSR 
		    wdadd1=(char)(addr>>8);
		    wcadd1=0x42;  // MWRITE 代码 
			wdadd1=c^0xff;
		    addr++;
		}
		addr=addr+40-len;
	}
}
   
	
	
extern void LineY(x,y,len,mod)
unsigned int y,len;
unsigned char mod,x;
{
	int i;
	for (i=0;i<len;i++)
		SetPixel(x++,y,mod);
}
extern void LineX(x,y,len,mod)
unsigned int y,len;
unsigned char mod,x;
{
	int i;
	for (i=0;i<len;i++)
		SetPixel(x,y++,mod);
}

⌨️ 快捷键说明

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