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

📄 s12864.c.bak

📁 单片机与4*4按键接口程序
💻 BAK
字号:
/************************************************************************************/
/*     程序名:LCM12864(ST7920)驱动程序                                                 */
/*                                                                                  */
/*     晶振:12.0 M                                        CPU型号:AT89S52         */
/*                                                                                  */
/*                                                                                  */
/*     http://www.mculover.net                                                      */
/*     http://www.mculover.net/bbs                                                  */
/*   													 					    	*/
/*                                                                                  */
/*                                                湘灵电子工作室 版权所有           */     
/*                                                         2006-08-10               */
/************************************************************************************/ 

#include <REG51.H>


//引脚定义
sbit   CS    =  P2 ^ 0;	//片选 高电平有效 单片LCD使用时可固定高电平
sbit   SID   =  P2 ^ 1;	//数据
sbit   SCLK  =  P2 ^ 2;	//时钟
sbit   PSB   =  P2 ^ 3; //低电平时表示用串口驱动,可固定低电平
sbit   RST   =  P2 ^ 5; //LCD复位,LCD模块自带复位电路。可不接


unsigned char *line1;
unsigned char *line2;
unsigned char *line3;
unsigned char *line4;

void Write_char(bit start, unsigned char ddata);
void Send_byte(unsigned char bbyte);
void Delaynms(unsigned int di);
void Lcd_init(void);
void Disp_img(unsigned char *img);
//void Lcd_img_Cls(void);
void LCD_Write_char_string(unsigned char X,unsigned char Y,unsigned char *s);
void LCD_set_xy( unsigned char x, unsigned char y );

unsigned char code  ma[] ={"湖南科技大学    "};
unsigned char code  ma2[]={"湘灵电子工作室  "};

