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

📄 lcd.c

📁 采用MPS430控制的项目
💻 C
📖 第 1 页 / 共 2 页
字号:
#define   _LCD_
#include  "..\Inc\includes.h"


uchar    const CCTAB0[]={0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00};
uchar    const CCTAB1[]={0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00};
uchar    const CCTAB2[]={0x00,0x0C,0x10,0x10,0x10,0x11,0x0E,0x00,0x00,0x18,0x28,0x48,0x88,0x08,0x18,0x00};
uchar    const CCTAB3[]={0x00,0x0C,0x10,0x11,0x11,0x12,0x0C,0x00,0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00};
uchar    const CCTAB4[]={0x00,0x01,0x02,0x04,0x1F,0x00,0x00,0x00,0x00,0xC0,0x40,0x48,0xF8,0x48,0x48,0x00};
uchar    const CCTAB5[]={0x00,0x1F,0x11,0x12,0x12,0x12,0x11,0x00,0x00,0x30,0x08,0x08,0x08,0x08,0xF0,0x00};
uchar    const CCTAB6[]={0x00,0x07,0x08,0x11,0x11,0x19,0x00,0x00,0x00,0xF0,0x88,0x08,0x08,0x08,0xF0,0x00};
uchar    const CCTAB7[]={0x00,0x1C,0x10,0x10,0x13,0x1C,0x10,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00};
uchar    const CCTAB8[]={0x00,0x0E,0x11,0x11,0x11,0x11,0x0E,0x00,0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00};
uchar    const CCTAB9[]={0x00,0x0F,0x10,0x10,0x10,0x09,0x07,0x00,0x00,0x00,0x98,0x88,0x88,0x10,0xE0,0x00};

