液晶显示屏-电子时钟
/*
液晶显示屏显示时间 : 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++;
}
}
液晶显示屏-电子时钟相关推荐
- 电子时钟c语言课题介绍,电子时钟开题报告
学生毕业设计开题报告书 课题名称 基于单片机的电子时钟设计 姓名 xx 学号 xx 班级 信息xx班 专业 电子信息工程 院系 信息工程学院 指导教师 xxx 一.选题依据 1 课题的目的 社会对信息 ...
- 51驱动DS1302制作电子时钟1602显示
51驱动DS1302制作电子时钟1602显示 模组选型 模组选型解析 设计思路 产品接线 部分代码解析 总结 原文链接:https://www.yourcee.com/newsinfo/2928557 ...
- 基于51单片机的LCD1602电子时钟
摘要: 51系列单片机是各单片机中最为典型和最有代表性的一种.由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器.本次设计的数字电子时钟采用了STC89C52芯片进行控制,使用DS1 ...
- keil c语言 1602时钟代码,基于单片机的LCD1602电子时钟设计.doc
基于单片机的LCD1602电子时钟设计 设计任务和目的 1.1.设计任务 (1):用单片机设计基于LCD1602的电子时钟,显示时间和日期: (2):误差精度控制在1s/天: (3):具有时间和日期的 ...
- 天津大学计算机课程设计挂,天津大学智能装置课程设计 电子时钟..doc
智能装置课程设计 一.课程设计目的: 1.深入了解PIC16F877单片机的工作原理,熟练掌握汇编语言程序设计方法,熟练使用MPLAB-ICD仿真器及MPLAB-IDE仿真调试软件. 2.通过该课程设 ...
- STC89C52电子时钟
目录 摘 要 3 一 .实训目的 4 二 .具体内容 4 三 .方案讨论 5 四 仿真电路 5 4.1.仿真流程 5 4.2.仿真电路图 6 五 .程序设计 6 六. 程序流程图 12 七 .程序分析 ...
- 用easyx画电子钟_Canvas入门-利用Canvas绘制好玩的电子时钟
在这之前 你需要了解一下方法的使用: beginPath() closePath() moveTo() lineTo() fill() stroke() fillRect() clearRect() ...
- c语言实验报告世界时钟,基于LCD的电子时钟实验报告.doc
PAGE \* MERGEFORMAT 3 河海大学物联网工程学院 课程设计报告 题 目 基于LCD的电子时钟实验 专业.学号 电信 . 授课班号 完成时间 2013.07.05 课程设计(报告)任务 ...
- Canvas入门-利用Canvas绘制好玩的电子时钟
在这之前 你需要了解一下方法的使用: beginPath() closePath() moveTo() lineTo() fill() stroke() fillRect() clearRect() ...
最新文章
- 《少年先疯队》第九次团队作业:Beta冲刺第二天
- PTA L1_002 打印沙漏(C语言)
- 【高清】网络安全思维导图
- 绝地求生信号枪只能在服务器吗,绝地求生信号枪怎么用?信号枪刷新点及用法详解...
- 盘点key value在各个编程语言中的类型
- Microsoft MVC3 框架
- 算法(第4版) Chapter 5.2 单词查找树
- 安卓端华为推送集成笔记
- Java8 Stream + +很不错的文章集合
- 一次library cache pin故障的解决过程
- OOAD-设计模式-外观模式
- 在Netty中使用Apache common fileupload
- 【水果识别】基于matalb GUI灰度、二值化、滤波水果分级【含Matlab源码 1848期】
- 【WPS表格】一些简单函数
- windows系统中如何新建桌面
- IPwe区块链智能池利用AI来处理专利分析
- 李沐动手学深度学习V2-attention注意力机制
- PS油画特效插件AKVIS Artwork for mac
- C语言学习笔记之初识
- 看片会员php源码,会员碎片 · THINKPHP插件 · 看云
热门文章
- excel表格xlsx解开权限密码,excel表格xlsx不能复制打印怎么办?
- 计算机网络电缆是什么,网络电缆被拔出是什么意思
- Django channels介绍
- tomcat显示服务器端口被占用,启动Tomcat服务器端口被占用解决方法
- Render/RayMarchine/Base 1- 利用Frag Shader绘制图形
- mail.smtp.auth.ntlm.domain
- 人工智能ChatGPT 体验案例:使用ChatGPT实现java扫雷小游戏
- 汇编的jl、jg与jb、ja
- boosting 算法总结
- 无锡职业培训——初级会计考试都有哪些套路?