unsigned char code  ma3[]={"控制IC:ST7920  "};
unsigned char code  ma4[]={"  欢迎光临      "};
unsigned char code logo[]={                             
/*--  调入了一幅图像:F:\我的文档\My Pictures\`1.bmp  --*/
/*--  宽度x高度=128x64  --*/
0x00,0x01,0x01,0x34,0x3F,0xE8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x01,0xB8,0x3F,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x81,0xA0,0x3F,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x3E,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x37,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x02,0xC0,0x00,0x09,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
0x00,0x08,0xE0,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x00,
0x00,0x08,0xE0,0x00,0x0F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xE0,0x00,
0x00,0x0C,0x40,0x00,0x1F,0x02,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x63,0xE0,0x00,
0x00,0x1C,0x40,0x00,0x3E,0x00,0x10,0x00,0x0F,0xFC,0x78,0x00,0x00,0xC3,0xE0,0x00,
0x11,0x1C,0x00,0x00,0x0F,0x8F,0x80,0x41,0x7F,0x0F,0xEF,0xC0,0x30,0x83,0xE0,0x00,
0x11,0x1C,0x00,0x00,0x16,0x0F,0xE0,0x0F,0xA0,0x07,0xE7,0xF8,0x09,0x8B,0xE0,0x00,
0x09,0x9C,0x00,0x00,0x3E,0x0F,0xF0,0x18,0x00,0x03,0x13,0xBF,0xF7,0x3B,0xE0,0x00,
0x00,0x9C,0x00,0x00,0x73,0x04,0xF0,0x1C,0x05,0x05,0xAC,0x8F,0xF7,0x0B,0xE0,0x00,
0x04,0xF8,0x00,0x00,0x41,0x00,0x70,0x0E,0x47,0x01,0x98,0xEF,0xFB,0x01,0xE0,0x00,
0x02,0xF0,0x00,0x00,0xC7,0xFF,0xE0,0x0F,0x43,0x01,0x88,0xF7,0xFB,0x01,0xE0,0x00,
0x03,0xF0,0x00,0x01,0x8F,0xE0,0x00,0x05,0xC1,0x01,0xC4,0x9F,0xFF,0x81,0xE0,0x00,
0x01,0xF0,0x00,0x00,0x7F,0xFF,0xE0,0x07,0x88,0xE1,0xC3,0x87,0xF9,0xE1,0xE0,0x00,
0x40,0xF0,0x00,0x00,0x0F,0xFF,0x80,0x03,0x89,0xFE,0xC0,0x03,0xF8,0xF9,0xE0,0x00,
0x40,0xF0,0x00,0x00,0x1E,0x3C,0x00,0x03,0xC9,0x0F,0xC0,0x03,0xFD,0xFF,0xE0,0x00,
0x20,0x60,0x00,0x00,0x00,0xF0,0x00,0x03,0xE8,0x33,0x80,0x03,0xFF,0xFF,0xE0,0x00,
0x30,0x60,0x00,0x00,0x03,0xF0,0x00,0x02,0x06,0x01,0xFE,0x03,0xFF,0xFF,0xE0,0x00,
0x18,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x06,0x00,0xC0,0x21,0xFF,0xFF,0xE0,0x00,
0x19,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x06,0x03,0x60,0x03,0xFF,0xFF,0xE0,0x00,
0x0C,0x00,0x00,0x00,0xFC,0x00,0x00,0x04,0x01,0x03,0x7F,0x01,0xFF,0xFF,0xE0,0x00,
0x0B,0x80,0x00,0x01,0x12,0x10,0x00,0x10,0x28,0x80,0x30,0x19,0xFF,0xFF,0xE0,0x00,
0x05,0x80,0x00,0x00,0x06,0x1F,0xC0,0x10,0x80,0x70,0x30,0x03,0xFF,0xFF,0xE0,0x00,
0x02,0xC0,0x00,0x00,0x86,0x1F,0xE0,0x03,0x80,0x08,0x34,0x05,0xFF,0xFF,0xE0,0x00,
0x02,0x60,0x00,0x03,0x06,0x1F,0xF0,0x07,0xC0,0x08,0x30,0x15,0xFF,0xFF,0xC0,0x00,
0x01,0x00,0x00,0x06,0x06,0x1F,0xF0,0x14,0x41,0x90,0x78,0x21,0xFF,0xFF,0xC0,0x00,
0x00,0x80,0x00,0x0E,0x06,0x1F,0xF0,0x10,0x40,0xE0,0x70,0x61,0xFF,0xFF,0xE0,0x00,
0x00,0xC0,0x00,0x03,0xE7,0x1F,0xF0,0x10,0xC0,0x30,0x60,0x35,0xFF,0xFF,0xE0,0x00,
0x00,0x60,0x00,0x00,0x1F,0x08,0xE0,0x1E,0x66,0x10,0xE0,0x09,0xFF,0xFF,0xF0,0x00,
0x00,0x30,0x00,0x06,0x07,0x00,0xC0,0x13,0x63,0x60,0xC0,0x03,0xFF,0xFF,0xF0,0x00,
0x00,0x18,0x00,0x02,0x03,0x80,0x00,0x31,0xB1,0x41,0xC0,0x03,0xFF,0xEF,0xF8,0x00,
0x00,0x08,0x00,0x03,0x81,0x80,0x00,0x30,0xB9,0x01,0x80,0x03,0xFF,0xFF,0xF8,0x00,
0x00,0x08,0x00,0x01,0xE0,0x00,0x00,0x69,0x36,0x03,0x00,0x03,0xFF,0xD7,0xF8,0x00,
0x00,0x08,0x00,0x00,0x3E,0x00,0x00,0xE6,0x10,0x17,0x00,0x07,0xFF,0xFF,0xF8,0x00,
0x00,0x04,0x00,0x00,0x07,0x00,0x00,0xE0,0x10,0x0E,0x00,0x07,0xFF,0xBF,0xF8,0x00,
0x00,0x04,0x00,0x00,0x00,0xF8,0x03,0xC0,0x0C,0x0C,0x00,0x07,0xFF,0x7F,0xF8,0x00,
0x00,0x04,0x00,0x00,0x1F,0xF8,0x03,0xE1,0x04,0x1C,0x00,0x0F,0xFF,0x5B,0xFC,0x00,
0x00,0x04,0x00,0x00,0x1F,0xFF,0xF9,0xF0,0x00,0x38,0x00,0x0F,0xFE,0x7F,0xFC,0x00,
0x00,0x04,0x00,0x02,0x0F,0xFF,0xC1,0x98,0x00,0x7F,0x80,0x1F,0xFE,0x57,0xFC,0x00,
0x00,0x04,0x00,0x03,0xFF,0xFF,0x80,0x0C,0x00,0xC1,0xE0,0x1F,0xFE,0x47,0xFC,0x00,
0x00,0x04,0x00,0x01,0xFF,0xFF,0x81,0x03,0xC3,0x80,0x38,0x3F,0xFE,0x4F,0xFC,0x00,
0x00,0x05,0x00,0x00,0xFF,0xF0,0x01,0x00,0x7E,0x00,0x0C,0x3F,0xFE,0x07,0xFC,0x00,
0x00,0x05,0x40,0x00,0xFF,0xF0,0x00,0x00,0x9C,0x00,0x03,0x7F,0xFE,0x07,0xFC,0x00,
0x00,0x01,0x62,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x01,0xC7,0xFE,0x07,0xFC,0x00,
0x00,0x05,0x61,0x02,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x7E,0x07,0xFC,0x00,
0x00,0x07,0x70,0x83,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x07,0xFC,0x00,
0x00,0x07,0x70,0xC1,0xD8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x07,0xF8,0x00,
0x00,0x07,0x08,0xE0,0xE8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x07,0xF8,0x00,
0x00,0x06,0x0C,0xF3,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x87,0xF8,0x00,
0x00,0x06,0x06,0x1B,0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC7,0xF8,0x00,
0x00,0x04,0x06,0x4D,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,
0x00,0x04,0x02,0x43,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF0,0x00,
0x00,0x08,0x10,0x21,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,
0x00,0x00,0x10,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x08,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};

