LCD1602时钟显示时间日期带闹铃可循环调节

发布者:DazzlingSmile最新更新时间:2016-09-22 来源: eefocus关键字:LCD1602  时钟显示  可循环调节 手机看文章 扫描二维码
随时随地手机看文章
#include

#include
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs=P2^6;
sbit lcden=P2^7;
sbit lcdrw=P2^5;
sbit key1=P2^0;//欢迎开屏/显示时间日期/显示闹铃切换
sbit key3=P2^1;   //循环调节
sbit key4=P2^2;//加
sbit key5=P2^3;//减
uchar flag1,flag,flag3,num1,shi,fen,miao,nian,yue,ri,zhou;
uchar _fen,_shi;
uchar aa,bb;
uchar code table[]={'0','1','2','3','4','5','6','7','8','9','-'};
uchar code table1[]="wanglushan";
uchar code table2[]="welcome you!";
uchar code table3[]="time:";
uchar code table4[]="date:";
uchar code table5[]="alarm:";
void dispfen();
void dispshi();
void dispzhou();
void dispri();
void dispyue();
void dispnian();
void disp_fen();
void disp_shi();
void delayms(uchar z);
void disptime();
void dispword();
void displing();
void delay5us();
void lcdint();
void lcdcom(uchar com1);
void lcddate(uchar date1);
void intc();
 keyscan();
//--------------
void main()
{
 intc(); 
 while(1)
 {
 keyscan();
 if(flag1==0)//当未按调节键时:
  {//功能显示键,按该键将循环显示开机画面/时间日期/闹铃
  //lcdint();
  //delayms(10);
  if(flag==0)
   {
   dispword();
   }
  if(flag==1)
   {
   disptime();
   }
  if(flag==2)
   {
   displing();
   }
  }
 else//当按下调节键时,将单独显示要调节的部分
    {   //lcdint();
  //delayms(10);
  switch(flag1)
              {
  case 1:
   dispfen();break;
  case 2:
   dispshi();break;
  case 3:
   dispzhou();break;
  case 4:
   dispri();break;
  case 5:
   dispyue();break;
  case 6:
   dispnian();break;
  case 7:
   disp_fen();break;
  case 8:
   disp_shi();break;
  
  }
     }
 }
}

//----------延时
void delayms(uint z)
{
 uint x;
 uchar y;
 for(x=z;x>0;x--)
    for(y=113;y>0;y--);
}
//-----------------
void delay5us()
{
 
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
}
//---------LCD初始化-------

void lcdint()
{
 
    lcdcom(0x38);
 delay5us();
    lcdcom(0x0c);
 delay5us();
 lcdcom(0x06);
 delay5us();
 lcdcom(0x01);
 delayms(10);
 
}
//------LCD写命令-----------
void lcdcom(uchar com1)
{
 lcdrs=0;
 lcdrw=0;
 lcden=0;
 delay5us();
 P0=com1;
 delay5us();
 lcden=1;
 delay5us();
 lcden=0; 

}
//------LCD写数据-------
void lcddate(uchar date1)
{
 lcdrs=1;
 lcdrw=0;
 lcden=0;
 delay5us();
 P0=date1;
 delay5us();
 lcden=1;
 delay5us();
 lcden=0; 
}

//-------键盘扫描-------
 keyscan()
{
 if(key1==0)
      delayms(100);
     if(key1==0)
       {
  while(!key1);
        lcdcom(0x01);
  delayms(10);
     flag++;
  if(flag>2)
  flag=0;
  }
 
 if(key3==0)
      delayms(100);
     if(key3==0)
       {
  while(!key3);
  lcdcom(0x01);
  delayms(10);
  flag1++;
  if(flag1>8)
   flag1=0;
  }
  if(key4==0)
   delayms(100);
  if(key4==0)
  {
  while(!key4); 
  switch(flag1)
   {
    case 1:
    fen++;
    if(fen==60)
     fen=0;
    break;
    case 2:
    shi++;
    if(shi==24)
     shi=0;
    break;
    case 3:
    zhou++;
    if(zhou>7)
    zhou=1;
    break;
     case 4:
    ri++;
    if(ri>31)
     ri=1;
    break;
     case 5:
    yue++;
    if(yue>12)
     yue=1;
    break;
     case 6:
    nian++;
    if(nian>99)
     nian=0;
    break;
     case 7:
    _fen++;
    if(_fen==60)
     _fen=0;
    break;
     case 8:
    _shi++;
    if(_shi==24)
     _shi=0;
    break;
     default: break;
   }
  }
 if(key5==0)
      delayms(100);
     if(key5==0)
       {
  while(!key5);
  
  switch(flag1)
   {
    case 1:
    if(fen==0)
     fen=0;
     else
     fen--;
    break;
    case 2:
    if(shi==0)
     shi=0;
     else
     shi--;
    break;
    case 3:
    if(zhou==1)
     zhou=1;
     else
     zhou--;
    break;
     case 4:
    if(ri==1)
     ri=1;
     else
     ri--;
    break;
     case 5:
    if(yue==1)
     yue=1;
     else
     yue--;
    break;
     case 6:
    if(nian==0)
     nian=0;
     else
     nian--;
    break;
     case 7:
    if(_fen==0)
     _fen=0;
     else
     _fen--;
      case 8:
    if(_shi==0)
     _shi=0;
     else
     _shi--;
    break;
     default: break;
   }
  
  }
}

