LCD字符型液晶显示器控制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);//允许写
}