基于ds1302万年历应用实例、基于ds18b20温度检测应用实例.doc
- 文档编号:1260716
- 上传时间:2022-10-19
- 格式:DOC
- 页数:13
- 大小:144KB
基于ds1302万年历应用实例、基于ds18b20温度检测应用实例.doc
《基于ds1302万年历应用实例、基于ds18b20温度检测应用实例.doc》由会员分享,可在线阅读,更多相关《基于ds1302万年历应用实例、基于ds18b20温度检测应用实例.doc(13页珍藏版)》请在冰豆网上搜索。
基于DS1302万年历以及基于DS18B20的温度检测电路
/***************主程序***************/
#include
#include"LCD1602.h"
#include"1302.h"
#include"wendu.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitspeaker=P2^4;
bitkey_flag1=0,key_flag2=0;
/*ucharshijian[6]={0};*/
//sec_add=0,min_add=0,hou_add=0,day_add=0,mon_add=0,yea_add=0;
uchardata_alarm[7]={0};
/*********************************键盘控制****************************************************/
intkey_scan()//扫描是否有键按下
{inti=0;
uinttemp;
P1=0xf0;
temp=P1;
if(temp!
=0xf0)
i=1;
else
i=0;
returni;
}
ucharkey_value() //确定按键的值
{
uintm=0,n=0,temp;
ucharvalue;
ucharcodev[4][3]={'2','1','0','5','4','3','8','7','6','b','a','9'} ;//用二维数组进行按键查询
P1=0xfe;temp=P1;if(temp!
=0xfe)m=0;
P1=0xfd;temp=P1 ;if(temp!
=0xfd)m=1;
P1=0xfb;temp=P1 ;if(temp!
=0xfb)m=2;
P1=0xf7;temp=P1 ;if(temp!
=0xf7)m=3;
P1=0xef;temp=P1 ;if(temp!
=0xef)n=0;
P1=0xdf;temp=P1 ;if(temp!
=0xdf)n=1;
P1=0xbf;temp=P1 ;if(temp!
=0xbf)n=2;
value=v[m][n];
returnvalue;
}
/************************************************设置闹铃函数*********************************/
voidnaoling(void)
{
uchari=0,l=0,j;
init1602();
while(key_flag2&&i<12)
if(key_scan()){j=key_value();write_data(j);if(i%2==0)data_alarm[l]=((j-'0')<<4);else{data_alarm[l]+=(j-'0');l++;}i++;delay(600);}
write_com(0x01);
}
ucharaccording(void)
{uchark;
if(data_alarm[0]==x[1]&&data_alarm[1]==x[2]&&data_alarm[2]==x[3]&&data_alarm[3]==x[4]&&data_alarm[4]==x[5]&&data_alarm[5]==x[6])
k=1;
elsek=0;
returnk;
}
voidspeak(void)
{uinti=50;
while(i)
{speaker=0;
delay
(2);
speaker=1;
delay
(1);
i--;
}
}
voidalarm(void)
{uinti=10; //i=10
while(i)
{
speak();
delay(10);
i--;
}
}
/************************************修改时间操作****************************************/
voidxiugai(void) //修改时间函数
{
if(key_scan()&&key_flag1)
switch(key_value())
{case'0':
{data1[1]++;if(data1[1]>'9'){data1[1]='0';data1[0]++;}
if(data1[0]>'9'){data1[0]='0';data1[1]='0';}x[1]=(data1[0]-'0')<<4|(data1[1]-'0');dswrite(0x8c,x[1]);}break;
case'1':
{data1[4]++;if(data1[4]>'9'){data1[4]='0';data1[3]++;}
if(data1[3]=='1'&&data1[4]=='3'){data1[3]='0';data1[4]='1';}x[2]=(data1[3]-'0')<<4|(data1[4]-'0');dswrite(0x88,x[2]);}break;
case'2':
{data1[7]++;if(data1[7]>'9'){data1[7]='0';data1[6]++;}
if(data1[6]=='3'&&data1[7]=='2'){data1[6]='0';data1[7]='1';}x[3]=(data1[6]-'0')<<4|(data1[7]-'0');dswrite(0x86,x[3]);}break;
case'3':
{time[1]++;if(time[1]>'9'){time[1]='0';time[0]++;}
if(time[0]=='2'&&time[1]=='4'){time[0]='0';time[1]='0';}x[4]=(time[0]-'0')<<4|(time[1]-'0');dswrite(0x84,x[4]);}break;
case'4':
{time[4]++;if(time[4]>'9'){time[4]='0';time[3]++;}
if(time[3]=='6'&&time[4]=='1'){time[3]='0';time[4]='1';}x[5]=(time[3]-'0')<<4|(time[4]-'0');dswrite(0x82,x[5]);}break;
case'5':
{time[7]++;if(time[7]>'9'){time[7]='0';time[6]++;}
if(time[6]=='6'&&time[7]=='1'){time[6]='0';time[7]='1';}x[6]=(time[6]-'0')<<4|(time[7]-'0');dswrite(0x80,x[6]);}break;
//case'b':
reset();break;
default:
break;
}
}
/************************************************中断处理函数*********************************/
voidchanging(void)interrupt0using0 //需要修改时间和日期,或者停止修改
{
if(key_flag1)key_flag1=0;
elsekey_flag1=1;
}
voidalarming(void)interrupt3using0 //需要设置闹铃或者停止设置
{
if(key_flag2)key_flag2=0;
elsekey_flag2=1;
}
/*********************************主函数*************************************************/
main()
{
uinti;
//uchar*l;
ucharp1[]="D:
",p2[]="TM",p3[]="Wd";
EA=1;
EX0=1;
IT0=1;
EA=1;
EX1=1;
IT1=1;
init1602(); //LCD初始化
Initial_DS1302(); //1302初始化
ds18b20();
baojing=1;//报警灯
while
(1)
{//write_com(0x80); //显示区域不够去除
//write_string(p1,2);
write_com(0x88);
write_string(p3,2);
write_com(0xc0);
write_string(p2,2);
gettime();//从1302中读取时间
datalcd(); //日期显示转换
timelcd(); //时间显示转换
xiugai(); //调用修改时间函数
if(key_flag2)naoling();
if(according())alarm();
write_com(0x80);
write_string(data1,8);
write_com(0xc2);
write_string(time,8);
ds18b20();//12位转换时间最大为750ms
get_temperature();
display();
delay(10);
}
}
/*****1302子程序:
*************/
#ifndef_REAL_TIMER_DS1302_2009_5_20_
#define_REAL_TIMER_DS1302_2003_5_20_
#include
#defineucharunsignedchar
#defineuintunsignedint
voidtimelcd();
voiddatalcd();
sbitDS1302_CLK=P2^6;//实时时钟时钟线引脚
sbitDS1302_IO=P2^7;//实时时钟数据线引脚
sbitDS1302_RST=P2^5;//实时时钟复位线引脚
sbitACC0=ACC^0;
sbitACC7=ACC^7;
ucharx[7]={0x20,0x10,0x04,0x18,0x10,0x0,0x00};//分别存放年月日,时分秒
//ucharx[6]={0};
uchartime[7]={0};//存放时间
uchardata1[7]={0};//存放日期
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ds1302 万年历 应用 实例 ds18b20 温度 检测