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

📄 12864st7920.txt

📁 LCD12864驱动程序
💻 TXT
字号:
lcd液晶12864(ST7920)的串口C51程序(ST7920) 
lcd液晶12864的串口C51程序
由于12864(ST7920)这个显示器用得比较平常,但平常见到的是一些并口的汇编程序,并且也没有对应于12864(ST7920)的并口程序,串口的C51程序极少见,为了方便大家使用,所以本站把它调试了一个出来,大家多多指教!

由于12864(ST7920)这个显示器用得比较平常,但平常见到的是一些并口的汇编程序,并且也没有对应于12864(ST7920)的并口程序,串口的C51程序极少见,为了方便大家使用,所以本站把它调试了一个出来,大家多多指教!

/******************************************************/ 
/*设计:赖卫国 */ 
/* */ 
/* 12864(ST7920)串口驱动程序C51,11.0592M晶振 */ 
/*使用这款LCD应该要注意的问题: */ 
/*一定要在VO与VDD及VSS这三个脚间接一个20K的电位器, */ 
/*电位器的中间脚接VO,其它二脚接VDD和VSS。 */ 
/*然后调节电位器的大小,直到有显示为止。若是不接的话,*/ 
/*显示器可能是一片黑暗,什么也没有显示,发命令也没有反*/ 
/*应的。本程序我已经测试通过了。欢迎大家提出意见。 */ 


//陈仲库搜集于网络  创达科技 
//技术支持:kuzi00@163.com
 /******************************************************/ 
#include <AT89X52.H> 
#include <intrins.h>



#define uint unsigned int 
#define uchar unsigned char



/*12864(ST7920) pins define*/ 
sbit CS=P1^5; 
sbit SID=P1^6; 
sbit SCLK=P1^7; 



void delay_1ms(uint x) 
{ 
uint j; 
uchar i; 
for(j=0;j<x;j++) 
{ 
for(i=0;i<120;i++); 
} 
}



void send_command(uchar command_data) 
{ 
uchar i; 
uchar i_data,temp_data1,temp_data2; 
i_data=0xf8; 
delay_1ms(10); 
CS=1; 
SCLK=0; 
for(i=0;i<8;i++) 
{ 
SID=(bit)(i_data&0x80); 
SCLK=0; 
SCLK=1; 
i_data=i_data<<1; 
} 
i_data=command_data; 
i_data&=0xf0; 
for(i=0;i<8;i++) 
{ 
SID=(bit)(i_data&0x80); 
SCLK=0; 
SCLK=1; 
i_data=i_data<<1; 
} 
i_data=command_data; 
temp_data1=i_data&0xf0; 
temp_data2=i_data&0x0f; 
temp_data1>>=4; 
temp_data2<<=4; 
i_data=temp_data1|temp_data2; 
i_data&=0xf0; 
for(i=0;i<8;i++) 
{ 
SID=(bit)(i_data&0x80); 
SCLK=0; 
SCLK=1; 
i_data=i_data<<1; 
} 
CS=0; 
} 

void send_data(uchar command_data) 
{ 
uchar i; 
uchar i_data,temp_data1,temp_data2; 
i_data=0xfa; 
delay_1ms(10); 
CS=1; 
for(i=0;i<8;i++) 
{ 
SID=(bit)(i_data&0x80); 
SCLK=0; 
SCLK=1; 
i_data=i_data<<1; 
} 
i_data=command_data; 
i_data&=0xf0; 
for(i=0;i<8;i++) 
{ 
SID=(bit)(i_data&0x80); 
SCLK=0; 
SCLK=1; 
i_data=i_data<<1; 
} 
i_data=command_data; 
temp_data1=i_data&0xf0; 
temp_data2=i_data&0x0f; 
temp_data1>>=4; 
temp_data2<<=4; 
i_data=temp_data1|temp_data2; 
i_data&=0xf0; 
for(i=0;i<8;i++) 
{ 
SID=(bit)(i_data&0x80); 
SCLK=0; 
SCLK=1; 
i_data=i_data<<1; 
} 
CS=0; 
}



