基于51单片机的ds1302与LM016L液晶时钟设计Word格式.docx
- 文档编号:6435883
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:16
- 大小:119.43KB
基于51单片机的ds1302与LM016L液晶时钟设计Word格式.docx
《基于51单片机的ds1302与LM016L液晶时钟设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机的ds1302与LM016L液晶时钟设计Word格式.docx(16页珍藏版)》请在冰点文库上搜索。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
2)X1、X2:
振荡源,外接32.768kHz晶振。
3)RST:
复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;
其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc>
2.0V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
4)I/O为串行数据输入输出端(双向)。
5)SCLK为时钟输入端。
2.2时钟电路
图.6
3.LM016L液晶
图7.LM016L引脚图
LM016L与1602使用方法相同。
引脚说明:
引脚
符号
功能说明
1
VSS
一般接地
2
VDD
接电源(+5V)
3
V0
液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
4
RS
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
5
R/W
R/W为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
6
E
E(或EN)端为使能(enable)端,下降沿使能。
7
DB0
底4位三态、双向数据总线0位(最低位)
8
DB1
底4位三态、双向数据总线1位
9
DB2
底4位三态、双向数据总线2位
10
DB3
底4位三态、双向数据总线3位
11
DB4
高4位三态、双向数据总线4位
12
DB5
高4位三态、双向数据总线5位
13
DB6
高4位三态、双向数据总线6位
14
DB7
高4位三态、双向数据总线7位(最高位)(也是busyflang)
电路接口说明:
AT889C51的P0口作为数据的输出端,P3.5和P3.6,P3.7作为控制信号的输出端。
三.软件设计
3.1编程语言及编程软件的选择
本设计选择C语言作为编程语言。
C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。
而汇编语言使用起来并没有这么方便。
本设计选用了Keil作为编程软件,.KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
3.2时间的显示
ML016L和1602一样,都是两行十六列的液晶显示屏。
通过程序对ML016L进行初始化后,通过写指令和写数据的操作就可以再液晶屏上显示出对应的数据,而时钟数据则是从DS1302获取。
这样可以显示出时间。
四.程序
#include<
reg52.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitrs=P2^0;
//1602命令\数据选择端
sbite=P2^1;
//1602使能端
sbitsck=P3^6;
//DS1302
sbitio=P3^7;
//DS1302数据端
sbitrst=P3^5;
//DS1302CE端RST的功能
uinttemp;
//定义整型的温度数据
floatf_temp;
ucharcodenum[]="
0123456789"
;
//定义浮点型的温度数据
ucharcodenian[]="
20--"
ucharcodeshi[]="
:
"
ucharread_add[]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
//DS1302读数据地址端
ucharwrite_add[]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};
//DS1302写数据地址端
uchartime_data[]={11,1,12,5,18,00,00};
//设置初始时间
uchardisp[14];
//定义数组
voiddelayms(uintz)//毫秒级延时函数
{
uinti,j;
for(i=z;
i>
0;
i--)
for(j=120;
j>
j--);
}
voiddelayus(uinttime)//微秒级延时函数
while(time--);
//1602液晶
voidwrite_com(ucharcom)//写指令函数
rs=0;
P0=com;
delayms(5);
e=1;
e=0;
voidwrite_data(uchardate)//写数据函数
rs=1;
P0=date;
voidinit()//液晶初始化函数
ucharnum;
write_com(0x38);
write_com(0x06);
write_com(0x0c);
write_com(0x01);
write_com(0x80+0x40);
for(num=0;
num<
8;
num++)
{
write_data(shi[num]);
delayms
(1);
}
write_com(0x80);
10;
num++)
write_data(nian[num]);
}
//DS1302
voidwrite_ds1302_byte(uchardat)//写一个字节函数
uchari;
for(i=0;
i<
i++)
{
sck=0;
io=dat&
0x01;
dat=dat>
>
1;
sck=1;
}
}
voidwrite_ds1302(ucharadd,uchardat)//写一个地址和数据函数
rst=0;
_nop_();
sck=0;
rst=1;
write_ds1302_byte(add);
write_ds1302_byte(dat);
io=1;
sck=1;
ucharread_ds1302(ucharadd)//读地址函数
uchari,value;
value=value>
if(io)
value=value|0x80;
io=0;
returnvalue;
voidread_rtc(void)//读时钟函数
7;
time_data[i]=read_ds1302(read_add[i]);
}
voidz(void)//周
write_com(0x80+0x40+9);
switch(disp[2])
case1:
write_data('
M'
);
delayms(5);
write_data('
o'
n'
break;
case2:
T'
u'
e'
case3:
W'
case4:
h'
case5:
F'
r'
i'
case6:
S'
a'
t'
case7:
voidtime_change(void)//时钟处理函数
disp[0]=time_data[0]%16;
//年
disp[1]=time_data[0]/16;
disp[2]=time_data[1]%16;
//周
disp[3]=time_data[1]/16;
disp[4]=time_data[2]%16;
//月
disp[5]=time_data[2]/16;
disp[6]=time_data[3]%16;
//日
disp[7]=time_data[3]/16;
disp[8]=time_data[4]%16;
//时
disp[9]=time_data[4]/16;
disp[10]=time_data[5]%16;
//分
disp[11]=time_data[5]/16;
disp[12]=time_data[6]%16;
//秒
disp[13]=time_data[6]/16;
}
voiddisplay()//时钟显示函数
write_com(0x80+2);
//年
write_data(0x30+disp[1]);
write_data(0x30+disp[0]);
z();
//周
write_com(0x80+5);
//月
write_data(0x30+disp[5]);
write_data(0x30+disp[4]);
write_com(0x80+8);
//日
write_data(0x30+disp[7]);
write_data(0x30+disp[6]);
write_data(0x30+disp[9]);
write_data(0x30+disp[8]);
write_com(0x80+0x40+3);
//分
write_data(0x30+disp[11]);
write_data(0x30+disp[10]);
write_com(0x80+0x40+6);
//秒
write_data(0x30+disp[13]);
write_data(0x30+disp[12]);
/*write_com(0x80+0x40+9);
write_data(0x30+disp[2]);
*/
voidmain()
init();
write_com(0x80+14);
write_data('
.'
//set_rtc();
while
(1)
read_rtc();
display();
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 ds1302 LM016L 液晶 时钟 设计