液晶显示模块docxWord文档格式.docx
《液晶显示模块docxWord文档格式.docx》由会员分享,可在线阅读,更多相关《液晶显示模块docxWord文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
背光源地
8
D1
16
BLA
背光源正极
注意事项:
从该模块的正面看,引脚排列从右向左为:
15脚、16脚,然后才是1-14脚(线路板上已经标明):
VDD:
电源正极,4.5-5.5V,通常使用5V电压;
VL:
LCD对比度调节端,电压调节范围为0-5V。
接电源的正极时对比度最弱,接地电源时对比度最高,但对比度过高时会产生“鬼影”,因此通常使用一个10K的电位器来调整对比度,或者直接串接一个电阻到地;
RS:
MCU写入数据或者指令选择端。
MCU要写入指令时,使RS为低电平;
MCU要写入数据时,使RS为高电平;
R/W:
读写控制端。
R/W为高电平时,读取数据;
R/W为低电平时,写入数据;
E:
LCD模块使能信号控制端。
写数据时,需要下降沿触发模块。
D0-D7:
8位数据总线,三态双向。
如果MCU的I/O口资源紧张的话,该模块也可以只使用4位数据线D4-D7接口传送数据。
本充电器就是采用4位数据传送方式;
BLA:
LED背光正极。
需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实测该模块的背光电流为50mA左右;
BLK:
LED背光地端。
DS18B20
反面
Dallas半导体公司的数字化温度传感器DS18B20是世界上第一片支持"
一线总线"
接口的温度传感器,在其内部使用了在板(ON-BOARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
DS18B20具有微型化、低功耗、高性能、抗干扰能力强、可组网等优点,测温分辨率较高,为9~12位,精度为0.5℃。
DS18B20可直接将温度转化成串行数字信号,因此特别适合与单片机配合使用,直接读取温度数据。
目前DS18B20数字温度传感器已经广泛应用于恒温室、粮库、计算机机房温度监控及其他各种温度测控系统中。
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非易失性的温度报警触发器TH和TL和配置寄存器。
DS18B20的外部结构图
DS18B20的引脚介绍
(1)DQ为数字信号输入/输出端;
(2)GND为电源地;
(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
DS18B20的主要特性
(1)适应电压范围更宽,电压范围:
3.0~5.5V,在寄生电源方式下可由数据线供电。
(2)测温范围-55℃~+125℃,在-10℃~+85℃时精度为±
0.5℃。
(3)可编程的分辨率为9~12位,可在至多在750ms内将温度转换成为12位的数字,测温可分辨率为0.0625℃。
(4)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条线即可实现微处理器与DS18B20的双向通讯。
(5)DS18B20支持多点的组网功能,多个DS18B20可以并联在唯一的单线结构上,实现组网多点测温。
数字温度传感器DS18B20与单片机的连接电路非常简单,引脚1(GND)接地,引脚3(VCC)接电源+5V,引脚2(DQ)接单片机输入/输出一个端口,电源+5V和信号线(DQ)间接有一个4.7K上拉电阻。
单片机与温度传感器DS18B20的连接电路图
DS1302
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×
8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源和双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
下图为DS1302的引脚排列,其中Vcc2为后备电源,Vcc1为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc1大于Vcc2+0.2V时,Vcc1给DS1302供电。
当Vcc1小于Vcc2时,DS1302由Vcc2供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;
其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向)。
DS1302的引脚及内部结构如图13所示:
DS1302管脚功能表
引脚号
引脚名称
功能
Vcc2
后备电源
2.3
X1.X2
振荡源,外接32768Hz晶振
GND
地线
TST
复位/片选线
I/O
串行数据输入/输出端(双向)
SCLK
串行数据输入端
Voc1
主电源
DS1302管脚图及内部结构图
DS1302是与单片机连接起来的,其连接图如下:
DS1302与单片机连接图
总体仿真图:
驱动程序:
#include<
intrins.h>
#defineucharunsignedchar
##include<
reg52.h>
defineuintunsignedint
sbitlcd_rs=P2^0;
sbitlcd_en=P2^1;
sbitdo=P2^3;
sbitbeep=P2^2;
sbitdeserts=P2^5;
sbitds_sclk=P2^6;
sbitds_io=P2^7;
sbitwuxian1=P3^0;
sbitwuxian2=P3^5;
sbitwuxian3=P3^6;
sbitwuxian4=P3^7;
sbitkey0=P3^2;
sbitkey1=P3^3;
sbitkey2=P3^4;
sbitkey3=P2^4;
sbitdj11=P1^0;
sbitdj12=P1^1;
sbitdj21=P1^2;
sbitdj22=P1^3;
sbitkey4=P1^4;
sbitkey5=P1^5;
sbitkey6=P1^6;
sbitkey7=P1^7;
sbitacc0=ACC^0;
sbitacc7=ACC^7;
uchartable[]="
20--"
;
uchartable1[]="
:
.*c"
ucharflag,num,n,num1,num2,num3,num4,num5;
uinttemp;
floatf_temp;
charshi,fen,miao,week,nian,yue,ri;
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;
i>
0;
i--)
for(j=110;
j>
j--);
}
voiddelay(uintz)
for(;
z>
z--);
voiddi()
beep=0;
delayms(100);
beep=1;
voidsend(ucharnum)
SBUF=num;
while(!
TI)
TI=0;
voidwrite_byte(ucharad)
uchari;
ACC=ad;
deserts=1;
for(i=8;
{
ds_io=acc0;
ds_sclk=1;
ds_sclk=0;
ACC>
>
=1;
}
ucharread_byte()
ds_io=1;
acc7=ds_io;
returnACC;
voidwrite_time(ucharadd,uchardate)
deserts=0;
ds_sclk=0;
date=date/10*16+date%10;
write_byte(add);
write_byte(date);
ds_sclk=1;
ucharread_time(ucharadd)
uchardate;
date=read_byte();
date=date/16*10+date%16;
returndate;
voidset_time()
write_time(0x8e,0);
write_time(0x80,0);
write_time(0x82,0);
write_time(0x84,0);
write_time(0x86,0);
write_time(0x88,0);
write_time(0x8a,1);
write_time(0x8c,0);
write_time(0xc1,1);
write_time(0xc3,0);
write_time(0xc5,0);
write_time(0xc7,0);
write_byte(0x8e);
write_byte(0x80);
voidds_init()
miao=read_time(0x81);
if(miao&
0x80)
set_time();
voidrespons()
do=0;
delay(50);
do=1;
uchartempread()
uchari,j,dat;
dat=0;
for(i=0;
i<
8;
i++)
do=0;
delay
(1);
do=1;
j=do;
dat=(j<
<
7)|(dat>
1);
delay(4);
returndat;
voidwritebyte(ucharval)
delay
(1);
do=val&
0x01;
delay(6);
val=val>
1;
delay
(1);
voidwrite_com(ucharcom)
lcd_rs=0;
P0=com;
delayms(5);
lcd_en=1;
lcd_en=0;
voidwrite_date(uchardate)
lcd_rs=1;
P0=date;
voidtempchange()
respons();
writebyte(0xcc);
writebyte(0x44);
uintget_temp()
uchara,b;
writebyte(0xbe);
a=tempread();
b=tempread();
temp=b;
temp<
=8;
temp=temp|a;
if(temp>
6348)
temp=65536-temp;
n=1;
else
n=0;
f_temp=temp*0.0625;
temp=f_temp*10+0.5;
returntemp;
voiddisplay(ucharcom,uchardate)
write_com(0x80+0x40+com);
if((date!
=10)&
&
(date!
=11)&
=12))
write_date(0x30+date);
elseif(date==10)
write_date('
-'
);
elseif(date==11)
'
elseif(date==12)
voiddis_temp(uintt)
{
if(n==1)
display(9,10);
else
display(9,11);
i=t/100;
if(i==0)
display(10,12);
display(10,i);
i=t%100/10;
display(11,i);
i=t%100%10;
display(13,i);
voidwrite_sfm(ucharadd,uchardate)
ucharshi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
voidwrite_nyr(ucharadd,uchardate)
charshi,ge;
write_com(0x80+add);
voidwrite_week(charwe)
write_com(0x80+12);
switch(we)
case1:
write_date('
M'
delayms(5);
O'
N'
break;
case2:
T'
U'
E'
case3:
W'
write_date('
D'
break;
case4:
H'
case5:
F'
R'
I'
case6:
S'
A'
case7:
}
voidkeycan()
if(key0==0)
if(key0==0)
{
num++;
while(!
key0);
di();
flag=1;
switch(num)
{
case1:
write_com(0x80+0x40+6);
write_com(0x0f);
break;
case2:
write_com(0x80+0x40+3);
case3:
write_com(0x80+0x40+0);
write_com(0x80+12);
write_com(0x80+9);
write_com(0x80+6);
write_com(0x80+3);
case8:
num=0;
write_com(0x0c);
flag=0;
write_time(0x80,miao);
write_time(0x82,fen);
write_time(0x84,shi);
write_time(0x86,ri);
write_time(0x88,yue);
write_time(0x8a,week);
write_time(0x8c,nian);
}
}
if(num!
=0)
if(key1==0)
delayms(5);
if(key1==0)
while(!
key1);
di();
switch(num)
{
case1:
miao++;
if(miao==60)
miao=0;
write_sfm(6,miao);
write_com(0x80+0x40+6);
case2:
fen++;
if(fen==60)
fen=0;
write_sfm(3,fen);
write_com(0x80+0x40+3);
case3:
shi++;
if(shi==24)
shi=0;
write_sfm(0,shi);
write_com(0x80+0x40+0);
case4:
week++;
if(week==8)
week=1;
write_week(week);
case5:
ri++;
if(ri==32)
ri=1;
write_nyr(9,ri);
write_com(0x80+9);
case6:
yue++;
if(yue==13)
yue=0;
write_nyr(6,yue);
write_com(0x80+6);
case7:
nian++;
if(nian==100)
nian=0;
write_nyr(3,nian);
write_com(0x80+3);
}
if(key2==0)
delayms(5);
if(key2==0)
key2);
di();
miao--;
if(miao==-1)
miao=59;
fen--;
if(fen==-1)
fen=59;
shi--;
if(shi==-1)
shi=23;
week--;
if(week==0)
week=7;
ri--;
if(ri==0)
ri=31;
yue--;
if(yue==0)
yue=12;
write_com(0x80+6);
nian--;
if(nian==-1)
nian=99;
以上程序经测试,可用