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

📄 mega16lcdyxd240128t6963c.c

📁 Mega16驱动240×128 LCD(T6963c).c
💻 C
📖 第 1 页 / 共 3 页
字号:
	WrTwoParCmd(0x1E,0x00,GRAREA);		
	
	WrTwoParCmd(0x00,0x08,ADPSET);
	WrTwoParCmd(0x00,0x08,ADPSET);//No Repeat--False Code 
	while((ReadSta()&0x08)!=8);
	WriteCmd(AWRON);	
	for(i=0;i<(128*30);i++)
		WriteData(0);
	WriteCmd(AWROFF);		
}

void LcdInit(void)
{
	
	CE_CLR;
	FS_CLR;
	WR_SET;RD_SET;CD_SET;
	RST_CLR;
	delay(1000);
	RST_SET;
	
	LcdResetTxt();	
	LcdResetGr();

	WriteCmd(0xA0);
	WriteCmd(0x80);
	WriteCmd(0x9E);
//	WriteCmd(0x97);
	
//	WrCGRAM();

	WrTwoParCmd(0x00,0x00,ADPSET);
	WrTwoParCmd(0x00,0x00,CUPSET);
}
//******************************************************************************
// Use LCD Interior CGROM(5*8)---128 Char
//******************************************************************************
//Character Code Display--8*8
//x:0~29;  y:0~15 
void WrCharCode(uchar x,uchar y,uchar charcode) 
{ 
  	uint address; 
  	address=y*LCDCOLUMN+x; 
  	WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET);  //Set Display Ram Address 
  	WrOneParCmd(charcode,0xC4);  //Load Character Code,Address Non Variable 
//	address+=0x800;				//Text Attribute mode:blink
//	WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET);  
//  	WrOneParCmd(0x08,0xC4);
} 

uchar AsctoCharCode(uchar asc)
{
	uchar charcode;
	charcode=(asc<20)? 0:(asc-0x20);
	return charcode;
}

void WrCharStr(uchar x,uchar y,char charstr[])
{
	uchar i,len;
	
	len=strlen(charstr);
	for(i=0;i<len;i++) {
		WrCharCode(x,y,AsctoCharCode(charstr[i]) );
		if (x<LCDCOLUMN)x++;
		else
			{
			y++;
			x=0;
			}
	}
}
void WrNumeral(uchar x,uchar y,uchar grade,uint numeral)
{
	uchar i,g[5];
	uchar str[5];

	for(i=0;i<5;i++) {
		g[i]=numeral%grade;
		numeral/=grade;
		str[4-i]=(g[i]>9)?(g[i]+0x37):(g[i]+0x30);
	}
	for(i=0;i<5;i++) {					//clear high bit 0
		if (str[i]==0x30 && i!=4) 
			str[i]=0x00;
		else break;
	}
	for(i=0;i<5;i++) {
		WrCharCode(x,y,AsctoCharCode(str[i]) );
		if (x<LCDCOLUMN)x++;
		else {
			y++;
			x=0;
		}
	}
	
}
//******************************************************************************
// Display Self Define 16*16 Char (MCU)
//******************************************************************************
//Define Character Code Display---16*16
//x:0~29;  y:0~127 bit 8:Normal/reverse---0/1
void WrChChar(uchar x,uchar y,uchar ch_code) 
{ 
  	uchar i,data,data1; 
  	uint address; 
	
  	address=(y&0x7F)*LCDCOLUMN+x+0x0800;  
  	for(i=0;i<16;i++) {
		WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET);  //Set Display Ram Address
		data1=ChCode[ch_code][2*i];
		data=(y<127)? data1:~(data1);
		WrOneParCmd(data,0xC0);
		data1=ChCode[ch_code][2*i+1];
		data=(y<127)? data1:~(data1);
		WrOneParCmd(data,0xC0);
		address+=LCDCOLUMN;
  	}
}
void WrChCharStr(uchar x,uchar y,uchar chcharstr[],uchar len)
{
	uchar i;
	
	for(i=0;i<len;i++) {
		WrChChar(x,y,chcharstr[i]);
		if (x<LCDCOLUMN)x+=2;
		else
			{
			y+=2;
			x=0;
			}
	}
}
//******************************************************************************
// Display Geometry Graphics
//******************************************************************************
//Set/Clear Dot 
//x:0~239;  y:0~127 bit 8:set/clear
void WrDot(uchar x,uchar y) 
{ 
  	uchar x_pt,y_pt; 
  	uint address; 
  	x_pt=x;   
  	y_pt=y; 
  	address=(y_pt&0x7f)*30+x_pt/8+0x0800;  
  	WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET);  //Set Display Ram Address 
	x_pt=(~(x_pt%8))&0x07; 
  	y_pt=((y_pt&0x80)>>4)|0xf0; 
  	WriteCmd(x_pt|y_pt);  
}
//Display Line
//x:0~239;  y:0~127 
void WrLine(uchar xstar,uchar xend,uchar ystar,uchar yend)
{
  	uchar i;
	float k,b;
	k=(float)(yend-ystar)/(float)(xend-xstar);
	b=ystar-k*xstar; 
  	ystar+=128;  //Set Dot
  	yend+=128;   
  	for(i=xstar;i<=xend;i++) {  
    	WrDot(i,k*i+b);   
  	} 
}
//Display Rectangle 
//x:0~239;  y:0~127 
void WrRectangle(uchar xstar,uchar xend,uchar ystar,uchar yend) 
{ 
  	uchar i; 
  	ystar+=128;  
  	yend+=128;   
  	for(i=xstar;i<=xend;i++) {
    	WrDot(i,ystar);   
    	WrDot(i,yend); 
  	} 
  	for(i=ystar;i<=yend;i++) { 
  	  	WrDot(xstar,i); 
 		WrDot(xend,i); 
  	} 

} 
//******************************************************************************
// Display Special Effect ---Graphic
//******************************************************************************
//x:0~239;  y:0~127 
// wrong
void GrAreaReverse(uchar xstar,uchar xend,uchar ystar,uchar yend)
{
  	uchar x_pt,y_pt,i,j,data; 
  	uint address; 
  	x_pt=xstar;   
  	y_pt=ystar; 
  	address=(y_pt&0x7f)*30+x_pt/8+0x0800;  
	for(j=ystar;j<=yend;j++) {
		WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET);  //Set Display Ram Address
		for(i=xstar;i<=xend;i+=8) {
			WriteCmd(0xC5);
			data=~ReadData();
			WriteCmd(0xC0);
			WriteData(data);
		}
		address+=30;
	}	
	
}
//******************************************************************************
// Display Self Define 16*16 Char---CGRAM 
//******************************************************************************
void WrDefChar(uchar x,uchar y,uchar defcodenum)
{
	uint address,cgramnum;
	address=address=y*30+x;
	cgramnum=0x8A+(defcodenum<<2);
	WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET);  //Set Display Ram Address 
  	WrOneParCmd(cgramnum++,0xC0);
	WrOneParCmd(cgramnum++,0xC0);
	address+=30;
	WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET);  //Set Display Ram Address
	WrOneParCmd(cgramnum++,0xC0);
	WrOneParCmd(cgramnum,0xC0);
}

