LCD12864串行通讯方式驱动

//12864工作于串行方式下,这样只用三个端口就可以实现对液晶的控制
#include"reg52.h"
sbit cs=P1^7; //片选端口定义
sbit sid=P1^6; //写数据线的定义
sbit sclk=P2^3; //时钟线定义
unsigned char t0,m=1,t; //变量定义
/**************************延时函数***********************************/
void delay(unsigned int i) //延时程序,美执行一次所用时间为10US
{
while(i--);
}
/***********************写串行数据*************************************/
void sendbyte(unsigned char byte)
{
unsigned char i;
cs=1; //片选置一,对可以向液晶写数据
for(i=0;i<8;i++) //将一个字节拆分为八次
{
sclk=0; //时钟线置零
sid=(bit)(byte&0x80); //计算出数据的最高位,其他的置零
sclk=1; //时钟线置一,数据写入
byte<<=1; //数据左移以为
}
sclk=0;
delay(200); //延时,12864中不读忙的时候必须用延时
}
/***********************向12864写数据函数********************************/
void write_data(unsigned char dat) //写命令rs=1;rw=0;写数据rs=0;
{
cs=1; //片选置一,可以写数据
sendbyte(0xfa); //写数据前五位为11111,然后是rw,rs,然后是0,一共八位,写0xfa时,为写数据
sendbyte(dat&0xf0); //写入数据高四位
sendbyte(0xf0&(dat<<4)); //写入数据低四位
cs=0; //
}
/***********************向12864写命令函数*************************************/
void write_com(unsigned char com)
{
cs=1; //片选置一,可以写数据
sendbyte(0xf8); //写数据前五位为11111,然后是rw,rs,然后是0,一共八位,写0xf8时,为写命令
sendbyte(com&0xf0); //写入命令高四位
sendbyte(0xf0&(com<<4)); //写入命令低四位
cs=0;
}
/*******************************初始化函数*************************************/
void init()
{
write_com(0x01); //清平
write_com(0x0f); //设置开显示,光标
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //定时器
TR0=1;
EA=1;
ET0=1;

}
/***********************向12864写汉字程序*************************************/
void printf(unsigned char *s) //定义一指针函数
{
while(*s!='\0') //当汉字数据到末尾时会有结束标志‘\0’ ,,未结束时一直循环
{
write_data(*s); //写汉字的数据
s++; //指针加一
}
}
/***********************中断函数*************************************/
void tim() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
if(t0==20)
{
t0=0;
m++;
if(m%5==0)
{
write_com(0x01);
}
if(m==20)
{
m=1;
}
}
}
/***********************主函数*************************************/
void main()
{
init();
while(1)
{
switch(m)
{
case 1:write_com(0x80);

printf("窗前明月光 "); break;
case 2: write_com(0x90);
printf(" 疑是地上霜 "); break;
case 3: write_com(0x88);
printf(" 举头望明月 "); break;
case 4: write_com(0x98);
printf(" 低头思故乡"); break;


case 6:write_com(0x80);
printf(" 河北软件学院 "); break;
case 7: write_com(0x90);
printf(" 五号楼 "); break;
case 8: write_com(0x88);
printf("我的名字 梁鹏飞"); break;
case 9: write_com(0x98);
printf("好好珍惜我的生活"); break;


case 11:write_com(0x80);
printf("相信我们都会有个"); break;
case 12: write_com(0x90);
printf("很好的未来 "); break;
case 13: write_com(0x88);
printf("我们都应该好好的"); break;
case 14: write_com(0x98);
printf("快乐你懂的 "); break;


case 16:write_com(0x80);
printf("他妈的看的头疼 "); break;
case 17: write_com(0x90);
printf("哎~~~~~~~~~ "); break;
case 18: write_com(0x88);
printf("还是好好睡觉吧 "); break;
case 19: write_com(0x98);
printf("晚安喽 哈哈~~ "); break;
}
}
}



相关主题
相关文档
最新文档