基于单片机的实时时钟Word文件下载.docx
《基于单片机的实时时钟Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的实时时钟Word文件下载.docx(14页珍藏版)》请在冰点文库上搜索。
![基于单片机的实时时钟Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/0b305ebe-c8b9-4adb-8182-3596c5ec2ca8/0b305ebe-c8b9-4adb-8182-3596c5ec2ca81.gif)
本文单片机模块如图所示.主要是由单片机芯片与晶振和复位电路组成的。
是由单片机来控制整个系统.让我们的系统可以正常的运行。
2、显示模块
LM016L液晶模块采用HD44780控制器.HD44780具有功能较强而又简单的指令集.可以实现字符移动.闪烁等功能.LM016L与单片机MCU通讯可采用4位或8位并行传输两种方式.HD44780控制器是由2个8bit的寄存器、显示数据存储(DDRAM)、指令寄存器(IR)、RAM(DR)、地址计数器RAM(AC)、忙标志(BF)、字符发生器ROMA(CGOROM)以及字符发生器RAM(CGRAM)组成。
其中.DR是用来寄存数据的;
IR是用来寄存指令码的.它只能够写入而不能够读出。
其数据是由内部操作自动地写入到CGRAM和DDRAM中来.或者是暂存从CGRAM以及DDRAM中读出的数据.BF为1时.LED模块工作于内部模式.既不会接受数据也不会响应外部的操作指令.DDTAM用来存储显示的字符.能存储80个字符码.CGROM由8位字符码生成5*7点阵字符160中和5*10点阵字符32种.8位字符编码和字符的对应关系.可以查看参考文献(30)中的表4.CGRAM是为用户编写特殊字符留用的.它的容量仅64字节.可以自定义8个5*7点阵字符或者4个5*10点阵字符.AC可以存储DDRAM和CGRAM的地址.如果地址码随指令写入IR,则IR自动把地址码装入AC.同时选择DDRAM或CGRAM但愿.LM016L液晶模块的引脚图如图3.5所示。
图3.51601引脚图
LM016L引脚介绍:
Vss(1脚):
一般接地。
Vdd(2脚):
接电源。
Vee(3脚):
LED显示器对比度调整端口.接地时.其对比度达到最高(当对比度过高时.就会产生“鬼影”.若要正常工作.则可以通过使用一个大小为10K的电位器来调整对比度).接电源时.其对比度降至最弱。
RS(4脚):
RS是寄存器选择端口。
当接低电平时.选择指令寄存器;
接高电平时.选择数据寄存器。
R/W(5脚):
R/W为读写信号线.高电平
(1)时进行读操作.低电平(0)时进行写操作。
E(6脚):
E(或EN)端为使能(enable)端.下降沿使能。
Lcd1602与单片机的接口
3、ds1302时钟芯片
DS1302是DALLAS公司推出的涓流充电时钟芯片。
内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作。
DS1302芯片广脚介绍:
X1、X2为32.768KHz晶振管脚。
GND
为地。
RST复位脚。
I/O数据输入/输出引脚。
SCLK串行时钟。
Vcc1,Vcc2电源供电管脚。
与单片机连接的信号线为:
DS1302_SCLK
接P3^6;
实时时钟时钟线引脚
DS1302_IO
接P3^4;
实时时钟数据线引脚
DS1302_RST
接P3^5;
实时时钟复位线引脚
特别注意DS1302芯片在读取或写入数据时.都是一位一位传送的.并且每传送一位.SCLK信号线要有一个负跳变。
即单片机对SCLK咬先送高电平.再送低电平。
数据时通过IO进行传送的。
单片机与ds1302接口
四、软件程序模块设计
1、Lcd1602模块程序
Lcd1602.h
#ifndef__LCD1602_H__
#define__LCD1602_H__
#include<
reg51.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitrs=P2^6;
sbitrw=P2^5;
sbiten=P2^7;
voiddelay(ucharms);
voidbusy_wait();
voidwrite_lcd_command(ucharcmd);
voidwrite_lcd_data(uchardat);
voidinit_lcd();
voidlcd_showstring(ucharr,ucharc,uchar*str);
#endif
Lcd1602.c
lcd1602.h>
codeucharddram[]={0x80,0xc0};
voiddelay(ucharms)
{
uchari;
while(ms--)
for(i=0;
i<
10;
i++);
}
voidbusy_wait()
ucharlcd_status;
do
{
P0=0xff;
en=0;
rs=0;
rw=1;
en=1;
lcd_status=P0;
}while(lcd_status&
0x80);
voidwrite_lcd_command(ucharcmd)
busy_wait();
en=0;
rw=0;
P0=cmd;
en=1;
_nop_();
en=0;
voidwrite_lcd_data(uchardat)
rs=1;
P0=dat;
voidinit_lcd()
write_lcd_command(0x38);
delay
(1);
write_lcd_command(0x01);
write_lcd_command(0x06);
write_lcd_command(0x0c);
voidlcd_showstring(ucharr,ucharc,uchar*str)
uchari=0;
write_lcd_command(ddram[r]|c);
16;
i++)
write_lcd_data(str[i]);
//for(;
//write_lcd_data('
'
);
2、ds1302模块程序
Ds1302.h
#ifndef__DS1302_H__
#define__DS1302_H__
uchardatatime[7],write_addr[7];
sbitio=P3^4;
sbitsclk=P3^6;
sbitrst=P3^5;
voidds1302_write(ucharaddr,uchardat);
uchards1302_read(ucharaddr);
voidds1302_init();
voidds1302_readtime();
Ds1302.c
ds1302.h>
uchardatatime[7]={0,0x10,0x16,0x21,0x02,0x07,0x16};
//存取数据
voidds1302_write(ucharaddr,uchardat)
ucharn;
sclk=0;
_nop_();
rst=1;
for(n=0;
n<
8;
n++)
io=addr&
0x01;
addr>
>
=1;
sclk=1;
_nop_();
sclk=0;
}
io=dat&
dat>
rst=0;
uchards1302_read(ucharaddr)
ucharn,dat,dat1;
dat1=io;
//dat=dat>
1;
//dat|=dat1<
<
7;
dat=(dat1<
7)|(dat>
1);
sclk=1;
io=0;
io=1;
returndat;
voidds1302_init()
ucharn,addr=0x80;
ds1302_write(0x8e,0x00);
ds1302_write(addr,datatime[n]);
addr+=2;
ds1302_write(0x8e,0x80);
voidds1302_readtime()
ucharn,addr=0x81;
datatime[n]=ds1302_read(addr);
3、主函数程序模块设计
string.h>
#defineuintunsignedint
uchar*week[]={"
sun"
"
mon"
tus"
wen"
thu"
fri"
sat"
};
ucharlcd_buf_1[]="
data00-00-00"
;
ucharlcd_buf_2[]="
time00:
00:
00"
externvoidds1302_readtime();
externds1302_init();
externvoidinit_lcd();
externvoidlcd_showstring(ucharr,ucharc,uchar*str);
externuchardatatime[7];
voidformat_datatime(uchard,uchar*a)
*a=(d>
4)+'
0'
*(a+1)=(d&
0x0f)+'
voidmain()
init_lcd();
//ds1302_init();
while
(1)
ds1302_readtime();
format_datatime(datatime[6],lcd_buf_1+5);
format_datatime(datatime[4],lcd_buf_1+8);
format_datatime(datatime[3],lcd_buf_1+11);
strcpy(lcd_buf_1+13,week[datatime[5]-1]);
//
format_datatime(datatime[2],lcd_buf_2+5);
format_datatime(datatime[1],lcd_buf_2+8);
format_datatime(datatime[0],lcd_buf_2+11);
lcd_showstring(0,0,lcd_buf_1);
lcd_showstring(1,0,lcd_buf_2);
五、模拟仿真图
六.参考文献
[1]欧伟明.何静.凌云,刘剑.单片机原理与应用系统设计[M].北京:
电子工业出版社.2009:
268-298.
[2]楼然苗.李光飞.单片机课程设计指导[M].北京:
北京航空航天大学出版社.2007.7:
15-36.
[3]林伸茂.8051单片机彻底研究——实习篇[M].北京:
中国电力出版社.2006:
12-38.
[4]张萌.和湘.姜斌.单片机应用系统开发综合实例[M].北京:
清华大学出版社.2007.7:
23-46.
[5]鲍可.C8051F单片机原理及应用[M].北京:
中国电力出版社.2006.1:
56-65
[6]谭浩强.C程序设计[M].北京:
清华大学出版社.2005:
18-62.
[7]彭伟单片机C语言程序设计实训100例—基于8051+proteus仿真2012.10
[8]赵广元proteus辅助的单片机原理实践——基础设计、课程设计。
毕业设计