高分悬赏!用1286液晶显示ds1302 时钟芯片时钟程序,要求按键可以更改时间,注释要足够详细,邮箱

基于51单片机的ds1302时钟芯片设计时钟在1602液晶显示_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
基于51单片机的ds1302时钟芯片设计时钟在1602液晶显示
上传于||暂无简介
大小:15.43KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢以DS1302实时时钟芯片和液晶显示屏CD1602为基础设计的电子钟_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
以DS1302实时时钟芯片和液晶显示屏CD1602为基础设计的电子钟
上传于||文档简介
&&电​子​系​统​设​计​,​实​验​报​告​,​电​子​钟​设​计
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩18页未读,继续阅读
你可能喜欢需要确认注册邮箱后才能开通博客,
>>>51单片机控制1602液晶显示日历温度以及按键状态触发
6年会员勋章目前未领取。领取条件:&凡是注册时间六年以上的活跃用户即可领取该勋章。
惊涛骇浪_Tao的博客&&惊涛骇浪's Blog
博主:&&&&
QQ群:电子爱好者欢迎您的加入!
文章(83)&&&&
访问(155509)&&&&
评论(37)&&&&
投票(46)&&&&
订阅本博&&
博文列表查看方式:
需要确认注册邮箱后才能下载,
上面这幅图即是硬件连接图了,然后就是上程序了:先看看主程序吧:
/************头文件引用******************************/#include"include.h"#include"channel.h" //控制发送接受频道文件#include"voice.h"&//控制语音模块按键显示文件#include"1602.h"#include"ds1302.h"#include"ds18b20.h"#include"sound.h"#include"jiance.h"#include"fangbo.h"#include"delay.h"
#define time_fanhui 200
sbit tx_hujiao=P1^7;&//发送按键sbit keyjian=P1^5;sbit relay=P3^4;sbit answer=P3^3;//应答键
uint8 zhu_xun_huan_flag=0;//作为进入主循环的标志位,首先是初始化为0这样在初始化的//时候一直进不了主循环,只有当应答按键按下触发外部中断1时则将它置1此时才进入循环&&
void int1_init();void int1();
uint8 keyscan(){&uint8 keyval=1;&if(keyjian==0)&&{&&&delay(20);&&&if(keyjian==0)&&&&{&&&&&key********************************函数名:menu_1602()函数功能:主界面主要1602液晶显示时间和年月日***********************************************************/void menu_1602()//没有按键按下则显示主界面{&wendu();//调温度显示&ds1302(); //调时钟显示}void key(){&voice_init();//按键扫描初始化,为下面扫描作准备&&channel();//按键控制频道1602显示&voice();//按键检测语音模块& }
void init(){
&keyjian=1;//&Play_Song_init(0);//蜂鸣器初始化函数&voice_init();//按键扫描初始化,为下面扫描作准备&&/**********初始化DS1302*******************************************************///&BurstW1302T(set_clk);&&&& //初始化& 年月日 时分秒&&& 设置时间&& &lcd_init();//1602 液晶初始化&&Time1_Init();//初始化定时器&TR1=0;//关闭定时器1使其不输出方波}void main() {&& &&uint16&uint8 &uint8 flag_close=0;&uint8 counter_ &&//uint8 m=0;&//下面主要实现1602上写字& /*& lcd_wcom(0x40);&&&&& //设定CGRAM地址 低三位有用&&& for(m=0;m&64;m++)&&& //将心型代码写入CGRAM中 &&& { &&&&&&& lcd_wdat(table[m]);&&&&&&&&&& &&& } &&& lcd_wcom(0x80);&&&&& //设定上排的显示位置 显示在第一行&&& for(m=0;m&4;m++)&&&&&& &&& { &&&&&&& lcd_wdat(m); &&& } &&& lcd_wcom(0xc0);&&&&& //将显示坐标转移到下排和上排相对应的地方 第二行&&& for(m=4;m&8;m++)&&&& //显示心型图案的下半部分 &&& {&&&&&&& lcd_wdat(m); &&& } &&&while(1);*/&//& adcs=1;//&wr=0;//&led_cs=0;//&du=0;//&we=0;
/*&while(1)&{&&&if(key_flag==1)&&{& &&&for(i=0;i&500;i++)&&&{&&&&if(flag_close==0)//判断关闭1602的清屏函数&&&&{&&&& &&clear_1602();&&&&}&&&&flag_close=1;&&&&&for(i=0;i&10000;i++)& //进入FOR循环使得显示一段时间的状态&&&&{&&&&&for(i=0;i&500;i++)&&&&&{&&&&&&voice_init();//按键扫描初始化,为下面扫描作准备&&&&&&&&&&key();//扫键函数&&&&&}&&&& &&&&&& &nrf2401();//实现无线半双工通信,实现呼叫功能& *&&&&&}&&&&&&}&&}
&&else //没键按下则显示菜单&&{&&&menu_1602();&&&for(i=0;i&500;i++)&&&{&&&&&&&key();&&&}&&}&}& */
&init();//初始化所有操作&&int1_init();//外部中断1初始化&flag_anjian=1;&while(1)&{& & uint8 keyzhi,jiancezhi=0;
&& keyzhi=keyscan();
&& jiancezhi=jiancefangbo();
&& if((!keyzhi)||jiancezhi)&& {&&& if(keyzhi==0)&&& {&&& & TR1=1;&&& }
&&&& if(jiancezhi==1)&&& {&&& &//sound_test();&&&&di_di();&&& }
&& }& &&///////////////////////////////////////////////////////////////////////////////&&while(1)&&{&&&&if(key_flag==1)&&&&{& &&&&&for(j=0;j&1;j++)&&&&&{&&&&&&counter_fanhui++;&&&&&&if(counter_fanhui==time_fanhui)//计数执行多少遍后返回主菜单即退出&&&&&&//按键相关函数&&&&&&&{&&&&&&&&key_flag=0;//如果计到一定时间则立马将key_flag清零&&&&&&&&counter_fanhui=0;//计数值也清零&&&&&&&}&&&&&&else&&&&&&&{&&&&&&&&key_flag=1;&&&&&&&}&&&&&&&&for(i=0;i&500;i++) //进入FOR循环使得显示一段时间的状态&&&&&&{&&&&&&&voice_init();//按键扫描初始化,为下面扫描作准备&&&&&&&&&&&key();//扫键函数&&&&&&}&&&&&}&& &&&&&&}&&&&else //没键按下则显示菜单&&&&{&&&&&menu_1602();//显示菜单&&&&&for(i=0;i&500;i++)&&&&&{&&&&&&&&&key();&&&&&}&&&&}&&}&}&&&& &//////////////////////////////////////////////////////////////////////////////////////}
//////////////////////////////////////////////////////////////////////////////外部中断1初始化函数void int1_init(){&IT1=0;//设置为低电平触发&EX1=1;//打开外部中断1允许位&PX1=1;//设置为最高优先级&EA=1;}////////////////////////////////////////////////////////////////////////////void int1() interrupt 2{&//////////////////////////////////////////& relay=0;//打开继电器&/////////////////////////////////////////&zhu_xun_huan_flag=1;//将标志位置1此时在主函数里判断此位从而进入主循环&_Speak=1;&}////////////////////////////////////////////////////////////////////////////
其他的我上传附件继续看看吧:
原理图和程序都在里面,板子是别人做的我主要是负责51程序的编写。^_^..........
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
&&&&&&有[ 2 ]名读者喜欢此文
阅读(3789)&&
最近到访博主
评论是对思考最好的总结…
你还可以输入1000字
--- 现有 1 个主题,共 1 页 ---
转发到我的博客
评论&&的“51单片机控制1602液晶显示日历温度以及按键状态触发”
上面这幅图即是硬件连接图了,然后就是上程序了:先看看主程序吧:/************头文件引用******************************/#include"include.h"#include"channel.h"//控制发送接受频道文件#include"voice.h"//控...
你还可以输入30000字
同时评论给&惊涛骇浪_Tao
坚持就是胜利!
qinzhirong&&09:38 07-04
qinzhirong&&08:08 07-04
zcz2004&&09:01 05-02
sijianlong19&&21:24 04-15
xuliya282&&09:40 03-05
成员2005名创建者:
成员18977名创建者:
成员514名创建者:
-- Use of this website is subject to its terms of use.
京ICP备号-4 |
京公网安备37 |
新版社区已上线,旧版论坛、博客将停用
1、为防数据丢失,旧版论坛、博客不再接受发帖;
2、老用户只需重设密码,即可直接登录新平台;
3、新版博客将于8月底完美归来,敬请期待;
4、全新论坛、问答,体验升级、手机阅读更方便。哪个大哥能给我一个51单片机电子钟的程序,用DS1302和LCD1602,可以调整时间就可以了,不要温度,谢谢_百度知道
哪个大哥能给我一个51单片机电子钟的程序,用DS1302和LCD1602,可以调整时间就可以了,不要温度,谢谢
哪个大哥能给我一个51单片机电子钟的程序,可以把程序发的邮箱里QQ。非常感谢啊,用DS1302和LCD1602高分悬赏,谢谢,不要温度,可以调整时间就可以了,程序最好是C程序
我有更好的答案
shareid=481318&uk=" name="DS1302时钟_45,直接可以仿真的,供参考<file fsid="" link="/share/link仿真实例
这没有按键修改时间啊
有数码管的,参考一下吧。
参考下面的吧:
其他类似问题
为您推荐:
51单片机的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁查看: 439|回复: 8
ds18b20+DS1302时间显示(
85:85:85)
程序在keil4&&编译,电路是protues8.& & 时间显示不正常:&&85:85:85 还有星期不显示 。
& &求解,到底是哪里出问题了
(134.97 KB, 下载次数: 13)
11:04 上传
点击文件名下载附件
#include&reg51.h&
#include&DS18B20_3.H&
#define uint unsigned int
#define uchar unsigned char
uchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,
//flag用于读取头文件中的温度值,和显示温度值
#define yh 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1()
#define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)
//液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0口)
sbit rs=P2^0;
sbit en=P2^2;
sbit rw=P2^1; //如果硬件上rw接地,就不用写这句和后面的rw=0了
sbit led=P2^6; //LCD背光开关
//DS1302时钟芯片与C51之间的引脚连接定义
sbit IO=P1^1;
sbit SCLK=P1^0;
sbit RST=P1^2;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
/************************************************************
ACC累加器=A
ACC.0=E0H
ACC.0就是ACC的第0位。Acc可以位寻址。
累加器ACC是一个8位的存储单元,是用来放数据的。但是,这个存储单元有其特殊的地位,
是单片机中一个非常关键的单元,很多运算都要通过ACC来进行。以后在学习指令时,
常用A来表示累加器。但有一些地方例外,比如在PUSH指令中,就必须用ACC这样的名字。
一般的说法,A代表了累加器中的内容、而ACC代表的是累加器的地址。
***************************************************************/
//校时按键与C51的引脚连接定义
sbit key1=P1^5;&&//设置键
sbit key2=P1^6;&&//加键
sbit key3=P1^7;&&//减键
sbit buzzer=P1^3;//蜂鸣器,通过三极管9012驱动,端口低电平响
/**************************************************************/
uchar code tab1[]={&20&&-&&-& &&}; //年显示的固定字符
uchar code tab2[]={&&&:&&:&&&};//时间显示的固定字符
//延时函数,后面经常调用
void delay(uint xms)//延时函数,有参函数
{
& && &&&uint x,y;
& && &&&for(x=x&0;x--)
& && && &for(y=110;y&0;y--);
}
/********液晶写入指令函数与写入数据函数,以后可调用**************/
/*在这个程序中,液晶写入有关函数会在DS1302的函数中调用,所以液晶程序要放在前面*/
write_1602com(uchar com)//****液晶写入指令函数****
{
& && &&&rs=0;//数据/指令选择置为指令
& && &&&rw=0; //读写选择置为写
& && &&&P0=//送入数据
& && &&&delay(1);
& && &&&en=1;//拉高使能端,为制造有效的下降沿做准备
& && &&&delay(1);
& && &&&en=0;//en由高变低,产生下降沿,液晶执行命令
}
write_1602dat(uchar dat)//***液晶写入数据函数****
{
& && &&&rs=1;//数据/指令选择置为数据
& && &&&rw=0; //读写选择置为写
& && &&&P0=//送入数据
& && &&&delay(1);
& && &&&en=1; //en置高电平,为制造下降沿做准备
& && &&&delay(1);
& && &&&en=0; //en由高变低,产生下降沿,液晶执行命令
}
lcd_init()//***液晶初始化函数****
{
& && &&&write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据
& && &&&write_1602com(0x0c);//开显示不显示光标
& && &&&write_1602com(0x06);//整屏不移动,光标自动右移
& && &&&write_1602com(0x01);//清显示
& && &&&write_1602com(yh+1);//日历显示固定符号从第一行第1个位置之后开始显示
& && &&&for(a=0;a&14;a++)
& && &&&{
& && &&&write_1602dat(tab1[a]);//向液晶屏写日历显示的固定符号部分
& && &&&//delay(3);
& && &&&}
& && &&&write_1602com(er+2);//时间显示固定符号写入位置,从第2个位置后开始显示
& && &&&for(a=0;a&8;a++)
& && &&&{
& && &&&write_1602dat(tab2[a]);//写显示时间固定符号,两个冒号
& && &&&//delay(3);
& && &&&}
/*********************over***********************/
/***************DS1302有关子函数********************/
void write_byte(uchar dat)//写一个字节
{
& && &&&ACC=
& && &&&RST=1;
& && &&&for(a=8;a&0;a--)
& && &&&{
& && && && && & IO=ACC0;
& && && && && & SCLK=0;
& && && && && & SCLK=1;
& && && && && & ACC=ACC&&1;
& && &&&}
}
uchar read_byte()//读一个字节
{
& && &&&RST=1;
& && &&&for(a=8;a&0;a--)
& && &&&{
& && && && && & ACC7=IO;
& && && && && & SCLK=1;
& && && && && & SCLK=0;
& && && && && & ACC=ACC&&1;
& && &&&}
& && &&&return (ACC);
}
//----------------------------------------
void write_1302(uchar add,uchar dat)//向1302芯片写函数,指定写入地址,数据
{
& && &&&RST=0;
& && &&&SCLK=0;
& && &&&RST=1;
& && &&&write_byte(add);
& && &&&write_byte(dat);
& && &&&SCLK=1;
& && &&&RST=0;
}
uchar read_1302(uchar add)//从1302读数据函数,指定读取数据来源地址
{
& && &&&
& && &&&RST=0;
& && &&&SCLK=0;
& && &&&RST=1;
& && &&&write_byte(add);
& && &&&temp=read_byte();
& && &&&SCLK=1;
& && &&&RST=0;
& && &&&return(temp);
}
uchar BCD_Decimal(uchar bcd)//BCD码转十进制函数,输入BCD,返回十进制
{
Decimal=bcd&&4;
return(Decimal=Decimal*10+(bcd&=0x0F));
}
//--------------------------------------
void ds1302_init() //1302芯片初始化子函数(,12:00:00,week4)
{
RST=0;
SCLK=0;
write_e,0x00); //允许写,禁止写保护
//write_,0x00); //向DS1302内写秒寄存器80H写入初始秒数据00
//write_,0x00);//向DS1302内写分寄存器82H写入初始分数据00
//write_,0x12);//向DS1302内写小时寄存器84H写入初始小时数据12
//write_a,0x04);//向DS1302内写周寄存器8aH写入初始周数据4
//write_,0x07);//向DS1302内写日期寄存器86H写入初始日期数据07
//write_,0x01);//向DS1302内写月份寄存器88H写入初始月份数据01
//write_c,0x10);//向DS1302内写年份寄存器8cH写入初始年份数据10
write_e,0x80); //打开写保护
//------------------------------------
//温度显示子函数
void write_temp(uchar add,uchar dat)//向LCD写温度数据,并指定显示位置
{
& && &&&uchar gw,
& && &&&gw=dat%10;//取得个位数字
& && &&&sw=dat/10;//取得十位数字
& && &&&write_1602com(er+add);//er是头文件规定的值0x80+0x40
& && &&&write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码
& && &&&write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码
& &write_1602dat(0xdf);//显示温度的小圆圈符号,0xdf是液晶屏字符库的该符号地址码
& && && & write_1602dat(0x43);& && &&&//显示&C&符号,0x43是液晶屏字符库里大写C的地址码& && && && && &
//------------------------------------
//时分秒显示子函数
void write_sfm(uchar add,uchar dat)//向LCD写时分秒,有显示位置加、现示数据,两个参数
{
& && &&&uchar gw,
& && &&&gw=dat%10;//取得个位数字
& && &&&sw=dat/10;//取得十位数字
& && &&&write_1602com(er+add);//er是头文件规定的值0x80+0x40
& && &&&write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码
& && &&&write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码
& && && && && && && && && && &&&
}
//-------------------------------------
//年月日显示子函数
void write_nyr(uchar add,uchar dat)//向LCD写年月日,有显示位置加数、显示数据,两个参数
{
& && &&&uchar gw,
& && &&&gw=dat%10;//取得个位数字
& && &&&sw=dat/10;//取得十位数字
& && &&&write_1602com(yh+add);//设定显示位置为第一个位置+add
& && &&&write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码
& && &&&write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码
& && &&&
}
//-------------------------------------------
void write_week(uchar week)//写星期函数
{
& && &&&write_1602com(yh+0x0c);//星期字符的显示位置
& && &&&switch(week)
& && &&&{
& && && && && & case 1:write_1602dat('M');//星期数为1时,显示
& && && && && && && && && &write_1602dat('O');
& && && && && && && && && &write_1602dat('N');
& && && && && && && && && &
& && && &&&
& && && && && & case 2:write_1602dat('T');//星期数据为2时显示
& && && && && && && && && &write_1602dat('U');
& && && && && && && && && &write_1602dat('E');
& && && && && && && && && &
& && && && && &
& && && && && & case 3:write_1602dat('W');//星期数据为3时显示
& && && && && && && && && &write_1602dat('E');
& && && && && && && && && &write_1602dat('D');
& && && && && && && && && &
& && && && && &
& && && && && & case 4:write_1602dat('T');//星期数据为4是显示
& && && && && && && && && &write_1602dat('H');
& && && && && && && && && &write_1602dat('U');
& && && && && && && && && &
& && && && && &
& && && && && & case 5:write_1602dat('F');//星期数据为5时显示
& && && && && && && && && &write_1602dat('R');
& && && && && && && && && &write_1602dat('I');
& && && && && && && && && &
& && && && && &
& && && && && & case 6:write_1602dat('S');//星期数据为6时显示
& && && && && && && && && &write_1602dat('T');
& && && && && && && && && &write_1602dat('A');
& && && && && && && && && &
& && && && && &
& && && && && & case 7:write_1602dat('S');//星期数据为7时显示
& && && && && && && && && &write_1602dat('U');
& && && && && && && && && &write_1602dat('N');
& && && && && && && && && &
//****************键盘扫描有关函数**********************
void keyscan()
{
& && &&&if(key1==0)//---------------key1为功能键(设置键)--------------------
& && &&&{
& && &&&delay(9);//延时,用于消抖动
& && &&&if(key1==0)//延时后再次确认按键按下
& && &&&{
& & buzzer=0;//蜂鸣器短响一次
& & delay(20);
& & buzzer=1;
& && &&&while(!key1);
& && &&&key1n++;
& && &&&if(key1n==9)
& && && && && & key1n=1;//设置按键共有秒、分、时、星期、日、月、年、返回,8个功能循环
& && &&&switch(key1n)
& && &&&{
& && &&&
& && &&&case 1: TR0=0;//关闭定时器
& && && && && && && && &//TR1=0;
& && && && && && && && &write_1602com(er+0x09);//设置按键按动一次,秒位置显示光标
& && && && && && && && && &write_1602com(0x0f);//设置光标为闪烁
& && && && && && && && && &temp=(miao)/10*16+(miao)%10;//秒数据写入DS1302
& && && && && && && && && &write_e,0x00);
& && && && && && && && && &write_,0x80|temp);//miao
& && && && && && && & write_e,0x80);
& && && && && && && && && &
& && &&&case 2:&&write_1602com(er+6);//按2次fen位置显示光标
& && && && && && && && &
& && && && && && && &//write_1602com(0x0f);
& && && && && && && && &
& && &&&case 3: write_1602com(er+3);//按动3次,shi
& && && && && && && &//write_1602com(0x0f);
& && && && && && && && &
& && &&&case 4: write_1602com(yh+0x0e);//按动4次,week
& && && && && && && &//write_1602com(0x0f);
& && && && && && && && &
& && &&&case 5: write_1602com(yh+0x0a);//按动5次,ri
& && && && && && && &//write_1602com(0x0f);
& && && && && && && && &
& && &&&case 6: write_1602com(yh+0x07);//按动6次,yue
& && && && && && && &//write_1602com(0x0f);
& && && && && && && && &
& && &&&case 7: write_1602com(yh+0x04);//按动7次,nian
& && && && && && && &//write_1602com(0x0f);
& && && && && && && && &
& && &&&case 8:
& && && && && && && && &write_1602com(0x0c);//按动到第8次,设置光标不闪烁
& && && && && && && && &TR0=1;//打开定时器
& && && &temp=(miao)/10*16+(miao)%10;
& && && && && && & write_e,0x00);
& && && && && && & write_,0x00|temp);//miao数据写入DS1302
& && && && && && & write_e,0x80);
& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &
& && && && && && && && &
& && &&&}
& && &&&
& && &&&
& && &&&}
//------------------------------加键key2----------------------------& && && && && &
& && &&&if(key1n!=0)//当key1按下以下。再按以下键才有效(按键次数不等于零)
& && &&&{
& && &&&if(key2==0)&&//上调键
& && &&&{
& && &&&delay(10);
& && &&&if(key2==0)
& && &&&{
& & buzzer=0;//蜂鸣器短响一次
& & delay(20);
& & buzzer=1;
& && &&&while(!key2);
& && &&&switch(key1n)
& && &&&{
& && &&&case 1:miao++;//设置键按动1次,调秒
& && && && && && && && &if(miao==60)
& && && && && && && && && && &&&miao=0;//秒超过59,再加1,就归零
& && && && && && && && &write_sfm(0x08,miao);//令LCD在正确位置显示&加&设定好的秒数
& && && && && && && && &temp=(miao)/10*16+(miao)%10;//十进制转换成DS1302要求的DCB码
& && && && && && && && && &write_e,0x00); //允许写,禁止写保护
& && && && && && && && && &write_,temp); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码
& && && && && && && && && &write_e,0x80); //打开写保护
& && && && && && && && &write_1602com(er+0x09);//因为设置液晶的模式是写入数据后,光标自动右移,所以要指定返回
& && && && && && && && &//write_1602com(0x0b);
& && && && && && && && &
& && &&&case 2:fen++;
& && && && && && && && &if(fen==60)
& && && && && && && && && && &&&fen=0;
& && && && && && && && &write_sfm(0x05,fen);//令LCD在正确位置显示&加&设定好的分数据
& && && && && && && && &temp=(fen)/10*16+(fen)%10;//十进制转换成DS1302要求的DCB码
& && && && && && && && && &write_e,0x00);//允许写,禁止写保护
& && && && && && && && && &write_,temp);//向DS1302内写分寄存器82H写入调整后的分数据BCD码
& && && && && && && && && &write_e,0x80);//打开写保护
& && && && && && && && &write_1602com(er+6);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置
& && && && && && && && &
& && &&&case 3:shi++;
& && && && && && && && &if(shi==24)
& && && && && && && && && && &&&shi=0;
& && && && && && && && &write_sfm(2,shi);//令LCD在正确的位置显示&加&设定好的小时数据
& && && && && && && && &temp=(shi)/10*16+(shi)%10;//十进制转换成DS1302要求的DCB码
& && && && && && && && && &write_e,0x00);//允许写,禁止写保护
& && && && && && && && && &write_,temp);//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码
& && && && && && && && && &write_e,0x80);//打开写保护
& && && && && && && && &write_1602com(er+3);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位
& && && && && && && && &
& && &&&case 4:week++;
& && && && && && && && &if(week==8)
& && && && && && && && && && &&&week=1;
& && && && &write_1602com(yh+0x0C);//指定'加'后的周数据显示位置
& && && && && && && && && && &&&write_week(week);//指定周数据显示内容
& && && && &temp=(week)/10*16+(week)%10;//十进制转换成DS1302要求的DCB码
& && && && && && && && && &write_e,0x00);//允许写,禁止写保护
& && && && && && && && && &write_a,temp);//向DS1302内写周寄存器8aH写入调整后的周数据BCD码
& && && && && && && && && &write_e,0x80);//打开写保护
& && && && && && && && && &write_1602com(yh+0x0e);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位
& && && && && && && && &
& && &&&case 5:ri++;
& && && && && && && && &if(ri==32)
& && && && && && && && && && &&&ri=1;
& && && && && && && && &write_nyr(9,ri);//令LCD在正确的位置显示&加&设定好的日期数据
& && && && && && && && &temp=(ri)/10*16+(ri)%10;//十进制转换成DS1302要求的DCB码
& && && && && && && && && &write_e,0x00);//允许写,禁止写保护
& && && && && && && && && &write_,temp);//向DS1302内写日期寄存器86H写入调整后的日期数据BCD码
& && && && && && && && && &write_e,0x80);//打开写保护
& && && && && && && && &write_1602com(yh+10);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位
& && && && && && && && &
& && &&&case 6:yue++;
& && && && && && && && &if(yue==13)
& && && && && && && && && && &&&yue=1;
& && && && && && && && &write_nyr(6,yue);//令LCD在正确的位置显示&加&设定好的月份数据
& && && && && && && && &temp=(yue)/10*16+(yue)%10;//十进制转换成DS1302要求的DCB码
& && && && && && && && && &write_e,0x00);//允许写,禁止写保护
& && && && && && && && && &write_,temp);//向DS1302内写月份寄存器88H写入调整后的月份数据BCD码
& && && && && && && && && &write_e,0x80);//打开写保护
& && && && && && && && &write_1602com(yh+7);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位
& && && && && && && && &
& && &&&case 7:nian++;
& && && && && &&&if(nian==100)
& && && && && && && && &nian=0;
& && && && && && && && &write_nyr(3,nian);//令LCD在正确的位置显示&加&设定好的年份数据
& && && && &temp=(nian)/10*16+(nian)%10;//十进制转换成DS1302要求的DCB码
& && && && && && && && && &write_e,0x00);//允许写,禁止写保护
& && && && && && && && && &write_c,temp);//向DS1302内写年份寄存器8cH写入调整后的年份数据BCD码
& && && && && && && && && &write_e,0x80);//打开写保护
& && && && && && && && &write_1602com(yh+4);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位
& && && && && && && && &
& && && && && && && && &
& && &&&}
& && &&&//------------------减键key3,各句功能参照'加键'注释---------------
& && &&&if(key3==0)
& && &&&{
& && &&&delay(10);//调延时,消抖动
& && &&&if(key3==0)
& && &&&{
& & buzzer=0;//蜂鸣器短响一次
& & delay(20);
& & buzzer=1;
& && &&&while(!key3);
& && &&&switch(key1n)
& && &&&{
& && && && && & case 1:miao--;
& && && && && && && && && && &&&if(miao==-1)
& && && && && && && && && && && && && & miao=59;//秒数据减到-1时自动变成59
& && && && && && && && &write_sfm(0x08,miao);//在LCD的正确位置显示改变后新的秒数
& && && && &temp=(miao)/10*16+(miao)%10;//十进制转换成DS1302要求的DCB码
& && && && && && && && && &write_e,0x00); //允许写,禁止写保护
& && && && && && && && && &write_,temp); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码
& && && && && && && && && &write_e,0x80); //打开写保护
& && && && && && && && &write_1602com(er+0x09);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置
& && && && && && && && &//write_1602com(0x0b);
& && && && && && && && &
& && && && && & case 2:fen--;
& && && && && && && && && && &&&if(fen==-1)
& && && && && && && && && && && && && & fen=59;
& && && && && && && && &write_sfm(5,fen);
& && && && && && && && &temp=(fen)/10*16+(fen)%10;//十进制转换成DS1302要求的DCB码
& && && && && && && && && &write_e,0x00);//允许写,禁止写保护
& && && && && && && && && &write_,temp);//向DS1302内写分寄存器82H写入调整后的分数据BCD码
& && && && && && && && && &write_e,0x80);//打开写保护
& && && && && && && && &write_1602com(er+6);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置
& && && && && && && && &
& && && && && & case 3:shi--;
& && && && && && && && && &if(shi==-1)
& && && && && && && && && && && && && & shi=23;
& && && && && && && && &write_sfm(2,shi);
& && && && && && && && &temp=(shi)/10*16+(shi)%10;//十进制转换成DS1302要求的DCB码
& && && && && && && && && &write_e,0x00);//允许写,禁止写保护
& && && && && && && && && &write_,temp);//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码
& && && && && && && && && &write_e,0x80);//打开写保护
& && && && && && && && &write_1602com(er+3);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位
& && && && && && && && &
& && && && && & case 4:week--;
& && && && && && && && && && &&&if(week==0)
& && && && && && && && && && && && && & week=7;
& && && && && && && && &
& && && && &write_1602com(yh+0x0C);//指定'加'后的周数据显示位置
& && && && && && && && && && &&&write_week(week);//指定周数据显示内容
& && && && && && && && && &temp=(week)/10*16+(week)%10;//十进制转换成DS1302要求的DCB码
& && && && && && && && && &write_e,0x00);//允许写,禁止写保护
& && && && && && && && && &write_a,temp);//向DS1302内写周寄存器8aH写入调整后的周数据BCD码
& && && && && && && && && &write_e,0x80);//打开写保护
& && && && && && && && && &write_1602com(yh+0x0e);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位
& && && && && && && && &
& && && && && & case 5:ri--;
& && && && && && && && && && &&&if(ri==0)
& && && && && && && && && && && && && & ri=31;
& && && && && && && && &write_nyr(9,ri);
& && && && && && && && &temp=(ri)/10*16+(ri)%10;//十进制转换成DS1302要求的DCB码
& && && && && && && && && &write_e,0x00);//允许写,禁止写保护
& && && && && && && && && &write_,temp);//向DS1302内写日期寄存器86H写入调整后的日期数据BCD码
& && && && && && && && && &write_e,0x80);//打开写保护
& && && && && && && && &write_1602com(yh+10);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位
& && && && && && && && &
& && && && && & case 6:yue--;
& && && && && && && && && && &&&if(yue==0)
& && && && && && && && && && && && && & yue=12;
& && && && && && && && &write_nyr(6,yue);
& && && && && && && && &temp=(yue)/10*16+(yue)%10;//十进制转换成DS1302要求的DCB码
& && && && && && && && && &write_e,0x00);//允许写,禁止写保护
& && && && && && && && && &write_,temp);//向DS1302内写月份寄存器88H写入调整后的月份数据BCD码
& && && && && && && && && &write_e,0x80);//打开写保护
& && && && && && && && &write_1602com(yh+7);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位
& && && && && && && && && && &&&
& && && && && & case 7:nian--;
& && && && && &&&if(nian==-1)
& && && && && && && && &nian=99;
& && && && && && && && &write_nyr(3,nian);
& && && &temp=(nian)/10*16+(nian)%10;//十进制转换成DS1302要求的DCB码
& && && && && && && && && &write_e,0x00);//允许写,禁止写保护
& && && && && && && && && &write_c,temp);//向DS1302内写年份寄存器8cH写入调整后的年份数据BCD码
& && && && && && && && && &write_e,0x80);//打开写保护
& && && && && && && && &write_1602com(yh+4);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位
& && && && && && && && &
& && && && && && && && &
& && && && && && && && && && &&&
& && &&&}
//-------------------------------
void init() //定时器、计数器设置函数
{
& && &&&TMOD=0x11; //指定定时/计数器的工作方式为3
& && &&&TH0=0;&&//定时器T0的高四位=0
& && &&&TL0=0;&&//定时器T0的低四位=0
& && &&&EA=1;&&//系统允许有开放的中断
& && &&&ET0=1; //允许T0中断
& && &&&TR0=1; //开启中断,启动定时器
//*******************主函数**************************
//***************************************************
void main()
{
& && &&&lcd_init();& && &//调用液晶屏初始化子函数
& && &&&ds1302_init();& &//调用DS1302时钟的初始化子函数
& && &&&init();& && && & //调用定时计数器的设置子函数
& && &&&led=0;& && && &&&//打开LCD的背光电源
& & buzzer=0;//蜂鸣器长响一次
& & delay(80);
& & buzzer=1;
& && &&&while(1)&&//无限循环下面的语句:
& && &&&{
& && && && && && && && &
& & keyscan();& && &//调用键盘扫描子函数
& && &&&
& & }
}
void timer0() interrupt 1&&//取得并显示日历和时间
{
& && &&&
& &//Init_DS18B20();//温度传感器DS18b2初始化子函数,在头文件中
& &flag=ReadTemperature();//将18b2头文件运行返回的函数结果送到变量FLAG中,用于显示
&&//读取秒时分周日月年七个数据(DS1302的读寄存器与写寄存器不一样):
& &miao = BCD_Decimal(read_));
& && &&&fen = BCD_Decimal(read_));
& && &&&shi&&= BCD_Decimal(read_));
& && &&&ri&&= BCD_Decimal(read_));
& && &&&yue = BCD_Decimal(read_));
& && &&&nian=BCD_Decimal(read_d));
& && &&&week=BCD_Decimal(read_b));
& && &&&//显示温度、秒、时、分数据:
& &
& &write_temp(12,flag);//显示温度,从第二行第12个字符后开始显示
& &write_sfm(8,miao);//秒,从第二行第8个字后开始显示(调用时分秒显示子函数)
& && &&&write_sfm(5,fen);//分,从第二行第5个字符后开始显示
& && &&&write_sfm(2,shi);//小时,从第二行第2个字符后开始显示
& && &&&
& && &&&//显示日、月、年数据:
& && &&&write_nyr(9,ri);//日期,从第二行第9个字符后开始显示
& &write_nyr(6,yue);//月份,从第二行第6个字符后开始显示
& && &&&write_nyr(3,nian);//年,从第二行第3个字符后开始显示
& && &&&write_week(week);
共享资料的积分奖励!
 你应该直接发代码的,你发个RAR,下载也要5黑币,帮忙还要倒贴黑币,估计没人愿意干的。。。
你应该直接发代码的,你发个RAR,下载也要5黑币,帮忙还要倒贴黑币,估计没人愿意干的。。。
谢谢提醒,已经将帖子转入 问答区了,问答区下载附件是不要黑币的
DS18B20转换时间至少750mS,建议检查一下延时函数,还有时序.
/************************************************
*名称:DS1302_Rendchar2()
*描述:从ds1302读取字节
*变量:dat
************************************************/&&
uchar DS1302_Readchar()&&
{&&
& & uchar dat,i;&&
& & for(i=0;i&8;i++)&&
& & {&&
& && &&&if(IO == 1)&&
& && &&&{&&
& && && && &dat = dat|0x80;&&
& && &&&}&&
& && &&&SCL = 1;&&
& && &&&dat &&= 1;&&
& && &&&SCL = 0;&&
& & }&&
& & IO = 0;//将读1个字节函数最后加上I/O=0即可消除85显示&&
& &&&
}&&复制代码
来学习的,也想做一个
坛主给了修改的代码却未详细说明应该放在原代码的哪个位置合适。
问题解决了??????
太感谢了!为此特地注册账号以表诚意
Powered by}

我要回帖

更多关于 ds1302 时钟芯片 的文章

更多推荐

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

点击添加站长微信