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

做一个网站的基本步骤wordpress主题 v2ex

做一个网站的基本步骤,wordpress主题 v2ex,换网站后台,找婚庆公司去什么网站51单片机内部含有晶振#xff0c;可以实现定时/计数功能。但是其缺点有#xff1a;精度往往不高、不能掉电使用等。 我们可以通过DS1302时钟芯片来解决以上的缺点。 DS1302时钟芯片 功能#xff1a;DS1302是一种低功耗实时时钟芯片#xff0c;内部有自动的计时功能#x…51单片机内部含有晶振可以实现定时/计数功能。但是其缺点有精度往往不高、不能掉电使用等。 我们可以通过DS1302时钟芯片来解决以上的缺点。 DS1302时钟芯片 功能DS1302是一种低功耗实时时钟芯片内部有自动的计时功能其范围包括年、月、日、时、分、秒、星期。且每个月的天数和闰年的天数可以内部自动调整。 结构以及引脚定义 常见的DS1302时钟芯片有DIP直插式和SO表贴式两种封装 。 引脚定义 引脚名称功能X1、X2DS1302外部晶振引脚通常接32.768K晶振VCC1备用电源在主电源使用时可被充电VCC2主电源供应管脚与单片机共用一个电源GND电源地CE使能端也是复位引脚在进行读写时CE要保持高电平I/O串行数据输入或输出SCLK串行时钟 通常通过单片机直接与CE、I/O、SCLK这3个引脚相连控制其高低电平进而控制DS1302时钟芯片。 DS1302电路图 其中C2和C3为旁路电容目的是消除晶振起振时产生的电感干扰。对于此电路没有接入备用电池可自行将外部备用电源接入VCC1。 DS1302内部寄存器 控制寄存器 功能通过给控制寄存器数据来决定进入年月日等具体哪一个寄存器、进行读/写操作。 上图为控制寄存器样式。 最高位一直为1 第6位1表示RAM寻址内部存储器0为CK寻址内部寄存器。 第5位~第1位为年月日等日历寄存器的地址。 最低位1表示下一步操作为“读”0表示下一步操作为“写”。 日历/时钟寄存器 上图为年月日等相关寄存器的地址绿框内、功能等。以下对其进行详细说明 相关寄存器的位说明 寄存器名称取值范围D7D6D5D4D3D2D1D0秒寄存器00~59CH秒的十位秒的个位分寄存器00~590分的十位分的个位小时寄存器 1~12或 00~23 12小时制/ 24小时制 0AM/PMHour小时的个位日寄存器01~3100日的十位日的个位月寄存器01~120001或0月的个位星期寄存器01~070000星期几年寄存器01~9920XX年的十位年的个位写保护寄存器WP0000000 需特别注意以下部分 秒寄存器CH为DS1302的运行标志当CH0时DS1302内部才能工作当CH1时DS1302停止工作。 写保护寄存器当WP为1时DS1302只读不写。所以进行写操作时要确保WP为0。 DS1302初始时间设置 举个例子如果想将2024.05.04—周7—23:59:49这个时间写入DS1302内部具体操作如下 1、对0x8E地址操作关闭写保护 2、对秒寄存器0x80操作写入0x49 3、对分寄存器0x82操作写入0x59 4、对时寄存器0x84操作写入0x23 ......以此类推最后对0x8E地址操作打开写保护。 BCD码 BCD码用4位二进制数来表示1位十进制数。 例如0001 0011表示13、1000 0101表示85、0001 1010不合法。 在日历/时钟寄存器内部都是以BCD码来存放数据。因此要设置DS1302的时间要写入BCD码格式。同时读取数据时读到的也是BCD码使用时需转换为对应十进制。 00000501011000160110200107011130011810004010091001 转换公式 读写时序 前面提到单片机与DS1302相连的线有3根分别为CE、SCLK和I/O引脚如何通过这3根线进行数据写入和读出呢 CE初始化使其为低电平在整个读写过程中要保持高电平一次读写操作完毕后再回到低电平。 // 功能DS1302初始化 void DS1302_Init(){DS1302_CE0; //使能端置0DS1302_SCLK0; //时钟脉冲置0 } 单字节写入先关闭写保护当CE为高电平时通过单片机控制SCLK产生脉冲每一个上升沿I/O线的数据就进入控制寄存器当控制寄存器配置完成后紧接着的I/O线数据会在上升沿时进入对应地址的寄存器。 /***breaf DS1302单字节写入函数*param command写入命令字包含要写入寄存器的地址*param Data将要写入的数据内容*retval 无*/ void DS1302_WriteBety(unsigned char command,Data) {unsigned char i;DS1302_CE1;//使能位置高电平//设置控制寄存器for(i0;i8;i)//控制寄存器数据需要通过IO线一个一个写入控制寄存器;低位先写入{DS1302_IOcommand(0x01i);DS1302_SCLK1; //给一个上升沿DS1302_SCLK0;}//设置相关年月日寄存器for(i0;i8;i)//数据写入{DS1302_IOData(0x01i);DS1302_SCLK1;DS1302_SCLK0;}DS1302_CE0; } 单字节读出当CE为高电平时通过单片机控制SCLK产生脉冲每一个上升沿I/O线的数据就进入控制寄存器当控制寄存器配置完成后紧接着对应地址的寄存器数据会在下降沿时进入I/O线。 /***breaf DS1302单字节读出函数*param command写入控制指令的指令包含要读出寄存器的地址*retval Data读出的数据*/ unsigned char DS1302_ReadBety(unsigned char command) {unsigned i,Data0X00;command|0X01;//写入指令与读出指令只在最后一位相差1故在此利用或运算消除DS1302_CE1;//使能位置高电平for(i0;i8;i)//控制寄存器数据需要通过IO线一个一个写入控制寄存器;低位先写入{DS1302_IOcommand(0x01i);DS1302_SCLK0; DS1302_SCLK1;}DS1302_IO0;for(i0;i8;i)//数据读出{DS1302_SCLK1;DS1302_SCLK0; if(DS1302_IO) {Data |(0X01i);}}DS1302_CE0;return Data; } 注意数据输入从低位开始。 代码设计 main.c #include REGX52.H #include lcd1602.h//包含LCD1602头文件 #include DS1302.h//包含DS1302头文件 void main ()//定义主函数 {LCD_Init(); //LCD1602初始化DS1302_Init();//DS1302初始化LCD_ShowString(1,1, - - );//设置年月日格式LCD_ShowString(2,1, : : );//设置时分秒格式DS1302_SetTime();//设置时间通过数组进行设置while(1){DS1302_ReadTime();//读取内部时间LCD_ShowNum(1,1,DS1302_Time[0],2);//显示年LCD_ShowNum(1,4,DS1302_Time[1],2);//显示月LCD_ShowNum(1,7,DS1302_Time[2],2);//显示日LCD_ShowNum(2,1,DS1302_Time[3],2);//显示时LCD_ShowNum(2,4,DS1302_Time[4],2);//显示分LCD_ShowNum(2,7,DS1302_Time[5],2);//显示秒LCD_ShowNum(2,13,DS1302_Time[6], 1);//显示星期} } DS1302.c #include REGX52.H//引脚定义 sbit DS1302_SCLKP3^6; sbit DS1302_IOP3^4; sbit DS1302_CEP3^5;//对应寄存器位置定义 #define DS1302_SECOND 0X80 #define DS1302_MINUTE 0X82 #define DS1302_HOUR 0X84 #define DS1302_DATE 0X86 #define DS1302_MONTH 0X88 #define DS1302_DAY 0X8A #define DS1302_YEAR 0X8C #define DS1302_WP 0X8E //定义数组用于存放设定的时间年月日时分秒星期 unsigned char DS1302_Time[]{23,10, 28,19,00,59,6};//顺序年月日时分秒星期 /***breaf DS1302初始化*param无*retval无*/ void DS1302_Init() {DS1302_CE0;//将使能位置0低电平DS1302_SCLK0;//将时钟位置0低电平 }/***breaf DS1302单字节写入函数*param command写入控制指令的指令包含要写入寄存器的地址*param Data将要写入的数据内容*retval 无*/ void DS1302_WriteBety(unsigned char command,Data) {unsigned char i;DS1302_CE1;//使能位置高电平for(i0;i8;i)//控制寄存器数据需要通过IO线一个一个写入控制寄存器;低位先写入{DS1302_IOcommand(0x01i);//相当于把第1--7位置0只留第0位如果第0位是0则为0反之则为1DS1302_SCLK1;DS1302_SCLK0;}for(i0;i8;i)//数据写入{DS1302_IOData(0x01i);//相当于把第1--7位置0只留第0位如果第0位是0则为0反之则为1DS1302_SCLK1;DS1302_SCLK0;}DS1302_CE0; }/***breaf DS1302单字节读出函数*param command写入控制指令的指令包含要读出寄存器的地址*retval Data读出的数据*/ unsigned char DS1302_ReadBety(unsigned char command) {unsigned i,Data0X00;command|0X01;//写入指令与读出指令只在最后一位相差1故在此利用或运算消除DS1302_CE1;//使能位置高电平for(i0;i8;i)//控制寄存器数据需要通过IO线一个一个写入控制寄存器;低位先写入{DS1302_IOcommand(0x01i);//相当于把第1--7位置0只留第0位如果第0位是0则为0反之则为1DS1302_SCLK0; DS1302_SCLK1;}DS1302_IO0;for(i0;i8;i)//数据读出{DS1302_SCLK1;DS1302_SCLK0; if(DS1302_IO) {Data |(0X01i);}}DS1302_CE0;return Data; }/***breaf 向DS1302内设定时间*param无*retval无*/ void DS1302_SetTime() {DS1302_WriteBety(DS1302_WP,0x00);//操作 DS1302 之前关闭写保护不然指令无法进入控制寄存器DS1302_WriteBety(DS1302_YEAR, DS1302_Time[0]/10*16DS1302_Time[0]%10);//写入年并将10进制转化BCD码DS1302_WriteBety(DS1302_MONTH, DS1302_Time[1]/10*16DS1302_Time[1]%10);//写入月并将10进制转化BCD码DS1302_WriteBety(DS1302_DATE, DS1302_Time[2]/10*16DS1302_Time[2]%10);//写入日并将10进制转化BCD码DS1302_WriteBety(DS1302_HOUR, DS1302_Time[3]/10*16DS1302_Time[3]%10);//写入时并将10进制转化BCD码DS1302_WriteBety(DS1302_MINUTE, DS1302_Time[4]/10*16DS1302_Time[4]%10);//写入分并将10进制转化BCD码DS1302_WriteBety(DS1302_SECOND, DS1302_Time[5]/10*16DS1302_Time[5]%10);//写入秒并将10进制转化BCD码DS1302_WriteBety(DS1302_DAY, DS1302_Time[6]/10*16DS1302_Time[6]%10);//写入星期并将10进制转化BCD码DS1302_WriteBety( DS1302_WP,0x80);//写入结束开启写保护 }/** *breaf 读取DS1302内时间 *param无 *retval无 */ void DS1302_ReadTime() {unsigned char Temp;//定义变量用于暂时存储BCD码TempDS1302_ReadBety(DS1302_YEAR);//读取年BCD码DS1302_Time[0]Temp/16*10Temp%16;//BCD码转十进制TempDS1302_ReadBety(DS1302_MONTH);//读取月BCD码DS1302_Time[1]Temp/16*10Temp%16;//BCD码转十进制TempDS1302_ReadBety(DS1302_DATE);//读取日BCD码DS1302_Time[2]Temp/16*10Temp%16;//BCD码转十进制TempDS1302_ReadBety(DS1302_HOUR);//读取小时BCD码DS1302_Time[3]Temp/16*10Temp%16;//BCD码转十进制TempDS1302_ReadBety(DS1302_MINUTE);//读取分钟BCD码DS1302_Time[4]Temp/16*10Temp%16;//BCD码转十进制TempDS1302_ReadBety(DS1302_SECOND);//读取秒BCD码DS1302_Time[5]Temp/16*10Temp%16;//BCD码转十进制TempDS1302_ReadBety(DS1302_DAY);//读取星期BCD码DS1302_Time[6]Temp/16*10Temp%16;//BCD码转十进制 } DS1302.h #ifndef __DS1302_H__ #define __DS1302_H__extern unsigned char DS1302_Time[];//声明设置时间的数组 void DS1302_Init();//声明初始化函数 void DS1302_WriteBety(unsigned char command,Data);//声明时间写入函数 unsigned char DS1302_ReadBety(unsigned char command);//声明时间读出函数 void DS1302_SetTime();//声明设置内部时间函数 void DS1302_ReadTime();//声明读取内部时间函数#endif
http://www.w-s-a.com/news/14785/

