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

📄 单独compute lce128642.c

📁 12864的LCD驱动程序加仿真,可以运行和调整的,自己弄得,大家批判了
💻 C
📖 第 1 页 / 共 2 页
字号:
col++;
if (col==LCMLIMIT){ col=0;row++;row++;} /*下一列,如果列越界换行*/
if (row>6) row=0; /*如果行越界,返回首行 */
} /*上半个字符输出结束 */

/*下半个字符输出,16列 */
col = bakerx;
row = bakery+1;
for(i=0;i<16;i++) /*下半部分*/
{
Wrdata(Hzk[x]);
x++;
col++;
if (col==LCMLIMIT){col=0;row++;row++;} /*下一列,如果列越界换行*/
if (row>7) row=1; /*如果行越界,返回首行 */
} /*下半个字符输出结束 */
row = bakery;
} /*整个字符输出结束 */

/****************************************/
/* 清屏,全屏幕清零 */
/****************************************/
void Lcmcls( void )
{
for(row=0;row<8;row++)
    for(col=0;col<LCMLIMIT;col++) Wrdata(0);
}

/****************************************/
/*  从液晶片上读数据,保留在全局变量中 */
/****************************************/

void Rddata(void)
{
Locatexy(); /*坐标定位,返回时保留分区状态不变 */
Datalcm=0xFF;
Dilcm = 1; 
Rwlcm=1; /*读数据*/
Elcm = 1; /*读入到LCM*/
_nop_();
cbyte = Datalcm; /*虚读一次 */
Elcm = 0;
Locatexy(); /*坐标定位,返回时保留分区状态不变 */
Datalcm=0xFF;
_nop_();
Dilcm = 1; /*数据*/
Rwlcm = 1; /*读数据*/
Elcm = 1; /*读入到LCM*/
_nop_();
cbyte = Datalcm; /*从数据口读数据,真读 */
Elcm = 0;
}

/****************************************/
/* 数据写输出 */
/****************************************/

void Wrdata(Uchar X)
{
Locatexy(); /*坐标定位,返回时保留分区状态不变 */
// wtcom();
Dilcm = 1; /*数据输出*/
Rwlcm = 0; 
Datalcm = X; /*数据输出到数据口 */
Elcm = 1; /*读入到LCM*/
_nop_();
Elcm = 0;
}


/********************************/
/* 命令输出到左区控制口 */
/********************************/

void WrcmdL(Uchar X)
{
lcdbusyL(); /*确定分区,返回时保留分区状态不变*/
Dilcm = 0; /*命令操作 */
Rwlcm = 0; /*写输出   */
Datalcm = X; /*数据输出到数据口 */
Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
}

/********************************/
/* 命令输出到中区控制口 */
/********************************/

void WrcmdM(Uchar X)
{
//lcdbusyM(); /*确定分区,返回时保留分区状态不变*/
Dilcm = 0; /*命令操作 */
Rwlcm = 0; /*写输出   */
Datalcm = X; /*命令输出到数据口 */
Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
}

/********************************/
/* 命令输出到右区控制口 */
/********************************/

void WrcmdR(Uchar X)
{
lcdbusyR(); /*确定分区,返回时保留分区状态不变 */
Dilcm = 0; /*命令操作 */
Rwlcm = 0; /*写输出   */
Datalcm = X; /*命令输出到数据口 */
Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
}

/********************************************************/
/* 分区操作允许等待,返回时保留分区选择状态 */
/********************************************************/
void lcdbusyL(void)
{
        CS1LCM = 0; /*CLR CS1 */
        CS2LCM = 1; /*SETB CS2 */
//        CS3LCM = 1; /*SETB CS3 */
wtcom(); /* waitting for enable */
}


void lcdbusyR(void)
{
        CS1LCM = 1; /*SETB CS1 */
        CS2LCM = 0; /*SETB CS2 */
//        CS3LCM = 0; /*CLR CS3 */
wtcom(); /* waitting for enable */
}

void wtcom(void)
{
Dilcm = 0; /*CLR DI */
Rwlcm = 1; /*SETB RW */
        Datalcm = 0xFF; /*MOV DATA_LCM,#0FFH  */
   Elcm  = 1;_nop_(); 
       //while(Datalcm & Lcdbusy);
		 Delay(1);
       Elcm  = 0;
}

