51单片机测温加万年历

该程序使用51单片机实现了温度测量和万年历的显示功能。通过DS1302进行时钟数据的读写操作,包括初始化设置、读取和更新时间。同时,程序还包含了温度传感器的数据读取,以实时显示当前温度。
摘要由CSDN通过智能技术生成

测温在这里插入图片描述
//本程序实现测温+万年历显示;
#include <reg51.h>
#include <intrins.h>
#include<absacc.H>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS1302_CLK = P3^5;
sbit DS1302_IO = P3^6;
sbit DS1302_RST = P3^7;
sbit xing = P3^4;
sbit shanshuo = P1^0;
sbit jia = P1^1;
sbit jian = P1^2;
sbit DQ=P1^5;
sbit wei1=P1^6;
sbit wei2=P1^7;
sbit nao=P1^4;
sbit xa=P1^3;
uchar shanshuobz,jiabz, jianbz,flag,shanbz,naobz,naozhong;
uchar num=0,x,t1;
uchar tab[13];
uchar naotab[6];
uchar naobj[3],naojs,nz;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
float tp;
uchar disptab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c};
uchar dispbuf[6];
unsigned char second,minute,hour,week,day,month,year,temp,t,t1,flag,shi,ge; //秒、分、时、星期、日、月、年
unsigned char time[]={0x22,0x12,0x31,0x06,0x23,0x59,0x45}; //初始时间数组11年12月31日23点59分45秒

void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x–)
for(y=110;y>0;y–);
}
void InputByte(unsigned char byte1)
{ unsigned char i; // 向DS1302送一字节数据子程序
ACC=byte1;
for(i=8;i>0;i–)
{
DS1302_IO=ACC0;
DS1302_CLK=1;
DS1302_CLK=0;
ACC=ACC>>1;
}
return;
}
unsigned char OutputByte()
{ // 读DS1302一个字节子程序
unsigned char i;

for(i=8;i>0;i--)
{	ACC=ACC>>1;
	ACC7=DS1302_IO;
	DS1302_CLK=1;
	DS1302_CLK=0;
 }
 return(ACC);

}
void write_ds1302(unsigned char addr,unsigned char TDat)
{
DS1302_RST=0; // 向DS1302某地址写一字节数据子程序
nop();
DS1302_CLK=0;
nop();
DS1302_RST=1;
InputByte(addr);
nop();
InputByte(TDat);
DS1302_CLK=1;
nop();
DS1302_RST=0;
}
unsigned char read_ds1302(unsigned char addr)
{ // 读DS1302地址子程序
unsigned char timedata,kk;
DS1302_RST=0;
nop();
DS1302_CLK=0;
nop();
DS1302_RST=1;
InputByte(addr);
timedata=OutputByte();
DS1302_CLK=1;
nop();
DS1302_RST=0;
kk=timedata>>4;
kk=kk*10+(timedata&=0x0f);
return(kk);
}
void initial_ds1302() // 初始化DS1302子程序
{
write_ds1302(0x8e,0x00); //写保护寄存器,在对时钟或RAM写前WP一定要为0
write_ds1302(0x8c,time[0]); //年
write_ds1302(0x88,time[1]); //月
write_ds1302(0x86,time[2]); //日
write_ds1302(0x8A,time[3]); //星期
write_ds1302(0x84,time[4]); //时
write_ds1302(0x82,time[5]); //分
write_ds1302(0x80,time[6]); //秒
wr

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值