//---------------
void disptime()
{
         lcdcom(0xc0);
   num1=0;
   while(table3[num1]!='\0')
         {
    
    lcddate(table3[num1]);
     num1++;
    delayms(1);
    }
   num1=0;
   lcddate(table[shi/10]);
   delayms(1);
   lcddate(table[shi%10]);
   delayms(1);
   lcddate(table[10]);
  
   lcddate(table[fen/10]);
   delayms(1);
   lcddate(table[fen%10]); 

   delayms(1);
   lcddate(table[10]);
  
   lcddate(table[miao/10]);
   delayms(1);
   lcddate(table[miao%10]);
   delayms(1);
   
   lcdcom(0x80);
   num1=0;
   while(table4[num1]!='\0')
         {
    
    lcddate(table4[num1]);
     num1++;
    delayms(1);
    }
   lcddate(table[nian/10]);
   delayms(1);
   lcddate(table[nian%10]);
   delayms(1);
   lcddate(table[10]);
  
   lcddate(table[yue/10]);
   delayms(1);
   lcddate(table[yue%10]); 
   delayms(1);
   lcddate(table[10]);
  
   lcddate(table[ri/10]);
      delayms(1);
   lcddate(table[ri%10]);
   delayms(1);
      //lcddate(table[10]);
   lcddate(table[10]);
   delayms(1);
   lcddate(table[zhou/10]);
   delayms(5);
 
}
//----------------
void dispword()
{
 lcdcom(0x80+3);
      while(table1[num1]!='\0')
         {
    
    lcddate(table1[num1]);
     num1++;
    }
   num1=0;
      lcdcom(0xc0+2);
   while(table2[num1]!='\0')
         {
    
    lcddate(table2[num1]);
     num1++;
    }
   num1=0;
}

//-------------------
void timer0() interrupt 1
{ TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
    aa++;
 if(aa==20)
  {aa=0;
   miao++;}
 if(miao==60)
 {miao=0;fen++;}
    if(fen==60)
 {fen=0;shi++;}
 if(shi==24)
 {shi=0;
 ri++;
 zhou++;
 }
 if(ri>7)
 {zhou=1;}
 if(ri>31)
 {ri=0;yue++;}
 if(yue>12)
 {yue=1;nian++;}
 if(nian>99)
 nian=0;


}

//-------------
void intc()
{
 num1=0;
 shi=12;
 fen=12;
 miao=12;
 nian=11;
 yue=2;
 ri=21;
 zhou=1;
 _fen=12;
  _shi=12;
    TMOD=0x01;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1;
 ET0=1;
 TR0=1;
 lcdint();
}

//----------调节时单独显示程序----------
void dispfen()
{
 lcdcom(0xc8);
 //delayms(1);
       lcddate(table[fen/10]);
 lcddate(table[fen%10]);
}
void dispshi()
{
 lcdcom(0xc5);
 //delayms(1);
       lcddate(table[shi/10]);
 lcddate(table[shi%10]);
}
void dispzhou()
{
 lcdcom(0x8e);
 //delayms(1);
       lcddate(table[zhou/10]);
 //lcddate(table[zhou%10]);
}
void dispri()
{
 lcdcom(0x8b);
 //delayms(1);
       lcddate(table[ri/10]);
 lcddate(table[ri%10]);
}
void dispyue()
{
 lcdcom(0x88);
 //delayms(1);
       lcddate(table[yue/10]);
 lcddate(table[yue%10]);
}
void dispnian()
{
 lcdcom(0x85);
 //delayms(1);
       lcddate(table[nian/10]);
 lcddate(table[nian%10]);
}
void disp_fen()
{
 lcdcom(0xc8);
 //delayms(1);
       lcddate(table[_fen/10]);
 lcddate(table[_fen%10]);
}
void disp_shi()
{
 lcdcom(0xc5);
 //delayms(1);
       lcddate(table[_shi/10]);
 lcddate(table[_shi%10]);
}

//-------------------显示闹铃时间----
void displing()
{
   //lcdint();
 //delayms(10);
       lcdcom(0xc0);
 num1=0;
 while(table5[num1]!='\0')
       { 
  lcddate(table5[num1]);
  num1++;
 }
 delayms(1);
 lcddate(table[_shi/10]);
 lcddate(table[_shi%10]);
 delayms(1);
 lcddate(table[10]);
 lcddate(table[_fen/10]);
 lcddate(table[_fen%10]);
 delayms(1);

}
void timer1()

