#include
#include //库函数头文件,代码中引用了_nop_()函数
// 定义控制信号端口
sbit RS=P2^4; //P2.4
sbit RW=P2^5; //P2.5
sbit E=P2^6; //P2.6
sbit set=P3^4; //设置键
sbit enter=P3^5; //确认键
sbit add1=P3^6; //加1键
sbit sub1=P3^7; //减1键
bit k=0,f=0;//k为0表示运行状态,k为1表示设置状态;f为0表示第一行显示,f为1表示第二行显示
char sec,min,hour,week,day,month,year,n,m;
unsigned char count,key;
unsigned char lcdd[]="0123456789";
/*声明调用函数*/
void dispd(); //日期显示函数
void dispt(); //时间显示函数
unsigned char keys();//按键扫描函数
void lcd_w_cmd(unsigned char com); //写命令字函数
void lcd_w_dat(unsigned char dat); //写数据函数
unsigned char lcd_r_start(); //读状态函数
void int1(); //LCD初始化函数
void delay(unsigned char t); //可控延时函数
void delay1(); //软件实现延时函数,5个机器周期
/*主函数*/
void main()
{
TMOD=0x01; //设置为定时器模式1
TH0=0x3c; //晶振6MHz,定时时间100ms
TL0=0xb0;
IE=0x82; //开全局中断和定时中断
TR0=1; //启动定时器
sec=0; //秒
min=0; //分
hour=0; //时
week=0; //星期
day=1; //日
month=1; //月
year=0; //年
count=0; //中断次数清0
n=-3; //设置键按下次数,第一行日期
m=-3; //设置键按下次数,第二行时间
P0=0xff; // 送全1到P0口
int1(); // 初始化LCD
delay(255);
while(1)
{
key=keys(); //读取按键
switch(key)
{
case 0xe0: //按下设置键
{
TR0=0;
k=1;
if(f==0)
{
n=n+3;
if(n==9)
{
n=0;
m=0;
f=1;
}
}
else
{
m=m+3;
if(m==12)
{
m=0;
n=0;
f=0;
}
}
if(f==0)
{
lcd_w_cmd(0x0d);
lcd_w_cmd(0x86+n);
}
else
{
lcd_w_cmd(0x0d);
lcd_w_cmd(0xc4+m);
}
} break;
case 0xd0: //按下确认键
{
k=0;
TR0=1;
n=-3;
m=-3;
f=0;
} break;
case 0xb0: //按下加1键
{
if(k==1)
{
if(f==0)
{
if(n==0){year++;if(year==100) year=0;}
else if(n==3) {month++;if(month==13) month=1;}
else {day++;if(day==32) day=1;}
dispd(); //调用第一行显示函数
lcd_w_cmd(0x0d); //光标闪烁
lcd_w_cmd(0x86+n);//返回设置值显示地址
}
else
{
if(m==0){hour++;if(hour==24) hour=0;}
else if(m==3) {min++;if(min==60) min=0;}
else if(m==6){sec++;if(sec==60) sec=0;}
else {week++;if(week==7) week=0;}
dispt(); //调用第二行显示函数
lcd_w_cmd(0x0d); //光标闪烁
lcd_w_cmd(0xc4+m);//返回设置值显示地址
}
}
} break;
case 0x70: //按下减1键
{
if(k==1)
{
if(f==0)
{
if(n==0){year--;if(year
/*****定时中断函数*****/
void timer0() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
count++;
if(count==10)
{
count=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
week++;
day++;
if(week==7) week=0;
if(day==29&&month==2&&year%4!=0) {day=1;month++;}
else if(day==30&&month==2&&year%4==0) {day=1;month++;}
else if(day==31&&(month==4||month==6||month==9||month==11)) {day=1;month++;}
else if(day==32&&(month==1||month==3||month==5||month==7||month==8||month==10||month==12)) {day=1;month++;}
if(month==13)
{
month=1;
year++;
if(year==100) year=0;
}
}
}
}
}
}
/*按键扫描函数*/
unsigned char keys()
{
unsigned char cod,del;
P3=0xf0;
cod=P3&0xf0; //读入P3口键值
if(cod!=0xf0) //先检测有无按键按下
{
delay(100); //去抖
if(cod!=0xf0)
{
cod=P3&0xf0; //读入键值
do //等待键释放
{
P3=0xf0;
del=P3&0xf0;
}while(del!=0xf0);
return(cod);//返回键值
}
}
return(0xf0); //返回该值
}
/*第一行显示日期函数*/
void dispd()
{
lcd_w_cmd(0x0c); //设置光标不显示、不闪烁
delay(20);
lcd_w_cmd(0x83); //第一行起始显示地址0x80+0x03
delay(20);
lcd_w_dat('2');
delay(2);
lcd_w_dat('0');
delay(2);
lcd_w_dat(lcdd[year/10]);
delay(2);
lcd_w_dat(lcdd[year%10]);
delay(2);
lcd_w_dat('-');
delay(2);
lcd_w_dat(lcdd[month/10]);
delay(2);
lcd_w_dat(lcdd[month%10]);
delay(2);
lcd_w_dat('-');
delay(2);
lcd_w_dat(lcdd[day/10]);
delay(2);
lcd_w_dat(lcdd[day%10]);
delay(2);
}
/*第二行显示时间、星期函数*/
void dispt()
{
lcd_w_cmd(0x0c); //设置光标不显示、不闪烁
delay(20);
lcd_w_cmd(0xc3); //第二行起始显示地址0x80+0x43
delay(20);
lcd_w_dat(lcdd[hour/10]);
delay(2);
lcd_w_dat(lcdd[hour%10]);
delay(2);
lcd_w_dat(':');
delay(2);
lcd_w_dat(lcdd[min/10]);
delay(2);
lcd_w_dat(lcdd[min%10]);
delay(2);
lcd_w_dat(':');
delay(2);
lcd_w_dat(lcdd[sec/10]);
delay(2);
lcd_w_dat(lcdd[sec%10]);
delay(2);
lcd_w_dat(' ');
delay(2);
lcd_w_dat('W');
delay(2);
lcd_w_dat(lcdd[week]);
delay(2);
}
单片机设计LCD数字钟(万年历)
- 单片机(619327)
- lcd(163575)
- 数字钟(31121)
- 万年历(23638)
- LCD数字钟(6236)
相关推荐
21位数码管带温度和阴历显示的万年历
`
带温度显示的万年历设计电子万年历的设计制作,要求能显示阳历年、月、日、星期、时、分、秒和阴历月、日。
调整时所选中的位会闪烁..
`
2011-12-05 15:09:28
LCD1602液晶屏+51单片机万年历--带仿真
LCD1602液晶屏+51单片机万年历--带仿真PCB打样找华强 http://www.hqpcb.com/3 样板2天出货
2012-10-02 16:57:27
万年历
用单片机做万年历过程中,程序调试无错误,仿真成功。但是按照电路焊接好之后却无法正常显示,表现在:1、要施加很高电压,大概7.5V时显示屏才有数字出现2、按键调整时,数字会在其位置显示,数据显的位置不对3、显示多个85望高手予以解答,小生不胜感激!
2014-04-04 17:02:50
万年历
跪求设计一种多功能万年历,该万年历可以显示时间、实时显示温度和湿度,同时还具有农历提示功能,显示中国传统节日相关信息,具有整点报时功能,每当整点到来蜂鸣器会发出一声鸣叫。主要技术指标:温湿度测量范围
2013-03-05 14:20:52
万年历54单片机,LCD12864,DS1302,18B20
万年历54单片机,LCD12864,DS1302,18B20舍弃了闹钟和报警温度,很单纯的万年历绝对可行,
2014-03-02 20:10:06
万年历制作求助
题 目:万年历电路设计内容要求:(包括规定阅读的文献、应完成的程序、图纸、实验、说明书等)一、任务设计并制作一个万年历,其组成框图如图所示。它是以单片机为主控制器,时间数据是通过AT89C52芯片
2012-10-14 00:12:02
单片机万年历
跪求一个万年历的设计,能进行阴阳历转换,基于52单片机和LCD1602液晶显示屏,各位大哥大姐,谁帮帮我呀?我真的很感谢!在线等,有代码最好呀,先谢谢了!!!
2012-05-11 00:06:40
单片机万年历设计(含程序和原理图以及PCB文件)
单片机万年历设计(含程序和原理图以及PCB文件),尽供学习哦。https://www.elecfans.com/soft/33/2008/200807215380.html
2014-10-30 14:10:34
单片机多功能万年历学习合集
】纯手工打造摇摆LED时钟——原理图+程序1. 添加时钟IC,使显时更精准,而且不怕掉电;2. 加装位置传感器,增加显示的稳定性;3. 增添摇控功能,使调整更方便。 数字万年历制作相关资料整理 LCD12864的电子日历
2012-11-13 17:07:34
使用51单片机自制电子万年历(包含驱动、基本万年历、闹钟、日程、修改时间等)精选资料分享
归档51单片机制作电子万年历,以及proteus仿真电路图,本设计涵盖蜂鸣器、uart、timer、矩阵扫描、lcd1602显示、基本万年历(年/月/日/时/分/秒)、闹钟、日程、修改时间和小游戏等各项功能,基本上覆盖使用了51单片机内部所有资源。
2021-07-22 06:53:11
基于51单片机汇编语言的数字钟课程设计报告(含有闹钟万年历) PDF文档
多功能数字钟,利用汇编语言实现了大部分学校单片机课程设计数字钟的要求功能,如报时,闹钟,万年历,生日提醒等,所有项目都是可预置的,还有一些附带功能,课程设计题目源于李群芳版单片机课本(绿皮的),对本设计有不懂的地方,可以在我的百度主页留言.附件下载:
2011-02-18 16:10:32
基于51单片机液晶万年历设计 精选资料推荐
、闹钟等功能。该电子万年历主要采用STC89C52单片机作为主控核心,用DS1302时钟芯片作为时钟、液晶12864显示屏显示。STC89C52单片机是由宏晶公司推出的,功耗小,电压可选用4~6V电压供电...
2021-07-19 08:04:59
基于LCD液晶显示的电子万年历设计
谁有“基于51单片机的LCD液晶显示的电子万年历”的仿真及程序啊,。。我的毕业设计就是做个,但是我有好多不懂,还请各位大神帮下忙啊,,,,
2013-05-13 16:56:34
基于单片机的万年历
想做一个基于单片机的万年历系统,时钟芯片为ds1302,max7219驱动八位数码管,动态显示年月日,时分秒,哪位大神会此c语言程序啊,,有7219的驱动也行啊,,,,
2013-06-27 11:54:37
基于C51单片机的万年历设计
单片机C51设计万年历注:该程序基于普中科技C51 V2.2开发板设计,库函数和硬件资料均来自普中科技,侵删。main.c大部分为原创,如有雷同,纯属巧合。名称:C51万年历。硬件:以C51芯片为
2021-07-21 09:07:20
基于FPGA的verilog万年历程序_万年历设计_明德扬资料
万年历工程说明在FPGA设计中,数字万年历属于小规模集成电路。从原理上来讲,是典型的数字电路,包括组合逻辑电路和时序电路。基于FPGA开发除设计简便、开发成本低、电路简洁等,更具备功能设计灵活方面
2017-08-02 18:05:06
基于stc89c58的万年历设计 精选资料分享
小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用STC90C516RD+单片机作为核心,功耗小,能在3V的低压工作,电压...
2021-07-20 06:30:34
如何去实现一种基于51单片机的电子时钟万年历设计
、时、分、秒进行计时,还具有闰年补偿等多种功能。温度采集选用DS18B20芯片,万年历采用直观的数字显示,数据显示采用1602A液晶显示模块,可以在LCD上同时显示年、月、日、星期、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁。硬件框图:(1)用4个按键实现所有功
2021-11-10 08:12:17
如何在51单片机实现电子万年历 精选资料分享
51单片机制作万年历的基本功能部分,软件特性可以在proteus上仿真,使用51单片机定时器T0做万年历计时信号源,电子万年历计时系统在timer模块,本模块主要是将年/月/日/星期/时/分/秒等
2021-07-19 07:44:08
我的万年历DS1302,LCD1602,火热更新中(有protel仿真)
刚学单片机,准备参加大学生电子竞赛,这是昨天写的万年历~大家互相学习了。。。。(我的万年历DS1302,LCD1602)
2012-07-23 01:03:29
求~利用PIC单片机设计并实现一个万年历的C程序
利用PIC16F877单片机设计并实现一个万年历,显示年、月、日、时、分、秒、星期等,要求能预置计时起点。就是这个,一简单的C程序~ 谢谢了~
2013-10-08 20:10:52
求一种基于STC89C52单片机的电子万年历设计方案
基于STC89C52单片机的电子万年历是由哪些部分组成的?基于STC89C52单片机的电子万年历具有哪些功能?怎样去设计一种基于STC89C52单片机的电子万年历?
2021-07-19 08:29:23
用8086来实现51单片机设计的功能,如设计电子万年历
用8086来实现51单片机设计的功能,如设计电子万年历,现在论坛中主要都用51单片机来实现,没有见过80806实现,所以哪位大神给个。
2012-06-11 14:57:01
电子万年历设计
基于STC51单片机的电子万年历,有多个595级联,有呼吸灯设计,60个LED秒灯,按键调整,含闹钟功能,闹钟数据掉电自动保存在单片机内部EEPROM中,希望对51单片机爱好者有帮助。
2013-08-08 10:44:11
跪求 基于单片机的万年历设计
基于单片机的万年历设计拟实现的基本功能:(1)可显示公历年、月、日和时、分、秒。(时钟芯片DS1302)(2)可显示公历所对应的农历年、月、日。(3)具有较高的精确度,一年的误差为1s以下。(4
2016-01-07 10:17:34
评论
查看更多