/******************************************************************************/
void Lcd_init(void)	//初始化LCD 
{
	Delaynms(10); //启动等待,等LCM讲入工作状态
//  PSB=0; ;   	 //串口驱动模式
	PSB=1;
	RST=0; Delaynms(1); RST=1; // 复位LCD

  	CS=1;
  	Write_char(0,0x30);  //8 位介面,基本指令集
  	Write_char(0,0x0c);  //显示打开,光标关,反白关
  	Write_char(0,0x01);  //清屏,将DDRAM的地址计数器归零  
}

/******************************************************************************/
void Write_char(bit start, unsigned char ddata) //写指令或数据
{
	unsigned char start_data,Hdata,Ldata;
  	if(start==0) 
		start_data=0xf8;	 //写指令
    else    
    	start_data=0xfa;  //写数据
  
  	Hdata=ddata&0xf0;		  //取高四位
  	Ldata=(ddata<<4)&0xf0;  //取低四位
  	Send_byte(start_data);	  //发送起始信号
  	Delaynms(5); //延时是必须的
  	Send_byte(Hdata);	      //发送高四位
  	Delaynms(1);  //延时是必须的
  	Send_byte(Ldata);		  //发送低四位
  	Delaynms(1);  //延时是必须的
}

/******************************************************************************/
void Send_byte(unsigned char bbyte) //发送一个字节
{
	unsigned char i;
 	for(i=0;i<8;i++)
   	{
   		SID=bbyte&0x80; //取出最高位
 		SCLK=1;
   		SCLK=0;
   		bbyte<<=1; //左移
   	}  
}

/******************************************************************************/
void Delaynms(unsigned int di) //延时
{
	unsigned int da,db;
 	for(da=0;da<di;da++)
   		for(db=0;db<10;db++);
}

/******************************************************************************/
void Disp_img(unsigned char  *img)	//图形显示     字模221 横向取膜
{ 
	unsigned char i,j;
	unsigned int k =0 ;
	for(i=0;i<32;i++)
  	{ 
		Write_char(0,0x80+i);
		Write_char(0,0x80);
    	for(j=0;j<16;j++) 
		{
			Write_char(1,img[k++]);
		}
  	}

 	for(i=0;i<32;i++)
  	{ 
		Write_char(0,0x80+i);
		Write_char(0,0x88);
    	for(j=0;j<16;j++) 
		{
			Write_char(1,img[k++]);
  		}
	}
}