void lcd_init() 
{ 
uchar command_data; 
delay_1ms(100); 
command_data=0x30; 
send_command(command_data); /*功能设置:一次送8位数据,基本指令集*/ 
command_data=0x04; 
send_command(command_data); /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/ 
command_data=0x0f; 
send_command(command_data); /*显示设定:开显示,显示光标,当前显示位反白闪动*/ 
command_data=0x01; 
send_command(command_data); /*清DDRAM*/ 
command_data=0x02; 
send_command(command_data); /*DDRAM地址归位*/ 
command_data=0x80; 
send_command(command_data); /*把显示地址设为0X80,即为第一行的首位*/ 
}



void display_cpubbs() 
{ 
uchar command_data; 
while(1) 
{ 
command_data=0x01; 
send_command(command_data); /*清DDRAM*/ 
command_data=0x80; 
send_command(command_data); /*把显示地址设为0X80,即为第一行的首位*/ 
command_data=0x68; /*“h”字的编码*/ 
send_data(command_data); 
command_data=0x74; 
send_data(command_data); /*“t”字的编码*/ 
command_data=0x74; 
send_data(command_data); /*“t”字的编码*/ 
command_data=0x70; 
send_data(command_data); /*“p”字的编码*/ 
command_data=0x3a; 
send_data(command_data); /*“:”字的编码*/ 
command_data=0x2f; 
send_data(command_data); /*“/”字的编码*/ 
command_data=0x2f; 
send_data(command_data); /*“/”字的编码*/ 
command_data=0x57; 
send_data(command_data); /*“w”字的编码*/ 
command_data=0x57; 
send_data(command_data); /*“w”字的编码*/ 
command_data=0x57; 
send_data(command_data); /*“w”字的编码*/ 
command_data=0x2e; 
send_data(command_data); /*“.”字的编码*/ 
command_data=0x63; 
send_data(command_data); /*“c”字的编码*/ 
command_data=0x70; 
send_data(command_data); /*“p”字的编码*/ 
command_data=0x75; 
send_data(command_data); /*“u”字的编码*/ 
command_data=0x62; 
send_data(command_data); /*“b”字的编码*/ 

command_data=0x90; 
send_command(command_data); /*把显示地址设为0X90,即为第二行的首位,因为第一行已经满了*/ 
command_data=0x62; 
send_data(command_data); /*“b”字的编码*/ 
command_data=0x73; 
send_data(command_data); /*“s”字的编码*/ 
command_data=0x2e; 
send_data(command_data); /*“.”字的编码*/ 
command_data=0x63; 
send_data(command_data); /*“c”字的编码*/ 
command_data=0x6f; 
send_data(command_data); /*“o”字的编码*/ 
command_data=0x6d; 
send_data(command_data); /*“m”字的编码*/ 

delay_1ms(3000); 

command_data=0x01; 
send_command(command_data); /*清DDRAM*/ 
command_data=0x80; 
send_command(command_data); /*把显示地址设为0X80,即为第一行的首位*/ 

command_data=0xbb; 
send_data(command_data); 
command_data=0xb6; 
send_data(command_data); /*“欢”字的编码*/ 
command_data=0xd3; 
send_data(command_data); 
command_data=0xad; 
send_data(command_data); /*“迎”字的编码*/ 
command_data=0xb7; 
send_data(command_data); 
command_data=0xc3; 
send_data(command_data); /*“访”字的编码*/ 
command_data=0xce; 
send_data(command_data); 
command_data=0xca; 
send_data(command_data); /*“问”字的编码*/ 
command_data=0x90; 
send_command(command_data); /*把显示地址设为0X90,即为第二行的首位,因为第一行已经满了*/ 
command_data=0x63; 
send_data(command_data); /*“c”字的编码*/ 
command_data=0x70; 
send_data(command_data); /*“p”字的编码*/ 
command_data=0x75; 
send_data(command_data); /*“u”字的编码*/ 
command_data=0x62; 
send_data(command_data); /*“b”字的编码*/ 
command_data=0x62; 
send_data(command_data); /*“b”字的编码*/ 
command_data=0x73; 
send_data(command_data); /*“s”字的编码*/ 
command_data=0xc2; 
send_data(command_data); 
command_data=0xdb; 
send_data(command_data); /*“论”字的编码*/ 
command_data=0xcc; 
send_data(command_data); 
command_data=0xb3; 
send_data(command_data); /*“坛”字的编码*/ 
delay_1ms(3000); 
} 
}



main() 
{ 
uchar command_data; 
lcd_init(); 
display_cpubbs(); 
while(1); 
}

⌨️ 快捷键说明

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