新手求助,怎样用1602显示ds1302和lcd1602的时间

基于 AT89S52、DS1302、LCD1602 的 时钟 日历 闹钟(含C源文件、详细程序摘要) - 单片机/处理器 - 电子工程网
当前位置: &
> 基于 AT89S52、DS1302、LCD1602 的 时钟 日历 闹钟(含C源文件、详细程序摘要)
查看: 3653|回复: 17
积分6802帖子
在网上下的程序,针对自己的学习板修改了引脚的定义,并实现/增加了以下功能:1、设置参数其间光标闪烁等待的功能。& &网上下的原程序无此功能,设置日期、时间时不知道光标移到哪?当前选中哪个参数,很不方便。& &于是我修改了一下设置参数其间光标显示特性为“显示+闪烁”,并增加了等待按键的语句就实现了。 2、增加了一个按键——确认键 S4。& &原程序只有3个按键,每次一进入设置参数模式后,都要进入到设置闹钟模式选中字符“@”再按一下加数键或减数键才能返回到正常显示模式,这样至少要按9次S1键(未进入设置闹钟模式、并且无调整过参数大小的情况),或者11次S1键+1次S2/S3键(有进入过设置闹钟的情况、并且无调整过参数大小的情况)。可见会按到你烦。& &于是我增加了一个按键——确认键 S4,这样每次进入设置参数模式后,一按S4键就可返回到正常显示模式。 3、增加了闹钟记忆功能。& &原程序虽然可以设置闹钟,但每当复位、关断电源后又重新接上电源时原来设置好的闹钟时间就掉失了,要重新设置。& &于是我增加了闹钟记忆功能,把设置好的闹钟时间及闹钟开/关状态保存下来,重新接电后就是断电前设置的状态。 注:使用本程序要注意的地方:<font color="#、引脚定义时,DS1302、1602 接到 AT89S52 的哪个引脚。 <font color="#、引脚定义部分并未指明 LCD1602 的8位数据线接到的哪个 I/O 口,使用前记得要改为你自己的接法。& &我的学习板接的是P2口,变量P2涉及到以下函数:& &void write_com(uchar com)& & //写入lcd显示方式& &void write_data(uchar date)&&//向lcd1602写入数据
主要芯片:AT89S52、DS1302、LCD1602 一、系统功能:1、&&用液晶屏 LCD1602 分两行显示“ 年、月、日、周日、时、分、秒 ”,格式如下:& && && & Fri&&15:18:36& & 2、&&还可以设置1个闹钟。3、&&日期、时间、闹钟均可通过按键来调整。4、&&闹钟时间及开关状态可保存,即关机后再开机会显示上次关机前闹钟的设置5、&&共4个独立按键:S1:功能键。用来选择要更改的项目(年、月、日、周日、时、分、秒、闹钟)。S2:加数键。按1下则数值加1。S3:减数键。按1下则数值减1。S4:确认键。在设置参数模式下,一按此键程序即返回到正常显示模式的状态。 在设置闹钟模式下,屏幕第二行显示的格式:@ NO 00:00:00
20:39:37 上传
正常显示模式
20:39:42 上传
设置闹钟模式
20:45:05 上传
下载次数: 292
下载积分: 积分 -1
494.96 KB, 下载次数: 292, 下载积分: 积分 -1
售价: 3 积分 &[]
C源程序、及摘要
500 字节以内
不支持自定义 Discuz! 代码
积分6802帖子
以前未试过利用时钟芯片DS1302来编时钟程序,通过这次修改程序、增加功能,编写程序摘要文档使我更加理解程序的功能及执行过程,同时也加深了对 DS1302、LCD1602&&的了解。
看来编写文档,很好!很好!
积分6802帖子
附件中C源文件生成的HEX文件显示达到9KB之大(我是用 Keil uVision3&&来编的),但程序中并未增加以下功能:
1、显示“AM”、“PM” 的功能。
2、12小时制与24小时制之间切换的功能,现在只能以24小时制来显示。
3、在调整参数大小的过程中,不能通过长按加减键来实现自动快速加减数。
4、只能设置1个闹钟,不能设置多个。
5、没有秒表功能。
6、闹钟铃声只有“嘀嘀”声,没有乐曲。
7、也不能通过与PC机连接,进行由PC机来在线实时修改时钟日历的参数。
积分6802帖子
还可以再加上懒人闹钟的功能。
地主, 积分 1051, 距离下一级还需 1949 积分
积分1051帖子
学习O(∩_∩)O谢谢
佃户, 积分 32, 距离下一级还需 68 积分
积分32帖子
谢谢& && && && && && && && && &&&
佃户, 积分 7, 距离下一级还需 93 积分
富农, 积分 784, 距离下一级还需 216 积分
积分784帖子
楼主真热心,分享这么好的嵌入式系统资料,多谢!
佃户, 积分 24, 距离下一级还需 76 积分
积分24帖子
谢谢你提供好的资料,学习学习~
佃户, 积分 56, 距离下一级还需 44 积分
积分56帖子
佃户, 积分 32, 距离下一级还需 68 积分
积分32帖子
看看,,,,
地主, 积分 1655, 距离下一级还需 1345 积分
积分1655帖子
,,,,,,,,,,
佃户, 积分 32, 距离下一级还需 68 积分
积分32帖子
卡卡看看。。。。
贫农, 积分 116, 距离下一级还需 84 积分
积分116帖子
这个帖子怎么收藏???
贫农, 积分 107, 距离下一级还需 93 积分
积分107帖子
楼上看什么?
佃户, 积分 44, 距离下一级还需 56 积分
积分44帖子
學習了,謝謝版主分享!!
佃户, 积分 36, 距离下一级还需 64 积分
积分36帖子
佃户, 积分 38, 距离下一级还需 62 积分
积分38帖子您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
基于DS1302和LCD1602的可调数字钟设计.doc31页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:200 &&
你可能关注的文档:
··········
··········
学习情境2-可调式数字钟
基于DS1302和LCD1602的可调数字钟
前面的任务中我们学会了使用DS1302,知道了如何在单片机系统中的连接,也详细的学习了如何得到DS1302的时钟,并且我们使用了16个数码管把年月日和时分秒实时地显示出来。但数码管的显示毕竟有其自身的缺陷,现在在工业控制的各个环节,都使用液晶进行人机联系。
在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单
3.1任务设计要求和设计原理
一、设计要求
1、利用专用时钟芯片DS1302获得秒、分、时、日、月、年等时间单位。
2、用液晶显示芯片LCD1602实时显示时间
3、能通过外部按键调节时间
4、利用Proteus软件设计电路原理图、PCB图、并结合软件进行仿真测试
5、利用Keil软件设计C语言源程序,通过编译、链接后生成HEX文件
二、设计原理
本任务主要由单片机AT89C52、时钟芯片DS1302、液晶显示芯片LCD1602等元器件组成。单片机是整个系统的主控芯片,主要负责对时钟芯片内部数据进行读写、并把读取的数据处理后实时送给数码管显示;DS1302时钟芯片则产生本任务所需的时间: 秒、分、时、日、月、年这6个时间单元,DS1302通过串行方式与单片机相连,在该芯片的时钟及复位引脚信号的控制下实现与单片机的数据通信,同时,利用4输入与门和4个独立按键实行对时间的调节,可调节年、月、日、时、分等5个时间单元,星期时间的调节会自动进行。在时
正在加载中,请稍后...DS带调时间的程序 改了半个月终于成啦!!!这是我曾遇到的问题,拿出来晒晒
[问题点数:20分,结帖人zzfei90]
DS带调时间的程序 改了半个月终于成啦!!!这是我曾遇到的问题,拿出来晒晒
[问题点数:20分,结帖人zzfei90]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。3457人阅读
51单片机(22)
ds1302显示时间(通过串口调试助手--C语言版本详细内容请下载地址:
/*ds1302显示时间(通过串口调试助手)*/
#include&reg52.h&
#include &intrins.h&
typedef unsigned char uint8;
typedef unsigned int
sbit SDA=P3^4;
sbit SCK=P3^5; //时钟
sbit RST=P1^7; //DS1302复位(片选)
uint8 time[7]={50,41,20,9,8,4,12};//秒分时日月周年10-08-15 23:59:50
#define DS1302_W_ADDR 0x80
#define DS1302_R_ADDR 0x81
void ds1302_reset()//令SCK=0;RST=1
RST=0;//停止数据传送
SCK=0;//时钟总线清零
RST=1;//数据操作
//写一个字节
void ds1302_write_byte(uint8 dat)
for(i=0;i&8;i++)
SDA=dat & 0x01;
//读一个字节
//对于数据输出:开始的8 个SCLK 周期,输入一个读命令字节,数据字节在后8 个SCLK周期的下降沿输出
//注意,第一个数据字节的第一个下降沿发生后,命令字的最后一位被写入
//(Note that the first data bit to be transmitted occurs on the first falling edge after the last bit of the command byte is written. ),
//也就是命令字节最后一个字节写入后产生的下降沿使得第一个数据位被读取
uint8 ds1302_read_byte()
uint8 i,dat=0;//用dat存储读到的数据
for(i=0;i&8;i++)
if(SDA==1)
dat=dat | 0x80;//因为从低位开始读
SCK=0; //由上面解释可以知道:我们首先应该判断 if(SDA==1),然后进行SCK=1,SCK=0
//清除写保护
void ds1302_clear_WP()
ds1302_reset();
ds1302_write_byte(0x8E);//写入地址
ds1302_write_byte(0x00);//写入数据
//设置写保护
void ds1302_set_WP()
ds1302_reset();
ds1302_write_byte(0x8E);//写入地址
ds1302_write_byte(0x80);//写入数据
//写入ds1302
void ds1302_write(uint8 addr,uint8 dat)
ds1302_reset();
ds1302_write_byte(addr);//写入地址
ds1302_write_byte(dat);//写入数据
//从ds1302读数据
uint8 ds1302_read(uint8 addr)
uint8 temp=0;//存储读出来的数据
ds1302_reset();
ds1302_write_byte(addr);//写入地址
temp=ds1302_read_byte();//写入数据
void delay(uint16 n)
while(n--);
* 设定时钟数据
其中涉及二进制和BCD转换
因为ds1302存BCD ,但是机器只认识二进制
例如:存入ds01 0000
那么我们写入的是ds1302_write(80)
void set_time(uint8 *timedata)
uint8 temp=0;
for(i=0;i&7;i++)
temp=timedata[i]/10;
timedata[i]=timedata[i]%10;
timedata[i]=timedata[i]+temp*16;
ds1302_clear_WP();//对ds1302操作前先将wp位清零
temp=DS1302_W_ADDR;//写入起始位置
for(i=0;i&7;i++)
ds1302_write(temp,timedata[i]);
ds1302_set_WP();
* 读时钟数据(BCD格式)
void read_time(uint8 *timedata)
temp=DS1302_R_ADDR;//读起始位置
for(i=0;i&7;i++)
timedata[i]=ds1302_read(temp);
/* UART初始化
* 波特率:9600
void uart_init(void)
TMOD=0x21;
SCON=0x50;
* UART发送一字节
void UART_Send_Byte(uint8 dat)
while(TI==0);
* 将数据转换成ASC码并通过UART发送出去
void UART_Send_Dat(uint8 dat)
//注意是关于16取余
UART_Send_Byte(dat/16+'0');
UART_Send_Byte(dat%16+'0');
void main()
uart_init();
set_time(&time);
//设定时间值
read_time(&time);
//秒分时日月周年
UART_Send_Dat(time[6]);
UART_Send_Byte('-');
UART_Send_Dat(time[4]);
UART_Send_Byte('-');
UART_Send_Dat(time[3]);
UART_Send_Byte(' ');
UART_Send_Dat(time[2]);
UART_Send_Byte(':');
UART_Send_Dat(time[1]);
UART_Send_Byte(':');
UART_Send_Dat(time[0]);
UART_Send_Byte('\r');
UART_Send_Byte('\n');
delay(10000);
有问题或是发现错误或是可以改进,希望可以留言,谢谢
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:572876次
积分:8521
积分:8521
排名:第1254名
原创:278篇
评论:145条
文章:13篇
阅读:12815
阅读:5505
(1)(1)(2)(4)(6)(22)(3)(1)(7)(10)(9)(1)(4)(1)(4)(1)(4)(14)(30)(27)(5)(40)(15)(11)(11)(6)(16)(7)(5)(10)(4)(1)(4)

我要回帖

更多关于 ds1302时间不走 的文章

 

随机推荐