标题:
LCD12864串行显示程序。只需要2根线
[打印本页]
作者:
腾飞的龙
时间:
2015-7-29 12:45
标题:
LCD12864串行显示程序。只需要2根线
/*****************************************************
功能:串行方式12864显示程序。只需要2根线。
5脚的SID(数据)和6脚CLK(时钟)。1脚接地,2脚接VCC
3脚接可调电阻,15脚PSB接地,17脚RET接VCC,19脚
接VCC,20脚接地。其他引脚悬空
单片机:STC12C5608AD
晶振 :12M
*****************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit SID=P2^0;
sbit SCLK=P2^1;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=210;y>0;y--);
}
/****************************************************
功能 : 按照液晶的串口通信协议,发送一个字节数据
*****************************************************/
void sendbyte(uchar zdata)
{
uint i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
SID = 1;
}
else
{
SID = 0;
}
SCLK = 0;
delay(2);
SCLK = 1;
}
}
/******************************************************
功能 : 写串口指令
***************************************************/
void write_com(uchar cmdcode)
{
sendbyte(0xf8);//写串口指令
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delay(2);
}
/*****************************************************
功能 : 写串口数据
**************************************************/
void write_data(uchar Dispdata)
{
sendbyte(0xfa);//写串口数据
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}
/***************************************************
功能 : 初始化函数
******************************************************/
void lcdinit()
{
delay(200);
write_com(0x30);
delay(10);
write_com(0x0c);
write_com(0x01);
delay(10);
}
/**************************************************
功能 : 显示字符串
****************************************************/
void hzkdis(uchar code *s)
{
while(*s>0)
{
write_data(*s);
s++;
delay(10);
}
}
/*************************************************
功能 : 显示子函数
****************************************************/
void Test()
{
write_com(0x03);
delay(50);
write_com(0x81);
hzkdis(" MCU-51");
write_com(0x91);
hzkdis("************");
write_com(0x89);
hzkdis("我爱单片机!");
write_com(0x98);
hzkdis("************");
}
/*************************************************
--任意位置显示一个汉字---
***************************************************/
void hz_disp(uchar line,uchar row,uchar hz1,uchar hz2)
{
//line行1-4,row列0-7,hz1汉字的高8位,hz2,汉字的低8位
write_com(0x01); // 清除显示,并且设定地址指针为00H
switch(line)
{
case 1:{write_com(0x80+row);write_data(hz1);write_data(hz2);break;}
case 2:{write_com(0x90+row);write_data(hz1);write_data(hz2);break;}
case 3:{write_com(0x88+row);write_data(hz1);write_data(hz2);break;}
case 4:{write_com(0x98+row);write_data(hz1);write_data(hz2);break;}
}
}
/*************************************************
功能 : 主函数
******************************************************/
void Main()
{
lcdinit();
delay(10);
while(1)
{
// hz_disp(4,6,32,8) ;
write_com(0x98);
hzkdis("****大爱无疆**** ");
Test();
delay(5000);
}
}
复制代码
作者:
xfy
时间:
2015-7-29 12:55
正学习中
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1