51单片机 万年历

本文详细介绍了如何使用51单片机配合DS12C887时钟芯片,结合DS18B20温度传感器和12864液晶屏,设计并实现一个功能完善的万年历系统。内容涵盖了硬件连接、程序编写以及液晶屏显示等方面,为单片机初学者提供了实用的参考案例。
摘要由CSDN通过智能技术生成
#define uchar unsigned char
#define uint unsigned int

uint temp;
float f_temp;

sbit Ds=P2^2;
sbit Dula=P2^6;
sbit Wela=P2^7;

sbit LcdCS=P3^5;		//寄存器选择输入 通过rs确定是写数据还是写命令
sbit LcdSID=P3^6;		//液晶读/写控制 因为不从液晶读取任何数据,所以rw一直为0
sbit LcdSCLK=P3^4;		//液晶使能控制 给en一个高脉冲将数据送入液晶控制器
sbit LcdPSB=P3^7;		//串并方式控制

sbit DSCS=P1^4;			//片选信号,低电平有效
sbit DSAS=P1^5;			//地址选通输入端 AS的上升沿将AD0~AD7上出现的地址信息锁存到DS12C887上,下降沿清除地址信息
sbit DSRW=P1^6;			//
sbit DSDS=P1^7;			//

uchar code table1[]={" CHPAVC 天若海愚"};
uchar code table3[]={"星期一"};
uchar code table4[]={"星期二"};
uchar code table5[]={"星期三"};
uchar code table6[]={"星期四"};
uchar code table7[]={"星期五"};
uchar code table8[]={"星期六"};
uchar code table9[]={"星期日"};
uchar code table10[]={"°C"};

uchar buff[4];	

char year,month,day,week,miao,fen,shi;
uchar nyrsfm[17];		//Write_nyrsfm函数中,方法二nyrsfm只需申明成nyrsfm[16]

 

/***************************************************************
文件名称:	wannianli
作者	:	天若海愚
版本号	:	V1.0
说明	:	
创建时间:	2013年9月17日13:30:38
修改记录:	无
备注	:	在12864液晶屏上显示从DS12C887采集到的年、月、日、时、分数据,并且利用DS18B20采集温度显示在12864上
***************************************************************/

#include<reg52.h>
#include<define.h>
#include<intrins.h>
#include<stdio.h>

/***********************************
函数名称:	Delay()
函数功能:	延时
入口参数:	z
备注	:
***********************************/
void Delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}

/**********************************
函数名称:	Ds_reset()
函数功能:	DS18B20复位,初始化函数
入口参数:	无
备注	:
**********************************/
void Ds_reset()
{
	uint i;
	Ds=1;		//书P348,时序图,先将数据线置高电平1
	_nop_();	//延时,尽可能短一点
	Ds=0;
	i=103;
	while(i>0)
		i--;	//当总线停留在低电平超过480us,总线上所以器件都将被复位,这里
				//延时约680us总线停留在低电平超过480μs,总线上的所有器件都将被复位
	_nop_();	//延时,尽可能短一点
	
	Ds=1;
	i=5;
	while(i>0)
		i--;	//释放总线后,如果初始化成功则在15~60us内产生一个由DDS18B20返回的低电平0,据
				//该状态可以确定它的存在,但是不能无限制地等
}

/**********************************
函数名称:	Ds_read_bit()
函数功能:	读一位数据函数
入口参数:	无
备注	:
**********************************/
bit Ds_read_bit()
{
	uint i;
	bit dat;
	
	Ds=0;		//单片机(微处理器)将总线拉低
	_nop_();    //读时隙起始于微处理器将总线拉低至少1us
	Ds=1;        //拉低总线后接着释放总线,让从机18b20能够接管总线,输出有效数据
	
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值