相关文章:

  • 网上书店网站建设实训总结嘉兴seo
  • 网站运行需求cos wordpress
  • 网络小说网站推广策划方案单位网站建设收费标准
  • 医院网站建设论证报告河源网站seo
  • 网站demo怎么做淘宝客网站一般用什么做的
  • 网站开发之美 pdf关键词查询优化
  • 可以建站的网站做一个网站美工多少钱
  • 怎么做网站专题互联网营销师报考费用
  • 淘宝导购网站怎么做上海数据开放网站建设
  • 广东网站建设怎么选2021个人网站盈利模式
  • 珠海网站建设的公司排名网站前端开发培训
  • 手机网站制作 费怎么做分录网站域名hk
  • 济南做网站建网站公司怎样用代码制作网站
  • 网站开发文档有哪些建设规划
  • 专注网站建设11年百度搜索不到我的网站
  • 企业网站 建设 流程wordpress 分类目录自定义
  • 北京市建设管理公司网站长春网站推广排名
  • 西安建站软件获取网站全站代码
  • 个人做网站怎么备案网站建设收费标准渠道
  • 单位做网站注意什么问题如何修改单页网站
  • asp全静态企业网站wordpress文章封面
  • 电白区住房和城乡建设部门户网站免费公司网站模版
  • 做玩游戏任务得q币的网站如何制作自己的公司内部网站
  • 网站优化自己可以做吗非官方网站建设
  • 厦门邮件网站点击网站
  • 网络推广网站的方法亳州网站制作公司
  • 网站域名主机空间区别广告设计专业前景
  • 新手做啥网站好dedecms网站的源码如何安装
  • 哪些网站是用iframe免费网站域名查询
  • 自己开的网站 可以做代销吗百度查找相似图片