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

如何做能上传视频网站城乡建设部网站首页

如何做能上传视频网站,城乡建设部网站首页,静态网址,网站界面设计缺点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.hkea.cn/news/14312557/

相关文章:

  • 公司网站设计素材网页设计咨询
  • 60天做网站wordpress 域名更换
  • C语言网站开发pdfphp做网站图集
  • 在厦门做网站找谁wordpress旅游模板下载
  • 搜索引擎营销的实现方法有怎样优化推广
  • 南宁网站建设nnit30建设银行商城网站
  • 湖南房地产加盟网站建设推广公司产品的话术
  • 才做的网站怎么搜不到中国建设布网站
  • 网站里怎样做点击量查询电脑上两个版本的wordpress
  • 魔力百科网站做料理视频接网站开发的公司电话
  • 统计局宣传工作总结 网站建设怎么做网站的广告
  • 找人做的网站第二年多钱绵阳城乡住房建设厅网站
  • 网站怎么做图片动态图片不显示凡客诚品现状2022
  • 手机可以访问的网站怎么做pos机WordPress主题
  • wordpress仿站开发长沙网络营销咨询费用
  • 网站建设的电销西安网站seo优化公司
  • 外贸网站收录工具公司做年审在哪个网站
  • 制作自己的网站教程长清做网站公司
  • 大型建站公司是干嘛的深圳seo公司
  • 网站建设业务的延伸性如何搭建论坛网站
  • 给网站做seo伪原创工具
  • 网站做的漂亮的企业怎么介绍自己的网站建设
  • 无极网站设计合肥百度快速排名提升
  • 张家界商城网站建设如何做垂直网站
  • 太原北京网站建设公司哪家好页面素材图片
  • 长沙营销型网站设计wordpress wp-polls
  • 注册网站域名的入口是网站空间登录
  • 建站模板行情专科网站开发简历
  • 四川省住房和城镇建设官方网站网站301定向
  • wordpress 子目录建站做韦恩图网站