lcd液晶12232F的串口C51程序(ST7920)
扫描二维码
随时随地手机看文章
由于12232F这个显示器用得比较平常,但平常见到的是一些并口的汇编程序,并且也没有对应于12232F的并口程序,串口的C51程序极少见,为了方便大家使用,所以本站把它调试了一个出来,大家多多指教!
/******************************************************/
/**/
/*12232F串口驱动程序C51,11.0592M晶振*/
/*使用这款LCD应该要注意的问题:*/
/*一定要在VO与VDD及VSS这三个脚间接一个20K的电位器,*/
/*电位器的中间脚接VO,其它二脚接VDD和VSS。*/
/*然后调节电位器的大小,直到有显示为止。若是不接的话,*/
/*显示器可能是一片黑暗,什么也没有显示,发命令也没有反*/
/*应的。本程序我已经测试通过了。欢迎大家提出意见。*/
/******************************************************/
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
/*12232fPINsdefine*/
sbitCS=P1^5;
sbitSID=P1^6;
sbitSCLK=P1^7;
voiddelay_1ms(uintx)
{
uintj;
uchari;
for(j=0;j
for(i=0;i<120;i++);
}
}
voidsend_command(ucharcommand_data)
{
uchari;
uchari_data,data1,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;
data1=i_data&0xf0;
data2=i_data&0x0f;
data1>>=4;
data2<<=4;
i_data=data1|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;
}
voidsend_data(ucharcommand_data)
{
uchari;
uchari_data,data1,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;
data1=i_data&0xf0;
data2=i_data&0x0f;
data1>>=4;
data2<<=4;
i_data=data1|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;
}
voidlcd_init()
{
ucharcommand_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,即为第一行的首位*/
}
voiddisplay_cpubbs()
{
ucharcommand_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()
{
ucharcommand_data;
lcd_init();
display_cpubbs();
while(1);
}