/*
液晶显示屏显示时间  : xxxx-xx-xx xxx
      xx-xx-xx
  可修改时间;
  缺陷,无法存贮数据
*/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define READ 0xa1
#define WRITE 0xa0

sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P2^5;
sbit BUSY=P0^7;
sbit k1=P3^4;
sbit k2=P3^5;
sbit k3=P3^6;
sbit beep=P2^3;
sbit SDA=P2^0;
sbit SCL=P2^1;
sbit dula=P2^6;
sbit wela=P2^7;

uint year,month,day,num;
uint hour,minite,second;
uint mon1[]={31,28,31,30,31,30,31,31,30,31,30,31};
uint mon2[]={31,29,31,30,31,30,31,31,30,31,30,31};
uchar code week[7][3]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
uchar i,j;
uint key,we_ju;

/***************延时*************/
void delay(uint x)
{
 uint i,j;
 for(i=0;i<110;i++)
  for(j=0;j<x;j++); 
}

/********************************/

/**************************EEPROM模块**************************************/

/*本来是用来保存时间,但功能无法实现*/

/********************************************************************************/
/*
void delayms(){;;}
void start()

 SDA=1;
 SCL=1; 
 delayms();
 SDA=0;
 delayms();
 SCL=0;  
}
void stop()
{
 SDA=0;
 SCL=1;
 delayms();
 SDA=1;
 delayms();
 SDA=0;
 SCL=0;
}
void write_byte(uchar dat)
{
 uchar i;
 for(i=0;i<8;i++)
 {
  dat<<=1;
  SCL=0;
  delayms();
  SDA=CY;
  delayms();
  SCL=1;
  delayms();
 }
 SCL=0;
 delayms();
 SDA=1;
 delayms();
}
uchar read_byte()
{
 uchar i,x;
 SCL=0;
 delayms();
 SDA=1;
 delayms();
 for(i=0;i<8;i++)
 {
  SCL=1;
  delayms();
  x<<=1;
  x|=(uchar) SDA;
  delayms();
 }    
 return x;
}
void respons()
{
 SCL=1;
 delayms();
 SCL=0;
 delayms(); 
}
void write_add(uchar add,uchar dat)
{
 start();
 write_byte(WRITE);
 respons();
 write_byte(add);
 respons();
 write_byte(dat);
 respons();
 stop();
 delayms();
}
uchar read_add(uchar add)
{
 uchar x;
 start();
 write_byte(WRITE);
 respons();
 write_byte(add);
 respons();
 start();
 write_byte(READ);
 respons();
 x=read_byte();
 stop();
 return x;
}
void write()
{
 write_add(0,second%10+'0');
 write_add(1,second/10+'0');
 write_add(2,minite%10+'0');
 write_add(3,minite/10+'0');
 write_add(4,hour%10+'0');
 write_add(5,hour/10+'0');
 write_add(6,day%10+'0');
 write_add(7,day/10+'0');
 write_add(8,month%10+'0');
 write_add(9,month/10+'0');
 write_add(10,year%10+'0');
 write_add(11,year/10%10+'0');
 write_add(12,year/100%10+'0');
 write_add(13,year/1000+'0');
}      
void read()
{
 second=(read_add(0)+read_add(1))-'0';
 minite=(read_add(2)+read_add(3))-'0';
 hour=(read_add(4)+read_add(5))-'0' ;
 day=(read_add(6)+read_add(7))-'0';
 month=(read_add(8)+read_add(9))-'0';
 year=(read_add(10)+read_add(11)+read_add(12)+read_add(13))-'0';
}  
*/
/**************************************************************************/

/***********************闰年判断****************/
int year_juge(uint y)
{
 if(y%4==0&&4%100!=0 || y%400==0) return 1;
 else return 0;
}
/*********************************************/

/**************判忙************/
void wait()
{
 P0=0xff;
 do
 {
   RS=0;
  RW=1;
  EN=0;
  EN=1;
 }while(BUSY==1);
 EN=0;
}
/*****************************/

/*************写命令********/
void write_cmd(uchar cmd)
{
 wait();
 EN=0;
 P0=cmd;
 RS=0;
 RW=0;
 EN=1;
 EN=0;
}
/****************************/

/*************写数据********/
void write_data(uchar dat)
{
 wait();
 EN=0;
 P0=dat;
 RS=1;
 RW=0;
 EN=1;
 EN=0;
}
/****************************/

/*************** 日期、时间自然流逝************/
void time_lapses()
{
 if(second>=60)
 {
  second=0;
  minite++;
  if(minite>=60)
  {
   minite=0;
   hour++;
   if(hour>=24)
   {
    hour=0;
    day++;
    if(year_juge(year))
    {
     if(day>=mon2[month])
     {
      day=0;
      month++;
      if(month>=12) month=0,year++;
      if(year>=9999) year=1;
     } 
    }
    else
    {
     if(day>=mon1[month])
     {
      day=0;
      month++;
      if(month>=12) month=0,year++;
      if(year>=9999) year=1;
     }
    }
   }
  }
 } 
}
/***************************************************************/

