LCD字符型液晶显示器控制

  • 格式:docx
  • 大小:798.40 KB
  • 文档页数:14

下载文档原格式

  / 14
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

LCD字符型液晶显示器控制

实现功能:

在实验平台上扩展一块LCD点阵字符型液晶显示器,要求:设计接口电路并编程使液晶显示器显示“当前时间”;并用按键输入与或修改时间。

工作原理及设计思路:

点阵字符型液晶显示器是专门用于显示数字、字母图形符号及少量自定义字符的显示器。在zks-03实验仪上有一标准的LCD液晶显示器接口J4,标注为DS1602。它与P87C52X2单片机以总线方式连接,其硬件连接如图1所示。

图1

由此可以看出LCD的命令寄存器的地址为:0xf800而数据寄存器的地址是:

0xf801。

实验箱上的J4接口如图4所示:

J4 J5

DS1602(SIP16) LCD_L

从左到右对应的管脚分别为:

1:GND

2:VCC

3:V0——接0~5V电压,调节LCD的对比度(实验箱上让它接地,使对比度达到最大)

4:RS——寄存器选择:“0”选指令寄存器;“1”选数据寄存器

5:R/W——“1”读操作;“0”写操作

6:EN——使能信号

7~14:DB0~DB7——八位双向数据信号线

15~16:LCD背光电源

将液晶显示器与J4接口对应连接好,编写读写程序,便对液晶显示器进行控制。

电路仿真

程序

#include

#define uint unsigned int

#define uchar unsigned char

uchar a,miao,shi,fen,ri,yue,nian,week,flag,temp,key1n; #define yh 0x80 //第一行的初始位置

#define er 0x80+0x40 //第二行初始位置

//sbit cs1=P3^7;

//sbit ledk=P2^5;

sbit dula=P2^6;

sbit wela=P2^7;

sbit wr=P1^1;

sbit rs=P1^0;

sbit en=P2^5;

sbit SCLK=P2^1; // 6 P1.1

sbit IO=P2^0; // 7 P1.0

sbit RST=P2^4; //时钟5 P1.2

sbit ACC0=ACC^0;

sbit ACC7=ACC^7;

sbit key=P3^7;

sbit key1=P3^0;

sbit key2=P3^1;

sbit key3=P3^2;

uchar code tab1[]={"2009- - THU"};

uchar code tab2[]={" : : "};

void delay(uint xms)//延时函数

{

uint x,y;

for(x=xms;x>0;x--)

for(y=110;y>0;y--);

}

/******************液晶写入************************/ write_1602com(uchar com)//液晶写入指令函数

{

rs=0;//置为写入命令

P0=com;//送入数据

delay(1);

en=1;//拉高使能端

delay(1);

en=0;//完成高脉冲

}

write_1602dat(uchar dat)

{

rs=1;//置为写入数据

P0=dat;//送入数据

delay(1);

en=1;

delay(1);

en=0;

}

/*********************over***********************/

/********************ds1302****************************/ void write_byte(uchar dat)

{

ACC=dat;

RST=1;

for(a=8;a>0;a--)

{

IO=ACC0;

SCLK=0;

SCLK=1;

ACC=ACC>>1;

}

}

uchar read_byte()

{

RST=1;

for(a=8;a>0;a--)

{

ACC7=IO;

SCLK=1;

SCLK=0;

ACC=ACC>>1;

}

return (ACC);

}

void write_1302(uchar add,uchar dat)

{

RST=0;

SCLK=0;

RST=1;

write_byte(add);

write_byte(dat);

SCLK=1;

RST=0;

}

uchar read_1302(uchar add)

{

uchar temp;

RST=0;

SCLK=0;

RST=1;

write_byte(add);

temp=read_byte();

SCLK=1;

RST=0;

return(temp);

}

uchar BCD_Decimal(uchar bcd)

{

uchar Decimal;

Decimal=bcd>>4;

return(Decimal=Decimal*10+(bcd&=0x0F)); }

void ds1302_init()

{

RST=0;

SCLK=0;

write_1302(0x80,miao|0x00);//允许写

}