uchar    const CCTAB10[]={0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00}; // -
uchar    const CCTAB11[]={0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00}; // :
uchar    const CCTAB12[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00}; //.
uchar    const CCTAB13[]={0x18,0x10,0x10,0x1F,0x10,0x10,0x18,0x00,0x00,0x00,0x04,0xFC,0x04,0x00,0x00,0x00}; // T
uchar    const CCTAB14[]={0x00,0x00,0x03,0x1B,0x0F,0x07,0x03,0x00,0x00,0x00,0x80,0xB0,0xE0,0xC0,0x80,0x00}; // ->
uchar    const CCTAB15[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04}; // _
uchar    const CCTAB16[]={0x04,0x04,0x03,0x1F,0x03,0x04,0x04,0x00,0x80,0x80,0x00,0xE0,0x00,0x80,0x80,0x00};//*
uchar    const CCTAB17[]={0x00,0x00,0x07,0x18,0x0E,0x01,0x00,0x00,0x10,0x70,0x90,0x80,0x80,0xD0,0x30,0x10};//A
uchar    const CCTAB18[]={0x10,0x1F,0x12,0x12,0x12,0x0D,0x00,0x00,0x10,0xF0,0x10,0x10,0x10,0x20,0xE0,0x00};//B
uchar    const CCTAB19[]={0x07,0x08,0x10,0x10,0x10,0x10,0x1C,0x00,0xC0,0x20,0x10,0x10,0x10,0x20,0x40,0x00};//C
uchar    const CCTAB20[]={0x10,0x1F,0x10,0x10,0x10,0x08,0x07,0x00,0x10,0xF0,0x10,0x10,0x10,0x20,0xC0,0x00};//D
uchar    const CCTAB21[]={0x10,0x1F,0x11,0x11,0x13,0x10,0x08,0x00,0x10,0xF0,0x10,0x10,0x90,0x10,0x20,0x00};//E
uchar    const CCTAB22[]={0x10,0x1F,0x11,0x11,0x13,0x10,0x08,0x00,0x10,0xF0,0x10,0x00,0x80,0x00,0x00,0x00};//F
uchar    const CCTAB23[]={0x10,0x1F,0x11,0x01,0x01,0x11,0x1F,0x10,0x10,0xF0,0x10,0x00,0x00,0x10,0xF0,0x10};//H
uchar    const CCTAB24[]={0x00,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x00,0x08,0x30,0xC0,0x00,0x00,0x00,0x00};// /
uchar    const CCTAB25[]={0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//-
uchar    const CCTAB26[]={0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xF0,0x80,0x80,0x80,0x00};//+
uchar    const CCTAB[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};  

// 5*8 
uchar    const CCTAB0A[]={0x7E,0x81,0x81,0x81,0x7E};
uchar    const CCTAB1A[]={0x00,0x41,0xFF,0x01,0x00};
uchar    const CCTAB2A[]={0x63,0x85,0x89,0x91,0x61};
uchar    const CCTAB3A[]={0x42,0x81,0x91,0x91,0x6E};
uchar    const CCTAB4A[]={0x08,0x34,0x44,0xFF,0x05};
uchar    const CCTAB5A[]={0xF2,0x91,0x91,0x91,0x8E};
uchar    const CCTAB6A[]={0x7E,0x91,0x91,0xD1,0x0E};
uchar    const CCTAB7A[]={0xC0,0x80,0x9F,0xE0,0x80};
uchar    const CCTAB8A[]={0x6E,0x91,0x91,0x91,0x6E};
uchar    const CCTAB9A[]={0x70,0x8B,0x89,0x89,0x7E};

/*********************************************************************************************************
* 函数名称:write_number_5_8
*
* 功能描述:在指定的坐标写入一个数字0-9,不为0-9的数字显示空白
*
* 说明:
* 
********************************************************************************************************/
void write_number_5_8(uchar x,uchar y,uchar num)
{
     KS0108B_c=0;
     KS0108B_i=0;  
	 switch(num)
     {
        case 0:p=CCTAB0A;break;
        case 1:p=CCTAB1A;break;
        case 2:p=CCTAB2A;break;
        case 3:p=CCTAB3A;break;
        case 4:p=CCTAB4A;break;
        case 5:p=CCTAB5A;break;
        case 6:p=CCTAB6A;break;
        case 7:p=CCTAB7A;break;
        case 8:p=CCTAB8A;break;
        case 9:p=CCTAB9A;break;
        default:p=CCTAB;break;
     }
     write_word(x,y,p,5,8);
}
/*********************************************************************************************************
* 函数名称:write_number
*
* 功能描述:在指定的位置写数字0-9 大于10的为字符 大于30显示空白
*
* 说明:
* 
********************************************************************************************************/
void write_number(uchar x,uchar y,uchar num)
{
    KS0108B_c=0;
    KS0108B_i=0;  
	switch(num)
    {
        case 0:p=CCTAB0;break;
        case 1:p=CCTAB1;break;
        case 2:p=CCTAB2;break;
        case 3:p=CCTAB3;break;
        case 4:p=CCTAB4;break;
        case 5:p=CCTAB5;break;
        case 6:p=CCTAB6;break;
        case 7:p=CCTAB7;break;
        case 8:p=CCTAB8;break;
        case 9:p=CCTAB9;break;
        case 10:p=CCTAB10;break;
        case 11:p=CCTAB11;break;
        case 12:p=CCTAB12;break;
        case 13:p=CCTAB13;break;
        case 14:p=CCTAB14;break;
        case 15:p=CCTAB15;break;
        case 16:p=CCTAB16;break;
        case 17:p=CCTAB17;break;
        case 18:p=CCTAB18;break;
        case 19:p=CCTAB19;break;
        case 20:p=CCTAB20;break;
        case 21:p=CCTAB21;break;
        case 22:p=CCTAB22;break;
        case 23:p=CCTAB23;break;
        case 24:p=CCTAB24;break;
        case 25:p=CCTAB25;break;
        case 26:p=CCTAB26;break;
        default:p=CCTAB;break;
	}
	write_word(x,y,p,8,16);
}

void write_number_OK(uchar x,uchar y,uchar num)
{
    KS0108B_c=0;
    KS0108B_i=0;  
	switch(num)
    {
        case 0:p=CCTAB0;break;
        case 1:p=CCTAB1;break;
        case 2:p=CCTAB2;break;
        case 3:p=CCTAB3;break;
        case 4:p=CCTAB4;break;
        case 5:p=CCTAB5;break;
        case 6:p=CCTAB6;break;
        case 7:p=CCTAB7;break;
        case 8:p=CCTAB8;break;
        case 9:p=CCTAB9;break;
        case 10:p=CCTAB17;break;
        case 11:p=CCTAB18;break;
        case 12:p=CCTAB19;break;
        case 13:p=CCTAB20;break;
        case 14:p=CCTAB21;break;
        case 15:p=CCTAB22;break;
        default:p=CCTAB;  break;
	}
	write_word(x,y,p,8,16);
}
/*********************************************************************************************************
* 函数名称:write_number_black
*
* 功能描述:反写的数字
*
* 说明:
* 
********************************************************************************************************/
void write_number_black(uchar x,uchar y,uchar num) 
{
    KS0108B_c=0;
    KS0108B_i=0;  
	switch(num)
    {
        case 0:p=CCTAB0;break;
        case 1:p=CCTAB1;break;
        case 2:p=CCTAB2;break;
        case 3:p=CCTAB3;break;
        case 4:p=CCTAB4;break;
        case 5:p=CCTAB5;break;
        case 6:p=CCTAB6;break;
        case 7:p=CCTAB7;break;
        case 8:p=CCTAB8;break;
        case 9:p=CCTAB9;break;
        case 10:p=CCTAB10;break;
        case 11:p=CCTAB11;break;
        case 12:p=CCTAB12;break;
        case 13:p=CCTAB13;break;
        case 14:p=CCTAB14;break;
        case 15:p=CCTAB15;break;
        case 16:p=CCTAB16;break;
        case 17:p=CCTAB17;break;
        case 18:p=CCTAB18;break;
        case 19:p=CCTAB19;break;
        case 20:p=CCTAB20;break;
        case 21:p=CCTAB21;break;
        case 22:p=CCTAB22;break;
        case 23:p=CCTAB23;break;
        case 24:p=CCTAB24;break;
        case 25:p=CCTAB25;break;
        case 26:p=CCTAB26;break;
        default:p=CCTAB;break;
	}
	write_word_black(x,y,p,8,16);
}
/*********************************************************************************************************
* 函数名称:write_word
*
* 功能描述:在指定的位置写一个指定大小的汉字
*
* 说明:
* 
********************************************************************************************************/
void write_word(uchar x,uchar y,uchar const *p,uchar wordx,uchar wordy)
{
	uchar const *q;
	uchar count,cul,page,k,cl,m,d;
	uchar   flag=0,lg=0;
	cul=x;cl=x;k=0;m=0;d=0;page=0;
	if(KS0108B_i==0)  {head=p;q=p;}
	else              q=p+KS0108B_i-wordx;
	p=p+KS0108B_i;
	count=wordx;
	if(wordx+x>=128)   return;
	page=y/8;
	KS0108B_COM=(page&0x07)|(0xb8);                //页面设置
	PRL0();
	PRR0();
	if(cl>=64)  {flag=1;cul=cl-64;}                //右区
	KS0108B_COM=(0x40)|cul;                        //列设置
	if(flag==0)  PRL0();
	 else        PRR0();
	while(count--)                                 //循环次数
	{
  		KS0108B_DAT=*p;                              //写显示数据
  		KS0108B_DAT=invert(KS0108B_DAT);
  		if(m=y%8)
   		{
     		lg=1;
			KS0108B_DAT=(KS0108B_DAT<<m);
     		if(KS0108B_c)
         	{
         		k=invert(*q);
          		d=k>>(8-m);
          		KS0108B_DAT=(KS0108B_DAT|d);
          		q++;
         	}
    	}
  		if(flag) PRR1();else PRL1();
		cl++;p++;
  		if((cl>=64)&&(!flag))
        	{flag=1;KS0108B_COM=0x40;PRR0();}	   //左转右(超出左区)
   		else if(cl>=128)  return;                      //超出范围
	}
	KS0108B_i+=wordx;y+=8;	KS0108B_c++;
	if(KS0108B_c<(wordy/8)) write_word(x,y,head,wordx,wordy);
	else if((KS0108B_c==(wordy/8))&&lg)
    {
    	flag=0; page++;
        if(page>7)     return;
        KS0108B_COM=(page&0x07)|(0xb8);          //页面设置
        PRL0();
        PRR0();
        count=wordx;cl=x;
	    if(x>=64)  {flag=1;cul=x-64;}
        KS0108B_COM=(0x40)|cul;                       //列设置
        if(flag==0)  PRL0(); else PRR0();
        while(count--)
        {
	        k=invert(*q);
            if(flag)   PRR2(); else PRL2();
            if(flag)   PRR2(); else PRL2();
            KS0108B_DAT=(KS0108B_DAT>>m)<<m;
            k=(k>>(8-m));
            KS0108B_DAT=KS0108B_DAT|k;
            cul=cl;
            if(cul>=64)  {flag=1;cul=cul-64;}
            KS0108B_COM=(0x40)|cul;                    //列设置
            if(flag==0)   PRL0();else PRR0();
            if(flag)      PRR1();else PRL1();
            q++;cl++;
            if((cl>=64)&&(!flag))  {flag=1;KS0108B_COM=0x40;PRR0();}
            else if(cl>=128)     return;
		}
        KS0108B_c=0;KS0108B_i=0;return;
	}
 	else {KS0108B_c=0;KS0108B_i=0;return;}
}
/*********************************************************************************************************
* 函数名称:write_word_black
*
* 功能描述:在指定的位置反写汉字
*
* 说明:
* 
********************************************************************************************************/
void write_word_black(uchar x,uchar y,uchar const *p,uchar wordx,uchar wordy)
{
	uchar const *q;
	uchar count,cul,page,k,cl,m,d;
	uchar   flag=0,lg=0;
	cul=x;cl=x;k=0;m=0;d=0;page=0;
	if(KS0108B_i==0)  {head=p;q=p;}else q=p+KS0108B_i-wordx;
	p=p+KS0108B_i;
	count=wordx;
	if(wordx+x>=128)   return;
	page=y/8;
	KS0108B_COM=(page&0x07)|(0xb8);                //页面设置
	PRL0();	PRR0();
	if(cl>=64)  {flag=1;cul=cl-64;}                //右区
	KS0108B_COM=(0x40)|cul;                        //列设置
	if(flag==0)  PRL0();else PRR0();
	while(count--)                                 //循环次数
  	{
    	KS0108B_DAT=(*p);                              //写显示数据
        KS0108B_DAT=(~KS0108B_DAT);    
        KS0108B_DAT=invert(KS0108B_DAT);
		if(m=y%8)
   		{
     		lg=1;
			KS0108B_DAT=(KS0108B_DAT<<m);
			if(KS0108B_c)
         	{
          		k=invert(*q);
          		k=(~k);
          		d=k>>(8-m);
          		KS0108B_DAT=(KS0108B_DAT|d);
          		q++;
         	}
    	}
  		if(flag) PRR1();else PRL1();
  		cl++;p++;
  		if((cl>=64)&&(!flag))
        {
        	flag=1;
        	KS0108B_COM=0x40;
        	PRR0();
        }	   //左转右(超出左区)
   		else if(cl>=128)  return;                      //超出范围
  	}
	KS0108B_i+=wordx;y+=8;KS0108B_c++;
	if(KS0108B_c<(wordy/8))    write_word_black(x,y,head,wordx,wordy);
	else if((KS0108B_c==(wordy/8))&&lg)
    {
    	flag=0;
	    page++;
	    if(page>7)     return;
	    KS0108B_COM=(page&0x07)|(0xb8);          //页面设置
        PRL0();	PRR0();
	    count=wordx;cl=x;
	    if(x>=64)  {flag=1;cul=x-64;}
        KS0108B_COM=(0x40)|cul;                       //列设置
        if(flag==0)  PRL0(); else PRR0();
        while(count--)
        {
	        k=invert(*q);
            k=(~k);
            if(flag) PRR2(); else PRL2();
            if(flag) PRR2(); else PRL2();
            KS0108B_DAT=(KS0108B_DAT>>m)<<m;
            k=(k>>(8-m));

⌨️ 快捷键说明

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