单片机LCD12864
时间:08-20
来源:互联网
点击:
/*******************************************************************************
* 描述: *
* 12864标准字库液晶演示 数据p0,控制p2
* 普中科技开发板 *
********************************************************************************/
//2011年8月20日 下午 并行操作
#include<reg51.h>
#include<intrins.h>
#include<stdlib.h>
#define uchar unsigned char
#define unit unsigned int
//端口定义
#define LCD_data P0 //数据口
sbit LCD_RS=P2^6; //寄存器选择输入
sbit LCD_RW=P2^5; //LCD读写控制
sbit LCD_EN=P2^7; //LCD使能控制
sbit LCD_PSB=P3^2; //串并行方式控制
sbit LCD_RST = P3^7; //液晶复位端口
uchar code dis1[]={"制作人:锦程"};
uchar code dis2[]={"2011.8.20"};
uchar code dis3[]={"星期六"};
uchar code dis4[]={"调试LCD12864"};
void delay_1ms(unit z)
{
unit x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
//写指令数据到LCD
//RS=L,RW=L,E=高脉冲,D0-d7=指令码
void write_cmd(uchar cmd)
{
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
P0=cmd;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
//写显示数据到LCD
//RS=H,RW=L,E=高脉冲,D0-d7=数据
void write_data(uchar date)
{
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=date;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
//设置显示位置
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if(X==0)
{X=0x80;}
else if(X==1)
{X=0x90;}
else if(X==2)
{X=0x88;}
else if(X==3)
{X=0x98;}
pos=X+Y;
write_cmd(pos);//显示地址
}
//LCD初始化设定
void lcd_init()
{
LCD_PSB=1; //并口方式
write_cmd(0x30); //基本指令操作
// delay_1ms(5);
write_cmd(0x0c); //显示开,关光标
// delay_1ms(5);
write_cmd(0x01); //清除LCD的显示内容
// delay_1ms(5);
}
main()
{
unit k;
LCD_RST=0;
delay_1ms(40);
LCD_RST=1;
delay_1ms(10);
lcd_init();
lcd_pos(0,0); //设置显示位置为第1行的第1个字符
k=0;
while(dis1[k]!='\0')
{
write_data(dis1[k]);//显示字符
k=k+1;
}
lcd_pos(1,0); //设置显示位置为第2行的第1个字符
k=0;
while(dis2[k]!='\0')
{
write_data(dis2[k]);//显示字符
k++;
}
lcd_pos(2,0); //设置显示位置为第3行的第1个字符
k=0;
while(dis3[k]!='\0')
{
write_data(dis3[k]);//显示字符
k++;
}
lcd_pos(3,0); //设置显示位置为第4行的第1个字符
k=0;
while(dis4[k]!='\0')
{
write_data(dis4[k]);//显示字符
k++;
}
while(1)
{}
}
* 描述: *
* 12864标准字库液晶演示 数据p0,控制p2
* 普中科技开发板 *
********************************************************************************/
//2011年8月20日 下午 并行操作
#include<reg51.h>
#include<intrins.h>
#include<stdlib.h>
#define uchar unsigned char
#define unit unsigned int
//端口定义
#define LCD_data P0 //数据口
sbit LCD_RS=P2^6; //寄存器选择输入
sbit LCD_RW=P2^5; //LCD读写控制
sbit LCD_EN=P2^7; //LCD使能控制
sbit LCD_PSB=P3^2; //串并行方式控制
sbit LCD_RST = P3^7; //液晶复位端口
uchar code dis1[]={"制作人:锦程"};
uchar code dis2[]={"2011.8.20"};
uchar code dis3[]={"星期六"};
uchar code dis4[]={"调试LCD12864"};
void delay_1ms(unit z)
{
unit x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
//写指令数据到LCD
//RS=L,RW=L,E=高脉冲,D0-d7=指令码
void write_cmd(uchar cmd)
{
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
P0=cmd;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
//写显示数据到LCD
//RS=H,RW=L,E=高脉冲,D0-d7=数据
void write_data(uchar date)
{
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=date;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
//设置显示位置
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if(X==0)
{X=0x80;}
else if(X==1)
{X=0x90;}
else if(X==2)
{X=0x88;}
else if(X==3)
{X=0x98;}
pos=X+Y;
write_cmd(pos);//显示地址
}
//LCD初始化设定
void lcd_init()
{
LCD_PSB=1; //并口方式
write_cmd(0x30); //基本指令操作
// delay_1ms(5);
write_cmd(0x0c); //显示开,关光标
// delay_1ms(5);
write_cmd(0x01); //清除LCD的显示内容
// delay_1ms(5);
}
main()
{
unit k;
LCD_RST=0;
delay_1ms(40);
LCD_RST=1;
delay_1ms(10);
lcd_init();
lcd_pos(0,0); //设置显示位置为第1行的第1个字符
k=0;
while(dis1[k]!='\0')
{
write_data(dis1[k]);//显示字符
k=k+1;
}
lcd_pos(1,0); //设置显示位置为第2行的第1个字符
k=0;
while(dis2[k]!='\0')
{
write_data(dis2[k]);//显示字符
k++;
}
lcd_pos(2,0); //设置显示位置为第3行的第1个字符
k=0;
while(dis3[k]!='\0')
{
write_data(dis3[k]);//显示字符
k++;
}
lcd_pos(3,0); //设置显示位置为第4行的第1个字符
k=0;
while(dis4[k]!='\0')
{
write_data(dis4[k]);//显示字符
k++;
}
while(1)
{}
}
LCD 相关文章:
- 采用灵活的汽车FPGA 提高片上系统级集成和降低物料成本(04-28)
- 从LCD电极读数的单片机接口技术(01-15)
- 嵌入式Linux下彩色LCD驱动的设计与实现(03-09)
- 基于FPGA的液晶显示控制器设计(02-17)
- LCD部分专业术语解释(03-06)
- 点阵LCD的驱动显控原理(上册)(03-20)