关键字:LCD1602  时钟显示  可循环调节 引用地址:LCD1602时钟显示时间日期带闹铃可循环调节

上一篇:ADC0832实现输出频率为50HZ的正弦波
下一篇:ADC0809实现8路模拟信号轮流转换(数码管上显示)

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

单片机 实时时钟电路(AT89C51、LCD1602、PCF8563)
一、简介 此电路主要有51单片机、LCD1602模块、PCF8563芯片和按键组成组成,通过LCD1062显示当前时间,按键可设置时间。 二、运行效果 三、部分代码 /*想要更多项目私wo!!!*/ #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int void init() { uchar num; lcden=0; write_com(0x38); //0011 1000B,功能模式设置,设置为8为数据口,两行显示,5*7点阵 write_com(0x0c);
[单片机]
[C51代码]菜单函数[用于LCD1602]
#ifndef __menu_h__ #define __menu_h__ #include head.h #include LCD1602_2.h #include DS18B20.h #define Null 0 /*********************** * 函数声明 * ***********************/ void ShowMenu(void); void Menu_Change(uchar KeyNum); /*********************** * 按键功能键宏定义 * ***********************/ #define up 1 #define d
[单片机]
基于51单片机的多功能时钟温度计 DS1302+LCD1602
本设计是由STC89C52单片机为控制核心,具有在线编程功能,低功耗;时钟电路由DS1302提供,它是一种高性能、低功耗的时钟电路,工作电压为3V~5V;所以采用DS1302作为本设计的日历芯片;显示部份使用LCD1602B液晶模块进行数字显示,1602B液晶模块可以显示2行16个字符,有8位数据总线D0—D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。该模块也可以只用D4-D7作为四位数据分两次传送,这样就可以节省MCU的I/O口资源,系统主要由晶振电路、复位电路、时钟电路部分、中央处理单元、晶显示部分组成。 电路原理图如下: 制作出来的实物图如下: Altium Designer画的
[单片机]
基于51单片机的多功能<font color='red'>时钟</font>温度计 DS1302+<font color='red'>LCD1602</font>
IO端口驱动LCD1602
只用两个IO端口驱动74LS164扩展成并口驱动 LCD 1602(四线模式),这是个完整简单的例子,可实现字符串左移200次,右移200次,不停的循环。现上传与大家共享成果! //引入头文件********************************************************* #include p IC .h #include pic12f6x.h #include delay.h #include delay.c //熔丝配置*********************************************************** __CONFIG(PROTE
[单片机]
时钟及温度用74hc164+74ls145数码管显示单片机程序
下面是实物图: 电路图 很简单我就不画了 数码管用74hc164串行转并行 芯片 +74ls145这2个芯片驱动一个负责段选一个负责位选,具体看程序顶部的引脚定义.完整的keil工程文件下载地址: http://www.51hei.com/f/164smg.rar 下面是程序源码. #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit iicclk=P1^0;////总线存储时钟引脚定义 sbit iicdat=P1^1;////总线存储数据引脚定义 sbit hc164dat
[单片机]
<font color='red'>时钟</font>及温度用74hc164+74ls145数码管<font color='red'>显示</font>单片机程序
基于51单片机89C51的超声波LCD1602液晶显示距离C语言程序
#include AT89X51.H #include intrins.h #define uint unsigned int #define uchar unsigned char sbit rs=P1^2; sbit rw=P1^1; sbit en=P1^0; char idata disp_buf1 ;//1602显示缓冲区1(即上排16个字符) char idata disp_buf2 ;//1602显示缓冲区2(即下排16个字符) uchar code table = celiang ok ! ; uchar i; char idata jul
[单片机]
基于51单片机的简易计算器设计
一.硬件方案 本设计是以51单片机为核心的计算器模拟系统设计,输入采用4×4矩阵键盘,可以进行加、减、乘、除4位带符号数字运算,并在LCD1602上显示操作过程。 主要由51单片机+最小系统+LCD1602液晶显示模块+4*4矩阵按键电路;如图: 二.设计功能 (1)本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用)单片机。 (2)矩阵按键输入、LCD1602液晶显示,构成一套可以运算两个数之间的加减乘除的设计。 (3)最大运算是:9999*9999,可以运算负数; 三.设计原理图 (1)原理图主要采用AD软件进行设计,如图: (2)Protues仿真图如下: 四.软件设计 (
[单片机]
基于51单片机的简易计算器设计
PIC LCD1602显示
#include //调用头文件,可以去PICC18软件下去查找PIC18FXX2.H __CONFIG(1,XT) ; //晶振为外部4M __CONFIG(2,WDTDIS) ; //看门狗关闭 __CONFIG(4,LVPDIS) ; //禁止低电压编程 #define uint unsigned int #define uchar unsigned char #define en RB3 #define rw RB4 #define rs RB5 #define D PORTD void delayms(uint x) { int i,j; for(i=0;i =1
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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