1602LCD液晶数字电子钟 时钟表 C语言

发布者:legend9最新更新时间:2016-09-12 来源: eefocus关键字:1602LCD液晶  数字电子钟  时钟表 手机看文章 扫描二维码
随时随地手机看文章
1602LCD液晶数字电子钟  基本设计思路:
 
1. 1602LCD显示: 
   第一行: 年, 月, 日 2012-01-22
   第二行: 时, 分, 秒 23:59:00 
 
2. 独立按键功能: 
   Key1 恢复单片机调时之前的实际时间, 由于在调整时间期间,定时器T0暂停, 则启动定时器T1, 保证单片机的时间正确.(即 取消调时)
   Key2 进入调整时间状态: 停止定时器T0,启动定时器T1.
   Key3 退出调整时间状态: 启动定时器T0,停止定时器T1.
   Key4 选择调整时间: 秒, 分, 时, 日, 月, 年
   Key5 调时: 递增  同时启动蜂鸣器
   Key6 调时: 递减  同时启动蜂鸣器
 
花了2天半的时间,终于按照自己的设计思路来实现了 时钟表, 在这两天多的时间, 感觉最难的就是,当发生错误的时候,不知道如何进行调试,差错,因为有些错误无法进行调试,因此往往都要换一个方向思考问题,所以面对困惑就必须要检测了, 自己的错误,只能自己解决,因为别人对你的错误往往都不容易理解。 哎,像我这样独自一个奋斗,真是寂寞啊, 遇到困惑,要么放弃,要么坚持,可是却不知道要坚持多久, 心里总是害怕 这样 浪费时间。
 
目前,还有一个问题没有解决:  如果调整时间,不合理,则必须恢复 原来的时间,并且有错误提示。
比如时间: 2012-2-34 , 若更改为这个日期,那么必须要有错误提示,并且要取消 这个时间。
 
#include
#include"MyFuntion.h"  //自定义头文件
 
 
//扫描这些按键是否被按下
void Keycan()
{
  if(Key1==0) //进入调整时间状态
  {
     Delay();
     if(Key1==0)     //停止定时器T0 启动定时器T1 
     {
    ButtonBeep();
    SaveCurrentTime(); //进入调整时间状态 必须保存当前时间  若取消调时 则可以恢复时间
        TR0=0;//停止定时器T0
TR1=1;//启动定时器T1 
tempSecond=0;     
     }
     while(!Key1);
  }
 
  if(Key2==0) 
  {
     Delay();
     if(Key2==0)  // 取消调时 恢复单片机调时之前的实际时间
     {
    if(TR0==0) //在调整时间状态下  恢复时间
{
  ButtonBeep();
          CurrentTime(); 
}   
     }
     while(!Key2);
  }
 
  if(Key3==0) //退出调整时间状态:
  {
     Delay();
     if(Key3==0)
     {
    ButtonBeep(); //停止定时器T1 启动定时器T0 
        TR0=1;//启动定时器T0
TR1=0;//停止定时器T1 
Write_Command(0x0c); //设置开显示   不显示光标   
     }
     while(!Key3);
  }
 
//当定时器T0 停止时 才能 进行下面的各个按键的操作
 
  if(TR0==0) //定时器T0 停止
  {
  if(Key4==0) //    Key4  控制光标往右移动
  {
     Delay();
     if(Key4==0)
     {
  AdjustCursorRight(); //控制光标往右移动
ButtonBeep();
     }
     while(!Key4);
  }
 
  if(Key5==0) //    Key5  控制光标往左移动
  {
     Delay();
     if(Key5==0)
     {
  AdjustCursorLeft(); //控制光标往左移动
ButtonBeep();
     }
     while(!Key5);
  }
 
  if(Key6==0) //    递增
  {
     Delay();
     if(Key6==0)
     {
    UpDown=1;
ButtonSetTime();
ButtonBeep();
     }
     while(!Key6);
  }
  
  if(Key7==0) //  递减 
  {
     Delay();
     if(Key7==0)
     {
    UpDown=0;
ButtonSetTime();
            ButtonBeep();
     }
     while(!Key7);
  }
  }
 
}
 
 
void main()
{
   TMOD=0X01;
   EA=1;
   ET0=1;
   ET1=1;
   TR0=1; //启动定时器T0
//   TR1=0; //停止定时器T1 即暂时不启动定时器T1
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   TH1=(65536-50000)/256;
   TL1=(65536-50000)%256;
 
   InitLCD(); //初始化LCD
   Init_Table_YMD(table1); // LCD 时间表 年月日
   Init_Table_HMS(table2); // LCD 时间表 时分秒
   DisplayLCD_YMD(table1, 10); //LCD显示时间 年月日
   DisplayLCD_HMS(table2, 8); //LCD显示时间 时分秒
 
   while(1)
   {
      Keycan();
  if(t0==20)
  {
    t0=0;
IncreaseHMS(); //  时分秒  递增
  }
   }
   
 
 //定时器T0 实现自动 计时
void LCD_Timer0() interrupt 1 using 0
{
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
 
   t0++;
}
 
 //定时器T1 实现自动 计时  从而减少调整时间产生的误差
void LCD_Timer1() interrupt 3 using 1
{
   TH1=(65536-50000)/256;
   TL1=(65536-50000)%256;
 
   t1++;
   if(t1==20)
   {
  t1=0;
  tempSecond++;
   }
}

关键字:1602LCD液晶  数字电子钟  时钟表 引用地址:1602LCD液晶数字电子钟 时钟表 C语言

上一篇:如何实现DS1302实时时钟表显示在1602LCD液晶
下一篇:1602LCD液晶如何编写数字电子钟

推荐阅读最新更新时间:2024-03-16 15:09

1602LCD液晶数字电子钟钟表 C语言
1602LCD液晶数字电子钟 基本设计思路: 1. 1602LCD显示: 第一行: 年, 月, 日 2012-01-22 第二行: 时, 分, 秒 23:59:00 2. 独立按键功能: Key1 恢复单片机调时之前的实际时间, 由于在调整时间期间,定时器T0暂停, 则启动定时器T1, 保证单片机的时间正确.(即 取消调时) Key2 进入调整时间状态: 停止定时器T0,启动定时器T1. Key3 退出调整时间状态: 启动定时器T0,停止定时器T1. Key4 选择调整时间: 秒, 分, 时, 日, 月, 年 Key5 调时: 递增 同时启动蜂鸣器 Key6 调时: 递减 同时启动蜂鸣器
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved