分享

12864液晶显示C程序

 共同成长888 2014-06-04

12864液晶显示C程序

//本程序使用带中文字库的液晶显示器LCD12864
#include <REG52.H>
#include <intrins.H>

//定义引脚连接

#define LCD_DATA P0 //数据口
sbit RS = P3^5; //并行的指令/数据选择信号, H数据, L命令
sbit RW = P3^6; //并行读写选择信号, H读, L写
sbit E = P3^4; //并行使能端, H有效, L无效
sbit PSB = P3^7; //串并行选择端,H选择并行,L选择串行
sbit ff=P1^7; //忙碌标志

//待显示的内容

unsigned char code Tab1[]={"机会总是留给准备"};
unsigned char code Tab2[]={"好的人!!" };
unsigned char code Tab3[]={" 晓宇电子" };
unsigned char code Tab4[]={"TEL: 15516902671"};

//延时子程序

void Delay1mS(unsigned int tt) //延时tt毫秒
{
unsigned char i;
while(tt--)
for(i=113;i>0;i--); ;
}

bit CheckBusy() //读BF标志位,检查LCD是否就绪
{
RS=0;
_nop_();
RW=1;
_nop_();
E=1;
_nop_();

if(LCD_DATA&0x80)
return 1;
else
return 0;
}

void Wait() //等待LCD就绪
{
while(CheckBusy()==1)ff=0;
ff=1;
}

/*unsigned char Read_Data() //读数据
{
Wait();
RS=1;
RW=1;
E=1;
_nop_();
return LCD_DATA;
}
*/
Write_Data(unsigned char dat) //写一个字节数据
{

Wait();
RS=1;
RW=0;
E=1;
_nop_();
LCD_DATA=dat;
E=0;
_nop_();
}

Write_Command(unsigned char dat) //写命令
{
Wait();
RS=0;
RW=0;
E=1;
_nop_();
LCD_DATA=dat;
E=0;
_nop_();
}

Write_String(unsigned char *p) //写字符串
{
char cnt=0;
while(*(p+cnt)!='\0')
{
Write_Data(*(p+cnt));
cnt++;
}
}

void LCD_Init() //LCD初始化
{
Write_Command(0x30);//基本指令, 扩充指令为34H
Delay1mS(1);
Write_Command(0x0c);//显示开, 关光标 .开光标0X0E
Delay1mS(1);
Write_Command(0x01);//清屏
Delay1mS(1);
}

void Set_Position(unsigned char x, unsigned char y) //设置待显示的位置
{
unsigned char p;
switch(x%4)
{
case 0: p = 0x80; break; //第一行开始地址
case 1: p = 0x90; break; //第二行
case 2: p = 0x88; break; //第三行
case 3: p = 0x98; break; //第四行
}
p += y;
Write_Command(p);
}

main()
{
PSB=1; //并行
LCD_Init();
Set_Position(0,0);
Write_String(Tab1);
Set_Position(1,0);
Write_String(Tab2);
Set_Position(2,0);
Write_String(Tab3);
Set_Position(3,0);
Write_String(Tab4);
while(1);
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多