新手求助,怎样用1602显示ds1302时间不走的时间

&&&&自动浇花机+lcd1602显示+ds1302时钟+dht11传感器(程序+电路图)
&自动浇花机+lcd1602显示+ds1302时钟+dht11传感器(程序+电路图)
本方案选择的是at89s52单片机设计的自动浇花机,在显示模块上选用的是lcd1602液晶显示屏,定时芯片选择的是ds1302,dc12v的电磁阀。当单片机上电时,界面将显示当前时间于当前相对湿度,并且在模式设定中能实现时间的调整和浇花功能的选择。此智能浇花器设置为两种方式:一是定时定量浇花,二是利用湿度传感器检测花卉(土壤)的湿度,采集的湿度传送到单片机芯片,单片机根据湿度控制是否浇水,当需要浇水,单片机的一个引脚p1.5置低电平(由于单片机上电时端口将会置高,我们对此采用了反相器,使继电器低电平接通),使继电器线圈通电,常开触点闭合,打开电磁阀,实现定时定量的自动浇水,设定时间到,电磁阀自动闭合,并且水流时间可调。
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
免积分&&极速下载60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
开发技术下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
自动浇花机+lcd1602显示+ds1302时钟+dht11传感器(程序+电路图)
所需积分:5
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
自动浇花机+lcd1602显示+ds1302时钟+dht11传感器(程序+电路图)
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员DS1302时钟芯片在LCD1602上显示,怎么获取DS1302的数据 - 单片机论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
DS1302时钟芯片在LCD1602上显示,怎么获取DS1302的数据
23:12:15  
/****************************************************************
& && && && && && && && && && && && && && && && && && && && &&&
程序名称:& &LCD1602显示时间& && && && && && && &
说明:使用本程序你必须把 SE3设置为1-2短接&&SE5设置为2-3短接
& && && && && && && && && && && && && && && && && && && && && && && && &
*****************************************************************/
/*头文件*/
#include &reg52.h&& && &
#include &intrins.h&
#define uint unsigned int
#define uchar unsigned char
#define nop() _nop_()
sbit lcd_rs_port = P2^6;& &/*定义LCD控制端口*/
sbit lcd_rw_port = P2^5;& &/*定义LCD控制端口*/
sbit lcd_en_port = P2^7;& &/*定义LCD控制端口*/
#define lcd_data_port P0& &/*定义LCD控制端口*/
sbit&&T_CLK = P3^6;& &/*实时时钟时钟线引脚 */
sbit&&T_IO = P3^4;& &/*实时时钟数据线引脚 */
sbit&&T_RST = P3^5;& &/*实时时钟复位线引脚 */
sbit&&ACC0 = ACC^0;
sbit&&ACC7 = ACC^7;
uchar code mun_to_char[] = {&ABCDEF&}; /*定义数字跟ASCII码的关系*/
uchar data time_data_buff[7]={0x00,0x00,0x09,0x01,0x01,0x04,0x09};/*格式为: 秒 分 时 日 月 星期 年 */
//这个是什么意思
uchar data lcd1602_line1[]={& &&000&};
uchar data lcd1602_line2[]={&& & 00:00:00& & &};
uchar code Weeks[][3]={{&SUN&},{&MON&},{&TUE&},{&WED&},{&THU&},{&FRI&},{&SAT&},{&SUN&}};
/********************************************************************
函 数 名:RTInputByte()
功& & 能:实时时钟写入一字节
说& & 明:往DS1302写入1Byte数据 (内部函数)
入口参数:d 写入的数据
返 回 值:无&&
***********************************************************************/
void RTInputByte(uchar d)
& & for(i=8; i&0; i--)
& && &&&T_IO = ACC0;& && && &&&/*相当于汇编中的 RRC */
& && &&&T_CLK = 1;
& && &&&T_CLK = 0;
& && &&&ACC = ACC && 1;
/********************************************************************
函 数 名:RTOutputByte()
功& & 能:实时时钟读取一字节
说& & 明:从DS1302读取1Byte数据 (内部函数)
入口参数:无&&
返 回 值:ACC
***********************************************************************/
uchar RTOutputByte(void)
& & for(i=8; i&0; i--)
& && &&&ACC = ACC &&1;& && && &/*相当于汇编中的 RRC */
& && &&&ACC7 = T_IO;
& && &&&T_CLK = 1;
& && &&&T_CLK = 0;
& & return(ACC);
/********************************************************************
函 数 名:W1302()
功& & 能:往DS1302写入数据
说& & 明:先写地址,后写命令/数据 (内部函数)
调& & 用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址, ucData: 要写的数据
返 回 值:无
***********************************************************************/
void W1302(uchar ucAddr, uchar ucDa)
& & T_RST = 0;
& & T_CLK = 0;
& & T_RST = 1;
& & RTInputByte(ucAddr);& && & /* 地址,命令 */
& & RTInputByte(ucDa);& && & /* 写1Byte数据*/
& & T_CLK = 1;
& & T_RST = 0;
/********************************************************************
函 数 名:R1302()
功& & 能:读取DS1302某地址的数据
说& & 明:先写地址,后读命令/数据 (内部函数)
调& & 用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址
返 回 值:ucData :读取的数据
***********************************************************************/
uchar R1302(uchar ucAddr)
& & uchar ucD
& & T_RST = 0;
& & T_CLK = 0;
& & T_RST = 1;
& & RTInputByte(ucAddr);& && && && & /* 地址,命令 */
& & ucData = RTOutputByte();& && && &/* 读1Byte数据 */
& & T_CLK = 1;
& & T_RST = 0;
& & return(ucData);
/********************************************************************
函 数 名:Set1302()
功& & 能:设置初始时间
说& & 明:先写地址,后读命令/数据(寄存器多字节方式)
调& & 用:W1302()
入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
& && && && && && && && && && & 7Byte (BCD码)1B 1B 1B 1B 1B&&1B&&1B
返 回 值:无
***********************************************************************/
void Set1302(uchar *pClock)
& & uchar ucAddr = 0x80;
& & We,0x00);& && && &&&/* 控制命令,WP=0,写操作?*/
& & for(i =7; i&0; i--)
& && &&&W1302(ucAddr,*pClock);&&/* 秒 分 时 日 月 星期 年 */
& && &&&pClock++;
& && &&&ucAddr +=2;
& & We,0x80);& && && &&&/* 控制命令,WP=1,写保护?*/
/********************************************************************
函 数 名:Get1302()
功& & 能:读取DS1302当前时间
说& & 明:
调& & 用:R1302()
入口参数:ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
& && && && && && && && && && && && && & 7Byte (BCD码)& &1B 1B 1B 1B 1B&&1B&&1B
返 回 值:无
***********************************************************************/
void Get1302(uchar ucCurtime[])
& & uchar ucAddr = 0x81;
& & for (i=0; i&7; i++)
& && &&&ucCurtime = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
& && &&&ucAddr += 2;
//---------------------------------------------
void lcd_delay(uchar ms) /*LCD1602 延时*/
& & while(ms--){
& && &&&for(j=0;j&250;j++)
& && && && &{;}
& && &&&}& &
void lcd_busy_wait() /*LCD1602 忙等待*/
& & lcd_rs_port = 0;
& & lcd_rw_port = 1;
& & lcd_en_port = 1;
& & lcd_data_port = 0
& & while (lcd_data_port&0x80);
& & lcd_en_port = 0;
void lcd_command_write(uchar command) /*LCD1602 命令字写入*/
& & lcd_busy_wait();
& & lcd_rs_port = 0;
& & lcd_rw_port = 0;
& & lcd_en_port = 0;
& & lcd_data_port =
& & lcd_en_port = 1;
& & lcd_en_port = 0;& &&&
void lcd_system_reset() /*LCD1602 初始化*/
& & lcd_delay(20);
& & lcd_command_write(0x38);
& & lcd_delay(100);
& & lcd_command_write(0x38);
& & lcd_delay(50);
& & lcd_command_write(0x38);
& & lcd_delay(10);
& & lcd_command_write(0x08);
& & lcd_command_write(0x01);
& & lcd_command_write(0x06);
& & lcd_command_write(0x0c);
lcd_data_port = 0 /*释放数据端口*/
void lcd_char_write(uchar x_pos,y_pos,lcd_dat) /*LCD1602 字符写入*/
& & x_pos &= 0x0f; /* X位置范围 0~15 */
& & y_pos &= 0x01; /* Y位置范围 0~ 1 */
& & if(y_pos==1) x_pos += 0x40;
& & x_pos += 0x80;
& & lcd_command_write(x_pos);
& & lcd_busy_wait();
& & lcd_rs_port = 1;
& & lcd_rw_port = 0;
& & lcd_en_port = 0;
& & lcd_data_port = lcd_
& & lcd_en_port = 1;
& & lcd_en_port = 0;
lcd_data_port = 0 /*释放数据端口*/
void main()
lcd_system_reset(); /*LCD1602 初始化*/
Set1302(time_data_buff);&&/*设置时间*/
&&Get1302(time_data_buff); /*读取当前时间*/
&&/*刷新显示*/
&&lcd1602_line1[3]&&= mun_to_char[time_data_buff[6]/0x10];
&&lcd1602_line1[4]&&= mun_to_char[time_data_buff[6]%0x10];&&/*年*/
&&lcd1602_line1[6]&&= mun_to_char[time_data_buff[4]/0x10];
&&lcd1602_line1[7]&&= mun_to_char[time_data_buff[4]%0x10];&&/*月*/
&&lcd1602_line1[9]&&= mun_to_char[time_data_buff[3]/0x10];
&&lcd1602_line1[10] = mun_to_char[time_data_buff[3]%0x10];&&/*日*/
&&for(i=0;i&3;i++) lcd1602_line1[i+13]=Weeks[time_data_buff[5]&0x07]; /*星期*/
&&lcd1602_line2[4]&&= mun_to_char[time_data_buff[2]/0x10];
& & lcd1602_line2[5]&&= mun_to_char[time_data_buff[2]%0x10]; /*时*/
&&lcd1602_line2[7]&&= mun_to_char[time_data_buff[1]/0x10];
&&lcd1602_line2[8]&&= mun_to_char[time_data_buff[1]%0x10]; /*分*/
&&lcd1602_line2[10] = mun_to_char[time_data_buff[0]/0x10];
&&lcd1602_line2[11] = mun_to_char[time_data_buff[0]%0x10]; /*秒*/
&&for(i=0;i&16;i++) lcd_char_write(i,0,lcd1602_line1);
& &&&for(i=0;i&16;i++) lcd_char_write(i,1,lcd1602_line2);
23:13:46  
刚学单片机很多地方都看不懂,大家能帮忙教我下吗
00:21:39  
可以加些备注吗& &&&让人看到比较容易了解
06:24:34  
可以加些备注吗& &&&让人看到比较容易了解
哦,我不知道都要加什么备注额
07:41:54  
uchar code Weeks[][3]={{&SUN&},{&MON&},{&TUE&},{&WED&},{&THU&},{&FRI&},{&SAT&},{&SUN&}};
uchar data time_data_buff[]={0,5,2,3,4,0x05,9};
for(i=0;i&3;i++) lcd1602_line1[i+13]=Weeks[time_data_buff[5]&0x07][i];
//这个weeks里面的与是什么意思啊复制代码
17:58:04  
哦,我不知道都要加什么备注额
在每条语句后面加说明是什么功能
站长推荐 /5
Powered byDS1302电子时钟1602液晶显示
#include&reg52.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
sbit DS1302_CLK=P1^2;
sbit DS1302_IO=P1^1;
sbit DS1302_RST=P1^0;
sbit lcden=P2^2;
sbit lcdwr=P2^1;
sbit lcdrs=P2^0;
unsigned char second,minute,hour,week,day,month,
unsigned char table[]="";
//unsigned char
table1[]="&&&&&&&&&
unsigned char
table2[]="&&&&&&&&&&&&&&&&
unsigned char table3[]="Time: ";
unsigned char table4[]="Date: ";
unsigned int time[]={
0x09,0x12,0x27,0x03,0x23,0x59,0x40
uchar num,count,date,
void delay(uint z)
& uint x,y;
& for(x=z;x&0;x--)
for(y=110;y&0;y--);
//向DS1302送一个字节//
void InputByte(unsigned char byte1)
&for(i=8;i&0;i--)
DS1302_IO=(bit)(byte1&0x01);
DS1302_CLK=1;
DS1302_CLK=0;
byte1&&=1;
//读DS1302一个字节//
unsigned char outputbyte(void)
&& unsigned char ucdat=0;
for(i=8;i&0;i--)
DS1302_IO=1;
ucdat&&=1;
if(DS1302_IO)ucdat|=0x80;
DS1302_CLK=1;
DS1302_CLK=0;
return(ucdat);
//向DS1302某地址写一个字节数据//
void write_ds1302(unsigned char addr,unsigned char TDat)
&DS1302_RST=0;
&DS1302_CLK=0;
&DS1302_RST=1;
&InputByte(addr);
&InputByte(TDat);
&DS1302_CLK=1;
&DS1302_RST=0;
//读DS1302地址子程序//
unsigned char read_ds1302(unsigned char addr)
&& DS1302_RST=0;
&& _nop_();
&& DS1302_CLK=0;
&& _nop_();
&& DS1302_RST=1;
&& InputByte(addr);
&& timedata=outputbyte();
&& DS1302_CLK=1;
&& _nop_();
&& DS1302_RST=0;
&& return(timedata);
//DS1302的初始化//
void initial_ds1302()
& write_dse,0x00);//写保护寄存器
& write_dsc,time[0]);//年
& write_ds,time[1]);//月
& write_ds,time[2]);//日
& write_dsA,time[3]);//星期
& write_ds,time[4]);//时
& write_ds,time[5]);//分
& write_ds,time[6]);//秒
& write_dse,0x80);//写保护寄存器
//读DS1302时间//
void read_time()
&second=read_ds);
&minute=read_ds);
&hour=read_ds);
&week=read_dsB);
&day=read_ds);
&month=read_ds);
&year=read_dsd);
//液晶显示程序//
void write_com(uchar com)//写指令//
lcdrs=0;&&&&&&&&&&&&
&delay(5);
&delay(5);
void write_data(uchar date)&&
//写数据//
& lcdrs=1;
&delay(5);
&delay(5);
void init()
& lcden=0;
write_com(0x38);&&&
//置初值//
& write_com(0x0c);
& write_com(0x06);
& write_com(0x81);
void Display(void)
&&& num=0;
for(date=0;date&6;date++)
write_data(table3[date]);
//write_com(0x81);
write_data(table[hour/16]);&&
//写第1行数据//
write_data(table[hour%16]);
write_data(':');
write_data(table[minute/16]);
write_data(table[minute%16]);
write_data(':');
write_data(table[second/16]);&&&&&&&&
write_data(table[second%16]);
//write_com(0x01);&&
write_com(0x80+0x41);
for(shi=0;shi&6;shi++)
write_data(table4[shi]);
write_data(table[year/16]);
write_data(table[year%16]);
write_data('-');
write_data(table[month/16]);
write_data(table[month%16]);
write_data('-');
write_data(table[day/16]);
write_data(table[day%16]);
write_com(0x80);
for(count=0;count&16;count++);
write_data(table2[count]);&&&&&&&&
int main(void)
initial_ds1302();
read_time();
Display();
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 ds1302 lcd1602贴吧 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信