专栏中心

EEPW首页 > 专栏 > LCD1602、DS1302、DS18B20、LED多功能电子日历(最终版)

LCD1602、DS1302、DS18B20、LED多功能电子日历(最终版)

发布人:0750long 时间:2009-06-16 来源:工程师 发布文章
LCD1602、DS1302、DS18B20、LED多功能电子日历(最终版)

 

 

电子日历工程文件(包括源代码、keil文件、protues仿真等)rar

电子日历实验报告(含原理图、程序分析、效果图等)rar

原理图如下:

点击看大图

以下为该电子日历的main函数:

Calendar.c程序文件:

/******使用LCD1602、DS1302时钟芯片、DS18B20温度传感器完成该日历*******/

#include<reg52.h>

//以下的顺序不能任意放

#define uint unsigned int //宏定义

#define uchar unsigned char

#include"LM016L.h"    

#include"DS1302.h"

#include"DS18B20.h"

#include"KeyScan.h"

#include"MODE.h"

#include"OPEN.h"

////////以下为几个标志位///////////

// flag,select,alarm,temperature,limit 

/*分别为模式标志位、功能选择标志位、闹钟、温度正负标志位以及温度上限值 (整型)

  其中alarm有三种状态:0为禁止进入,1为允许进入,2为正在闹钟模式下  */

void open();               //上电显示 

void KeyScan();       //键盘扫描

void SetTime_Mode();  //调时

void SetRing_Mode();  //闹钟设置

void SetTemp_Mode();  //温度上限设置模式

/******************************日历主函数************************************/

void main()

{    

       init();         //初始化LCD

       Set_RTC(l_tmpdate1);//初始化时钟芯片   

       open();        //上电显示函数

       write_com(0x01);   //清屏

       while(1)

   {      

              time_date();  //时间处理

           KeyScan();       //键盘扫描

       if(ring_time[1]==l_tmpdate[1]&&ring_time[2]==l_tmpdate[2]&&flag==0&&alarm!=0)//判断是否到闹钟设置的时间,是的话执行相应动作

              {    

                  uchar i;

                     alarm=2;  //正在闹钟响应模式下

                  if(ring_time[0]==l_tmpdate[0])//相等的那一时刻清屏,循环清屏会导致闪烁

                      write_com(0x01);

                     led=0;                                //小灯闪烁

                     delay(100);                         

                     led=1;

                     write_com(0x80+0x01); //写入“Time To Get Up”

                     for(i=0;i<14;i++)

                     {

                        write_date(ringtable[i]);  

                     }

                     if(l_tmpdate[0]==0x59) //自动退出闹钟模式时清屏

                      write_com(0x01);

                     continue;       //跳出本次的While循环

               }                 

              if(flag==0)     //正常显示模式下

              {

                 tempchange();  //温度转换命令   

              display(l_tmpdisplay,8);//显示时间

                 Temp_Display();      //显示温度

               deal();        //温度处理

              }

              if(flag==1)     //功能选择模式下

          {      

                     uchar i;

                     write_com(0x80+0x4);           //选择菜单

                     for(i=0;menu[select][i]!='\0';i++)

                     {

                            write_date(menu[select][i]); 

                     }

                    

                     if(select==0)     //调试模式

                     {

                         SetTime_Mode();         

                     }

                     if(select==1)        //闹钟设置

                     {

                            SetRing_Mode();

                     }

                     if(select==2)  //设置温度上限

                     {

                            SetTemp_Mode();  

                     }

              }

       }                

}

/***************END***********END******************************/    

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

JTAG

ST628 2004-09-16

OpenAI 计划 2026-2027 年首次公开募股,估值高达 1T 美元

宽带信号的产生与分析

通过实时健康监测预防故障:一项proteanTecs创新

求助

cblover 2004-09-15

电路板级可测试性设计与验证评估技术

视频 2012-05-15

研调上修本季DRAM涨幅 上看23%

波士顿动力公司和Analog在阿联酋部署物理智能

国防工业检测的特殊性及策略

视频 2012-05-15

Keil C编译器常见警告与错误信息的解决方法

Keil C51语言使用技巧及实战

从系统设计到源代码:Tobias Kästner 谈 Zephyr

到2026年全球IT支出将超过6万亿美元

现代航天与国防电子测量领域的发展与挑战

视频 2012-05-15

新初创公司Substrate希望与ASML竞争

EDA/PCB 2025-10-30

Keil C51使用详解3

电磁继电器与固态继电器技术

Microsoft 股价因对人工智能支出的担忧以及对 OpenAI 缺乏明确性而下跌

基于PXI的大型现场测试系统构建与管理

视频 2012-05-15

美国本地电子产品产量增长

更多 培训课堂
更多 焦点
更多 视频

技术专区