/*************光标闪烁*****************************/
void flicker()
{
 if(key==1) write_cmd(0x80+0x4a);
 else if(key==2) write_cmd(0x80+0x47);
 else if(key==3) write_cmd(0x80+0x44);
 else if(key==4) write_cmd(0x80+0x0c);
 else if(key==5) write_cmd(0x80+0x0a);
 else if(key==6) write_cmd(0x80+0x07);
 else if(key==7) write_cmd(0x80+0x04);
 if(key!=0) write_cmd(0x0f); 
}
/**************************************************/

/***************判断星期几*************************/
uint Week_day(uint y,uint m,uint d)
{
 if(m==1||m==2) m+=12,y--;
 return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7 ;
}
/************************************************/

/*****************时间显示**********************/
void display_time()

 we_ju=Week_day(year,month,day);

time_lapses(); 
 write_cmd(0x80+0x01);
 write_data(year/1000+'0');
 write_data(year/100%10+'0');
 write_data(year/10%10+'0');
 write_data(year%10+'0');
 write_data('-');
 write_data(month/10+'0');
 write_data(month%10+'0');
 write_data('-');
 write_data(day/10+'0');
 write_data(day%10+'0');
 write_data(' ');
 for(i=0;i<3;i++) write_data(week[we_ju][i]);
 write_cmd(0x80+0x40+0x03);
 write_data(hour/10+'0');
 write_data(hour%10+'0');
 write_data(':');
 write_data(minite/10+'0');
 write_data(minite%10+'0');
 write_data(':');
 write_data(second/10+'0');
 write_data(second%10+'0');
// write();   
}
/************************************************/

/*************自增**********/
void add()
{
 if(key==1)
 {
   second++;
   if(second>=60) second=0;
 }
 else if(key==2)
 {
   minite++;
   if(minite>=60) minite=0;
 }
 else if(key==3)
 {
  hour++;
  if(hour>=24) hour=0;
 }
 else if(key==4) we_ju++;
 else if(key==5)
 {
  day++;
  if(year_juge(year))
  {
   if(day>=mon2[month-1]) day=1;
  }
  else if(day>=mon1[month-1]) day=1;
 }
 else if(key==6)
 {
  month++;
  if(month>12) month=1;
 }
 else if(key==7)
 {
  year++;
  if(year>9999) year=1;
 }
 display_time();
}
/*************************/

/**********自减***********/
void reduce()
{
 if(key==1)
 {
   second--;
   if(second<=0) second=59;
 }
 else if(key==2)
 {
   minite--;
   if(minite<=0) minite=59;
 }
 else if(key==3)
 {
   hour--;
   if(hour<0) hour=23;
 }
 else if(key==4) we_ju--;
 else if(key==5)
 {
   day--;
   if(day<=0)
   {
    if(year_juge(year)) day=mon2[month-1];
    else day=mon1[month-1];
   }
 }
 else if(key==6)
 {
   month--;
   if(month<=0) month=12;
 }
 else if(key==7)
 {
   year--;
   if(year<=0) year=9999;
 }
 display_time();
}
/***************************/

/***************键盘扫描****************/
void keyscan()
{
 if(k1==0)
 {
  delay(10);
  beep=0;
  if(k1==0)
  { 
   while(!k1);
   key++; 
   if(key==8) key=0;
   if(key==0) TR0=1,write_cmd(0x0c);
   else TR0=0;   
  }
  beep=1;
 }
 if(k2==0)
 {
  delay(10);
  beep=0;
  if(k2==0)
  { 
   while(!k2);
   add();  
  }
  beep=1;
 }
 if(k3==0)
 {
  delay(10);
  beep=0;
  if(k3==0)
  {
   while(!k3);
   reduce();
  }
  beep=1;
 }
}
/**************************************/

/*******************初*始*化****************/
void init()
{
 dula=0;
 wela=0;
 /********定时器初始化*********/
 TMOD=0x02;
 TH0=6;
 TL0=6;
 ET0=1;
 TR0=1;
 EA=1;
 /*****************************/

/*******液晶显示屏初始化******/
 write_cmd(0x38);
 write_cmd(0x0c);
 write_cmd(0x06);
 write_cmd(0x01);
 /***************************/

/*********时间初始化******/
 year=2014;
 month=7;
 day=29;
 hour=14;
 minite=31;
 second=22;
// read();
 /************************/
 
}
/**************************************/

/*************** 主函数 **************/
void main()
{
 init(); 
 while(1)
 {
  keyscan();
  if(key==0) display_time();
  else flicker();
  
 }
}
/**********************************/

void T0_time() interrupt 1
{
 num++;
 if(num==4000)
 {
  num=0;
  second++;
 }
}

液晶显示屏-电子时钟相关推荐

  1. 电子时钟c语言课题介绍,电子时钟开题报告

    学生毕业设计开题报告书 课题名称 基于单片机的电子时钟设计 姓名 xx 学号 xx 班级 信息xx班 专业 电子信息工程 院系 信息工程学院 指导教师 xxx 一.选题依据 1 课题的目的 社会对信息 ...

  2. 51驱动DS1302制作电子时钟1602显示

    51驱动DS1302制作电子时钟1602显示 模组选型 模组选型解析 设计思路 产品接线 部分代码解析 总结 原文链接:https://www.yourcee.com/newsinfo/2928557 ...

  3. 基于51单片机的LCD1602电子时钟

    摘要: 51系列单片机是各单片机中最为典型和最有代表性的一种.由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器.本次设计的数字电子时钟采用了STC89C52芯片进行控制,使用DS1 ...

  4. keil c语言 1602时钟代码,基于单片机的LCD1602电子时钟设计.doc

    基于单片机的LCD1602电子时钟设计 设计任务和目的 1.1.设计任务 (1):用单片机设计基于LCD1602的电子时钟,显示时间和日期: (2):误差精度控制在1s/天: (3):具有时间和日期的 ...

  5. 天津大学计算机课程设计挂,天津大学智能装置课程设计 电子时钟..doc

    智能装置课程设计 一.课程设计目的: 1.深入了解PIC16F877单片机的工作原理,熟练掌握汇编语言程序设计方法,熟练使用MPLAB-ICD仿真器及MPLAB-IDE仿真调试软件. 2.通过该课程设 ...

  6. STC89C52电子时钟

    目录 摘 要 3 一 .实训目的 4 二 .具体内容 4 三 .方案讨论 5 四 仿真电路 5 4.1.仿真流程 5 4.2.仿真电路图 6 五 .程序设计 6 六. 程序流程图 12 七 .程序分析 ...

  7. 用easyx画电子钟_Canvas入门-利用Canvas绘制好玩的电子时钟

    在这之前 你需要了解一下方法的使用: beginPath() closePath() moveTo() lineTo() fill() stroke() fillRect() clearRect() ...

  8. c语言实验报告世界时钟,基于LCD的电子时钟实验报告.doc

    PAGE \* MERGEFORMAT 3 河海大学物联网工程学院 课程设计报告 题 目 基于LCD的电子时钟实验 专业.学号 电信 . 授课班号 完成时间 2013.07.05 课程设计(报告)任务 ...

  9. Canvas入门-利用Canvas绘制好玩的电子时钟

    在这之前 你需要了解一下方法的使用: beginPath() closePath() moveTo() lineTo() fill() stroke() fillRect() clearRect() ...

最新文章

  1. 《少年先疯队》第九次团队作业:Beta冲刺第二天
  2. PTA L1_002 打印沙漏(C语言)
  3. 【高清】网络安全思维导图
  4. 绝地求生信号枪只能在服务器吗,绝地求生信号枪怎么用?信号枪刷新点及用法详解...
  5. 盘点key value在各个编程语言中的类型
  6. Microsoft MVC3 框架
  7. 算法(第4版) Chapter 5.2 单词查找树
  8. 安卓端华为推送集成笔记
  9. Java8 Stream + +很不错的文章集合
  10. 一次library cache pin故障的解决过程
  11. OOAD-设计模式-外观模式
  12. 在Netty中使用Apache common fileupload
  13. 【水果识别】基于matalb GUI灰度、二值化、滤波水果分级【含Matlab源码 1848期】
  14. 【WPS表格】一些简单函数
  15. windows系统中如何新建桌面
  16. IPwe区块链智能池利用AI来处理专利分析
  17. 李沐动手学深度学习V2-attention注意力机制
  18. PS油画特效插件AKVIS Artwork for mac
  19. C语言学习笔记之初识
  20. 看片会员php源码,会员碎片 · THINKPHP插件 · 看云

热门文章

  1. excel表格xlsx解开权限密码,excel表格xlsx不能复制打印怎么办?
  2. 计算机网络电缆是什么,网络电缆被拔出是什么意思
  3. Django channels介绍
  4. tomcat显示服务器端口被占用,启动Tomcat服务器端口被占用解决方法
  5. Render/RayMarchine/Base 1- 利用Frag Shader绘制图形
  6. mail.smtp.auth.ntlm.domain
  7. 人工智能ChatGPT 体验案例:使用ChatGPT实现java扫雷小游戏
  8. 汇编的jl、jg与jb、ja
  9. boosting 算法总结
  10. 无锡职业培训——初级会计考试都有哪些套路?