找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5177|回复: 2
打印 上一主题 下一主题
收起左侧

带温度显示的闹铃系统附加仿真图 LM041L显示

[复制链接]
跳转到指定楼层
楼主
能够显示温度,闹铃自动响,掉电不丢失。附加仿真图,显示屏是LM041L

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载):


单片机源程序如下:
  1.         #include <reg51.h>
  2.         #include "ds1302.h"
  3.         #include "lcd1602.h"
  4.         #include "eeproom.h"
  5.         #include "ds18b20.h"

  6.         #define uchar unsigned char
  7.         #define uint unsigned int
  8.          uchar seth[]="00";
  9.          uchar setm[]="00";
  10.         uchar flag=0;
  11.         uchar a=0,b=0,c=0,d=0;

  12.         sbit qie=P3^4;
  13.         sbit jia=P3^5;
  14.         sbit  jian=P3^6;
  15.         sbit back=P3^7;
  16.         sbit speak=P1^7;

  17.         void tiao(uchar i,uchar j,uchar *m);
  18.         void time();
  19. void display(int v)
  20. {
  21.     unsigned char count;
  22.     unsigned int tmp = abs(v);
  23.        
  24.     datas[0] = tmp / 10000;
  25.     datas[1] = tmp % 10000 / 1000;
  26.     datas[2] = tmp % 1000 / 100;
  27.     datas[3] = tmp % 100 / 10;

  28.       
  29.     if(v < 0)
  30.     {
  31.         lcdoutput(3,5,"- ");
  32.    }
  33.     else
  34.     {
  35.        lcdoutput(3,5,"+ ");
  36.     }
  37.          lcdwrite(command,0x90+6);
  38.     if(datas[0] != 0)
  39.     {
  40.         lcdwrite(data,'0'+datas[0]);
  41.     }
  42.     for(count = 1; count != 5; count++)
  43.     {
  44.        lcdwrite(data,'0'+datas[count]);
  45.         if(count == 2)
  46.         {
  47.             lcdwrite(data,'.');
  48.         }
  49.     }
  50.        
  51. }
  52. void reeep()
  53.         {
  54.           
  55.           a=read24c02(1);
  56.           b=read24c02(2);
  57.           c=read24c02(3);
  58.           d=read24c02(4);
  59.           seth[0]=a+0x30;
  60.           seth[1]=b+0x30;
  61.           setm[0]=d+0x30;
  62.           setm[1]=c+0x30;
  63.         }
  64.         void init()
  65.         {
  66.           TMOD=0x01;
  67.           TH0=(65536-50000)/256;
  68.           TL0=(65536-50000)%256;
  69.           IE=0X82;
  70.        
  71.         }
  72. void delay(uchar m)
  73.         {
  74.           uchar i,j;
  75.           for(i=m;i>0;i--)
  76.             for(j=110;j>0;j--);

  77.         }
  78. void gettime()
  79. {

  80.    systemtime datetime;
  81.    
  82.    dsgettime(&datetime);
  83.          datezstr(&datetime,datestring);       
  84.     timezstr(&datetime,timestring);
  85.                  //获取时间
  86.         lcdoutput(1,0,"DATE:");                    //日期
  87.         lcdoutput(1,5,"20");
  88.         lcdoutput(1,7,datestring);
  89.         lcdoutput(2,0,"TIME:");       
  90.     lcdoutput(2,5,timestring);
  91.         lcdoutput(3,0,"wen:");
  92.         lcdoutput(4,0,"Alarm:");
  93.         lcdoutput(4,7,seth);
  94.         lcdoutput(4,9,"-");
  95.         lcdoutput(4,10,setm);

  96.         display(getTmpValue());
  97.           sendChangeCmd();
  98.         delay(300);
  99.     }
  100. void main()
  101.         {
  102.                  uchar count=0;
  103.         lcdwrite(command,clear_screen);
  104.             ds1302init();
  105.                 init();
  106.                 nit();
  107.               lcdini();
  108.                 reeep();
  109.           while(1)
  110.           {
  111.              time();
  112.             gettime();
  113.                 if(qie==0)
  114.                 {
  115.                    delay(500);
  116.                    if(qie==0)
  117.                    {
  118.                       flag=1;
  119.                          lcdwrite(command,clear_screen);
  120.                   
  121.                    }
  122.                
  123.                 }
  124.                 if(flag==1)
  125.                 {
  126.                    lcdoutput(1,8,"Set");
  127.                    lcdoutput(3,0,"Time:");
  128.                    lcdoutput(3,6,seth);
  129.                    lcdoutput(3,8,"-");
  130.                    lcdoutput(3,9,setm);
  131.        
  132.                
  133.                 }
  134.                 while(flag==1)
  135.                 {
  136.                        
  137.                    if(qie==0)
  138.                    {
  139.                      delay(500);
  140.                          if(qie==0)
  141.                          {
  142.                              count++;
  143.                                  if(count>2)
  144.                                  count=0;
  145.                          
  146.                          }
  147.                   
  148.                    }
  149.                    switch(count)
  150.                    {
  151.                     
  152.                          case 1:tiao(3,7,seth);break;
  153.                          case 2:tiao(3,10,setm);break;
  154.                          default:break;
  155.                    }
  156.                    if(back==0)
  157.                    {
  158.                       delay(10);
  159.                           if(back==0)
  160.                           {
  161.                             lcdwrite(command,clear_screen);
  162.                                 flag=0;
  163.                           }
  164.                    }
  165.                
  166.                 }
  167.           }
  168.         }

  169. ……………………

  170. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
闹铃系统.rar (100.05 KB, 下载次数: 75)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:351044 发表于 2020-4-13 02:29 | 只看该作者
感谢楼主的分享~~~
回复

使用道具 举报

板凳
ID:812792 发表于 2020-8-11 17:03 | 只看该作者
请问您这个代码是时间显示,温度,闹铃三个功能都可以实现么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表