标题:
12864液晶显示程序—适合我的51单片机开发板
[打印本页]
作者:
nius
时间:
2015-4-10 01:52
标题:
12864液晶显示程序—适合我的51单片机开发板
#include <reg51.h>
/**********端口定义*************/
sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^5;
#define Date P0 //定义Date口为数据口P0
unsigned char code TV1[]={"这是薛羽豪的液晶"};
unsigned char code TV2[]={"哈哈哈哈哈哈哈哈"};
unsigned char code TV3[]={"056789asdfgh "};
unsigned char code TV4[]={"!@#¥&*不是乱码"};
void Delays(unsigned int x) //延时子函数
{ unsigned int i,j;
for(i=110;i>0;i--)
for(j=x;j>0;j--);
}
void Write_Instruction(unsigned char Parameter) //写指令(Write/Instruction)。。形参(Parameter)
{
RS=0;
RW=0;
E=0;
Date=Parameter;
Delays(5);
E=1;
Delays(5);
E=0;
}
void Write_Date(unsigned char Parameter) //写数据(Write/Date)。。形参(Parameter)
{
RS=1;
RW=0;
E=0;
Date=Parameter;
Delays(5);
E=1;
Delays(5);
E=0;
}
void init_Lcd() //液晶初始化(init/lcd)
{
Write_Instruction(0x01);
Delays(5);
Write_Instruction(0x0c);
Delays(5);
Write_Instruction(0x30);
Delays(5);
}
void Position_Lcd(unsigned char x,unsigned char y) //进入点设定,,液晶显示位置(Lcd/Position)
{
unsigned char Position;
if(x==1)
{x=0x80;}
else if(x==2)
{x=0x90;}
else if(x==3)
{x=0x88;}
else if(x==4)
{x=0x98;}
Position=x+y;
Write_Instruction(Position); //显示地址
}
void main()
{
unsigned char Num1;
RS=0;
RW=0;
E=0;
init_Lcd();
Position_Lcd(1,0);
Num1=0;
while(TV1[Num1]!='\0') //教材P176页讲述了TV1[Num1]!='\0'的意思特别是'\0'的意思("空"在储存器中的存储形式是"\0")
{
Write_Date(TV1[Num1]);
Num1++;
}
Position_Lcd(2,0);
Num1=0;
while(TV2[Num1]!='\0')
{
Write_Date(TV2[Num1]);
Num1++;
}
Position_Lcd(3,0);
Num1=0;
while(TV4[Num1]!='\0')
{
Write_Date(TV3[Num1]);
Num1++;
}
Position_Lcd(4,0);
Num1=0;
while(TV4[Num1]!='\0')
{
Write_Date(TV4[Num1]);
Num1++;
}
while(1);
}
作者:
nius
时间:
2015-4-10 01:52
基于上一个程序改进后具有更快的刷新速度,程序刷新更快
#include <reg51.h>
/**********端口定义*************/
sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^5;
#define Date P0 //定义Date口为数据口P0
unsigned char code TV1[]={"这是薛羽豪的液晶"};
unsigned char code TV2[]={"哈哈哈哈哈哈哈哈"};
unsigned char code TV3[]={"056789asdfgh "};
unsigned char code TV4[]={"!@#¥&*不是乱码"};
void Delays_Lcd(unsigned int x) //延时子函数
{ unsigned int i,j;
for(i=45;i>0;i--)
for(j=x;j>0;j--);
}
void Write_Instruction(unsigned char Parameter) //写指令(Write/Instruction)。。形参(Parameter)
{
RS=0;
RW=0;
E=0;
Date=Parameter;
E=1;
Delays_Lcd(0);
E=0;
}
void Write_Date(unsigned char Parameter) //写数据(Write/Date)。。形参(Parameter)
{
RS=1;
RW=0;
E=0;
Date=Parameter;
E=1;
Delays_Lcd(0);
E=0;
}
void init_Lcd() //液晶初始化(init/lcd)
{
Write_Instruction(0x01);
Write_Instruction(0x0c);
Write_Instruction(0x30);
}
void Position_Lcd(unsigned char x,unsigned char y) //进入点设定,,液晶显示位置(Lcd/Position)
{
unsigned char Position;
if(x==1)
{x=0x80;}
else if(x==2)
{x=0x90;}
else if(x==3)
{x=0x88;}
else if(x==4)
{x=0x98;}
Position=x+y;
Write_Instruction(Position); //显示地址
}
void main()
{
unsigned char Num1;
RS=0;
RW=0;
E=0;
init_Lcd();
Position_Lcd(1,0);
Num1=0;
while(TV1[Num1]!='\0') //教材P176页讲述了TV1[Num1]!='\0'的意思特别是'\0'的意思("空"在储存器中的存储形式是"\0")
{
Write_Date(TV1[Num1]);
Num1++;
}
Position_Lcd(2,0);
Num1=0;
while(TV2[Num1]!='\0')
{
Write_Date(TV2[Num1]);
Num1++;
}
Position_Lcd(3,0);
Num1=0;
while(TV4[Num1]!='\0')
{
Write_Date(TV3[Num1]);
Num1++;
}
Position_Lcd(4,0);
Num1=0;
while(TV4[Num1]!='\0')
{
Write_Date(TV4[Num1]);
Num1++;
}
while(1);
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1