/*****************************************************************************
void Lcd_img_Cls(void)  //图形方式下清屏
{ 
	unsigned char i,j;
	for(i=0;i<32;i++)
  	{ 
		Write_char(0,0x80+i);
		Write_char(0,0x80);
    	for(j=0;j<16;j++) 
			Write_char(1,0x00);///for test
  	}

 	for(i=0;i<32;i++)//
  	{
    	Write_char(0,0x80+i);
		Write_char(0,0x88);
   		for(j=0;j<16;j++) 
			Write_char(1,0x00);
  	}
}

/*-----------------------------------------------------------------------
LCD_set_xy        : 设置LCD显示的起始位置,X为行,Y为列

输入参数:x、y    : 显示字符串的位置,X:0-15,Y:0-1
                    LCD第一行显示寄存器地址:0X80-0X8F
                    LCD第一行显示寄存器地址:0XC0-0XCF

编写日期          :2005
最后修改日期      :2005	
-----------------------------------------------------------------------*/
void LCD_set_xy( unsigned char x, unsigned char y )
{
    unsigned char address;
	switch(x)
	{
		case 0: address = 0x80 + y; break;    
    	case 1: address = 0x80 + y; break; 
		case 2: address = 0x90 + y; break; 
   	 	case 3: address = 0x88 + y; break;
		case 4: address = 0x98 + y; break; 
		default:address = 0x80 + y; break;
	}
    Write_char(0, address);
}

/*-----------------------------------------------------------------------
LCD_Write_char_string  : 中英文字符串显示函数

输入参数:*s      :英文字符串指针;
          X、Y    : 显示字符串的位置 

编写日期          :2005
最后修改日期      :2005	
-----------------------------------------------------------------------*/
void LCD_Write_char_string(unsigned char X,unsigned char Y, unsigned char *s)
{
	LCD_set_xy( X, Y );
    
    while (*s) 
    {
		Write_char( 1, *s );
	    s++;
		Delaynms(1);
	}
}
  
/********************************************************************/
void Disp(void)
{
	LCD_set_xy( 1, 0 );
	while(*line1 != 0x00)
    {
		Write_char( 1, *line1 );
	    line1++;
		Delaynms(1);
	}

	LCD_set_xy( 2, 0 );
	while(*line2 != 0x00)
    {
		Write_char( 1, *line2 );
	    line2++;
		Delaynms(1);
	}

	LCD_set_xy( 3, 0 );
	while(*line3 != 0x00)
    {	
		Write_char( 1, *line3 );
	    line3++;
		Delaynms(1);
	}

	LCD_set_xy( 4, 0 );
	while(*line4 != 0x00)
    {
		Write_char( 1, *line4 );
	    line4++;
		Delaynms(1);
	}

 	line1="";
	line2="";
	line3="";
 	line4="";
}

/******************************************************************************/
void main(void)
{
	unsigned char i;

	line1 = "湖南科技大学";
	line2 = "我们有个家";
	line3 = "大家好";
	line4 = "我们的田地";

 	Lcd_init();//初始化LCD

	Disp();// point for test
	Delaynms(4000);


    Write_char(0,0x80); for(i=0;i<16;i++)  Write_char(1,ma[i]);//16 = 8个汉字
	Delaynms(1000);

//	Write_char(0,0x08);//SLEEP
	LCD_Write_char_string(2,0,ma);//在第2行第0列开始显示
	Delaynms(10000);

//	Write_char(0,0x0C);//WAKE;

	Write_char(0,0x01);//清屏
	Write_char(0,0x36); //图形方式
	//Lcd_img_Cls();
	
	Disp_img(logo);//显示12864图片
	Delaynms(1000);
	Lcd_init();//初始化LCD,从图形显示状态下返回
	LCD_Write_char_string(4,0,ma2);
	while(1);
}
 

⌨️ 快捷键说明

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