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

📄 lcd12864.c

📁 标准键盘PS2与单片机之间的通信
💻 C
字号:
#include <reg52.h>
#include "LCD12864.h"
#include "zifu8_8.h"
#include <intrins.h>


/*********初始化************/
void lcd_init( void )
{
	write_cmd_L( 0x3e );		//关显示
	write_cmd_R( 0x3e );
	write_cmd_L( 0xc0 );		//起始行
	write_cmd_R( 0xc0 );	
	write_cmd_L( 0x3f );		//开显示
	write_cmd_R( 0x3f );
	lcd_clr( );					//清屏

}

/************清屏***********/
void lcd_clr( void )
{	
	unsigned char i,j,page;
	for( i = 0; i < 8; i++ )
	{
		page = i;
		page |= 0xb8;
		write_cmd_L( page );
		write_cmd_L( 0x40 );
		for( j = 0; j < 64; j++ )
			write_dat_L( 0 );
		write_cmd_R( page );
		write_cmd_R( 0x40 );
		for( j = 0; j < 64; j++ )
			write_dat_R( 0 );
    }	
}
/*------------------显示12864图片---------------------------*/
void Disp_Img(unsigned char code *img)
{										 
    unsigned char j,k,page = 0; 
    for( k = 0; k < 8; k++ )
    {   
        page = k;
        page |= 0xb8;
    	write_cmd_L( page );
    	write_cmd_L( 0x40 );
    	for( j = 0; j < 64; j++ )
    		write_dat_L(img[k*128+j]);
    	write_cmd_R( page );
    	write_cmd_R( 0x40 );
    	for(j=64;j<128;j++) 
    		write_dat_R(img[k*128+j]);
    }
}

/***********-写左命令************/
void write_cmd_L( unsigned char cmd )
{
	CSB = 1;
	CSA = 0;
	DI = 0;
	RW = 1;
	do
	{
		DataLine = 0xff;
		E = 1;
		_nop_();			
	}while( BUSY );
	E = 0;
	RW = 0;
	DataLine = cmd;
	E = 1;
	_nop_();
	E = 0;
}
/***********-写右命令**********-*/
void write_cmd_R( unsigned char cmd )
{
	CSB = 0;
	CSA = 1;
	DI = 0;
	RW = 1;
	do
	{
		DataLine = 0xff;
		E = 1;
		_nop_();	
		
	}while( BUSY );
	E = 0;
	RW = 0;
	DataLine = cmd;
	E = 1;
	_nop_();
	E = 0;
}
/***********写左数据***********/
void write_dat_L( unsigned char dat )
{
	CSB = 1; 
	CSA = 0;
	DI = 0;
	RW = 1;
	do
	{
		DataLine = 0xff;
		E = 1;
		_nop_();		
	}while( BUSY );
	E = 0;
	DI = 1;
	RW = 0;
	DataLine = dat;
	E = 1;
	_nop_();
	E = 0;
}

/***********写右数据***********/
void write_dat_R( unsigned char dat )
{
	CSB = 0; 
	CSA = 1;
	DI = 0;
	RW = 1;
	do
	{
		DataLine = 0xff;
		E = 1;
		_nop_();		
	}while( BUSY );
	E = 0;
	DI = 1;
	RW = 0;
	DataLine = dat;
	E = 1;
	_nop_();
	E = 0;
}
void write_data(unsigned char xpos,unsigned char ypos,unsigned char lcddata)
{	if(xpos<128)
{
	if( ( xpos & 0x40 )== 0 )
	{
		write_cmd_L( 0xb8 | ypos );   
		write_cmd_L( 0x40 | xpos);    
		write_dat_L( lcddata );
	}
	else
	{
		write_cmd_R( 0xb8 | ypos );		
		write_cmd_R( 0x40 | xpos );				
		write_dat_R( lcddata );
	}
 }		
}

/************显示一个字符************/
void lcd_putchar8x8( unsigned char x,unsigned char y,unsigned char ch )
{
    unsigned char i;
	for( i = 0; i < 8; i ++ )
	{
        write_data( x+i, y, zifu[(ch - 0x20)*8 + i] );
       // write_data( x+i, y + 1,zifu[(ch - 0x20)*8 + 8 + i] );
	} 	
}

/************** 显示汉字*****************/
// x  显示列     y  显示行
void hz_disp( unsigned char x, unsigned char y, unsigned char *hz )
{
	unsigned char i;
	for( i = 0; i < 16; i++ )
	{
        write_data( x + i, y, hz[ i] );		
        write_data( x + i, y + 1, hz[ 16 + i] );
    }	
}
void hz_disp32x32( unsigned char x, unsigned char y, unsigned char *hz )
{
	unsigned char i;
	for( i = 0; i < 30; i++ )
	{
        write_data( x + i, y, hz[ i] );		
        write_data( x + i, y + 1, hz[ 28 + i] );
		write_data( x + i, y+2, hz[57+i] );		
        write_data( x + i, y +3, hz[86 + i] );
    }	
}

void hz_disp128x32( unsigned char x, unsigned char y, unsigned char *hz )
{
	unsigned char i;
	for( i = 0; i < 128; i++ )
	{
        write_data( x + i, y, hz[ i] );		
        write_data( x + i, y + 1, hz[ 128 + i] );
		write_data( x + i, y + 2, hz[ 256 + i] );		
        write_data( x + i, y + 3, hz[ 384 + i] );
    }	
}

void hz_disp12x12( unsigned char x, unsigned char y, unsigned char *hz )
{
	unsigned char i;
	for( i = 0; i < 12; i++ )
	{
        write_data( x + i, y, hz[ i] );		
        write_data( x + i, y + 1, hz[ 12 + i] );
    }	
}
void hz_disp12x120( unsigned char x, unsigned char y, unsigned char *hz )
{
	unsigned char i;
	for( i = 0; i < 12; i++ )
	{
        write_data( x + i, y, ~hz[ i] );		
        write_data( x + i, y + 1, ~hz[ 12 + i] );
    }	
}


//画点  x = 0 -- 128      y = 0 -- 64
void set_point( unsigned char x, unsigned char y )
{
	unsigned char d = 0;
	unsigned char temp =0;
	unsigned char page1 = 0;
	temp = y % 8;	
	if( x < 64 )
	{ 
		write_cmd_L( 0xB8 + (y/8) );
		write_cmd_L( 0x40 + x );
        d = Rddata();    
		write_cmd_L( 0xB8 + (y/8) );
		write_cmd_L( 0x40 + x );
        d = Rddata();           
		write_cmd_L( 0xB8 + (y/8) );
		write_cmd_L( 0x40 + x );
		page1 = d | (1<<temp);
		write_dat_L( page1 );
	}
	else if( x <128 )
	{
 
		write_cmd_R( 0xB8 + (y/8) );
		write_cmd_R( 0x40 + x -64 );
		d = Rddata();
		write_cmd_R( 0xB8 + (y/8) );
		write_cmd_R( 0x40 + x -64 );
		d = Rddata();		
		write_cmd_R( 0xB8 + (y/8) );
		write_cmd_R( 0x40 + x - 64 );
		page1 = d |(1<<temp);
		write_dat_R( page1 );	
	}
    else;
    
}
unsigned char Rddata( void )
{
    unsigned char dd = 0;
    DataLine = 0xff;
    DI = 1;
    RW = 1;
    E = 1;
    _nop_();
    dd = DataLine;
    E = 0;
    return dd;    
}

⌨️ 快捷键说明

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