能给我一份ds18b20程序 at89c52的毕业设计 么 pcd图和程序 不胜感激 所有分都给你了

基于AT89C52单片机和DS18B20设计的高精度温度测量系统_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
4页¥2.0010页2下载券32页2下载券4页4下载券13页免费4页免费5页4下载券10页1下载券4页1下载券14页1下载券
喜欢此文档的还喜欢10页免费23页免费51页免费22页免费13页1下载券
基于AT89C52单片机和DS18B20设计的高精度温度测量系统|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢> 51单片机AT89C52与DS18B20的接口电路及源代码
51单片机AT89C52与DS18B20的接口电路及源代码
  本文将介绍51单片机AT89C52与温度芯片DS18B20构成测温系统,并提供源程序供读者参考.其测量的温度精度达到0.1度,测量的温度的范围在-20度到+50度之间,用4位数码管显示出来。
  硬件电路原理图
图2 AT89S52与DS18B20组成的测温系统原理图
  工作原理  DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计。DS18B20产品的特点  (1)、只要求一个I/O口即可实现通信。  (2)、在DS18B20中的每个器件上都有独一无二的序列号。  (3)、实际应用中不需要外部任何即可实现测温。  (4)、测量温度范围在-55。C到+125。C之间。  (5)、数字温度计的分辨率用户可以从9位到12位选择。  (6)、内部有温度上、下限告警设置。  DS18B20详细引脚功能描述1 GND地信号;2 DQ数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源;3 VDD可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。  DS18B20的使用方法。由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。  C语言源程序:
  #include  code unsigned char seg7code[11]={0x3f,0x06,0x5b,0x4f,0x66,  0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //显示段码  void Delay(unsigned int tc) //显示延时程序  {while( tc != 0 )  {  for(i=0; i&100; i );  tc--;}  }  sbit TMDAT =P3^1; //DS18B20的数据输入/输出脚DQ,根据情况设定  //测量到的温度的整数部分  unsigned char xiaoshu1;//小数第一位  unsigned char xiaoshu2;//小数第二位  u//两位小数  bit fg=1; //温度正负标志  void dmsec (unsigned int count) //延时部分  {    while(count--)  {for(i=0;i&115;i );}   }  void tmreset (void) //发送复位  {    TMDAT=0; for(i=0;i&103;i );   TMDAT = 1; for(i=0;i&4;i );   }  bit tmrbit (void) //读一位//  {      TMDAT = 0;    TMDAT = 1;   //微量延时 //  dat = TMDAT;  for(i=0;i&8;i );   return (dat);  }  unsigned char tmrbyte (void) //读一个字节  {  unsigned char i,j,  dat = 0;  for (i=1;i&=8;i )   { j = tmrbit(); dat = (j&& 7) | (dat && 1); }  return (dat);  }  void tmwbyte (unsigned char dat) //写一个字节  {  unsigned char j,i;    for (j=1;j&=8;j )   { testb = dat & 0x01;  dat = dat && 1;  if (testb)  { TMDAT = 0; //写0    TMDAT = 1;  for(i=0;i&8;i ); }
  else  { TMDAT = 0; //写0  for(i=0;i&8;i );   TMDAT = 1;  }  }  }  void tmstart (void) //发送ds1820 开始转换  { tmreset(); //复位  dmsec(1); //延时  tmwbyte(0xcc); //跳过序列号命令  tmwbyte(0x44); //发转换命令 44H,  }  void tmrtemp (void) //读取温度  {  unsigned char a,b;  tmreset (); //复位  dmsec (1); //延时  tmwbyte (0xcc); //跳过序列号命令  tmwbyte (0xbe); //发送读取命令  a = tmrbyte (); //读取低位温度  b = tmrbyte (); //读取高位温度  if(b&0x7f) //最高位为1时温度是负  {a=~a; b=~b 1; //补码转换,取反加一  fg=0; //读取温度为负时fg=0  }  sdata = a/16 b*16; //整数部分  xiaoshu1 = (a&0x0f)*10/16; //小数第一位  xiaoshu2 = (a&0x0f)*100/16;//小数第二位  xiaoshu=xiaoshu1*10 xiaoshu2; //小数两位  }  void DS18B20PRO(void)  { tmstart();  //dmsec(5); //如果是不断地读取的话可以不延时 //  tmrtemp(); //读取温度,执行完毕温度将存于TMP中 //  }  void Led()  {  if(fg==1) //温度为正时显示的数据  { P2=P2&0  P0=seg7code[sdata/10]; //输出十位数  Delay(8); P2=P2|0xf0; P2=P2&0  P0=seg7code[sdata]|0x80; //输出个位和小数点  Delay(8); P2=P2|0xf0; P2=P2&0  P0=seg7code[xiaoshu1]; //输出小数点后第一位  Delay(8); P2=P2|0xf0; P2=P2&0x7f;  P0=seg7code[xiaoshu2]; //输出小数点后第二位  Delay(4); P2=P2|0xf0;  }  if(fg==0) //温度为负时显示的数据  { P2=P2&0  P0=seg7code[11]; //负号  Delay(8); P2=P2|0xf0; P2=P2&0  P0=seg7code[sdata/10]|0x80; //输出十位数  Delay(8); P2=P2|0xf0; P2=P2&0  P0=seg7code[sdata]; //输出个位和小数点  Delay(8); P2=P2|0xf0; P2=P2&0x7f;  P0=seg7code[xiaoshu1]; //输出小数点后第一位  Delay(4); P2=P2|0xf0;  }  }  main()  {fg=1;  while(1)  {  DS18B20PRO();  Led();  }  }
免责声明:
&&&&本网转载之文章来源于互联网,转载目的在于传递更多信息,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权问题存在异议的,请在30日内与本网联系。联系方式:2
热门评论Top5
您有何高见
存储器¥3.52
430微控制器¥6.00
接口器件¥45.77
数据转换器¥256.81
美国国际消费类电子产品展览会(CES)是世界最大的消费类电子产品和技术的年度会展,其规模在全美各类年度会展中首屈一指。该展始于1967年,迄今已有45年
日至11月1日,以“信息化推动工业化,电子技术促进产业升级”为主题的第80届中国电子展(CEF)在上海新国际博览中心隆重开幕。
设计与运用
合作与转让
违规与防骗
工艺、材料与封装
标准、政策与法规
扑克牌人物评选
电子产业回顾与展望
版权所有 不得转载电子万年历毕业设计_甜梦文库|文库百度|百度文库下载|百度文档|新浪文库|豆丁文库|冰点文库|文库宝|免费下载百度文库
甜梦文库_文库百度,百度文库下载,下载百度文库的文档,新浪文库,豆丁文库,冰点文库,文库宝,免费下载百度文库
当前位置: >>
>> 电子万年历毕业设计
毕业设计说明书《电子万年历》目录摘 要 ........................................................................... 3 一.设计要求与方案论证............................................................ 4 1.1 设计要求 ................................................................... 4 1.1.1 基本要求 ................................................................ 4 1.1.2 创新要求 ................................................................ 4 1.2 系统基本方案选择和论证 ...................................................... 4 1.2.1 单片机芯片 .............................................................. 4 1.2.2 显示模块 ............................................................... 5 1.2.3 时钟芯片 ................................................................ 5 1.2.4 温度传感器 .............................................................. 6 1.3 电路设计最终方案决定 ........................................................ 6 二.电子万年历硬件设计与实现...................................................... 7 2.1 电子万年历系统设计 .......................................................... 7 2.1.1 系统设计框图 ............................................................ 7 2.1.2 系统硬件概述............................................................ 7 2.2 系统硬件各模块作用 .......................................................... 7 2.2.1 单片机主控制模块 ........................................................ 7 2.2.2 时钟电路模块 ........................................................... 10 2.2.3 温度采集模块 ........................................................... 14 2.2.4 显示模块 ............................................................... 15 2.3 电子万年历电路设计 ......................................................... 18 2.3.1 系统电路图 ............................................................. 18 2.3.2 电路图分析............................................................. 19 三.电子万年历软件设计........................................................... 20 3.1 程序流程框图 ............................................................... 20 3.1.1 总流程图 ............................................................... 20 3.1.2 阳历程序流程图......................................................... 21 3.1.3 阴历程序流程图......................................................... 21 3.1.4 时间调整程序流程图..................................................... 22 3.2 部分程序的设计 ............................................................. 23 3.2.1 DS18B20 温度子程序 ..................................................... 23 3.2.2 读、写 DS1302 子程序.................................................... 24 四. 指标测 ...................................................................... 25 4.1 测试仪器 ................................................................... 251 毕业设计说明书《电子万年历》 4.2硬件测试 .................................................................. 25 4.3软件测试 .................................................................. 25 4.4测试结果分析与结论......................................................... 26 4.4.1 测试结果分析........................................................... 26 4.4.2 测试结论 .............................................................. 26 五.设计总结 .................................................................... 27 致 谢 .......................................................................... 28 参考文献 ........................................................................ 29 附录一:系统程序清单........................................................... 30 附录二:系统使用说明书......................................................... 462 毕业设计说明书《电子万年历》摘要电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、 周、时、分、秒进行计时,还具有闰年补偿等多种功能。 电子万年历设计是基于单片机进行的,可以显示年、月、日、时、分、秒、周及温度信息, 具有可调整日期和时间功能。 设计包含 AT89S52 单片机模块、 LED 数码管模块、 键盘模块、 DS1302 模块、 数字式温度传感器 DS18B20 模块。 AT89S52 单片机作为核心, 功耗小, 能在 3V 的低压工作, 电压可选用 3~5V 电压供电。LED 数码管动态扫描,对于显示数字最合适,价格适中,而且采用动 态扫描法与单片机连接时,占用的单片机口线少。DS1302 的使用寿命长,误差小。对于数字电子 万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具 有时间校准等功能。数字式温度传感器 DS18B20 仅需要一条数据线进行数据传输,易与单片机连 接简化系统电路.数字式温度传感器还具有测量精度高、测量范围广等优点。 关键词:AT89S52;DS1302;DS18B20;LED 数码管;单片机3 毕业设计说明书《电子万年历》一.设计要求与方案论证1.11.1.1 基本要求① 具有年、月、日、星期、时、分、秒等功能; ② 时间与阴、阳历能够自动关联; ③ 具备年、月、日、星期、时、分、秒校准功能;设计要求1.1.2 创新要求① 具有温度计功能;1.2 系统基本方案选择和论证1.2.1 单片机芯片PIC 单片机是 MICROCHIP 公司的产品,其突出的特点是体积小,功耗低,精简指令集,抗干扰性好,可靠性 高,有较强的模拟接口,代码保密性好,大部分芯片有其兼容的 FLASH 程序存储器的芯片。EMC 单片机是台湾义隆公司的产品,有很大一部分与 PIC 8 位单片机兼容,且相兼容产品的资源相对比 PIC 的多,价格便宜,有很多系列可选,但抗干扰较差。ATMEL 单片机ATMEl 公司的 8 位单片机有 AT89、AT90 两个系列,AT89 系列是 8 位 Flash 单片机,与 8051 系 列单片机相兼容,静态时钟模式;AT90 系列单片机是增强 RISC 结构、全静态工作方式、内载在线 可编程 Flash 的单片机,也叫 AVR 单片机。PHLIPIS 51PLC 系列单片机PHILIPS 公司的单片机是基于 80C51 内核的单片机,嵌入了掉电检测、模拟以及片内 RC 振荡 器等功能,这使 51LPC 在高集成度、低成本、低功耗的应用设计中可以满足多方面的性能要求。HOLTEK 单片机台湾盛扬半导体的单片机,价格便宜,种类较多,但抗干扰较差,适用于消费类产品。4 毕业设计说明书《电子万年历》TI 公司单片机德州仪器提供了 TMS370 和 MSP430 两大系列通用单片机.TMS370 系列单片机是 8 位 CMOS 单片 机,具有多种存储模式、多种外围接口模式,适用于复杂的实时控制场合;MSP430 系列单片机是一 种超低功耗、功能集成度较高的 16 位低功耗单片机,特别适用于要求功耗低的场合。方案一采用 89C51 芯片作为硬件核心,采用 Flash ROM,内部具有 4KB ROM 存储空间,能于 3V 的超 低压工作,而且与 MCS-51 系列单片机完全兼容,但是运用于电路设计中时由于不具备 ISP 在线编 程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对 芯片的多次拔插会对芯片造成一定的损坏。方案二采用 AT89S52,片内 ROM 全都采用 Flash ROM;能以 3V 的超底压工作;同时也与 MCS-51 系列 单片机完全该芯片内部存储器为 8KB ROM 存储空间,同样具有 89C51 的功能,且具有在线编程可 擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时, 不需要对芯片多次拔插,所以不会对芯片造成损坏。 所以选择采用 AT89S52 作为主控制系统。1.2.2 显示模块方案一采用 LED 液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可 见,但是价格昂贵,需要的接口线多,所以在此设计中不采用 LED 液晶显示屏。方案二采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较 适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。方案三采用 LED 数码管动态扫描,LED 数码管价格适中,对于显示数字最合适,而且采用动态扫描法 与单片机连接时,占用的单片机口线少。 所以采用了 LED 数码管作为显示。1.2.3 时钟芯片方案一直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。 5 毕业设计说明书《电子万年历》 采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二采用 DS1302 时钟芯片实现时钟,DS1302 芯片是一种高性能的时钟芯片,可自动对秒、分、 时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的 RAM 做为数据暂存区,工作 电压 2.5V~5.5V 范围内,2.5V 时耗电小于 300nA。 所以采用 DS1302 时钟芯片实现时钟。1.2.4 温度传感器方案一使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值 随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行 A/D 转换。 。此设计方案需用 A/D 转换电路,增加硬件成本而且热敏电阻的感温特性曲线并不是严格线性的,会产生较大的测 量误差。方案二采用数字式温度传感器 DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数 据传输,易于与单片机连接,可以去除 A/D 模块,降低硬件成本,简化系统电路。另外,数字式 温度传感器还具有测量精度高、测量范围广等优点。 所以采用数字式温度传感器 DS18B20。1.3 电路设计最终方案决定综上各方案所述,对此次作品的方案选定: 采用 AT89S52 作为主控制系统; DS1302 提供时钟; 数字式温度传感器 DS18B20;LED 数码管动态扫描作为显示。6 毕业设计说明书《电子万年历》二.电子万年历硬件设计与实现2.1 电子万年历系统设计2.1.1 系统设计框图LED 数码管动态扫 描显示模块AT89S52 主控制模 块键盘模块DS1302 时钟模块 2.1.2 系统硬件概述温度采集模块本电路是由 AT89S52 单片机为控制核心,具有在线编程功能,低功耗,能在 3V 超低压工作; 时钟电路由 DS1302 提供,它是一种高性能、低功耗、带 RAM 的实时时钟电路,它可以对年、月、 日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V~5.5V。采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据。DS1302 内部有 一个 31*8 的用于临时性存放数据的 RAM 寄存器。可产生年、月、日、周日、时、分、秒,具有 使用寿命长, 精度高和低功耗等特点, 同时具有掉电自动保存功能; 温度的采集由 DS18B20 构成; 显示部份由21个数码管,74ls138、74ls47 译码器构成。使用动态扫描显示方式对数字的显示。2.2 系统硬件各模块作用2.2.1 单片机主控制模块主要性能与 MCS-51 单片机产品兼容 、 字节在系统可编程 Flash 存储器、 1000 次擦写周期、 8K 全静态操作:0Hz~33Hz 、 三级加密程序存储器 、 32 个可编程 I/O 口线 、三个 16 位 定时器/计数器 八个中断源 、全双工 UART 串行通道、 低功耗空闲和掉电模式 、掉电后 中断可唤醒 、看门狗定时器 、双数据指针 、掉电标识符 。功能特性描述At89s52 是一种低功耗、高性能 CMOS8 位微控制器, 具有 8K 在系统可编程 Flash 存 储器。使用 Atmel 公司高密度非 易失性存储器技术制造,与工业 80C51 产品指令和引脚 7 毕业设计说明书《电子万年历》 完 全兼容。片上 Flash 允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上, 拥有灵巧的 8 位 CPU 和在系统 可编程 Flash,使得 AT89S52 为众多嵌入式控制应用系统 提 供高灵活、超有效的解决方案。 AT89S52 具有以下标准功能: 8k 字节 Flash,256 字 节 RAM, 32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位 定时器/计数器, 一个 6 向量 2 级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降 至 0Hz 静态逻 辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU 停止工作,允 许 RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM 内容被保存,振 荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。8 位微控制器 8K 字节在系统可编程 Flash AT89S52 P0 口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动 8 个 TTL 逻辑电平。对 P0 端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0 口也被作为低 8 位地址/数据复用。在这种模式 下,P0 具有内部上拉电阻。 在 flash 编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节。程序校 验时,需要外部上拉电阻。 P1 口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能驱动 4 个 TTL 逻辑电平。对 P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流( IIL)。 此外,P1.0 和 P1.2 分别作定时器/计数器 2 的外部计数输入(P1.0/T2)和时器/计数 器 2 的触发输入(P1.1/T2EX),具体如下表所示。 在 flash 编程和校验时,P1 口接收低 8 位地址字节。引脚号第二功能P1.0 T2(定时器/计数器 T2 的外部计数输入),时钟输出 P1.1 T2EX(定时器/计数器 T2 的捕捉/重载触发信号和方向控制) P1.5 MOSI(在系统编程用) P1.6 MISO(在系统编程用) P1.7 SCK(在系统编程用) P2 口:P2 口是一个具有内部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器能驱动 4 个 TTL 逻辑电平。对 P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的 原因,将输出电流(IIL)。 在访问外部程序存储器或用 16 位地址读取外部数据存储器(例如执行 MOVX @DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送 1。在使用 8 位地址(如 MOVX @RI)访问外部数据存储器时,P2 口输出 P2 锁存器的内容。 在 flash 编程和校验时,P2 口也接收高 8 位地址字节和一些控制信号。 P3 口:P3 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p2 输出缓冲器能驱动 4 个 TTL 逻辑电平。对 P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流( IIL)。 8 毕业设计说明书《电子万年历》 P3 口亦作为 AT89S52 特殊功能(第二功能)使用,如下表所示。 在 flash 编程和校验时,P3 口也接收一些控制信号。端口引脚 第二功能P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INTO(外中断 0) P3.3 INT1(外中断 1) P3.4 TO(定时/计数器 0) P3.5 T1(定时/计数器 1) P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器读选通) 此外,P3 口还接收一些用于 FLASH 闪存编程和程序校验的控制信号。 RST——复位输入。当振荡器工作时,RST 引脚出现两个机器周期以上高电平将是单片 机复位。 ALE/PROG——当访问外部程序存储器或数据存储器时, ALE(地址锁存允许)输出脉 冲用于锁存地址的低 8 位字节。一般情况下,ALE 仍以时钟振荡频率的 1/6 输出固定的脉 冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器 时将跳过一个 ALE 脉冲。 对 FLASH 存储器编程期间,该引脚还用于输入编程脉冲(PROG)。 如有必要,可通过对特殊功能寄存器(SFR)区中的 8EH 单元的 D0 位置位,可禁止 ALE 操作。该位置位后,只有一条 MOVX 和 MOVC 指令才能将 ALE 激活。此外,该引脚会被微弱 拉高,单片机执行外部程序时,应设置 ALE 禁止位无效。 PSEN——程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当 AT89C52 由 外部程序存储器取指令(或数据)时,每个机器周期两次 PSEN 有效,即输出两个脉冲, 在此期间,当访问外部数据存储器,将跳过两次 PSEN 信号。 EA/VPP——外部访问允许,欲使 CPU 仅访问外部程序存储器(地址为 0000H-FFFFH), EA 端必须保持低电平(接地)。需注意的是:如果加密位 LB1 被编程,复位时内部会锁存 EA 端状态。 如 EA 端为高电平(接 Vcc 端),CPU 则执行内部程序存储器的指令。 FLASH 存储器编程时,该引脚加上+12V 的编程允许电源 Vpp,当然这必须是该器件是 使用 12V 编程电压 Vpp。 AT89S52 单片机为 40 引脚双列直插芯片,有四个 I/O 口 P0,P1,P2,P3, MCS-51 单片机共有 4 个 8 位的 I/O 口(P0、P1、P2、P3) ,每一条 I/O 线都能独立地作输出或输入。 单片机的最小系统如下图所示,18 引脚和 19 引脚接时钟电路,XTAL1 接外部晶振和微调电容 的一端,在片内它是振荡器倒相放大器的输入,XTAL2 接外部晶振和微调电容的另一端,在片内它 是振荡器倒相放大器的输出.第 9 引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20 引脚为接地端,40 引脚为电源端,如图 2-1 所示。9 毕业设计说明书《电子万年历》图 2-1 主控制系统2.2.2 时钟电路模块DS1302 是美国 DALLAS 公司推出的一种高性能、低功耗、带 RAM 的实时时钟电路,它可以对 年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V~5.5V。采用三 线接口与 CPU 进行同步通信, 并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据。 DS1302 内部有一个 31×8 的用于临时性存放数据的 RAM 寄存器。 DS1302 是 DS1202 的升级产品, DS1202 与 兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。(1)DS1302 的结构及工作原理1.引脚功能及结构 DS1302 的引脚排列,其中 Vcc1 为后备电源,VCC2 为主电源。在主电源关闭的情况下,也能 保持时钟的连续运行。DS1302 由 Vcc1 或 Vcc2 两者中的较大者供电。当 Vcc2 大于 Vcc1+0.2V 时,Vcc2 给 DS1302 供电。当 Vcc2 小于 Vcc1 时,DS1302 由 Vcc1 供电。X1 和 X2 是振荡源,外接 32.768kHz 晶振。 RST 是复位/片选线, 通过把 RST 输入驱动置高电平来启动所有的数据传送。 RST 输入有两种功能:首先,RST 接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST 提 供终止单字节或多字节数据的传送手段。当 RST 为高电平时,所有的数据传送被初始化,允许对 DS1302 进行操作。如果在传送过程中 RST 置为低电平,则会终止此次数据传送,I/O 引脚变为高 阻态。上电运行时,在 Vcc≥2.5V 之前,RST 必须保持低电平。只有在 SCLK 为低电平时,才能将 RST 置为高电平。I/O 为串行数据输入输出端(双向),后面有详细说明。SCLK 始终是输入端。 2. DS1302 的控制字节 控制字节的最高有效位(位 7)必须是逻辑 1,如果它为 0,则不能把数据写入 DS1302 中,位 6 如果为 0, 则表示存取日历时钟数据, 1 表示存取 RAM 数据;位 5 至位 1 指示操作单元的地址; 为 10 毕业设计说明书《电子万年历》 最低有效位(位 0)如为 0 表示要进行写操作,为 1 表示进行读操作,控制字节总是从最低位开始 输出。 3. 数据输入输出(I/O) 在控制指令字输入后的下一个 SCLK 时钟的上升沿时,数据被写入 DS1302,数据输入从低位 即位 0 开始。 同样, 在紧跟 8 位的控制指令字后的下一个 SCLK 脉冲的下降沿读出 DS1302 的数据, 读出数据时从低位 0 位到高位 7。 4. DS1302 的寄存器 DS1302 有 12 个寄存器, 其中有 7 个寄存器与日历、 时钟相关, 存放的数据位为 BCD 码形式 。 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与 RAM 相关 的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302 与 RAM 相关的寄存器分为两类:一类是单个 RAM 单元,共 31 个,每个单元组态为一个 8 位的字节, 其命令控制字为 C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的 RAM 寄存 器,此方式下可一次性读写所有的 RAM 的 31 个字节,命令控制字为 FEH(写)、FFH(读)。(2)DS1302 实时显示时间的软硬件DS1302 与 CPU 的连接需要三条线,即 SCLK(7)、I/O(6)、RST(5)。 1.DS1302 与 CPU 的连接 实际上, 在调试程序时可以不加电容器, 只加一个 32.768kHz 的晶振即可。 只是选择晶振时, 不同的晶振,误差也较大。另外,还可以在上面的电路中加入 DS18B20,同时显示实时温度。只 要占用 CPU 一个口线即可。 LCD 还可以换成 LED,还可以使用北京卫信杰科技发展有限公司生产 的 10 位多功能 8 段液晶显示模块 LCM101,内含看门狗(WDT)/时钟发生器及两种频率的蜂鸣器驱 动电路,并有内置显示 RAM,可显示任意字段笔划,具有 3-4 线串行接口,可与任何单片机、IC 接口。 功耗低, 显示状态时电流为 2μ A (典型值), 省电模式时小于 1μ A, 工作电压为 2.4V~3.3V, 显示清晰。 2.DS1302 实时时间流程 DS1302 与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高 位 MSB(D7)必须为逻辑 1,如果 D7=0,则禁止写 DS1302,即写保护;D6=0,指定时钟数据,D6=1, 指定 RAM 数据;D5~D1 指定输入或输出的特定寄存器;最低位 LSB(D0)为逻辑 0,指定写操作(输 入), D0=1,指定读操作(输出)。 在 DS1302 的时钟日历或 RAM 进行数据传送时,DS1302 必须首 先发送命令字节。若进行单字节传送,8 位命令字节传送结束之后,在下 2 个 SCLK 周期的上升沿 输入数据字节,或在下 8 个 SCLK 周期的下降沿输出数据字节。 DS1302 与 RAM 相关的寄存器分为两类:一类是单个 RAM 单元, 31 个, 共 每个单元组态为一个 8 位的字节,其命令控制字为 C0H~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式 下的 RAM 寄存器,在此方式下可一次性读、写所有的 RAM 的 31 个字节。 尤其是备用电源 B1,可以用电池或者超级电容器(0.1F 以上)。虽然 DS1302 在主电源掉电后 的耗电很小,但是,如果要长时间保证时钟正常,最好选用小型充电电池。可以用老式电脑主板 上的 3.6V 充电电池。如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容 器代替。100 μ F 就可以保证 1 小时的正常走时。DS1302 在第一次加电后,必须进行初始化操作。 初始化后就可以按正常方法调整时间。11 毕业设计说明书《电子万年历》(3) 结论DS1302 存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。DS1302 可以用于数据记 录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这 种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。传统 的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确 记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要 设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系 统中采用时钟芯片 DS1302,则能很好地解决这个问题。(1) 时钟芯片 DS1302 的工作原理DS1302 在每次进行读、写程序前都必须初始化,先把 SCLK 端置 “0” ,接着把 RST 端置“1” , 最后才给予 SCLK 脉冲;读/写时序如下图 4 所示。图 5 为 DS1302 的控制字,此控制字的位 7 必 须置 1,若为 0 则不能把对 DS1302 进行读写数据。对于位 6,若对程序进行读/写时 RAM=1,对时 间进行读/写时,CK=0。位 1 至位 5 指操作单元的地址。位 0 是读/写操作位,进行读操作时,该 位为 1; 该位为 0 则表示进行的是写操作。 控制字节总是从最低位开始输入/输出的。 6 为 DS1302 表 的日历、时间寄存器内容: “CH”是时钟暂停标志位,当该位为 1 时,时钟振荡器停止,DS1302 处于低功耗状态;当该位为 0 时,时钟开始运行。 “WP” 是写保护位,在任何的对时钟和 RAM 的写操作之前,WP 必须为 0。当“WP”为 1 时,写保护 位防止对任一寄存器的写操作。(2) DS1302 的控制字节DS1302 的控制字如表 2-1 所示。控制字节的高有效位(位 7)必须是逻辑 1,如果它为 0, 则不能把数据写入 DS1302 中,位 6 如果 0,则表示存取日历时钟数据,为 1 表示存取 RAM 数据; 位 5 至位 1 指示操作单元的地址;最低有效位(位 0)如为 0 表示要进行写操作,为 1 表示进行 读操作,控制字节总是从最低位开始输出 RAM 1 / CK 表 2-1 DS1302 的控制字格式 A4 A3 A2 A1 A0 /WR RD(3) 数据输入输出(I/O)在控制指令字输入后的下一个 SCLK 时钟的上升沿时,数据被写入 DS1302,数据输入从低位 即位 0 开始。 同样, 在紧跟 8 位的控制指令字后的下一个 SCLK 脉冲的下降沿读出 DS1302 的数据, 读出数据时从低位 0 位到高位 7。如下图 2-2 所示12 毕业设计说明书《电子万年历》图 2-2 DS1302 读/写时序图(4) DS1302 的寄存器DS1302 有 12 个寄存器, 其中有 7 个寄存器与日历、 时钟相关, 存放的数据位为 BCD 码形式, 其日历、时间寄存器及其控制字见表 2-2。表 2-2 DS1302 的日历、时间寄存器 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与 RAM 相关 的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302 与 RAM 相关的寄存器分为两类:一类是单个 RAM 单元,共 31 个,每个单元组态为一个 8 位的字节, 其命令控制字为 C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的 RAM 寄存 器,此方式下可一次性读写所有的 RAM 的 31 个字节,命令控制字为 FEH(写)、FFH(读)。 图 2-3 示出 DS1302 的引脚排列,其中 Vcc1 为后备电源,Vcc2 为主电源。在主电源关闭的 情况下,也能保持时钟的连续运行。DS1302 由 Vcc1 或 Vcc2 两者中的较大者供电。当 Vcc2 大于 Vcc1+0.2V 时,Vcc2 给 DS1302 供电。当 Vcc2 小于 Vcc1 时,DS1302 由 Vcc1 供电。X1 和 X2 是振 荡源,外接 32.768KHz 晶振。RST 是复位/片选线,通过把 RST 输入驱动置高电平来启动所有 的数据传送。RST 输入有两种功能:首先,RST 接通控制逻辑,允许地址/命令序列送入移位寄存 器;其次,RST 提供终止单字节或多字节数据的传送手段。当 RST 为高电平时,所有的数据传送 13 毕业设计说明书《电子万年历》 被初始化,允许对 DS1302 进行操作。如果在传送过程中 RSTS 置为低电平,则会终止此次数据传 送,I/O 引脚变为高阻态。上电动行时,在 Vcc 大于等于 2.5V 之前,RST 必须保持低电平。中有 在 SCLK 为低电平时,才能将 RST 置为高电平,I/O 为串行数据输入端(双向) 。SCLK 始终是输入 端。图 2-3 DS1302 的引脚图2.2.3 温度采集模块采用数字式温度传感器 DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单 特点,此类传感器仅需要一条数据线进行数据传输,使用P0.7 与 DS18B20 的 I/O 口连接加一个 上拉电阻,Vcc 接电源,Vss 接地,如图 2-4 所示。图 2-4 DS18B20 温度采集 14 毕业设计说明书《电子万年历》2.2.4 显示模块(1)简述:LED 单元模块,由集成有多行、多列的发光二极管四边形模块构成,所述的四边形模块至少 一边为带有一组以上凹凸槽块的边缘。所述的四边形模块至少可有一组对边两壁均带有一组以上 凹凸槽块,其中,两对边凹凸槽块可呈对应状,亦可呈对称状。所述的四边形模块的主视面上可 带有用于模糊模块拼接界限的装饰结构。 如 LCD1602 液晶芯片 主要技术参数: 显示容量 芯片工作电压 工作电流 模块最佳工作电压 字符尺寸 16×2 字符 4.5~5.5V~ 2.0mA(5.0V) 5.0V 2.95×4.35(W×H)mm 表 2-3 1602 液晶技术参数 接口信号说明: 编号 1 2 3 4 5 6 7 8 符号 VSS VDD VL RS R/W E D0 D1 引脚说明 电源地 电源正极 液晶显示偏压信号 数据/命令选择端(H/L) 读/写选择端(H/L) 使能信号 DateI/0 DateI/0 编号 9 10 11 12 13 14 15 16 表 2-4 1602 引脚说明 控制器接口说明 ⑴基本操作时序: ① 读状态: 输入: RS=L,RW=H,E=H ③ 读数据: 输入: RS=H,RW=H,E=H ⑵ 状态字说明 STA7 D7 STA6 D6 STA5 D5 STA4 D4 15 STA3 D3 STA2 D2 STA1 D1 STA0 D0 输出: D0~D7=状态字 输出:无 输出: 无 输出: D0~D7=数据 ② 写指令: 输入: RS=L,RW=L, D0~D7 指令码,E= 高脉冲 ④ 写数据: 输入: RS=H,RW=L,D0~D7=数据,E= 高脉冲 符号 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 DateI/0 DateI/0 DateI/0 DateI/0 DateI/0 DateI/0 背光源正极 背光源负极 毕业设计说明书《电子万年历》 表 2-5 各状态字说明 STA0-6 STA7 当前数据地址指针的数值 读写操作使能 1: 禁止 表 2-6 STA 0-7 状态字说明 注:对控制器每次进行读写操作之前,都必须进行读写检测,确保 STA 为 0 ⑶指令说明 ① 初始化设置 ㈠ 显示模式设置 指令码 0 0 1 1 1 0 0 0 功能 设置 16×2 显示,5×7 点阵,8 位数据接口 0: 允许表 2-7 显示模式 ㈡ 显示开/关及光标出设置 指令码 0 0 0 0 1 D C 功能 B D=1 开显示;D=0 关显示 C=1 显示光标; C=0 不显示光标 B=1 光标闪烁; B=0 光标不显示 0 0 0 0 0 1 N S N=1 当读或写一个字符后地址指针加 一,且光标加一 N=0 当读或写一个字符后地址指针减 一,且光标减一 S=1 当 写 一 个 字 符 , 整 屏 显 示 左 移 (N=1)或右移(N=0),以得到光标不移 动而屏幕移动的效果 S=0 当写一个字符,整屏显示不移动 表 2-8 显示开/关及光标② 数据指针设置 指令码 80H+地址码(0-27H,40H-67H) 表 2-9 数据指针 如图 2-5 所示,采用动态扫描显示,由21个数码管,3-8 译码器 74LS138 接 1K 限流电阻, 再接 8550 三极管接到共阳数码管的 CoM 端作为选通位码,每位选择相应的列。74ls47 接 240Ω 限 流电阻,再接共行的 LED 数码管的断码。 功能 设置数据地址指针16 毕业设计说明书《电子万年历》图 2-5 LED 动态扫描显示17 毕业设计说明书《电子万年历》2.3 电子万年历电路设计2.3.1 系统电路图图 2-5 系统电路图18 毕业设计说明书《电子万年历》2.3.2 电路图分析本电路是由 AT89S52 单片机为控制核心,具有在线编程功能,低功耗,能在 3V 超低压工作; 时钟电路由 DS1302 提供,它是一种高性能、低功耗、带 RAM 的实时时钟电路,它可以对年、月、 日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V~5.5V。采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据。DS1302 内部有 一个 31*8 的用于临时性存放数据的 RAM 寄存器。可产生年、月、日、周日、时、分、秒,具有 使用寿命长, 精度高和低功耗等特点, 同时具有掉电自动保存功能; 温度的采集由 DS18B20 构成; 显示部份由21个数码管,74ls138、74ls47 译码器构成。使用动态扫描显示方式对数字的显示 AT89S52 单片机为 40 引脚双列直插芯片,有四个 I/O 口 P0,P1,P2,P3, MCS-51 单片机共有 4 个 8 位的 I/O 口(P0、P1、P2、P3) ,每一条 I/O 线都能独立地作输出或输入。18 引脚和 19 引脚 接时钟电路,XTAL1 接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2 接 外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第 9 引脚为复位输入端,接 上电容,电阻及开关后够上电复位电路,20 引脚为接地端,40 引脚为电源端。 其中 Vcc1 为后备电源,Vcc2 为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。 DS1302 由 Vcc1 或 Vcc2 两者中的较大者供电。当 Vcc2 大于 Vcc1+0.2V 时,Vcc2 给 DS1302 供电。 当 Vcc2 小于 Vcc1 时,DS1302 由 Vcc1 供电。X1 和 X2 是振荡源,外接 32.768KHz 晶振。RST 是复位/片选线,通过把 RST 输入驱动置高电平来启动所有的数据传送。RST 输入有两种功能:首 先,RST 接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST 提供终止单字节或多字 节数据的传送手段。当 RST 为高电平时,所有的数据传送被初始化,允许对 DS1302 进行操作。 如果在传送过程中 RSTS 置为低电平, 则会终止此次数据传送, 引脚变为高阻态。 I/O 上电动行时, 在 Vcc 大于等于 2.5V 之前,RST 必须保持低电平。中有在 SCLK 为低电平时,才能将 RST 置为高 电平,I/O 为串行数据输入端(双向) 。SCLK 始终是输入端。 数字式温度传感器 DS18B20,具有测量精度高,电路连接简单特点,此类传感器仅需要一条 数据线进行数据传输, 使用P0.7 与 DS18B20 的 I/O 口连接加一个上拉电阻,Vcc 接电源,Vss 接地。 动态扫描显示, 由21个数码管, 3-8 译码器 74LS138 接 1K 限流电阻,再接 8550 三极管接到 共阳数码管的 CoM 端作为选通位码,每位选择相应的列。 74ls47 接 240Ω 限流电阻,再接共行的 LED 数码管的断码。19 毕业设计说明书《电子万年历》三.电子万年历软件设计3.1 程序流程框图3.1.1 总流程图开始初始化读、写日期、时间和温度分离日期\时间\温度显示值显示子程序定时闹铃子程序日期、时间修改子程序农历自动更新子程序闰月子程返回 图 3-1 总程序流程图20 毕业设计说明书《电子万年历》3.1.2 阳历程序流程图图 3-2 计算阳历程序流程图3.1.3 阴历程序流程图图 3-3 阴历程序流程图21 毕业设计说明书《电子万年历》3.1.4 时间调整程序流程图图 3-4 时间调整程序流程图22 毕业设计说明书《电子万年历》3.2 部分程序的设计3.2.1 DS18B20 温度子程序CONFIG12 EQU 7FH TEMPH EQU 21H TEMPL EQU 20H REG2 EQU 22H REG3 EQU 23H REG4 EQU 24H DAT EQU P0.7 TOUTOU: LCALL CHUSHI LCALL RDTEMP MOV A,TEMPL ANL A,#B MOV TEMPL,A MOV A,TEMPH ANL A,#B ORL A,TEMPL SWAP A MOV 25H,A MOV A,25H MOV B,#64H DIV AB MOV A,B MOV B,#0AH DIV AB SWAP A ORL A,B MOV 10H,A RET CHUSHI: LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#4EH LCALL WRITE111 MOV A,#CONFIG12 LCALL WRITE111 RET RDTEMP: LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#44H LCALL WRITE111 LCALL DL1MS LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#0BEH LCALL WRITE111 LCALL ERAD111 MOV TEMPL,A LCALL ERAD111 MOV TEMPH,A RET RESET: LA: SETB DAT MOV 52H,#200 LB: CLR DAT DJNZ 52H,LB SETB DAT MOV 52H,#30 LC: DJNZ 52H,LC CLR C ORL C,DAT JC LB MOV 58H,#80 LD: 23 ORL C,DAT JC LP DJNZ 58H,LD SJMP LA LP: MOV 52H,#250 LF: DJNZ 52H,LF RET WRITE111: MOV 53H,#8 W51HA: SETB DAT MOV 54H,#8 RRC A CLR DAT W52HA: DJNZ 54H,W52HA MOV DAT,C MOV 54H,#30 W53HA: DJNZ 54H,W53HA DJNZ 53H,W51HA SETB DAT RET ERAD111: CLR EA MOV 58H,#8 RD1A: CLR DAT MOV 54H,#6 NOP SETB DAT RD2A: DJNZ 54H,RD2A 毕业设计说明书《电子万年历》 MOV C,DAT RRC A MOV 55H,#30 RD3A: DJNZ 55H,RD3A DJNZ 58H,RD1A SETB DAT RET3.2.2 读、写 DS1302 子程序;写 1302 程序 WRITE: CLR SCLK NOP SETB RST NOP MOV A,32H MOV R4,#8 WRITE1: RRC A NOP NOP CLR SCLK NOP NOP NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4,WRITE1 CLR SCLK NOP MOV A,31H MOV R4,#8 WRITE2: RRC A NOP 1302 CLR SCLK ;送数据给 1302 NOP MOV IO,C NOP NOP NOP SETB SCLK NOP ;读 1302 程序 READ: CLR SCLK NOP NOP SETB RST NOP MOV A,32H MOV R4,#8 READ1: RRC A ;送地址给 ;送地址给 1302 NOP NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4,WRITE2 CLR RST RET 数据 NOP NOP MOV C,IO NOP NOP NOP NOP NOP RRC A NOP NOP NOP NOP SETB SCLK NOP DJNZ R4,READ2 MOV 31H,A CLR RST R NOP NOP CLR SCLK NOP NOP DJNZ R4,READ1 MOV R4,#8 READ2: CLR SCLK NOP ;从 1302 中读出24 毕业设计说明书《电子万年历》四. 指标测 4.1 测试仪器序号 1 2 3 4 名称 计算机机 双路直流稳压电源 V8 通用单片机仿真器 数字万用表 CA17303D V8/L FT212 型号4.2硬件测试电子万年历的电路系统较大, 对于焊接方面更是不可轻视, 庞大的电路系统中只要出于 一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注 意处理,否则会刺被带有包皮的导线,则会对电路造成短路现象。 在本成电子万年历的设计调试中遇到了很多的问题。 回想这些问题只要认真多思考都是 可以避免的,以下为主要的问题: (1)LED 数码管的断码错乱,原因出于没有认真看清 码。 (2)对万年历修改时间或日期时,有时 LED 数码管被屏蔽掉,造成不亮现象。 解决: 根据仪器的测试, 发现电路的驱动能力不足, 最后在 DS1302 时钟芯片的/CS、 SCLK、 RET 端接入 5.1K 的上拉电阻后,电路的驱动能力才能满足,即可解决不亮现象。 a、b 、c 等引脚信息。 解决:重新排列 74LS47 的输出端,相应接入 LED 数码管,即可解决出现在的断码或乱4.3软件测试电子成年历是多功能的数字型,可以看当前日期(阴、阳历),时间,还有温度的仪器。 电子成年历功能很多,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对 较多的问题。最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。在软 件的调试过程中主要遇到的问题如下: 1.烧入程序后,LED 数码管显示闪动,而且亮度不均匀。 解决:首先对调用的延时进行逐渐修改,可以解决显示闪动问题。其次,由于本作品使 作动态扫描方式显示的数字, 动态扫描很快, 人的肉眼是无法看出,但是调用的显示程序时, 如果不在反回时屏蔽掉最后的附值, 则会出现很亮的现象, 所以在显示的后面加了屏蔽子令, 最后解决了此问题。 2.修改时间、日期时没有农历没有自动对应上。 解决:把不相关的程序暂时屏蔽,地农历的子程序独立调试,发现在调用农历自动更新 时,对十进制和十六进制处理不好,所以会造成错乱。最后把相应的十进制进行修改,使得 可以与十六进制对应,最后解决了此问题. 3.加入温度的程序后,进行修改时间、日期时相应的数码管位没有按要求闪动。 25 毕业设计说明书《电子万年历》 解决:由于 DS18B20 是串行通信数据,只用一个口线传输,在处理采集的模拟信号 时需要一定的时间,当把万年历的程序相接入时,会对延时有很大的影响。所以在调用温度 子程序时,先关闭定时器 1 中断允许,在温度子程序反回时再打开定时器 1 中断允许。最终 解决了此问题。4.4测试结果分析与结论4.4.1 测试结果分析(1) .在测试中遇到发光二极管、LED 数码管为不显示时,首先使用试测仪对电路进行 测试,观察是否存在漏焊,虚焊,或者元件损坏. (2) .LED 数码管显示不正常,还有亮度不够,首先使用试测仪对电路进行测试,观察 电路是否存在短路现象。查看烧写的程序是否正确无误,对程序进行认真修改。4.4.2 测试结论经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力 与及对电路的分析能力.同时在软件的编程方面得到更到的提高,对编程能力得到加强.同时 对所学的知识得到很大的提高与巩固.26 毕业设计说明书《电子万年历》五.设计总结通过此次毕业设计,我不仅把知识融会贯通,而且丰富了大脑,同时在查找资料的过程 中也了解了许多课外知识,开拓了视野,认识了将来电子的发展方向,使自己在专业知识方 面和动手能力方面有了质的飞跃。 毕业设计是我作为一名学生即将完成学业的最后一次作业, 他既是对学校所学知识的全 面总结和综合应用, 又为今后走向社会的实际操作应用铸就了一个良好开端, 毕业设计是我 对所学知识理论的检验与总结, 能够培养和提高设计者独立分析和解决问题的能力; 是我在 校期间向学校所交的最后一份综和性作业, 从老师的角度来说, 指导做毕业设计是老师对学 生所做的最后一次执手训练。 其次, 毕业设计的指导是老师检验其教学效果, 改进教学方法, 提高教学质量的绝好机会。 毕业的时间一天一天的临近, 毕业设计也接近了尾声。 在不断的努力下我的毕业设计终 于完成了。 在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的大概总结, 但是 真的面对毕业设计时发现自己的想法基本是错误的。 毕业设计不仅是对前面所学知识的一种 检验, 而且也是对自己能力的一种提高。 通过这次毕业设计使我明白了自己原来知识太理论 化了,面对单独的课题的是感觉很茫然。自己要学习的东西还太多,以前老是觉得自己什么 东西都会,什么东西都懂,有点眼高手低。通过这次毕业设计,我才明白学习是一个长期积 累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。 总之,不管学会的还是学不会的的确觉得困难比较多,真是万事开头难,不知道如何入 手。最后终于做完了有种如释重负的感觉。此外,还得出一个结论:知识必须通过应用才能 实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到 真正会用的时候才是真的学会了。 在此要感谢我们的指导老师韩老师对我悉心的指导, 感谢老师们给我的帮助。 在设计过 程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方式,使自己学 到了不少知识,也经历了不少艰辛,但收获同样巨大。在整个设计中我懂得了许多东西,也 培养了我独立工作的能力, 树立了对自己工作能力的信心, 相信会对今后的学习工作生活有 非常重要的影响。 而且大大提高了动手的能力, 使我充分体会到了在创造过程中探索的艰难 和成功时的喜悦。 虽然这个设计做的也不太好, 但是在设计过程中所学到的东西是这次毕业 设计的最大收获和财富,使我终身受益。27 毕业设计说明书《电子万年历》致谢首先我必须感谢院领导对我们毕业生在毕业设计过程中的支持与关怀! 其次我要特别感谢韩老师,不管在选题阶段,还是在设计阶段,在制作阶段,正是她给 予我不断的指导与帮助,导师渊博的学识、严谨的治学态度、求实创新的工作作风、对事业 和科学的执着追求,以及对我谆谆教诲给我留下了深刻的印象,使我受益终身。在课题的研 究设计过程中, 我不仅从韩老师那里学到许多专业知识, 更重要的是学会了学习新知识并将 其巩固的方法,这无疑是一把开启未来生活的钥匙,特此向韩老师表示衷心的感谢! 最后我要感谢我的同学们,在设计和焊接过程遇到困难时,正是由于同学们的帮助我 才能顺利的克服困难,我毕业设计的完成离不开同学们的帮助! 在大学三年的学习生活中,还得到了许多领导和老师的热情关心和帮助,在此,向所有 关心和帮助过我的领导、老师、同学和朋友们表示由衷的谢意! 衷心的感谢在百忙之中评阅论文和参加答辩的各位教授、老师!28 毕业设计说明书《电子万年历》参考文献1 2 3 4 5 6 7 8 9 刘勇 编 数字电路 电子工业出版社 2004 陈景初,单片机应用系统设计与实践[M],北京:北京航空航天大学出版社。 李建忠.《单片机原理及应用》.西安电子科技大学出版, 2006.02 张俊谟.《单片机中级教程》.北京航空航天大学出版, 2006.03 余发山.《单片机原理及及应用技术》.中国矿业大学出版社, 2003.12 杨凌霄.《微型计算机原理及应用》.中国矿业大学出版社, 2004.08 李飞光.《单片机课程设计实例指导》.北京航空航天大学出版社, 2004 李振声. 《实验电子技术》 (P182~193).国防工业大学出版社,2001 何立民.《单片机应用技术选编》.北京航空航天大学出版社, 2000.0810 万光毅.《单片机实验与实践教程》.北京航空航天大学出版社,
周航慈.《单片机程序设计基础》.北京航空航天大学出版社,
黄遵熹.《单片机原理接口与应用》.西北工业大学出版社,
杨子文 编 单片机原理及应用 西安电子科技大学出版社 2006 14 潘松,黄继业.EDA 技术实用教程[M].北京科学出版社.2002 15 何立民.MCS-51 系列单片机应用系列设计[M].北京:航空航天大学出版社 16 刘守义.单片机应用技术[M].成都:西安电子科技大学出版社.2002 17 马家辰,MCS-51 单片机原理与接口技术[M],哈尔滨:哈尔滨工业大学出版社。29 毕业设计说明书《电子万年历》附录一:系统程序清单CONFIG12 EQU 7FH TEMPH EQU 21H TEMPL EQU 20H REG2 EQU 22H REG3 EQU 23H REG4 EQU 24H DAT EQU P0.7 SCLK EQU P3.2 IO EQU P3.3 RST EQU P3.4 year DATA 66H month DATA 65H week DATA 64H day DATA 63H hour DATA 62H mintue DATA 61H second DATA 60H ORG 0000H LJMP START ORG 001BH LJMP INTT1 MOV 32H,#83H ;读出分钟 START: LCALL ZJ SETB EA MOV SCON,#00H MOV TMOD,#10H MOV TL1,#00H MOV TH1,#00H MOV 32H,#8EH MOV 31H,#00H LCALL WRITE MOV 32H,#90H MOV 31H,#0A6H 1.1MA LCALL WRITE ;1302 充电,充电电流 ;允许写 1302 ; 串行输出,方式 0 ;计数器 1,方式 1 MOV 32H,#81H ;读出秒 LCALL READ MOV second,31H ;~~~~~~~~~~~~分离缓存~~~~~~~~ MOV R0,year LCALL DIVIDE MOV 7BH,R1 MOV 4BH,R1 MOV 7CH,R2 MOV 4CH,R2 MOV 78H,年分离,送显示缓存 ;初值 LCALL READ MOV mintue,31H MOV 32H,#87H ;读出日 LCALL READ MOV day,31H MOV 32H,#85H ;读出小时 LCALL READ MOV hour,31H MOV 32H,#89H LCALL READ MOV month,31H ;读出月 MOV 32H,#8BH LCALL READ MOV week,31H ;读出星期 ;主程序~~~~~~~~~~~~~~~~~~~~~ MAIN1: MOV 32H,#8DH LCALL READ MOV year,31H ;读出年30 毕业设计说明书《电子万年历》 MOV 48H,week MOV R0,月分离,送显示缓存 LCALL DIVIDE MOV 79H,R1 MOV 49H,R1 MOV 7AH,R2 MOV 4AH,R2 MOV R0,day LCALL DIVIDE MOV 76H,R1 MOV 46H,R1 MOV 77H,R2 MOV 47H,R2 MOV R0,小时分离,送显示缓存 LCALL DIVIDE MOV 74H,R1 MOV 44H,R1 MOV 75H,R2 MOV 45H,R2 MOV R0,分钟分离,送显示缓存 LCALL DIVIDE MOV 72H,R1 MOV 42H,R1 MOV 73H,R2 MOV 43H,R2 MOV R0,second LCALL DIVIDE MOV 70H,R1 MOV 40H,R1 MOV 71H,R2 MOV 41H,R2 CLR EA LCALL TOUTOU SETB EA LCALL DISPLAY LCALL GENGXIAN JNB P0.1,SETG111 JNB F0,SSS setb P0.4 零,指示灯亮 31 ;非闰月,则 p0.4 清 ;更新农历程序 ;秒分离,送显示缓存 ;日分离,送显示缓存 ;~~~~~~~~~~~~~~ 温度 TOUTOU: LCALL CHUSHI LCALL RDTEMP MOV A,TEMPL ANL A,#B MOV TEMPL,A MOV A,TEMPH ANL A,#B ORL A,TEMPL SWAP A MOV 25H,A MOV A,25H MOV B,#64H DIV AB MOV A,B MOV B,#0AH DIV AB SWAP A ORL A,B MOV 10H,A RET CHUSHI: LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#4EH LCALL WRITE111 MOV A,#CONFIG12 LCALL WRITE111 RET RDTEMP: LJMP MAIN1 SETG111: LJMP SETG SSS: clr P0.4 灯不亮 LJMP MAIN1 ;闰月,则 p0.4 置位,指示 毕业设计说明书《电子万年历》 LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#44H LCALL WRITE111 LCALL DL1MS LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#0BEH LCALL WRITE111 LCALL ERAD111 MOV TEMPL,A LCALL ERAD111 MOV TEMPH,A RET RESET: LA: SETB DAT MOV 52H,#200 LB: CLR DAT DJNZ 52H,LB SETB DAT MOV 52H,#30 LC: DJNZ 52H,LC CLR C ORL C,DAT JC LB MOV 58H,#80 LD: ORL C,DAT JC LP DJNZ 58H,LD SJMP LA LP: MOV 52H,#250 LF: DJNZ 52H,LF 32 ;公历设置程序~~~~~~~~~~~~~~~~~~~~~ SETG : SETB TR1 SETB ET1 RET WRITE111: MOV 53H,#8 W51HA: SETB DAT MOV 54H,#8 RRC A CLR DAT W52HA: DJNZ 54H,W52HA MOV DAT,C MOV 54H,#30 W53HA: DJNZ 54H,W53HA DJNZ 53H,W51HA SETB DAT RET ERAD111: CLR EA MOV 58H,#8 RD1A: CLR DAT MOV 54H,#6 NOP SETB DAT RD2A: DJNZ 54H,RD2A MOV C,DAT RRC A MOV 55H,#30 RD3A: DJNZ 55H,RD3A DJNZ 58H,RD1A SETB DAT RET 毕业设计说明书《电子万年历》 MOV 32H,#8EH MOV 31H,#00H LCALL WRITE MOV 32H,#80H MOV 31H,#80H LCALL WRITE GWAIT: ;~~~~~~~~~~~~~~~~~~ LCALL DISPLAY JNB P0.1,GWAIT SETG1: LCALL DISPLAY JNB P0.1,SETG2 JNB P0.2,GADDYEAR JNB P0.3,JIANYEAR AJMP SETG1 GADDYEAR: MOV R7,66H LCALL ADD1 MOV 66H,A CJNE A,#51H,GADDYEAR1 MOV 66H,#00H AJMP GADDYEAR1 JIANYEAR: MOV R7,66H LCALL JIAN1 MOV 66H,A CJNE A,#00H,GADDYEAR1 MOV 66H,#51H GADDYEAR1: MOV 32H,#8CH MOV 31H,66H LCALL WRITE MOV R0,66H LCALL DIVIDE MOV 4BH,R1 MOV 7BH,R1 MOV 4CH,R2 MOV 7CH,R2 WAITT1: ;~~~~~~~~~~~~~~~~ LCALL DISPLAY 33 ;年分离送显示缓存 ;年值送人 1302 ;年减一 ;年加一 + ;1302 停止振荡 ;允许写 1302 JNB P0.2,WAITT1 JNB P0.3,WAITT1 AJMP SETG1 SETG2: SETB 0AH GWAIT2: LCALL DISPLAY JNB P0.1,GWAIT2 SETG3: LCALL DISPLAY JNB P0.1,SETG4 JNB P0.2,GADDMONTH JNB P0.3,JIANMONTH AJMP SETG3 GADDMONTH: MOV R7,65H LCALL ADD1 MOV 65H,A CJNE A,#13H,GADDMONTH1 MOV 65H,#01H AJMP GADDMONTH1 JIANMONTH: MOV R7,65H LCALL JIAN1 MOV 65H,A CJNE A,#00H,GADDMONTH1 MOV 65H,#12H GADDMONTH1: MOV 32H,#88H ;月值送人 1302 MOV 31H,65H LCALL WRITE MOV R0,65H LCALL DIVIDE ;月分离,送显示缓存 MOV 79H,R1 MOV 49H,R1 MOV 7AH,R2 MOV 4AH,R2 WAITT2: ;~~~~~~~~~~~~~~~~~~~~ LCALL DISPLAY JNB P0.2,WAITT2 ;月减一 ;月加一 ;调月时闪标志 毕业设计说明书《电子万年历》 JNB P0.3,WAITT2 AJMP SETG3 SETG4: SETB 0BH GWAIT4: LCALL DISPLAY JNB P0.1,GWAIT4 SETG5: LCALL DISPLAY JNB P0.1,SETG6 JNB P0.2,GADDDAY JNB P0.3,JIANDAY AJMP SETG5 GADDDAY: MOV R7,63H LCALL ADD1 MOV 63H,A CJNE A,#32H,GADDDAY1 MOV 63H,#01H JIANDAY: MOV R7,63H LCALL JIAN1 MOV 63H,A CJNE A,#00H,GADDDAY1 MOV 63H,#31H GADDDAY1: MOV 32H,#86H ;日值送人 1302 MOV 31H,63H LCALL WRITE MOV R0,63H LCALL DIVIDE ;日分离,送显示缓存 MOV 76H,R1 MOV 46H,R1 MOV 77H,R2 MOV 47H,R2 WAITT3: ;~~~~~~~~~~~~~~~~~ LCALL DISPLAY JNB P0.2,WAITT3 JNB P0.3,WAITT3 AJMP SETG5 34 ;日减一 ;日加一 ;调日时闪标志 SETG6: SETB 0CH GWAIT6: LCALL DISPLAY JNB P0.1,GWAIT6 SETG7: LCALL DISPLAY JNB P0.1,SETG8 JNB P0.2,GADDWEEK JNB P0.3,JIANWEEK AJMP SETG7 GADDWEEK: MOV R7,64H LCALL ADD1 MOV 64H,A CJNE A,#07H,GADDWEEK1 MOV 64H,#00H AJMP GADDWEEK1 JIANWEEK: MOV R7,64H LCALL JIAN1 MOV 64H,A CJNE A,#00H,GADDWEEK1 MOV 64H,#06H GADDWEEK1: MOV 32H,#8AH MOV 31H,64H LCALL WRITE MOV R0,64H LCALL DIVIDE MOV 48H,R1 MOV 78H,R1 WAITT4: ;~~~~~~~~~~~~~~~ ~~~~~ LCALL DISPLAY JNB P0.2,WAITT4 JNB P0.3,WAITT4 AJMP SETG7 SETG8: SETB 0DH GWAIT8: ;调小时时闪标志 ;星期值分离送显示缓存 ;星期值送人 1302 ;星期减一 ;星期加一 ;调星期时闪标志 毕业设计说明书《电子万年历》 LCALL DISPLAY JNB P0.1,GWAIT8 SETG9: LCALL DISPLAY JNB P0.1,SETG10 JNB P0.2,GADDHOUR JNB P0.3,JIANHOUR AJMP SETG9 GADDHOUR: MOV R7,62H LCALL ADD1 MOV 62H,A CJNE A,#24H,GADDHOUR1 MOV 62H,#00H AJMP GADDHOUR1 JIANHOUR: MOV R7,62H LCALL JIAN1 MOV 62H,A CJNE A,#00H,GADDHOUR1 MOV 62H,#23H GADDHOUR1: MOV 32H,#84H MOV 31H,62H LCALL WRITE MOV R0,62H LCALL DIVIDE 缓存 MOV 74H,R1 MOV 44H,R1 MOV 75H,R2 MOV 45H,R2 WAITT5: ;~~~~~~~~~~~~~~~~~~~~~~~~~ LCALL DISPLAY JNB P0.2,WAITT5 JNB P0.3,WAITT5 AJMP SETG9 SETG10: SETB 0EH GWAIT10: 35 ;调分时候闪标志 ;小时值分离送显示 ;小时值送人 1302 ;小时减一 ;小时加一 LCALL DISPLAY JNB P0.1,GWAIT10 SETG11: LCALL DISPLAY JNB P0.1,SETGOUT JNB P0.2,GADDMINTUE JNB P0.3,JIANMINTUE AJMP SETG11 GADDMINTUE: MOV R7,61H LCALL ADD1 MOV 61H,A CJNE A,#60H,GADDMINTUE1 MOV 61H,#00H AJMP GADDMINTUE1 JIANMINTUE: MOV R7,61H LCALL JIAN1 MOV 61H,A CJNE A,#00H,GADDMINTUE1 MOV 61H,#59H GADDMINTUE1: MOV 32H,#82H MOV 31H,61H LCALL WRITE MOV R0,61H LCALL DIVIDE 存 MOV 72H,R1 MOV 42H,R1 MOV 73H,R2 MOV 43H,R2 WAITT6: LCALL DISPLAY JNB P0.2,WAITT6 JNB P0.3,WAITT6 AJMP SETG11 SETGOUT: LCALL DISPLAY JNB P0.1,SETGOUT ;分钟值分离送显示缓 ;分钟值送人 1302 ;分钟减一 ;分钟加一 毕业设计说明书《电子万年历》 LCALL GENGXIAN MOV 32H,#80H MOV 31H,#00H LCALL WRITE ;禁止写入 1302 MOV 32H,#8EH MOV 31H,#80H LCALL CLR 08H CLR 09H CLR 0AH CLR 0BH CLR 0CH CLR 0DH CLR 0EH CLR 0FH CLR ET1 CLR TR1 LJMP MAIN1 ;;闪动调时程序~~~~~~~~~~~~~~~~ INTT1: PUSH ACC PUSH PSW GFLASH: CPL 0FH JB 0FH,GFLASH1 MOV 7CH,4CH ;全部显示 MOV 7BH,4BH MOV 7AH,4AH MOV 79H,49H MOV 78H,48H MOV 77H,47H MOV 76H,46H MOV 75H,45H MOV 74H,44H MOV 73H,43H MOV 72H,42H MOV 71H,41H MOV 70H,40H GFLASHOUT: 36 ADD1: MOV A,R7 ADD A,#1 DA A RET ;减一程序~~~~~~~~~~~~~~~~~~~~~~~~~ ;加一程序~~~~~~~~~~~~~~~~~~~~~~~~~ ;关闪中断 WRITE ;1302 晶振开始振荡 POP PSW POP ACC RETI GFLASH1: JB 0AH,GFLASH2 ;调年闪 MOV 7CH,#0FH MOV 7BH,#0FH AJMP GFLASHOUT GFLASH2: JB 0BH,GFLASH3 ;调月闪 MOV 7AH,#0FH MOV 79H,#0FH AJMP GFLASHOUT GFLASH3: JB 0CH,GFLASH4 ;调日闪 MOV 77H,#0FH MOV 76H,#0FH AJMP GFLASHOUT GFLASH4: JB 0DH,GFLASH5 ;调星期闪 MOV 78H,#0FH AJMP GFLASHOUT GFLASH5: JB 0EH,GFLASH6 ;调小时闪 MOV 75H,#0FH MOV 74H,#0FH AJMP GFLASHOUT GFLASH6: MOV 73H,#0FH ;调分钟闪 MOV 72H,#0FH AJMP GFLASHOUT 毕业设计说明书《电子万年历》 JIAN1: MOV A,R7 DEC A CJNE A,#4FH,KK1 MOV A,#49H KK1: CJNE A,#3FH,KK2 MOV A,#39H KK2: CJNE A,#2FH,KK3 MOV A,#29H KK3: CJNE A,#1FH,KK4 MOV A,#19H KK4: CJNE A,#0FH,KK5 MOV A,#09H KK5: RET ;分离程序~~~~~~~~~~~~~~~~~~~~~~~~~ DIVIDE: MOV A,R0 ANL A,#0FH MOV R1,A MOV A,R0 SWAP A ANL A,#0FH MOV R2,A RET ;写 1302 程序~~~~~~~~~~~~~~~~~~~~~~~~~~ WRITE: CLR SCLK NOP SETB RST NOP MOV A,32H 37 ;读 1302 程序~~~~~~~~~~~~~~~~~~~~~~~~~ MOV R4,#8 WRITE1: RRC A NOP NOP CLR SCLK NOP NOP NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4,WRITE1 CLR SCLK NOP MOV A,31H MOV R4,#8 WRITE2: RRC A NOP NOP NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4,WRITE2 CLR RST RET ;送数据给 1302 CLR SCLK ;送地址给 1302 毕业设计说明书《电子万年历》 READ: CLR SCLK NOP NOP SETB RST NOP MOV A,32H MOV R4,#8 READ1: RRC A NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP NOP CLR SCLK NOP NOP DJNZ R4,READ1 MOV R4,#8 READ2: CLR SCLK NOP NOP NOP MOV C,IO NOP NOP NOP NOP NOP RRC A NOP NOP NOP NOP 38 ;从 1302 中读出数据 ;农历和公历为同一年, ;NEW 此时 R2 中的值为 FFH 时,R3 有值,否 则为 0 NEW: NOP M1: MOV A,R2 CLR C SUBB A,#29 MOV R1,A MOV A,R6 JB ACC.6,SM11 MOV A,R2 CLR C ;R2 减一月天数 CHECKMONTH: LCALL BCD_10 ;查一年数据程序~~~~~~~~~~~~~~~~ ;送地址给 1302 BCD_10: MOV A,R0 ANL A,#0FH MOV R1,A ;高位×10, 加低位 MOV A,R0 SWAP A ANL A,#0FH MOV B,#10 MUL AB ADD A,R1 MOV R0,A RET SETB SCLK NOP DJNZ R4,READ2 MOV 31H,A CLR RST RET ;BCD 码转换为 10 进制程序~~~~~ 毕业设计说明书《电子万年历》 SUBB A,#30 MOV R1,A SM11: JC SM12 MOV A,R1 MOV R2,A AJMP M2 SM12: CJNE R3,#00H,M13 ;R2 减 1 月天数 LJMP Y1 否 M13: MOV A,R2 中 ADD A,R3 MOV R2,A MOV R3,#00H AJMP M1 M2: CLR C MOV A,R2 SUBB A,#29 MOV R1,A MOV A,R6 JB ACC.5,M21 MOV A,R2 CLR C SUBB A,#30 MOV R1,A M21: JC M22 MOV A,R1 ;R2 减 2 月天数,够减 MOV R2,A AJMP MM2 M22: CJNE R3,#00H,M23 ;R2 减 2 月天数 LJMP Y2 否 M23: MOV A,R2 ;不为 0,R3 加到 R2 中 39 ;不够减,判,R3 为 0 SUBB A,#30 MOV R1,A M121: CJNE R3,#00H,M122 ;R2 减 12 月天数 LJMP Y12 为0否 ;不够减,判,R3 ;R2 减一月天数,够减 ;转三月 ;再让一月减 ;还不够,则转 Y1 ;不为 0,R3 加到 R2 ;不够减,判 R3 为 0 ;R2 减 1 月天数,够减 ;转二月 ADD A,R3 MOV R2,A MOV R3,#00H AJMP M2 MM2: LCALL CHECKRE ;查 2 月,如果不为闰月 CJNE A,#02H,M3 ;转 3 月 RM2: MOV A,R4 ANL A,#0FH JNZ RM21 MOV A,R2 CLR C SUBB A,#30 MOV R1,A AJMP RM22 RM21: MOV A,R2 CLR C SUBB A,#29 MOV R1,A RM22: JC RM23 MOV A,R1 ;R2 减闰 2 月天数,够减 MOV R2,A AJMP M3 RM23: CJNE R3,#00H,RM24 ;R2 减闰 2 月天数 LJMP RY2 RM24: MOV A,R2 ADD A,R3 MOV R3,#00H ;不为 0,R3 加到 R2 中 ;再让闰 2 月减 ;还不够,则转 RY2 ;不够减,判,R3 为 0 否 ;转 3 月 ;再让二月减 ;还不够,则转 Y2 毕业设计说明书《电子万年历》 M122: MOV A,R2 中 ADD A,R3 MOV R2,A MOV R3,#00H LJMP M12 Y1: MOV A,R2 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#01H CLR F0 Y2: CJNE R2,#00H,Y21 MOV A,R6 月 MOV 56H,#29H ;的的最后一天 JB ACC.6,Y22 MOV 56H,#30H Y22: MOV 57H,#01H CLR F0 LJMP S_PLAY Y21: MOV A,R2 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#02H CLR F0 LJMP S_PLAY RY2: CJNE R2,#00H,RY21 MOV 56H,#29H ;R2 中为 0,则为前一个 月 MOV A,R6 JB ACC.5,RY22 40 ;的的最后一天 ;R2 中为日的值 ;R2 中为 0,则为前一个 ;非闰月 LJMP S_PLAY ;R2 中为日的值 ;再让 12 月减 ;还不够,则转 Y12 ;不为 0, 加到 R2 R3 MOV 56H,#30H RY22: MOV 57H,#02H CLR F0 LJMP S_PLAY RY21: MOV A,R2 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#02H SETB F0 LJMP S_PLAY Y3: CJNE R2,#00H,Y31 LCALL CHECKRE 闰月 CJNE A,#02H,Y32 MOV 56H,#29H MOV A,R4 ANL A,#0FH JNZ Y33 MOV 56H,#30H MOV 57H,#02H SETB F0 LJMP S_PLAY Y33: MOV 57H,#02H SETB F0 LJMP S_PLAY Y32: MOV 56H,#29H ;前一个月不是闰月 MOV A,R6 JB ACC.5,Y34 MOV 56H,#30H Y34: MOV 57H,#02H CLR F0 LJMP S_PLAY Y31: ;R2 中为 0,则为前一个月 ;的的最后一天 ;前一个月是闰月 ;查前一个月是否为 ;闰月 ;R2 中为日的值 毕业设计说明书《电子万年历》 MOV A,R2 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#03H CLR F0 LJMP S_PLAY RY3: CJNE R2,#00H,RY31 MOV 56H,#29H MOV A,R6 JB ACC.4,RY32 个月 MOV 56H,#30H RY32: MOV 57H,#03H CLR F0 LJMP S_PLAY RY31: MOV A,R2 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#03H SETB F0 LJMP S_PLAY Y4: CJNE R2,#00H,Y41 LCALL CHECKRE 月 CJNE A,#03H,Y42 MOV 56H,#29H MOV A,R4 个月 ANL A,#0FH JNZ Y43 MOV 56H,#30H MOV 57H,#03H SETB F0 LJMP S_PLAY 41 ;的最后一天 ;前一个月是闰月 ;R2 中为 0,则为前一 ;查前一个月是否为闰 ;R2 中为日的值 ;的的最后一天 ;R2 中为 0,则为前一 ;R2 中为日的值 Y43: MOV 57H,#03H SETB F0 LJMP S_PLAY Y42: MOV 56H,#29H ;前一个月不是闰月 MOV A,R6 JB ACC.4,Y44 MOV 56H,#30H Y44: MOV 57H,#03H CLR F0 LJMP S_PLAY Y41: MOV A,R2 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#04H CLR F0 LJMP S_PLAY RY4: CJNE R2,#00H,RY41 MOV 56H,#29H 个月 MOV A,R6 JB ACC.2,RY42 MOV 56H,#30H RY42: MOV 57H,#04H CLR F0 LJMP S_PLAY RY41: MOV A,R2 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#04H SETB F0 LJMP S_PLAY ;R2 中为日的值 ;的的最后一天 ;R2 中为 0,则为前一 ;R2 中为日的值 毕业设计说明书《电子万年历》 Y5: CJNE R2,#00H,Y51 LCALL CHECKRE ;查前一个月是否为闰月 CJNE A,#04H,Y52 MOV 56H,#29H ;前一个月是闰月 MOV A,R4 ANL A,#0FH JNZ Y53 MOV 56H,#30H MOV 57H,#04H SETB F0 LJMP S_PLAY Y53: MOV 57H,#04H SETB F0 LJMP S_PLAY Y52: MOV 56H,#29H MOV A,R6 JB ACC.2,Y54 MOV 56H,#30H Y54: MOV 57H,#04H CLR F0 LJMP S_PLAY Y51: MOV A,R2 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#05H CLR F0 LJMP S_PLAY RY5: CJNE R2,#00H,RY51 MOV 56H,#29H 个月 MOV A,R6 JB ACC.1,RY52 MOV 56H,#30H 42 ;的最后一天 ;R2 中为 0,则为前一 ;R2 中为日的值 ;前一个月不是闰月 ;R2 中为 0,则为前一个月 ;的最后一天 RY52: MOV 57H,#05H CLR F0 LJMP S_PLAY RY51: MOV A,R2 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#05H SETB F0 LJMP S_PLAY Y6: CJNE R2,#00H,Y61 LCALL CHECKRE 月 CJNE A,#05H,Y62 MOV 56H,#29H MOV A,R4 ANL A,#0FH JNZ Y63 MOV 56H,#30H MOV 57H,#05H SETB F0 LJMP S_PLAY Y63: MOV 57H,#05H SETB F0 LJMP S_PLAY Y62: MOV 56H,#29H MOV A,R6 JB ACC.1,Y64 MOV 56H,#30H Y64: MOV 57H,#05H CLR F0 LJMP S_PLAY Y61: MOV A,R2 ;R2 中为日的值 ;前一个月不是闰月 ;前一个月是闰月 ;R2 中为 0,则为前一个月 ;的最后一天 ;查前一个月是否为闰 ;R2 中为日的值 毕业设计说明书《电子万年历》 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#06H CLR F0 LJMP S_PLAY RY6: CJNE R2,#00H,RY61 MOV 56H,#29H ;R2 中为 0,则为前一个月 MOV A,R6 JB ACC.0,RY62 MOV 56H,#30H RY62: MOV 57H,#06H CLR F0 LJMP S_PLAY RY61: MOV A,R2 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#06H SETB F0 LJMP S_PLAY Y7: CJNE R2,#00H,Y71 LCALL CHECKRE 月 CJNE A,#06H,Y72 MOV 56H,#29H MOV A,R4 个月 ANL A,#0FH JNZ Y73 MOV 56H,#30H MOV 57H,#06H SETB F0 LJMP S_pLAY Y73: MOV 57H,#06H 43 ;的最后一天 ;前一个月是闰月 ;R2 中为 0,则为前一 ;查前一个月是否为闰 ;R2 中为日的值 ;的最后一天 SETB F0 LJMP S_PLAY Y72: MOV 56H,#29H MOV A,R6 JB ACC.0,Y74 MOV 56H,#30H Y74: MOV 57H,#06H CLR F0 LJMP S_PLAY Y71: MOV A,R2 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#07H CLR F0 LJMP S_PLAY RY7: CJNE R2,#00H,RY71 MOV 56H,#29H 个月 MOV A,R5 JB ACC.6,RY72 MOV 56H,#30H RY72: MOV 57H,#07H CLR F0 LJMP S_PLAY RY71: MOV A,R2 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#07H SETB F0 LJMP S_PLAY Y8: CJNE R2,#00H,Y81 ;R2 中为日的值 ;的最后一天 ;R2 中为 0,则为前一 ;R2 中为日的值 ;前一个月不是闰月 毕业设计说明书《电子万年历》 LCALL CHECKRE ;查前一个月是否为闰月 CJNE A,#07H,Y82 MOV 56H,#29H MOV A,R4 ANL A,#0FH JNZ Y83 MOV 56H,#30H MOV 57H,#07H SETB F0 LJMP S_PLAY Y83: MOV 57H,#07H SETB F0 LJMP S_PLAY Y82: MOV 56H,#29H ;前一个月不是闰月 MOV A,R5 JB ACC.6,Y84 MOV 56H,#30H Y84: MOV 57H,#07H CLR F0 LJMP S_PLAY Y81: MOV A,R2 ;R2 中为日的值 ;前一个月是闰月 ;R2 中为 0,则为前一个月 ;的最后一天 65H,00H DB 31,11H,32H,00H,21,42H,52H,21H,39,52H, 25H,00H DB 28,25H,04H,71H,48,66H,42H,00H,37,33H, 22H,00H DB 25,15H,24H,51H,44,05H,52H,00H,33,22H, 65H,00H DB 22,21H,25H,41H,40,24H,52H,00H,30,52H, 42H,91H DB 49,55H,05H,00H,38,26H,44H,00H,27,53H, 50H,60H DB 46,53H,24H,00H,35,25H,54H,00H,24,41H, 52H,41H DB 42,45H,25H,00H,31,24H,52H,00H,21,51H, 12H,21H DB 40,55H,11H,00H,28,26H,21H,61H,47,26H, 61H,00H DB 36,13H,31H,00H,25,05H,31H,51H,43,12H, DL1MS: MOV R6,#14H DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET ;数据表~~~~~~~~~~~~~~~~~~~`~~ TAB: DB 35,15H,51H,00H,23,11H,52H,41H,42,12H, 44 54H,00H DB 33,51H,25H,00H,22,42H,25H,31H,41,32H, 22H,00H DB 30,55H,02H,71H,49,55H,22H,00H,38,26H, 62H,00H DB 27,13H,64H,60H,45,13H,32H,00H,34,12H, 55H,00H DB 23,10H,53H,51H,42,22H,45H,00H,31,52H, 22H,00H 毕业设计说明书《电子万年历》 DB 21,52H,44H,21H,40,55H,44H,00H,29,26H, 50H,71H DB 47,26H,64H,00H,36,25H,32H,00H,25,23H, 32H,50H DB 44,44H,55H,00H,32,24H,45H,00H,22,55H, 11H,30H END45 毕业设计说明书《电子万年历》附录二:系统使用说明书如电路原理总图可知,本电路具有年、月、日、周日、时、分、秒、温度和农历功能, 总共由 21 个 LED 数码管显示,如下图 F-1 所示。图 F-1 日期和时间的修改由 3 个按键构成。如图-b 所示。键1为向右移;键2为加1;键3 为减1。图 F-246
广而告之:
相关文档:
下载文档:
搜索更多:
词条解释:
All rights reserved Powered by
copyright &copyright 。甜梦文库内容来自网络,如有侵犯请联系客服。|

我要回帖

更多关于 ds18b20程序 的文章

 

随机推荐