void WrDefCharStr(uchar x,uchar y,uchar defcharstr[],uchar len)
{
	uchar i;
	
	for(i=0;i<len;i++) {
		WrDefChar(x,y,defcharstr[i]);
		if (x<LCDCOLUMN)x+=2;
		else
			{
			y+=2;
			x=0;
			}
	}
}
//******************************************************************************
//Main
//******************************************************************************
void main (void)
{
	uint i,j,num;
	char charstr[30];
	uchar defcharstr[16]={BLANK};
	uint tt=0;

	SP=0x45f;
	McuInit();
	LcdInit();
	
	strcpy(charstr,"CHANGSHA HUNAN CHINA");
	WrCharStr(5,0,charstr);

	defcharstr[0]=ONE;
	defcharstr[2]=JIAN;
	defcharstr[3]=KONG;
	defcharstr[4]=HUA;
	defcharstr[5]=MIAN;
//	WrChCharStr(2,2*8,defcharstr,sizeof(defcharstr));
	WrChCharStr(2,2*8+128,defcharstr,6);
	defcharstr[0]=TWO;
	defcharstr[2]=CAN;
	defcharstr[3]=SHU;
	defcharstr[4]=SE1;
	defcharstr[5]=ZHI;
//	WrChCharStr(2,4*8,defcharstr,sizeof(defcharstr));
	WrChCharStr(2,4*8,defcharstr,6);
	defcharstr[0]=THREE;
	defcharstr[2]=XIN;
	defcharstr[3]=HAO;
	defcharstr[4]=CE;
	defcharstr[5]=SHI;
//	WrChCharStr(2,6*8,defcharstr,sizeof(defcharstr));
	WrChCharStr(2,6*8,defcharstr,6);
	defcharstr[0]=FOUR;
	defcharstr[2]=HUA1;
	defcharstr[3]=YANG;
	defcharstr[4]=BIAN;
	defcharstr[5]=ZHI1;
//	WrChCharStr(2,8*8,defcharstr,sizeof(defcharstr));
	WrChCharStr(2,8*8,defcharstr,6);
	defcharstr[0]=FIVE;
	defcharstr[2]=QUAN;
	defcharstr[3]=XIAN;
	defcharstr[4]=BLANK;
	defcharstr[5]=BLANK;	
//	WrChCharStr(2,10*8,defcharstr,sizeof(defcharstr));
	WrChCharStr(2,10*8,defcharstr,6);

	WrRectangle(170,200,62,72) ;
//	WrLine(170,200,62,72) ;
	num=0;
	while (1) {

		for(i=16;i>1;i--) {
			defcharstr[i-1]=defcharstr[i-2];
		}
		defcharstr[0]=defcharstr[15];
		WrChCharStr(0,10*8,defcharstr,sizeof(defcharstr));
		
		i=tt/30;
		j=tt%30;
		WrTwoParCmd(j,i,CUPSET);
		WrNumeral(20,6,10,tt);
		WrNumeral(20,8,16,tt);
		
		delay(1000);
		if (tt<480)tt++;	
		else tt=0;
		
		
	}
}
/*--------------------------------------------
			END
----------------------------------------------*/

⌨️ 快捷键说明

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