📄 s12864.c.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 + -