⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendarclk.c

📁 51单片机C语言应用程序设计实例精讲.rar
💻 C
字号:
/*****************************************/
/* Copyright (c) 2005, 通信工程学院      */
/* All rights reserved.                  */
/* 作    者:戴 佳						 */
/*****************************************/

#include "CalendarClk.h"

/* 从串行口获取数据函数,数据包括:year1,month1,dayofweek1,
dayofmonth1,hour1,min1。如果获取到正确数据则返回1,否则返回0 */
uchar getdata()
{
	// 略去
}

/* 设置日历和时钟函数 */
void settime()
{
	REG_B = REG_B|0x80;			// SET=1,芯片DS12C887处于设置状态

	MIN = min1;
	HOUR = hour1;
	DAYOFWEEK = dayofweek1;
	DAYOFMONTH = dayofmonth1;
	MONTH = month1;
	YEAR = year1;

	REG_B = REG_B&0x7f;		    // SET=0,芯片DS12C887恢复正常数据更新状态
}


/* 获取日历时钟函数 */
void gettime()
{
	while (REG_A&0x80==0x00)	// 直到UIP=0时,才能读取日历时钟信息	{
	{	
		min2 = MIN ;
		hour2 = HOUR;
		dayofweek2 = DAYOFWEEK;
		dayofmonth2 = DAYOFMONTH;
  	    month2 = MONTH;
		year2 = YEAR;
	}
}

/* 13位数码管显示年、月、日、星期、时、分 */
void display()
{
	// 略去
}

/* 串口初始化函数 */
void init_serial()
{
	TMOD = 0x20;				// 定时器T1使用工作方式2
	TH1 = 250;
	TL1 = 250;
	TR1 = 1;					// 开始计时
	PCON = 0x80;				// SMOD = 1
	SCON = 0x50;				// 工作方式1,波特率9600kbit/s,允许接收 
}


void main(void)
{
	uchar setflag;
	init_serial();

	/* 设置DV2、DV1、DV0为010,打开芯片DS12C877内部晶振 */
	REG_A = REG_A&0xaf;			// DV2=DV0=0
	REG_A = REG_A|0x20;			// DV1=0

	REG_B = REG_B&0x7b;			// SET=0,时间数据正常更新;DM=0,二进制数据模式
	REG_B = REG_B|0x02;			// 寄存器B的24/12位置1,24小时时间模式
	
	while (1)
	{
		setflag = getdata();	// 通过查询方式获取串口数据
	
		/* 如果获取到正确数据,则设置时间 */
		if (setflag==0x01)
			settime();
	
		/* 调用获取日历时钟函数 */
		gettime();
		
		/* 13位数码管显示日历、星期和时间信息 */
		display();
	}		
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -