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

网络科技公司帮高校建设网站推广咨询服务公司

网络科技公司帮高校建设网站,推广咨询服务公司,深圳建设工程中标公示,深圳网站建设ppchsj基于51单片机万年历设计 #xff08;仿真#xff0b;程序#xff0b;原理图#xff0b;设计报告#xff09; 功能介绍 具体功能#xff1a; 本系统采用单片机DS1302时钟芯片LCD1602液晶18b20温度传感器按键蜂鸣器设计而成。 1.可以显示年月日、时分秒、星期、温度值。… 基于51单片机万年历设计 仿真程序原理图设计报告 功能介绍 具体功能 本系统采用单片机DS1302时钟芯片LCD1602液晶18b20温度传感器按键蜂鸣器设计而成。 1.可以显示年月日、时分秒、星期、温度值。 2.DS18B20测温 3.按键可设置时间、闹钟切换农历查看 ​演示视频 基于51单片机万年历设计—显示温度农历  添加图片注释不超过 140 字可选 程序 #include reg52.h //调用单片机头文件 /***公众号木子单片机****/ #define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int //无符号整型 宏定义 变量范围0~65535 #include eeprom52.h #include nongli.hbit flag_200ms ; bit flag_100ms ; sbit beep P3^7; //蜂鸣器定义 bit flag_beep_en; uint clock_value; //用作闹钟用的sbit dq P3^1; //18b20 IO口的定义uint temperature ; //温度变量 uchar flag_nl; //农历 阳历显示标志位uchar menu_1,menu_2;uchar key_time,flag_value; //用做连加的中间变量 bit key_500ms ; uchar n_nian,n_yue,n_ri; //农历显示的函数#include ds1302.h #include lcd1602.h/******************把数据保存到单片机内部eeprom中******************/ void write_eeprom() {SectorErase(0x2000);byte_write(0x2000, fen1);byte_write(0x2001, shi1);byte_write(0x2002, open1);byte_write(0x2058, a_a); }/******************把数据从单片机内部eeprom中读出来*****************/ void read_eeprom() {fen1 byte_read(0x2000);shi1 byte_read(0x2001);open1 byte_read(0x2002);a_a byte_read(0x2058); }/**************开机自检eeprom初始化*****************/ void init_eeprom() {read_eeprom(); //先读if(a_a ! 1) //新的单片机初始单片机内问eeprom{fen1 3;shi1 8;open1 1;a_a 1;write_eeprom(); //保存数据} }/***********************18b20初始化函数*****************************/ void init_18b20() {bit q;dq 1; //把总线拿高delay_uint(1); //15usdq 0; //给复位脉冲delay_uint(80); //750usdq 1; //把总线拿高 等待delay_uint(10); //110usq dq; //读取18b20初始化信号delay_uint(20); //200usdq 1; //把总线拿高 释放总线 }/*************写18b20内的数据***************/ void write_18b20(uchar dat) {uchar i;for(i0;i8;i){ //写数据是低位开始dq 0; //把总线拿低写时间隙开始 dq dat 0x01; //向18b20总线写数据了delay_uint(5); // 60usdq 1; //释放总线dat 1;} }/*************读取18b20内的数据***************/ uchar read_18b20() {uchar i,value;for(i0;i8;i){dq 0; //把总线拿低读时间隙开始 value 1; //读数据是低位开始dq 1; //释放总线if(dq 1) //开始读写数据 value | 0x80;delay_uint(5); //60us 读一个时间隙最少要保持60us的时间}return value; //返回数据 }/*************读取温度的值 读出来的是小数***************/ uint read_temp() {uint value;uchar low; //在读取温度的时候如果中断的太频繁了就应该把中断给关了否则会影响到18b20的时序init_18b20(); //初始化18b20write_18b20(0xcc); //跳过64位ROMwrite_18b20(0x44); //启动一次温度转换命令delay_uint(50); //500usinit_18b20(); //初始化18b20write_18b20(0xcc); //跳过64位ROMwrite_18b20(0xbe); //发出读取暂存器命令EA 0;low read_18b20(); //读温度低字节value read_18b20(); //读温度高字节EA 1;value 8; //把温度的高位左移8位value | low; //把读出的温度低位放到value的低八位中value * 0.625; //转换到温度值 小数return value; //返回读出的温度 带小数 }/******************1ms 延时函数*******************/ void delay_1ms(uint q) {uint i,j;for(i0;iq;i)for(j0;j120;j); }/******************写星期函数*******************/ void write_week(uchar hang,uchar add,uchar week)//写星期函数 {if(hang1) write_com(0x80add);elsewrite_com(0x800x40add); switch(week){case 1:write_data(M);//星期数为1时显示write_data(O);write_data(N);break;case 2:write_data(T);//星期数据为2时显示write_data(U);write_data(E);break;case 3:write_data(W);//星期数据为3时显示write_data(E);write_data(D);break;case 4:write_data(T);//星期数据为4是显示write_data(H);write_data(U);break;case 5:write_data(F);//星期数据为5时显示write_data(R);write_data(I);break;case 6:write_data(S);//星期数据为6时显示write_data(T);write_data(A);break;case 0:write_data(S);//星期数据为7时显示write_data(U);write_data(N);break;} }/*************时钟显示***************/ void init_1602_ds1302() {write_sfm2_ds1302(1,1,shi); //显示时write_sfm2_ds1302(1,4,fen); //显示分write_sfm2_ds1302(1,7,miao); //显示秒write_week(2,12,week); // write_sfm1(1,14,week); //显示星期write_sfm3_18B20(1,11,temperature); //显示温度if(flag_nl 0) //显示阳历{write_sfm2_ds1302(2,2,nian); //显示年write_sfm2_ds1302(2,5,yue); //显示月 write_sfm2_ds1302(2,8,ri); //显示日 }else //显示农历{write_sfm2_ds1302(2,2,n_nian); //显示年write_sfm2_ds1302(2,5,n_yue); //显示月 write_sfm2_ds1302(2,8,n_ri); //显示日 }} /*************定时器0初始化程序***************/ void init_time0() {EA 1; //开总中断TMOD 0X01; //定时器0、工作方式1ET0 1; //开定时器0中断 TR0 1; //允许定时器0定时 }/*************闹钟报警函数***************/ void menu_dis() {static uchar mm,value;if(flag_100ms 1) //100ms执行一次{flag_100ms 0;if(open1 1) //如果闹钟打开{if((miao 0) (fen fen1) (shi shi1)) { flag_beep_en 1; //有报警 打开蜂鸣器响的标志位 } if(flag_beep_en 1) //闹钟以被打开{clock_value;if(clock_value 30) beep ~beep; //蜂鸣器叫3秒else if(clock_value 30){beep 1; //蜂鸣器停1秒if(clock_value 40){clock_value 0;}}// 1 分钟后自动关闭闹钟value ;if(value 10){value 0;mm;if(mm 60){mm 0;flag_beep_en 0;beep 1; }} }} } }/********************独立按键程序*****************/ uchar key_can; //按键值void key() //独立按键程序 {static uchar key_new;key_can 20; //按键值还原P3 | 0x78; //对应的按键IO口输出为1if((P3 0x78) ! 0x78) //按键按下{delay_1ms(1); //按键消抖动if(((P3 0x78) ! 0x78) (key_new 1)){ //确认是按键按下key_new 0;switch(P3 0x78){case 0x70: key_can 4; break; //得到按键值case 0x68: key_can 3; break; //得到按键值case 0x58: key_can 2; break; //得到按键值case 0x38: key_can 1; break; //得到按键值} // write_sfm2(1,0,key_can); //显示按键值} }else key_new 1; }/**********************设置函数************************/ void key_with() {if(key_can 1) //设置键{menu_1;if(menu_1 1) //设置时间{menu_2 1;write_string(1,0, : : W: ); write_string(2,0, 20 - - ); }if(menu_1 2) //设置闹钟{menu_2 1;write_string(1,0, set clock ); write_string(2,0, Y 00:00 ); }if(menu_1 2) //回到正常显示{menu_1 0;write_guanbiao(1,2,0); //关闭光标init_1602_dis_csf(); //初始化液晶显示 }}if(key_can 2) //选择键{flag_200ms 1;if(menu_1 1) //设置时间{menu_2 ;if(menu_2 7)menu_2 1;}if(menu_1 2) //设置闹钟{menu_2 ;if(menu_2 3)menu_2 1; }}if(menu_1 1){if(menu_2 1) //设置时{if(key_can 3) //加{shi0x01;if((shi 0x0f) 0x0a)shi (shi 0xf0) 0x10;if(shi 0x24)shi 0;} if(key_can 4) //减{if(shi 0x00)shi 0x24;if((shi 0x0f) 0x00)shi (shi | 0x0a) - 0x10;shi -- ; } }if(menu_2 2) //设置分{if(key_can 3) //加{fen0x01;if((fen 0x0f) 0x0a)fen (fen 0xf0) 0x10;if(fen 0x60)fen 0;} if(key_can 4) //减 {if(fen 0x00)fen 0x5a;if((fen 0x0f) 0x00)fen (fen | 0x0a) - 0x10;fen -- ;} }if(menu_2 3) //设置秒{if(key_can 3) //加{miao0x01;if((miao 0x0f) 0x0a)miao (miao 0xf0) 0x10;if(miao 0x60)miao 0;} if(key_can 4) //减 {if(miao 0x00)miao 0x5a;if((miao 0x0f) 0x00)miao (miao | 0x0a) - 0x10;miao -- ; }}if(menu_2 4) //设置星期{if(key_can 3) //加{week0x01;if((week 0x0f) 0x0a)week (week 0xf0) 0x10;if(week 0x08)week 1;} if(key_can 4) //减 {if(week 0x01)week 0x08;if((week 0x0f) 0x00)week (week | 0x0a) - 0x10;week -- ;} }if(menu_2 5) //设置年{if(key_can 3) //加{nian0x01;if((nian 0x0f) 0x0a)nian (nian 0xf0) 0x10;if(nian 0x9a)nian 1;} if(key_can 4) //减 {if(nian 0x01)nian 0x9a;if((nian 0x0f) 0x00)nian (nian | 0x0a) - 0x10;nian -- ; } }if(menu_2 6) //设置月{if(key_can 3) //加{yue0x01;if((yue 0x0f) 0x0a)yue (yue 0xf0) 0x10;if(yue 0x13)yue 1;} if(key_can 4) //减 {if(yue 0x01)yue 0x13;if((yue 0x0f) 0x00)yue (yue | 0x0a) - 0x10;yue -- ; } }if(menu_2 7) //设置日{if(key_can 3) //加{ri0x01;if((ri 0x0f) 0x0a)ri (ri 0xf0) 0x10;if(ri 0x32)ri 0; } if(key_can 4) //减 {if(ri 0x01)ri 0x32;if((ri 0x0f) 0x00)ri (ri | 0x0a) - 0x10;ri -- ; } }write_sfm2_ds1302(1,2,shi); //显示时write_sfm2_ds1302(1,5,fen); //显示分write_sfm2_ds1302(1,8,miao); //显示秒write_sfm1(1,14,week); //显示星期 write_sfm2_ds1302(2,3,nian); //显示年write_sfm2_ds1302(2,6,yue); //显示月write_sfm2_ds1302(2,9,ri); //显示日switch(menu_2) // 光标显示{case 1: write_guanbiao(1,2,1); break;case 2: write_guanbiao(1,5,1); break;case 3: write_guanbiao(1,8,1); break;case 4: write_guanbiao(1,14,1); break;case 5: write_guanbiao(2,3,1); break;case 6: write_guanbiao(2,6,1); break;case 7: write_guanbiao(2,9,1); break;}write_time(); //把时间写进去} /***************设置闹钟*********************/if(menu_1 2){if(menu_2 1) //设置闹钟开关{if(key_can 3) {open1 1; //闹钟开} if(key_can 4) {open1 0; //闹钟关} }if(menu_2 2) //设置闹钟时{if(key_can 3) //加{shi10x01;if((shi1 0x0f) 0x0a)shi1 (shi1 0xf0) 0x10;if(shi1 0x24)shi1 0;} if(key_can 4) //减 {if(shi1 0x00)shi1 0x5a;if((shi1 0x0f) 0x00)shi1 (shi1 | 0x0a) - 0x10;shi1 -- ;} }if(menu_2 3) //设置秒{if(key_can 3) //加{fen10x01;if((fen1 0x0f) 0x0a)fen1 (fen1 0xf0) 0x10;if(fen1 0x60)fen1 0;} if(key_can 4) //减 {if(fen1 0x00)fen1 0x5a;if((fen1 0x0f) 0x00)fen1 (fen1 | 0x0a) - 0x10;fen1 -- ; }}if(open1 1)write_string(2,4,Y); else write_string(2,4,N); write_sfm2_ds1302(2,7,shi1); //显示闹钟时write_sfm2_ds1302(2,10,fen1); //显示闹钟分switch(menu_2) // 光标显示{case 1: write_guanbiao(2,4,1); break;case 2: write_guanbiao(2,7,1); break;case 3: write_guanbiao(2,10,1); break;} write_eeprom(); //保存闹钟时间} }/*****************主函数********************/硬件设计 使用元器件 单片机STC89C52 注意单片机是通用的无论51还是52、无论stc还是at都一样引脚功能都一样。程序也是一样的。 蜂鸣器电池座 直插电解电容直插瓷片电容 LCD1602液晶显示器 DC电源插座排针4-Pin PNP 三极管色环电阻 按键6X6X5MM12MHZ晶振 自锁开关DS18B20 导线若干 添加图片注释不超过 140 字可选 流程图 设计资料 01仿真图 本设计使用proteus7.8和proteus8.9两个版本设计具体如图 添加图片注释不超过 140 字可选 02原理图 本系统原理图采用Altium Designer19设计具体如图 添加图片注释不超过 140 字可选 03程序 本设计使用软件keil5版本编程设计具体如图 添加图片注释不超过 140 字可选 04设计报告 一万字设计报告具体如下 添加图片注释不超过 140 字可选 05设计资料 资料获取请关注同名公众号全部资料包括仿真源文件 、AD原理图、程序含注释、任务书、开题报告、设计报告、流程图、实物图、元件清单、实物演示视频等。具体内容如下全网最全! 可以关注下方公众号 点赞分享一起学习成长。
http://www.w-s-a.com/news/773932/

相关文章:

  • wordpress无插件实现网站地图做阿里巴巴网站店铺装修费用
  • 英文互动网站建设南宁住房和城乡建设局网站
  • 威海微网站建设乐清建网站哪家强
  • 网站和app的开发成本saas系统开发教程
  • ps切片工具做网站大气简洁网站
  • 网至普的营销型网站建设wordpress邮箱验证插件下载
  • 找权重高的网站方法张家港早晨网站建设
  • WordPress数据库添加管理员关键词优化举例
  • 河南国基建设集团--官方网站wordpress qode
  • 做农村电子商务的网站有哪些内容静态网站模板古典
  • 导航网站设计方案个人网站推广方法
  • 网站排名易下拉教程防wordpress花园
  • 计算机网站建设 是什么意思现在网站建站的主流语言是什么
  • php网站跟随导航西安百姓网免费发布信息网
  • 濮阳做公司网站html5 特效网站
  • ppt设计器怎么打开深圳seo网络推广营销
  • 建设银行网站用360浏览器建设信用卡中心网站
  • 创建公司网站 教程广州建设局
  • 详述网站建设的过程简答题ui培训设计怎么样
  • 动易网站官网ppt主题大全素材
  • 怎样用eclipse做网站可以做宣传图的网站
  • 哪里可以做游戏视频网站做网站平台应该注意哪些
  • 网站后期推广是谁来做网页制作步骤作答题
  • 全屋装修设计定制整装成都网站优化多少钱
  • html5购物网站模板一个网站两个数据库
  • 个人网站怎么做微信支付网站建设项目介绍
  • 建网站合同网站适配移动端和PC端
  • 网站建设培训机构哪里好html5开发wap网站
  • 免费自助建站源码学而思网校官网
  • 中国最大的网站制作公司青海省高等级公路建设管局网站