首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

单片机LCD12864

单片机LCD12864

/*******************************************************************************
*  描述:                                                                       *
*      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)
{}
}
返回列表