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

📄 43019264_demo_0806.c

📁 430编程:19264图形液晶汉字与字符的显示程序
💻 C
📖 第 1 页 / 共 5 页
字号:

/*--  文字:  .  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,

/*--  文字:  C  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,

/*--  文字:  O  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,

/*--  文字:  M  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,


};

unsigned char seg[]={0x3f,0x06,0x5b,0x4f,
	0x66,0x6d,0x7d,0x07,
	0x7f,0x6f,0x77,0x7c,
	0x39,0x5e,0x79,0x71,
	0xbf,0x86,0xdb,0xcf,
	0xe6,0xed,0xfd,0x87,
	0xff,0xef,0xf7,0xfc,
	0xb9,0xde,0xf9,0xf1,

	0x80,0x40,0x00,0x73,0xc0};


uchar key_buffer=0;
unsigned int hantemp[100];

void delay(long v)
{
        while(v!=0)v--;
}

void disp(void)
    {
    unsigned char i=0,j=0;
    unsigned char temp_wei=0x04,temp_duan=0;
//    P1IE=0X0;
    P1DIR  =  0x1f;
    for(i=0;i<8;i++)
      {
        P1OUT  &=  ~BIT3;
        temp_duan=seg[disbuffer[i]] ;
        for(j=0;j<8;j++)
            {
             if(temp_duan&0x80)
                P1OUT  |=   BIT0;
             else
                P1OUT  &=  ~BIT0;
             temp_duan=temp_duan<<1;
             P1OUT  &=   ~BIT4;   P1OUT  |=  BIT4;
            }
         P1OUT  =  (P3IN&0xf8) | temp_wei;
         P1OUT  |=   BIT3;
         temp_wei++;
         delay(80);
      }
     for(i=0;i<8;i++)
     { P1OUT  &=  ~BIT0;   P1OUT  &=   ~BIT4;   P1OUT  |=  BIT4;
     }
    P1DIR=0XF;
    P1OUT=0XF;
    P1IFG=0;
    P1IE=0xf0;
    }


uchar key_just(void)    //00:down  0xff:no down
    {
    P1DIR=0xf;
    P1OUT=0xf;
    if((P1IN&0xf0)==0)
          return(0xff);
    return(0);
    }

uchar key_code(void)
    {uchar in;
     P1DIR=0XF;
     P1OUT=0x8;
     in=P1IN&0x0f0;
     if(in!=0)
         {
         if(in==0X10)
           return(0); //C-F
         if(in==0X20)
           return(1);
         if(in==0X40)
           return(2);
         if(in==0X80)
           return(3);
          }
     P1OUT=0X4;
     in=P1IN&0x0f0;
     if(in!=0)
         {
         if(in==0X10)
           return(4);   //8-B
         if(in==0X20)
           return(5);
         if(in==0X40)
           return(6);
         if(in==0X80)
           return(7);
         }
     P1OUT=0X2;
     in=P1IN&0x0f0;
     if(in!=0)
         {
         if(in==0X10)
           return(8);   //4-7
         if(in==0X20)
           return(9);
         if(in==0X40)
           return(10);
         if(in==0X80)
           return(11);
         }
     P1OUT=0X1;
     in=P1IN&0x0f0;
     if(in!=0)
         {
         if(in==0X10)
           return(12);   //0-3
         if(in==0X20)
           return(13);
         if(in==0X40)
           return(14);
         if(in==0X80)
           return(15);
          }
        return(0xff);
      }

uchar key(void)
    {
    uchar temp=0xff    ;//=key_buffer;
    uint time=0;
    P1IFG=0;
    if(key_just()==0)
        delay(500);
    if(key_just()!=0)
        return(temp);
    temp=key_code();
    key_buffer=temp;
key_loop:
    if(key_just()==0)
       goto  key_loop;
    else
       {
       P1IFG=0;
       return(temp);
       }
    }
//***************************************




void wcode(uchar c,uchar cs1,uchar cs2,uchar cs3)
   {
        //先片选:CS1,CS2
        //D/I=0
        //R-W=0
        //数据
        //E:0-1-0
        //硬件:  4脚-P50  5脚-P51  6脚-P52   15脚-P57  16脚-P56  17脚-P55   18--P53
        //        RS        R/W       E         CS1        RES      CS2        CS3
        if(cs1==1)
            {
            P5OUT&=~BIT3;
            P5OUT&=~BIT4;
            }
        if(cs2==1)
            {
            P5OUT&=~BIT4;
            P5OUT|=BIT3;
            }
        if(cs3==1)
            {
            P5OUT|=BIT4;
            P5OUT&=~BIT3;
            }

        P5OUT&=~BIT2; //RS
        P5OUT&=~BIT1; //R/W
        P4OUT=c;
        P5OUT&=~BIT0; //E
        P5OUT|=BIT0;  //
        P5OUT&=~BIT0; //
   }

void wdata(uchar c,uchar cs1,uchar cs2,uchar cs3)
   {
        //先片选:CS1,CS2   :P35,P36   /P44 , P45
        //D/I=1         :P32            /P24
        //R-W=0         :P33            /P25
        //数据          :P2             /P3
        //E:0-1-0      :P34            /P26
        //硬件:  4脚-P50  5脚-P51  6脚-P52   15脚-P57  16脚-P55  17脚-P56   18--P53
        //     RS (d/i)    R/W       E         CS1       RES       CS2        CS3
        if(cs1==1)
            {
            P5OUT&=~BIT3;
            P5OUT&=~BIT4;
            }
        if(cs2==1)
            {
            P5OUT&=~BIT4;
            P5OUT|=BIT3;
            }
        if(cs3==1)
            {
            P5OUT|=BIT4;
            P5OUT&=~BIT3;
            }

        P5OUT|=BIT2;
        P5OUT&=~BIT1;
        P4OUT=c;
        P5OUT&=~BIT0;
        P5OUT|=BIT0;
        P5OUT&=~BIT0;
   }

void set_startline(uchar i,uchar cs1,uchar cs2,uchar cs3)
    {
        i=0xc0+i;
        wcode(i,cs1,cs2,cs3);
    }
void set_adr(uchar x,uchar y,uchar cs1,uchar cs2,uchar cs3)
    {
        x=x+0xb8;y=y+0x40;
        wcode(x,cs1,cs2,cs3);
        wcode(y,cs1,cs2,cs3);
    }

void dison_off(uchar o,uchar cs1,uchar cs2,uchar cs3)
    {
        o=o+0x3e;
        wcode(o,cs1,cs2,cs3);
    }

void reset(void)
    {
        //RST=0,1       :P55
        P5OUT&=~BIT5;
        delay(150);
        P5OUT|=BIT5;
        delay(150);
    }

void clr(void)
    { uchar loop,i;
	for(i=0;i<8;i++)
		{
		set_adr(i,0,1,0,0);
		set_startline(0,1,0,0);
		for(loop=0;loop<64;loop++)
			{ wdata(0,1,0,0);
			}
		set_adr(i,0,0,1,0);
		set_startline(0,0,1,0);
		for(loop=0;loop<64;loop++)
			{wdata(0,0,1,0);
			}
		set_adr(i,0,0,0,1);
		set_startline(0,0,0,1);
		for(loop=0;loop<64;loop++)
			{wdata(0,0,0,1);
			}
		 }
    }

void full(void)
    { uchar loop,i;
	for(i=0;i<8;i++)
		{
		set_adr(i,0,1,0,0);
		set_startline(0,1,0,0);
		for(loop=0;loop<64;loop++)
			{ wdata(0xff,1,0,0);
			}
		set_adr(i,0,0,1,0);
		set_startline(0,0,1,0);
		for(loop=0;loop<64;loop++)
			{wdata(0xff,0,1,0);
			}
		set_adr(i,0,0,0,1);
		set_startline(0,0,0,1);
		for(loop=0;loop<64;loop++)
			{wdata(0xff,0,0,1);
			}
		 }
    }

void han_16_16(uchar *p,uchar lline,uchar x)  //正显一个汉字16*16,一行有12个字符(12个列)
      {
	uchar i,y,cs1,cs2,cs3;
	if(x<4)
	    {            cs1=1;  cs2=0;  cs3=0 ;  y=x*16;
	    }
        else if(x<8)
            {   x=x-4;   cs1=0;  cs2=1;  cs3=0 ;  y=x*16;
            }
        else
            {   x=x-8;   cs1=0;  cs2=0;  cs3=1 ;  y=x*16;
            }
         	set_adr(2*lline,y,cs1,cs2,cs3);
	        set_startline(0,cs1,cs2,cs3);
	        for(i=0;i<16;i++)
		        {
		        wdata(*(p+i),cs1,cs2,cs3);
		        }
	        set_adr(2*lline+1,y,cs1,cs2,cs3);
	        set_startline(0,cs1,cs2,cs3);
	        for(i=16;i<32;i++)
		        {
		        wdata(*(p+i),cs1,cs2,cs3);
		        }
      }

void han_24_24(uchar *p,uchar lline,uchar x)  //正显一个汉字16*16,一行有12个字符(12个列)
      {
	uchar i,y,cs1,cs2,cs3;
	if(x<4)
	    {            cs1=1;  cs2=0;  cs3=0 ;  y=x*16;

⌨️ 快捷键说明

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