当前位置: 首页 > news >正文

东莞网站建设实例推荐厦门本地网站

东莞网站建设实例推荐,厦门本地网站,网站登录验证码怎么做,做公司网站有什么好处HYM1381是一款低功耗串行实时时钟芯片 两种工作方式:12小时格式/24小时格式 3根通信线:RST(复位)、SCLK(串行时钟)、IO(数据线) 数据存储格式:BCD码(4位二…

HYM1381是一款低功耗串行实时时钟芯片

两种工作方式:12小时格式/24小时格式

3根通信线:RST(复位)、SCLK(串行时钟)、IO(数据线)

数据存储格式:BCD码(4位二进制数表示一位十进制数)

1381.h:

#define RST P15       //推挽
#define SCLK P03      //推挽
#define DSIO P04      //初始化为推挽输出,发送数据时为推挽,接收数据时为悬空输入/上拉输入#define Year 6
#define Month 4
#define Date 3
#define Hour 2
#define Minute 1
#define Seconds 0void HYM1381Init();  //初始化函数
void DataPros();   //时间显示函数
void HYM1381_TimeSet(u8 address);   //时间设定函数
//void HYM1381ReadTime();extern uchar Time_Set[7];extern uchar Read_TIME[7];

1381.c:


#include "HYM1381.h"
#include "sysClk_Cfg.h"
#include <INTRINS.H>     //为了使用nop空指令// HYM1381存储格式使用BCD码,使用过程中涉及十进制和BCD码之间的转换u8 code Read_RTC_Addr[7]  = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; //读取地址
u8 code Write_RTC_Addr[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; //写入地址// 时钟初始化2025-3-4星期二9点51分30秒,存储顺序按照秒分时日月周年,
uchar xdata TIME[7]={30,51,9,4,3,2,25};		//时间初始值---十进制uchar Read_TIME[7];          //用来储存读到的时间信息
uchar Time_Set[7];           //用来设置时间 

底层驱动,向1381写入数据和从1381读取数据:

// 向HYM1381发送命令,向地址addr写入数据dat
void HYM1381Write(uchar addr, uchar dat)
{uchar i;		SCLK = 0;  					// 拉低SCLK,SCLK为低时才可拉高RST_nop_ ();          RST = 1;            // RST拉高,整个读写期间保持RST高电平_nop_ ();  P0MDH = 0xaa;  //输出模式for(i = 0;i < 8;i++)  // 从低位开始传送八位地址addr{DSIO = addr&0x01;addr>>=1;SCLK=1;  						//上升沿向HYM1381写数据_nop_ ();SCLK=0;  						//SCLK拉低为下一位传送做准备_nop_ ();}for(i = 0;i < 8;i++)  // 从低位开始传送八位数据dat{DSIO = dat&0x01;dat>>=1;SCLK = 1;           // 上升沿向HYM1381写数据_nop_ ();SCLK = 0;           // SCLK拉低为下一位传送做准备_nop_ ();}// 数据传送结束,将RST拉低,为下一次传送做准备RST = 0;_nop_ ();
}// 从HYM1381中读取地址addr的数据dat
uchar HYM1381Read(uchar addr)
{uchar i;uchar dat = 0, bi;SCLK = 0;  				// 拉低SCLK,SCLK为低时才可拉高RST_nop_ ();RST = 1;  				// RST拉高,整个读写期间保持RST高电平_nop_ ();  P0MDH = 0xaa;for(i=0;i<8;i++)  // 从低位开始传送八位地址addr{DSIO = addr&0x01;addr>>=1;SCLK = 1;      // 上升沿向HYM1381写数据_nop_ ();SCLK = 0;      // SCLK拉低为下一位传送做准备_nop_ ();}_nop_ ();SCLK = 1;  P0MDH = 0xa9;for(i = 0;i < 8;i++)  // 从低位开始读取八位数据dat{bi = DSIO;dat = (dat>>1)|(bi<<7);
//		SCLK = 1;  					// 上升沿向HYM1381写数据SCLK = 0;  _nop_ ();
//		SCLK = 0;  					// SCLK拉低为下一位传送做准备SCLK = 1 ;_nop_ ();}SCLK = 1;_nop_ ();// 数据传送结束,将RST拉低,为下一次传送做准备RST = 0;_nop_ ();_nop_ ();// HYM1381复位稳定时间DSIO = 0;
//	_nop_ ();
//	DSIO = 1;
//	_nop_ ();return dat;
}

HYM1381的初始化:

// HYM1381初始化
// 1. 在对HYM1381操作之前需要关闭写保护,0x8e写0x00
// 2. 写入设置的时间
// 3. 打开写保护功能
void HYM1381Init()
{uchar i;HYM1381Write(0x8E, 0x00);  // 关闭写保护for(i = 0;i < sizeof(Write_RTC_Addr);i++)  // 设置时间{			HYM1381Write(Write_RTC_Addr[i],(TIME[i]/10*16+TIME[i]%10));    //将十进制的时间数据转换为BCD格式写入HYM1381		}HYM1381Write(0x8E, 0x80);  // 打开写保护}

从HYM1381读取时间:

// 从HYM1381中读取时间信息
void HYM1381ReadTime()
{uchar i;		for(i = 0;i < sizeof(Read_RTC_Addr);i++){Read_TIME[i] = HYM1381Read(Read_RTC_Addr[i]);		}			
}

读取到时间之后,就要对时间进行处理和显示了:

以年为例,读到之后转换为十进制,使用段码屏进行显示

void DataPros()
{u8 i;HYM1381ReadTime();  // 首先读取时间信息for(i = 0;i < 7;i++)  //将读到的BCD格式转换为十进制{Read_TIME[i] = Read_TIME[i]/16*10+Read_TIME[i]%16; }//	Read_TIME[6] = Read_TIME[6]/16*10+Read_TIME[6]%16;    //年--读到的BCD格式转换为十进制Disp_Buff[15] = NumLib6_16[Read_TIME[6]%10];		      //年--个位	(十进制除以10取余数得到个位)Disp_Buff[15] = Disp_Buff[15]|0x80;     //年和月之间的“-”Disp_Buff[16] = NumLib6_16[Read_TIME[6]/10];	        //年--十位   (十进制除以10取正数得到十位)Disp_Buff[16] = Disp_Buff[16]|0x80;     //月和日之间的“-”}

接下来是用户交互的内容,可以通过按键自己调整时间:

//时间设定函数
void HYM1381_TimeSet(u8 address)
{HYM1381Write(0x8E, 0x00);  // 关闭写保护switch(address){case Year:{HYM1381Write(0x8c,(Time_Set[6]/10*16+Time_Set[6]%10));    //将十进制的时间数据转换为BCD格式写入HYM1381		}break;case Month:{HYM1381Write(0x88,(Time_Set[4]/10*16+Time_Set[4]%10));    	}break;case Date:{HYM1381Write(0x86,(Time_Set[3]/10*16+Time_Set[3]%10));    		}break;case Hour:{HYM1381Write(0x84,(Time_Set[2]/10*16+Time_Set[2]%10));    	}break;case Minute:{HYM1381Write(0x82,(Time_Set[1]/10*16+Time_Set[1]%10));    		}break;case Seconds:{HYM1381Write(0x80,(Time_Set[0]/10*16+Time_Set[0]%10));    		}break;}HYM1381Write(0x8E, 0x80);  // 打开写保护
}

因为HYM1381的存储顺序,对数组来说,从左往右依次是:秒、分、时、日、月、周、年

以年为例,数据存在Read_TIME[6],那么
 

Time_Set[6] = Read_TIME[6] - 1;      //每按一次置零键,年份减1
if(Time_Set[6] <= 0) Time_Set[6] = 99;   //年份小于0之后回到99
HYM1381_TimeSet(Year);

特别要说明日期的调整,要根据月份确定,并且2月份要区分平年还是闰年

switch(Read_TIME[Month]){case 1:case 3:case 5:case 7:case 8:case 10:case 12:{Time_Set[Date] = Read_TIME[Date] - 1;if(Time_Set[Date] < 1) Time_Set[Date] = 31;					}break;       //一三五七八十腊,31天case 2:     //二月份判断闰年平年{if((Time_Set[Year] % 4 == 0 && Time_Set[Year] % 100 != 0) || Time_Set[Year] % 400 == 0)//如果是闰年{Time_Set[Date] = Read_TIME[Date] - 1;if(Time_Set[Date] < 1) Time_Set[Date] = 29;										}else  //平年{Time_Set[Date] = Read_TIME[Date] - 1;if(Time_Set[Date] < 1) Time_Set[Date] = 28;																									}				}break;default:    //其他月份30天{Time_Set[Date] = Read_TIME[Date] - 1;if(Time_Set[Date] < 1) Time_Set[Date] = 30;															}break;												}								HYM1381_TimeSet(Date);					

http://www.dtcms.com/a/481315.html

相关文章:

  • 网站建设如何上传文件检测网站是否被墙
  • 网站建设 引导电商网站开发价格
  • 企业建设网站流程郑州网站推广公司信息
  • 网站建设过程中要注意沟通深圳品牌策划公司计划书
  • 商务网站运营与管理孟州网站开发app
  • 怎么看网站开发语言响应式网站模板免费
  • 网站建设分工东营网站建设运营公司
  • 德州企业认证网站建设网站建设需要注册42类吗
  • 网站js文件夹seo网站设计
  • 如何制作官方网站泾川建设路网站
  • 如何备份wordpress站点免费ppt模板下载 知乎
  • 网站开发与维护课程设计旅游社网站建设规划书
  • 网站建设人力调配范文做淘宝网站要求与想法
  • 大型门户网站建设一般多少钱网站功能模块设计怎么写
  • 手机网站建设一般要多少钱深圳设计公司十大排名
  • 柳州论坛网站建设百度网页打不开无法访问怎么办
  • 个人网站建设规划谢馥春网站建设的优势
  • 海北公司网站建设价格低做微网站是订阅号还是服务号号
  • 黄冈网站推广厂家怎么做农家乐联盟网站
  • 专题网站建设意义何在企业门户是什么意思
  • 宁波住房和建设局网站首页wordpress绿色两栏响应式主题
  • 惠州网站制作维护写出网站开发的基本流程
  • cp网站建设软文营销的定义
  • jsp做网站多吗小程序样式模板
  • 专业的营销型网站定制人网站建站
  • 南京市网站建设公司西安企业建站公司
  • 什么网站比较吸引流量wordpress爬虫
  • 做网站推广一年多少钱桂林山水甲天下是哪个景点
  • 广东企业网站建设多少钱丰台新乡网站建设
  • 我们提供的网站建设如何查询到某网站开发商