云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 基于某51单片机的万年历的设计

基于某51单片机的万年历的设计

  • 62 次阅读
  • 3 次下载
  • 2025/6/16 1:30:19

实用文档

//整点报时

if( ( * clock_time == 0x59 ) && ( * ( clock_time + 1 ) == 0x59 ) ) {

bell = 0;

TR2 = 1; //启动Timer2 }//闹钟报警

if( * alarm_time == HexNum_Convert(* ( clock_time + 1 ) ))//分钟相吻if( * ( alarm_time + 1 ) == HexNum_Convert(*( clock_time + 2 )) ) //小时相吻合

{

bell = 0;

TR2 = 1; //启动Timer2 } } break; } } }

2. 温度控制程序

#ifndef _SENSOR #define _SENSOR

#define uchar unsigned char #define uint unsigned int

/***************DS18B20管脚配置*******/ sbit dq = P2 ^ 1;

/********************************************************************DS18B20软件延时专用

********************************************************************/ void Sensor_Delay(uchar count)//延时函数 {

while(count--); }

/********************************************************************从DS18B20读一个字节

********************************************************************/ uchar Sensor_Read_Byte(void) {

uchar i = 0; uchar temp = 0; for(i=8;i>0;i--) {

dq = 0; // 给脉冲信号 temp >>= 1;

dq = 1; // 给脉冲信号

标准

实用文档

if(dq)

temp |= 0x80; Sensor_Delay(20); }

return (temp); }

/********************************************************************向DS18B20写一个字节

********************************************************************/ void Sensor_Write_Byte(uchar temp) {

uchar i = 0;

for(i=8;i>0;i--) {

dq = 0;

dq = temp&0x01; Sensor_Delay(20); dq = 1; temp>>=1; } }

/******************************************************************** DS18B20初始化

********************************************************************/ uchar Sensor_Initial(void) {

uchar i = 0;

dq = 1; // DQ复位 Sensor_Delay(1); // 稍做延时

dq = 0; // 单片机将DQ拉低 Sensor_Delay(100); // 精确延时,大于480us

dq = 1; // 拉高总线 Sensor_Delay(6); // 稍做延时后 i = dq; // 若x=0则初始化成功,若x=1则初始化失败 Sensor_Delay(130); return (~i); }

/******************************************************************** 读取并显示温度

********************************************************************/ void Sensor_Fresh(uchar * temperature )

标准

实用文档

{

Sensor_Initial();

Sensor_Write_Byte( 0xCC ); // 跳过读序号列号的操作 Sensor_Write_Byte( 0x44 ); // 启动温度转换 Sensor_Initial();

Sensor_Write_Byte( 0xCC ); // 跳过读序号列号的操作 Sensor_Write_Byte( 0xBE ); // 读取温度寄存器 temperature [0] = Sensor_Read_Byte(); //低位 temperature [1] = Sensor_Read_Byte(); //高位 }#endif

3. 日历设置程序

#ifndef _SUN_MOON #define _SUN_MOON

/*************************************************************************/

#define uchar unsigned char #define uint unsigned int #include < shezhi.h > #include < lcd.h >

/******************************************************************** * 功能: 读取数据表中农历的大月或小月 ,如果大月返回1, 小月返回0

********************************************************************/ bit get_moon_day( uchar month_p,uint calendar_address ) {

uchar temp,temp1;

temp1=(month_p+3)/8;

temp=0x80>>((month_p+3)%8);

temp=year_code[calendar_address+temp1]&temp; if(temp==0){return(0);}else{return(1);} }

/******************************************************************** * 功能: 输入BCD的阳历数据, 输出BCD阴历数据( 1901 - 2099 ) c_flag:阳历的世纪标志 clock_time: 时钟地址 * 说明: c_flag = 0 :21世纪 c_flag = 1 :19世纪

********************************************************************/ void Calendar_Convert( uchar c_flag, uchar * clock_time ) {

bit flag_month, flag_year;

uchar year, month, day, month_point; //定义 年 月 天 uchar temp1, temp2, temp3;

uint calendar_address; //定义农历地址 uint day_number;

标准

实用文档

uchar clock_moon[3]; //定义阴历

clock_time += 3; //指向日

day = ( * clock_time >> 4 ) * 10 + ( *clock_time & 0x0f ); //BCD转换十进制

clock_time ++; //指向月

month = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f ); //BCD转换十进制

clock_time ++; //指向年

year = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f ); //BCD转换十进制

//定位日历地址 if( c_flag == 0 )

calendar_address = ( year + 99 ) * 3; else

calendar_address = ( year - 1 ) * 3;

//春节(正月初一)所在的阳历月份

temp1 = year_code[ calendar_address + 2 ] & 0x60; //Bit6~~Bit5:春节所在的阳历月份 temp1 >>= 5 ;

//春节(正月初一)所在的阳历日期

temp2 = year_code[ calendar_address + 2 ] & 0x1f; //Bit4~~Bit0:春节所在的阳历日期

//计算春节(正月初一)离当年元旦{ 1月1日(阳历) }的天数;春节只会在阳历的1月 或 2月 /*if( temp1 == 1 ) temp3 = temp2 - 1; else

temp3 = temp2 + 31 - 1; */

temp3=temp2-1;

if(temp1!=1) temp3+=0x1f;

//计算阳历月离当年元旦{ 1月1日(阳历) }的天数 if( month < 10 )

{day_number = day_code1[ month - 1 ] + day ;} else

{day_number = day_code2[ month - 10 ] + day ;}

标准

搜索更多关于: 基于某51单片机的万年历的设计 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

实用文档 //整点报时 if( ( * clock_time == 0x59 ) && ( * ( clock_time + 1 ) == 0x59 ) ) { bell = 0; TR2 = 1; //启动Timer2 }//闹钟报警 if( * alarm_time == HexNum_Convert(* ( clock_time + 1 ) ))//分钟相吻if( * ( alarm_time + 1 ) == HexNum_Convert(*( clock_time + 2 )) ) //小时相吻合 { bell = 0; TR2 = 1; /

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com