/********************************************************/
/*根据设定的坐标数据,定位LCM上的下一个操作单元位置 */
/********************************************************/
void Locatexy(void)
{
unsigned char  x,y;
switch (col&0xc0) /*  col.and.0xC0 */
{ /*条件分支执行 */
case 0: {lcdbusyL();break;} /*左区 */
//case 0x40: {lcdbusyM();break;} /*中区 */
case 0x40: {lcdbusyR();break;} /*右区 */
}
x = col&0x3F|SETX; /*  col.and.0x3f.or.setx */
y = row&0x07|SETY; /*  row.and.0x07.or.sety */
wtcom(); /*  waitting for enable */
Dilcm = 0; /*CLR DI */
Rwlcm = 0; /*CLR RW */
Datalcm = y; /*MOV P0,Y */
Elcm = 1;_nop_();Elcm = 0;
wtcom(); /*  waitting for enable */
Dilcm = 0; /*CLR DI */
Rwlcm = 0; /*CLR RW */
Datalcm = x; /*MOV P0,X */
Elcm = 1;_nop_();Elcm = 0;
}

/********************************/
/*液晶屏初始化 */
/********************************/

void Lcminit(void)
{
cbyte = DISPOFF; /*关闭显示屏 */
WrcmdL(cbyte);
WrcmdM(cbyte);
WrcmdR(cbyte);
cbyte = DISPON; /*打开显示屏 */
WrcmdL(cbyte);
WrcmdM(cbyte);
WrcmdR(cbyte);
cbyte = DISPFIRST; /*定义显示起始行为零 */
WrcmdL(cbyte);
WrcmdM(cbyte);
WrcmdR(cbyte);
Lcmcls();
col=0; /*清屏 */
row=0;
Locatexy();
}
/********************************/
/* 延时 */
/********************************/
void Delay(Uchar MS)
{
Uchar us,usn;
while(MS!=0)
{ usn = 4;
while(usn!=0)
{
us=0xf0;
while (us!=0){us--;};
usn--;
}
MS--;
}
}

/********************************/
//定义字符串数组 */
/********************************/


Uchar  const STRh1[]={0x80,0x81};
Uchar  const STRh2[]={0x82,0x85};
Uchar  const STRh3[]={0x83,0x85};
Uchar  const STRh4[]={0x84,0x85};


/********************************/
/*  定义中文字库 */
/********************************/



void display(void)
{col=0x40;
row=0;
Putstr(STRh1,2);
       /*第一行字符输出,24字节 */

col=0;
row=2;
Putstr(STRh2,2); /*第二行字符输出,12字节 */
Putstr(dot2,1);

computehou(datahou);
Putstr(disdatahou,4);

col=0;
row=4;
Putstr(STRh3,2); /*第三行字符输出,24字节 */
Putstr(dot2,1);
computezuo(datazuo);
Putstr(disdatazuo,4);

col=0;
row=6;
Putstr(STRh4,2); /*第三行字符输出,24字节4 */
Putstr(dot2,1);
computeyou(datayou);
Putstr(disdatayou,4);
}

 void compute(Uchar *disdata,Uchar shuju)
      {Uchar temp;
		 //Uchar shuju;
		disdata[2]=11;
		disdata[3]=shuju%10;

		temp=shuju-(shuju%10);
		temp=temp/10;
		disdata[1]=temp%10;
		if(shuju>199)
		disdata[0]=1;
		else 
	   disdata[0]=0;
		}
		 
		 void computehou(Uchar datahou)
      {Uchar temp;
		 Uchar *p;
		 p=disdatahou;

		 //Uchar shuju;
		 p[2]=11;
		 p[3]=(datahou)%10;

		temp=datahou-(datahou%10);
		temp=temp/10;
		p[1]=temp%10;
		if(datahou>99)
		p[0]=1;
		else 
	   p[0]=0;
		}
		 
		void computezuo(Uchar datazuo)
      {Uchar temp;
		 //Uchar shuju;
		 Uchar *p1;
		 p1=disdatazuo;
		 p1[2]=11;
		 p1[3]=datazuo%10;

		temp=datazuo-(datazuo%10);
		temp=(temp/10);
	   p1[1]=(temp%10);
		if(datazuo>99)
	   p1[0]=1;
		else 
	    p1[0]=0;
		}

		void computeyou(Uchar datayou)
      {Uchar temp;
		 //Uchar shuju;
		 Uchar *p2;
		 p2=disdatayou;

		p2[2]=11;
		 p2[3]=datayou%10;

		temp=datayou-(datayou%10);
		temp=temp/10;
		p2[1]=temp%10;
		if(datayou>99)
		p2[0]=1;
		else 
	   p2[0]=0;
		}
		 

⌨️ 快捷键说明

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