本站首页 | 资讯中心 | 软件分类 | 最近更新 | 推荐软件 | 热门软件 | 热门文章   
设为主页
收藏本站
联系我们
| 电子基础 | 单片机学习 | 经验漫谈 | 电子制作 | 网络知识 | 电脑知识 | 建站心得 | 硬件维护 |
绿色软件搜索:   发布软件 | 发布文章 | 雷火范文
当前位置:雷火软件站文章首页单片机学习单片机学习→带字库液晶显示模块LCM12864ZK (c51)
 精彩推荐
 总热门文章排行
 本类热门文章排行
带字库液晶显示模块LCM12864ZK (c51)
作者:清风徐徐  来源于:单片机显示技术网  发布时间:2006-3-31 9:27:22 [ 字体: ]
  /**********************带字库液晶显示模块LCM12864ZK*****************************/
#include <REG51.H>
#include <STDIO.H>

/*********************************************************************/
#define Uchar unsigned char
#define Uint unsigned int
#define Ulong unsigned long
sbit E=P3^0; //对应第8脚
sbit RW=P3^1; //对应第7脚
sbit RS=P3^2; //对应第6脚
sbit BG=P3^3; //背光源正极2脚
Uchar BUSY,hang,lie;

/********************************/
//定义字符串数组 */
/********************************/
code char STR2[]="单片机显示技术网";
code char STR3[]="网址:http://www.mcubbs.net";

/**************************定义函数原型********************************/
void Delayus(Ulong t) ; /*延时函数*/
void BUSYLOOP(); //*判忙函数*//
void Write_command(Uchar CMD,Uchar bb); //*发控制字函数*//
void Write_data(Uchar CMD); //*发数据函数*//
void CHUSHIHUA(); //*初始化函数*//
void CLEAR(); //*清屏*//
void Display( Uchar *ptr,Uchar ddram); //**显字符串函数**//


/*********************************************延时**************************************/
void Delayus(Ulong t)
{int i,j;
for (i=0;i<t;i++)
for (j=0;j<t;j++)
;
}

//*********************判忙函数************************//
void BUSYLOOP()
{ P1=0x0ff;
RS=0;
RW=1;
do {
E=1;
BUSY=P1;
E=0;
}
while(BUSY>0x7F);
}
//*********************写控制字函数****************************//
void Write_command(Uchar CMD,Uchar bb)
{ if(bb)
{BUSYLOOP();}
RS=0;
RW=0;
E=1;
P1=CMD;
Delayus(1);
E=0;
}

//*********************写数据函数****************************//
void Write_data(Uchar CMD)
{ BUSYLOOP();
RS=1;
RW=0;
E=1;
P1=CMD;
Delayus(1);
E=0;
}

//*************************液晶初始化********************************//
void CHUSHIHUA()
{
Delayus(38);
Write_command(0x30,0);
Delayus(1);
Write_command(0x30,0);
Delayus(1);
Write_command(0x0C,1);
Delayus(1);
Write_command(0x01,1);
Delayus(20);
Write_command(0x06,1);
}
/***************************清 屏*************************************/
void CLEAR()
{ RS=0;
RW=0;
E=1;
P1=0x01;
Delayus(1);
E=0;
}
/**************************主函数开始***********************************/
main()
{ CLEAR();
CHUSHIHUA(); //初始化函数//
Display(STR2,0x82); // 上面一行显示一个预定字符串
Display(STR3,0x88);
Delayus(200);
Write_command(0x9C,0); //将光标移到0x9C
Write_command(0x0f,0); //光标处反白闪烁

// write_command(0x08,0); //进入睡眠状态
// delayus(200);
// write_command(0x0C,0); //唤醒

while(1)
{ ; }
}
/*************************主函数结束*************************************/

/*=======================================================
显示字符串
=======================================================*/
void Display(Uchar *ptr,Uchar ddram)
{
Uchar l,i1,x;
l=0;
if(ddram<0x88)
{ hang=0; } //定位行地址:第一行
else if(ddram<0x90)
{ hang=2; } //定位行地址:第三行
else if(ddram<0x98)
{ hang=1; } //定位行地址:第二行
else
{ hang=3; } //定位行地址:第四行

lie=0x0f&ddram; //定位列地址
if(lie>0x07)
{ lie=lie-0x08;}
x=lie*2;
Write_command(ddram,0); // 定位显示起始地址
while ((ptr[l])!='\0')
{l++;}
for (i1=0;i1<l;i1++)
{ Write_data(ptr[i1]); //输出单个字符
x++;
if (x ==0x10)
{ x=0;
hang++;
switch (hang)
{
case 0:Write_command(0x80,0);
break;
case 1:Write_command(0x90,0);
break;
case 2:Write_command(0x88,0);
break;
case 3:Write_command(0x98,0);
}
if (hang>3)
{
Write_command(0x80,0);
hang=0;
}
}
}
}
[ ] [告诉好友] [发表评论] [打 印]
上篇文章:一个单片机串行数据采集/传输模块的设计 
下篇文章:Flash在线烧写实验教程
相关文章
相关软件
特别声明
本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
关于本站 - 下载声明 - 下载帮助 - 广告联系 - 友情连接 - 用户注册
辽ICP备05000878号--丹东市铁通公司提供网络带宽--
个人建站站长邮箱:dd1314666@163.com
Copyright 2005-2008 521n.comAll Rights Reserved
广告咨询QQ8301848有事请留言QQ:1143898512有事Q我