当前位置:文档之家› 单片机制作数字钟(含万年历、秒表功能)

单片机制作数字钟(含万年历、秒表功能)

单片机制作数字钟(含万年历、秒表功能)
单片机制作数字钟(含万年历、秒表功能)

数字钟、万年历制作(基于单片机)

电路原理图:

程序://********************20131206****数字钟程序

#pragma SMALL

#include

#include

#include

//********************************************************* *********编译预处理

void display(unsigned char *p); //显示函数,P为显示数据首地址unsigned char keytest(); //按键检测函数

unsigned char search(); //按键识别函数

void alarm(); //闹钟判断启动函数

void ftion0(); //始终修改函数

void ftion1(); //闹钟修改函数

void ftion3(); //日期修改函数

void cum(); //加1修改函数

void minus(); //减1修改函数

void jinzhi(); //进制修改函数

void riqi(); //日期

void stopwatch(); //秒表函数

//********************************************************* *******函数声明

sbit P2_7=P2^7;

//********************************************************* *******端口定义

unsigned char clockbuf[3]={0,0,0};

unsigned char bellbuf[3]={0,0,0};

unsigned char date[3]={1,1,1}; //日期存放数组

unsigned char stop[3]={0,0,0};

unsigned char msec1,msec2;

unsigned char timdata,rtimdata,dtimdata;

unsigned char count;

unsigned char *dis_p;

unsigned char or; //12进制控制标志

unsigned char ri; //日期显示控制标志位

unsigned char mb; //秒表控制标志位

bit arm,rtim,rhour,rmin,hour,min,sec,day,mon,year; //定义位变量

//********************************************************* *****全局变量定义

void main()

{

unsigned char a;

or=0; //12进制修改标志清零

ri=0;

mb=0;

P2_7=0;

arm=0;

msec1=0;

msec2=0;

timdata=0;

rtimdata=0;

count=0;

TMOD=0x12;

TL0=0x06;

TH0=0x06;

TH1=(65536-10000)/256;

TL1=(65536-10000)%256;

EA=1;

ET0=1;

ET1=1;

TR0=1;

TR1=0;

dis_p=clockbuf;

while(1)

{

a=keytest();

if(a==0x78) //判断是否有键按下{

display(dis_p);

if(arm==1) alarm();

}

else

{

display(dis_p);

a=keytest();

if(a!=0x78)

{

a=search();

switch(a)

{

case 0x00:ftion0();break;

case 0x01:ftion1();break;

case 0x02:cum();break;

case 0x06:jinzhi();break;

case 0x03:riqi();break;

case 0x04:ftion3();break;

case 0x05:minus();break;

case 0x07:stopwatch();break;

case 0x09:TR1=1;break;

case 0x0a:TR1=0;break;

case 0x0b:stop[0]=0;stop[1]=0;stop[2]=0;break;

default:break;

}

}

}

}

}

//********************************************主函数【完】void display(unsigned char *p)

{

unsigned char buffer[]={0,0,0,0,0,0};

unsigned char k,i,j,m,temp;

unsigned char led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

buffer[0]=p[0]/10;

buffer[1]=p[0]%10;

buffer[2]=p[1]/10;

buffer[3]=p[1]%10;

buffer[4]=p[2]/10;

buffer[5]=p[2]%10;

if((sec==0)&&(min==0)&&(hour==0)&&(rmin==0)&&(rhour==0)&&( day==0)&&(mon==0)&&(year==0)) //没有修改标志,正常显示{

for(k=0;k<3;k++)

{

temp=0x01;

for(i=0;i<6;i++)

{

P0=0x00; //段选端口

j=buffer[i];

P0=led[j];

P1=~temp; //位选端口

temp<<=1;

for(m=0;m<200;m++);

}

}

}

else //若有修改标志,则按以下标志分别显示{

if(sec==1||day==1)

{

P1=0x1f;

i=buffer[5];

P0=led[i];

for(m=0;m<200;m++);

P1=0x2f;

j=buffer[4];

P0=led[j];

for(m=0;m<200;m++);

}

if(min==1||rmin==1||mon==1)

{

P1=0x3b;

i=buffer[2];

P0=led[i];

for(m=0;m<200;m++);

P1=0x37;

j=buffer[3];

P0=led[j];

for(m=0;m<200;m++);

}

if(hour==1||rhour==1||year==1) {

P1=0x3e;

i=buffer[0];

P0=led[i];

for(m=0;m<200;m++);

P1=0x3d;

j=buffer[1];

P0=led[j];

for(m=0;m<200;m++);

}

}

}

//**********************************LED显示函数【完】unsigned char keytest()

{

unsigned char c;

P2=0x78; //检测是否有键按下

c=P2;

c=c&0x78;

return(c);

}

//******************************************键盘检测函数【完】unsigned char search()

{

unsigned char a,b,c,d,e;

c=0x3f;

a=0; //行号

while(1)

{

P2=c;

d=P2;

d=d&0x07;

if(d==0x03){b=0;break;} //列号

else if(d==0x05){b=1;break;}

else if(d==0x06){b=2;break;}

a++;

c>>=1;

if(a==5){a=0;c=0x3f;}

}

e=a*3+b;

do{display(dis_p);}

while((d=keytest())!=0x78);

return(e);

}

//***********************************************查键值函数【完】

void alarm()

{

if((clockbuf[0]==bellbuf[0])&&(clockbuf[1]==bellbuf[1]))

{

P2_7=1;

rtim=1;

if(count==10)

{

count=0;

P2_7=0;

arm=0;

rtim=0;

}

}

}

//****************************************闹钟判断启动函数【完】

void ftion0()

{

TR0=0;

rhour=0;

rmin=0;

dis_p=clockbuf;

rtimdata=0;

timdata++;

switch(timdata)

{

case 0x01:sec=1;break;

case 0x02:sec=0;min=1;break;

case 0x03:min=0;hour=1;break;

case 0x04:timdata=0;hour=0;TR0=1;break;

default:break;

}

}

//*********************************************时钟设置函数【完】

void ftion1()

{

if(TR0==0) TR0=1;

sec=0;

min=0;

hour=0;

dis_p=bellbuf;

timdata=0;

rtimdata++;

switch(rtimdata)

{

case 0x01:rmin=1;break;

case 0x02:rmin=0;rhour=1;break;

case 0x03:rtimdata=0;rhour=0;arm=1;dis_p=clockbuf;break;

default:break;

}

}

//*********************************************闹钟设置函数【完】

void ftion3()

{

if(TR0==0) TR0=1;

day=0;

mon=0;

year=0;

dis_p=date;

timdata=0;

rtimdata=0;

dtimdata++;

switch(dtimdata)

{

case 0x01:day=1;break;

case 0x02:day=0;mon=1;break;

case 0x03:mon=0;year=1;break;

case 0x04:dtimdata=0;year=0;dis_p=clockbuf;break;

default:break;

}

}

//*************************************************日期修改函数【完】

void minus()

{

if(sec==1)

{

if(0==clockbuf[2]) clockbuf[2]=59;

else clockbuf[2]--;

}

else if(min==1)

{

if(0==clockbuf[1]) clockbuf[1]=59;

else clockbuf[1]--;

}

else if(hour==1)

{

if(or==0) //判断进制

{

if(0==clockbuf[0]) clockbuf[0]=23;

else clockbuf[0]--;

}

if(or==1)

{

if(1==clockbuf[0]) clockbuf[0]=12;

else clockbuf[0]--;

}

}

else if(rmin==1)

{

if(bellbuf[1]==0) bellbuf[1]=59;

else bellbuf[1]--;

}

else if(rhour==1)

{

if(or==0)

{

if(bellbuf[0]==0) bellbuf[0]=23;

else bellbuf[0]--;

}

if(or==1)

{

if(bellbuf[0]==1) bellbuf[0]=12;

else bellbuf[0]--;

}

}

else if(day==1)

{

if(date[2]==1) date[2]=31;

else date[2]--;

}

else if(mon==1)

{

if(date[1]==1) date[1]=12;

else date[1]--;

}

else if(year==1)

{

if(date[0]==1) date[0]=99;

else date[0]--;

}

}

//*************************************减1修改功能函数【完】void cum()

{

if(sec==1)

{

if(59==clockbuf[2]) clockbuf[2]=0;

else clockbuf[2]++;

}

else if(min==1)

{

if(59==clockbuf[1]) clockbuf[1]=0;

else clockbuf[1]++;

}

else if(hour==1)

{

if(or==0) //判断进制{

if(23==clockbuf[0]) clockbuf[0]=0;

else clockbuf[0]++;

}

if(or==1)

{

if(12==clockbuf[0]) clockbuf[0]=1;

else clockbuf[0]++;

}

}

else if(rmin==1)

{

if(bellbuf[1]==59) bellbuf[1]=0;

else bellbuf[1]++;

}

else if(rhour==1)

{

if(or==0)

{

if(bellbuf[0]==23) bellbuf[0]=0;

else bellbuf[0]++;

}

if(or==1)

{

if(bellbuf[0]==12) bellbuf[0]=1;

else bellbuf[0]++;

}

}

else if(day==1)

{

if(date[2]==31) date[2]=1;

else date[2]++;

}

else if(mon==1)

{

if(date[1]==12) date[1]=1;

else date[1]++;

}

else if(year==1)

{

if(date[0]==99) date[0]=0;

else date[0]++;

}

}

//*************************************加1修改功能函数【完】void jinzhi()

{

if(or==0) or=1;

else or=0;

}

//***********************************进制修改控制函数【完】void riqi()

{

if(ri==0)

{

dis_p=date;

}

if(ri==1)

{

dis_p=clockbuf;

}

ri++;

if(ri==2) ri=0;

}

//********************************日期控显示函数【完】void stopwatch()

{

if(mb==0)

{

dis_p=stop;

mb=1;

}

else

{

基于51单片机的万年历的设计

单片机课程实训SCM PRACTICAL TRAINING

目录 第一部分课程设计任务书 (1) 一、课程设计题目 (1) 二、课程设计时间 (1) 三、实训提交方式 (1) 四、设计要求 (1) 第二部分课程设计报告 (2) 一、单片机发展概况 (2) 二、MCS-51单片机系统简介 (2) 三、设计思想 (3) 四、硬件电路设计 (3) 1. 总体设计 (3) 2. 晶振电路 (4) 3. 复位电路 (4) 4. DS1302时钟电路 (5) 5. 温度采集系统电路 (5) 6. 按键调整电路 (6) 7. 闹钟提示电路 (6) 五、软件设计框图 (7) 六、程序源代码 (8) 1. 主程序 (8) 2. 温度控制程序 (11) 3. 日历设置程序 (13) 4. 时钟控制程序 (18) 5. 显示设置程序 (20) 七、结束语 (23) 八、课程设计小组分工 (23) 九、参考文献 (23)

第一部分课程设计任务书 一、课程设计题目 用中小规模集成芯片设计制作万年历。 二、课程设计时间 五天 三、实训提交方式 提交实训设计报告电子版与纸质版 四、设计要求 (1)显示年、月、日、时、分、秒和星期,并有相应的农历显示。(2)可通过键盘自动调整时间。 (3)具有闹钟功能。 (4)能够显示环境温度,误差小于±1℃ (5)计时精度:月误差小于20秒。

第二部分课程设计报告 一、单片机发展概况 单片机诞生于20世纪70年代末,它的发展史大致可分为三个阶段: 第一阶段(1976-1978):初级单片机微处理阶段。该时期的单片机具有 8 位CPU,并行 I/O 端口、8 位时序同步计数器,寻址范围 4KB,但是没有串行口。 第二阶段(1978-1982):高性能单片机微机处理阶段,该时期的单片机具有I/O 串行端口,有多级中断处理系统,15 位时序同步技术器,RAM、ROM 容量加大,寻址范围可达 64KB。 第三阶段(1982-至今)位单片机微处理改良型及 16 位单片机微处理阶段民用电子产品、计算机系统中的部件控制器、智能仪器仪表、工业测控、网络与通信的职能接口、军工领域、办公自动化、集散控制系统、并行多机处理系统和局域网络系统。 二、MCS-51单片机系统简介 MCS-51系列单片机产品都是以Intel公司最早的典型产品8051为核心构成的。MCS-51单片机由CPU 、RAM 、ROM 、I/O接口、定时器/计数器、中断系统、内部总线等部件组成。8051单片机的基本性能有: ◆8位CPU; ◆布尔代数处理器,具有位寻址能力; ◆128B内部RAM,21个专用寄存器; ◆4KB内部掩膜ROM; ◆2个16位可编程二进制加1定时器/计数器; ◆32个(4×8位)双向可独立寻址的I/O口; ◆1个全双工UART(异步串行通信口); ◆5个中断源,两级中断结构; ◆片内振荡器及时钟电路,晶振频率为1.2MHz~12MHz; ◆外部程序/数据存储器寻址空间均为64KB; ◆111条指令,大部分为单字节指令; ◆单一+5V电源供电,双列直插40引脚DIP封装。

单片机万年历C语言程序完整

#include #include //#include "LCD1602.h" //#include "DS1302.h" #define uint unsigned int #define uchar unsigned char sbit DS1302_CLK = P1^7; //实时时钟时钟线引脚 sbit DS1302_IO = P1^6; //实时时钟数据线引脚 sbit DS1302_RST = P1^5; //实时时钟复位线引脚 sbit ACC0 = ACC^0; sbit ACC7 = ACC^7; char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒,分,时到日,月,年位闪的计数 sbit Set = P2^0; //模式切换键 sbit Up = P2^1; //加法按钮 sbit Down = P2^2; //减法按钮 sbit out = P2^3; //立刻跳出调整模式按钮 sbit DQ = P3^0; char done,count,temp,flag,up_flag,down_flag,t_value; uchar TempBuffer[5],week_value[2]; void show_time(); //液晶显示程序 /***********1602液晶显示部分子程序****************/ //Port Definitions********************************************************** sbit LcdRs = P2^5; sbit LcdRw = P2^6; sbit LcdEn = P2^7; sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口 //内部等待函数************************************************************** unsigned char LCD_Wait(void) { LcdRs=0; LcdRw=1; _nop_(); LcdEn=1; _nop_(); LcdEn=0; return DBPort; } //向LCD写入命令或数据************************************** #define LCD_COMMAND 0 // Command

基于单片机的数字电子钟万年历课程设计

汇编语言 课程设计报告书 一.课程设计的题目和内容 用汇编语言编写一个万年历程序系统,该系统要有进入系统的封面,要有验证用户名和密码的功能,能正确显示万年历,在推出系统的时候,要有封底。 二.系统设计及功能要求 1.系统封面设计 内容:题目名称,设计日期,设计者姓名。 要求:具有动感,如题目名称移动;字体具有立体感。可插入一些图画,如学校的校徽图。 2.输入画面设计 内容及要求:①密码及口令:输入,核查及修改功能。②年份:输入及判断功能。如:年份值是否为4位整数,不为4位,提示用户重输。 3.日历计算功能设计 ①求某年某月某日是星期几的子功能。(要求编成子程序) 算法:s=(y-1)+(y-1)/4-(y-1)/100+(y-1)/400+c (其中:y为年份;c为某月某日是这一年的第几天,由②求出;s为总天数。“/”为整除。) n=s%7 (其中:n为星期数;“%”为求余数)

②求某月某日是这一年的第几天的子功能。(要求编成子程序) 二月份是否为平年(28天)或闰年(29天)的算法: y/400=0∨y/4=0∧y/100≠0 (y为年份;“/”整除),则y为以闰年;否则,y为平年。 根据①②可求出一年中的日历。 4.日历输出功能设计。 ①格式及显示设计 显示要求:设置显示滚动区;在该区中每次显示4个月的日历(并列排列)。 ②日历打印设计:将日历按年存入磁盘不同的文件中保存,供打印或 再次显示使用。 1.程序系统总体功能模块调用图及模块功能说明 封面程序的功能是显示欢迎信息,并且显示制 作人的信息的;验证用户名和密码的程序是验证用 户是否是合法的用户的,该程序要有容错的功能; 万年历程序是主程序,该程序的功能是通过用户输 入年和月,来查询日历的,并且该程序还可以判断 输入的年份是平年还是闰年。封底程序是用来显示 用户退出万年历系统的时候,一个感谢用户使用万 年历的界面的。

基于51单片机电子万年历设计

基于51单片机电子万年历设计 专业:机电设备维修与管理姓名:杜洪浦指导老师: 摘要电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分和秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3到5V电压供电。 万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,液晶显示电路,复位电路,时钟电路,稳压电路电路以及串口下载电路等组成。在单片机的选择上使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用液晶LCD1602。软件方面主要包括日历程序、液晶驱动程序,显示程序等。程序采用汇编语言编写。所有程序编写完成后,在Keil C51软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。 关键词时钟电钟,DS1302,液晶LCD1602,单片机 目录 1设计要求与方案论证 (2) 1.1 设计要求 (2) 1.2 系统基本方案选择和论证 (2) 1.2.1单片机芯片的选择方案和论证 (2) 1.2.2 显示模块选择方案和论证 (3) 1.2.3时钟芯片的选择方案和论证: (3) 1.3 电路设计最终方案决定 (3) 2系统的硬件设计与实现 (3) 2.1 电路设计框图 (4) 2.2 系统硬件概述 (4) 2.3 主要单元电路的设计 (4) 2.3.1单片机主控制模块的设计 (4)

基于单片机电子万年历的毕业设计说明

单片机课程设计报告 电子万年历设计 姓名:建强 学号: 专业班级: 08电气(2)班指导老师:吴永 所在学院:科技学院 2011年6月30日

摘要 随着科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。 具体实现功能: (1)显示年月日时分秒及星期信息 (2)具有可调整日期和时间功能 (3)与即时时间同步

目录 1方案论证 (3) 1.1单片机芯片的选择方案和论证 (3) 1.2显示模块选择方案和论证 (3) 1.3时钟芯片的选择方案和论证 (4) 1.4电路设计最终方案决定 (4) 2系统的硬件设计与实现 (5) 2.1电路设计框图 (5) 2.2系统硬件概述 (5) 2.3主要单元电路的设计 (5) 2.3.1单片机主控制模块的设计 (5) 2.3.2时钟电路模块的设计 (6) 2.3.3电路原理及说明 (7) 2.3.4显示模块的设计 (8) 3系统的软件设计 (9) 3.1程序流程框图 (9) 4测试与结果分析 (11) 4.1硬件测试 (10) 4.2软件测试 (10) 4.3测试结果分析与结论 (10) 4.3.1 测试结果分析 (10) 4.3.2 测试结论 (10) 5prodeus软件仿真........................................ ..........错误!未定义书签。 5.1Proteus ISIS简介 (12) 5.2Proteus运行流程 (13) 5.3Proteus功能仿真 (13) 6课程设计总结与体会.......................................... .....错误!未定义书签。 参考文献...........................................................错误!未定义书签。 附录一:系统电路图.................................................错误!未定义书签。 附录二:系统程序...................................................错误!未定义书签。

基于单片机的万年历实习报告

基于单片机的万年历实习报告

————————————————————————————————作者: ————————————————————————————————日期:

桂林理工大学信息科学与工程学院“电子系统设计创新与实践” 课程设计(实习)报告 题目: 具有温湿度测量功能的万年历设计专业(方向):电子信息工程 班级:电信二班 指导老师:蒋存波

2016年3月27日 目次 1. 绪论----------------------------------------------- 1 2. 总体设计方案--------------------------------------- 2 2.1 技术方案比较----------------------------------- -- 2 2.2总体技术方案------------------------------------- 3 3.硬件系统设计---------------------------------------- 4 3.1 硬件总体原理框图--------------------------------- 4

3.2关键元件介绍-------------------------------------- 4 3.2.1 LCD602显示屏-------------------------------- 4 3.2.3 DS1302时钟芯片------------------------------ 7 3.2.2 SHT10温湿度感应器--------------------------- 9 3.3 硬件设计------------------------------------------ 10 3.3.1 复位电路设计-------------------------------- 10 3.3.2晶振电路设计-------------------------------- 10 3.3.3 时钟芯片电路设计---------------------------- 10 3.3.4 温湿度感应器模块电路设计-------------------- 11 3.3.5按键模块电路设计---------------------------- 11 3.3.6 LCD1602显示模块电路设计--------------------- 11 3.3.7 电量检测报警电路设计------------------------- 12 3.3.8 蜂鸣器报警电路设计--------------------------12 3.3.6 总体电路原理图------------------------------- 12 4. 软件系统设计------------------------------------------13 4.1 软件功能设计-------------------------------------- 13 4.2 程序设计总体方案----------------------------------13 4.2.1 总体设计思路--------------------------------- 13

基于单片机的具有温度指示的数字万年历设计

目录 1 绪论 (1) 2 总体设计方案 (2) 2.1设计思路 (2) 2.2设计方案 (2) 2.3方案比较论证 (2) 2.4总体设计方框图 (3) 3 设计原理与分析 (4) 3.1硬件电路主要芯片的功能介绍 (4) 3.1.1单片机主控制器 (4) 3.1.2 温度传感器芯片 (5) 3.1.3 时钟芯片DS1302 (9) 3.1.4 16*2LCD液晶显示1602 (12) 4 硬件电路 (15) 4.1单片机主控制模块的设计 (15) 4.2时钟电路模块的设计 (15) 4.3温度采集模块设计 (16) 4.4功能按钮设计 (16) 4.516*2LCD1602液晶显示电路设计 (17) 4.6总体电路图 (17) 5 系统软件设计 (18) 5.1系统模块的功能分划分 (18) 5.2总体程序流程框图 (18) 5.3时钟调整时间的流程图 (20) 5.4修改键“UP”的功能流程图 (21) 5.5温度转换流程图 (22) 6 系统仿真测试 (23) 6.1KEIL的使用 (23) 6.2P ROTUES软件仿真 (28) 致谢 (31) 参考文献 (32) 附录一总体电路的PCB板图 (33) 附录二设计电路的仿真电路图 (34) 附录二万年历源程序 (35)

1 绪论 随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。由其是单片机技术的应用产品已经走进了千家万户。其中电子万年历就是一个典型的例子。而且在万年历的基础上还可以扩展其它的实用功能,比如温度计。 万年历是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。因此,研究万年历及扩大其应用,有着非常现实的意义。 市场上有许多电子钟的专用芯片如:LM8363、LM8365等,但它们功能单一,电路连接复杂,不便于调试制作。但是考虑到用单片机配合时钟芯片,可制成功能任意的电子钟,而且可以做到硬件简单、成本低廉。所以本系统采用了以广泛使用的单片机AT89S52技术为核心,配合时钟芯片DS1302。软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LCD显示电路、键盘电路,使人机交互简便易行,此外结合音乐闹铃电路、看门狗和供电电路。本方案设计出的数字钟可以显示时间、设置闹铃功能之外。 本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。本设计以数字集成电路技术为基础,单片机技术为核心。本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。 本设计中我重点研究实现了单片机+时钟芯片这种模式的万年历,从原理上对单片机和时钟芯片有了深一步的认识,这些基本功能完成后,在软件基础上实现时间显示。

单片机课程设计--基于51单片机的万年历

单片机课程设计报告 万年历的设计

基于51单片机的万年历 摘要: 电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分、秒进行计时,使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,LCD显示电路,以及调时按键电路等组成。在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用了1602液晶显示,并且使用蜂鸣器实现了整点报警的功能,温度测试的功能实现使用了DS18B20,并实现了温度过高或过低时的温度报警。 软件方面主要包括日历程序、时间调整程序,显示程序等。程序采用C语言编写。所有程序编写完成后,在KeilC51软件中进行调试,

确定没有问题后,在Proteus软件中嵌入单片机内进行仿真,并最终实现基本要求。 综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 一、设计要求 基本要求: 1,8 个数码管上显示,显示时间的格式为(假如当前时间是19:32:20)“19-32-20”; 2,具有日历功能; ③时间可以通过按键调整。 发挥部分: ④具有闹钟功能(可以设定多个)。 二:总体设计 电路设计框图

基于AT89C51单片机的电子万年历的设计_课程设计报告

课程设计报告 设计名称:电子万年历设计 专业班级:自动化10101班 完成时间:2013年6月9日 报告成绩:

摘要 本文介绍了基于AT89C51单片机的多功能电子万年历的硬件结构和软硬件设计方法。系统以AT89C51单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。万年历采用直观的数字显示,可以在LED上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。 关键字AT89C51;电子万年历; DS1302

1 绪论 1.1 课题研究的背景 随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89C51单片机作为核心,功耗小,能在3V 的低压工作,电压可选用3~5V电压供电。 此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 1.2课题的研究目的与意义 二十一世纪是数字化技术高速发展的时代,而单片机在数字化高速发展的时代扮演着极为重要的角色。电子万年历的开发与研究在信息化时代的今天亦是当务之急,因为它应用在学校、机关、企业、部队等单位礼堂、训练场地、教学室、公共场地等场合,可以说遍及人们生活的每一个角落。所以说电子万年历的开发是国家之所需,社会之所需,人民之所需。 由于社会对信息交换不断提高的要求及高新技术的逐步发展,促使电子万年历发展并且投入市场得到广泛应用。 1.3课题解决的主要内容 本课题所研究的电子万年历是单片机控制技术的一个具体应用,主要研究内容包括以下几个方面: (1)选用电子万年历芯片时,应重点考虑功能实在、使用方便、单片存储、低功耗、抗断电的器件。 (2)根据选用的电子万年历芯片设计外围电路和单片机的接口电路。 (3)在硬件设计时,结构要尽量简单实用、易于实现,使系统电路尽量简单。 (4)根据设计的硬件电路,编写控制AT89C51芯片的单片机程序。 (5)通过编程、编译、调试,把程序下载到单片机上运行,并实现本设计的功能。 (6)在硬件电路和软件程序设计时,主要考虑提高人机界面的友好性,方便用户操作等因素。 (7)软件设计时必须要有完善的思路,要做到程序简单,调试方便。

基于单片机的电子万年历设计

(1)封面 (2)开题报告 (3)中文摘要及关键词 (4)英(外)文摘要及关键词 (5)正文 (6)(附录) (7)参考文献 (8)致谢 摘要 单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。单片机是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 本文通过对一个基于单片机的能实现万年历功能电子时钟的设计,从而达到学习、了解单片机相关指令在各方面的应用。系统由主控制器AT89C51、时钟电路DS1302、显示电路、按键电路、和复位电路等部分构成,能实现时钟日历显示的功能,能进行时、分、秒的显示。

关键词: 单片机, 农历查询, 万年历 Abstract SCM application technology develop rapidly, looking around us now in all spheres of life, from missiles, navigation equipment, to the various instruments on the aircraft control from a computer network communications and data transmission, industrial automation to real-time process control and data processing, and our lives extensive use of the smart card, electronic pets, which is inseparable from the microcontroller. Monolithic single-chip is the set of CPU, RAM, ROM, the timing, number and variety of interface integrated microcontrollers. Its small size, low cost, high performance, which are widely used in smart industries, and industrial automation. And 51 Series SCM is the most typical and the most representative one. The graduation design Through the study, and thereby achieve the study, design, development hardware and software capabilities. Based on a microcontroller based on the will to achieve calendar of a multi-functional electronic clock design,Thereby achieve studying and understanding the relevant directives SCM in all aspects of the application. By main control AT89C51、clock circuit DS1302、display circuit、keystroke circuit and restore circuit componented, to achieve clock calendar display function can be carried out, hours

基于单片机的电子万年历设计

基于单片机的电子万年历设计 摘要:本文借助电路仿真软件Protues对基于AT89S52单片机的电子万年历的设计方法及仿真进行了全面的阐述。该电子万年历在硬件方面主要采用AT89S52单片机作为主控核心,由DS1302时钟芯片提供时钟、12864LCD液晶显示屏显示。在软件方面,主要包括日历程序、时间调整程序,显示程序等。所有程序编写完成后,在Keil软件中进行调试,确定没有问题后,在Proteus软件中进行电路设计并仿真。 论文主要研究了液晶显示器LCD及时钟芯片DS1302,温度传感器DS18B20与单片机之间的硬件互联及通信,对数种硬件连接方案进行了详尽的比较,在软件方面对日历算法也进行了论述。 研究结果表明,由于万年历的应用相当普遍,所以其设计的核心在于硬件成本的节约软件算法的优化,力求做到物美价廉,才能拥有更广阔的市场前景。关键词:单片机;DS1302;DS18B20;LCD12864 The Design Of Electronic Calender Based On MCU Abstract:This paper mainly discuss the design of electronic calender based on AT89S52 with the help of Protues.On the hardware side, the electronic calendar using AT89S52 microcontroller as the main control center, clock provided by the DS1302 clock chip , 12864LCDdot matrix LCD display. In terms of software, including calendar program, time to adjust procedures, display procedures. All programming is complete, the Keil software debugging, make sure there is no problem, in the Proteus software embedded within the simulated MCU. This article focus on liquid crystal screen LCD12864 and clock chip DS1302,temperature sensor DS18B20 which connected and communicated with Microcontroller.Several solutions will also compared with each other.On software side,calender calculation will be discussed as well. The results are as follows:as electronic calender are widely used in our daily life.It should be chip and convenient so as to win more profit.

单片机万年历程序..

单片机万年历程序 #include //调用单片机头文件 #define uchar unsigned char //无符号字符型宏定义变量范围0~255 #define uint unsigned int //无符号整型宏定义变量范围0~65535 #include "eeprom52.h" #include "nongli.h" bit flag_200ms ; bit flag_100ms ; sbit beep = P3^7; //蜂鸣器定义 bit flag_beep_en; uint clock_value; //用作闹钟用的 sbit dq = P3^1; //18b20 IO口的定义 uint temperature ; //温度变量 uchar flag_nl; //农历阳历显示标志位 uchar menu_1,menu_2; uchar key_time,flag_value; //用做连加的中间变量 bit key_500ms ; uchar n_nian,n_yue,n_ri; //农历显示的函数

#include "ds1302.h" #include "lcd1602.h" /******************把数据保存到单片机内部eeprom中******************/ void write_eeprom() { SectorErase(0x2000); byte_write(0x2000, fen1); byte_write(0x2001, shi1); byte_write(0x2002, open1); byte_write(0x2058, a_a); } /******************把数据从单片机内部eeprom中读出来*****************/ void read_eeprom() { fen1 = byte_read(0x2000); shi1 = byte_read(0x2001); open1 = byte_read(0x2002); a_a = byte_read(0x2058); } /**************开机自检eeprom初始化*****************/ void init_eeprom() { read_eeprom(); //先读 if(a_a != 1) //新的单片机初始单片机内问eeprom { fen1 = 3;

基于单片机C51的简单万年历设计

第十届学生科技节 -----单片机设计大赛 作品名称:万年历 专业:物联网 班级:1 指导老师:郑旭丹 组长:邓清兰学号:3112113111 组员:黄孟秋学号:3112113101

目录 一、绪论........................................... 0矚慫润厲钐瘗睞枥庑赖。 二、系统功能....................................... 0聞創沟燴鐺險爱氇谴净。 三、硬件电路....................................... 0残骛楼諍锩瀨濟溆塹籟。 3.1. 电路设计框图............................... 0酽锕极額閉镇桧猪訣锥。 3.2. 系统硬件概述............................... 1彈贸摄尔霁毙攬砖卤庑。 四、各模块功能及工作原理........................... 1謀荞抟箧飆鐸怼类蒋薔。 4.1. 单片机主控制模块的设计..................... 1厦礴恳蹒骈時盡继價骚。 4.2. LCD1602显示模块........................... 2茕桢广鳓鯡选块网羈泪。 4.3. 键盘模块................................... 5鹅娅尽損鹌惨歷茏鴛賴。 五、实现结果....................................... 8籟丛妈羥为贍偾蛏练淨。 六、系统的实用性及创新性........................... 9預頌圣鉉儐歲龈讶骅籴。 七、调节中遇到的问题及心得体会..................... 9渗釤呛俨匀谔鱉调硯錦。 八、程序设计...................................... 10铙誅卧泻噦圣骋贶頂廡。 8.1. 流程图.................................... 10擁締凤袜备訊顎轮烂蔷。 8.2. 源代码.................................... 11贓熱俣阃歲匱阊邺镓騷。 九、总结及感谢.................................... 23坛摶乡囂忏蒌鍥铃氈淚。

基于AT89C51单片机的多功能电子万年历的设计

. . .. . . 单片机应用系统设计 课题:基于AT89C51单片机的多功能电子万年 历的设计 姓名: 班级: 学号: 指导老师: 日期: .. .专

目录 一.绪言 (3) 二.系统总体方案设计 (3) 三.硬件系统设计: (4) 四.系统软件设计 (5) 五.设计总结 (8) 六.参考文献 (8) 七.附录 (9)

一.绪论 随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。由其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。 本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。 万年历是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。因此,研究万年历及扩大其应用,有着非常现实的意义。 本系统采用了以广泛使用的单片机技术为核心,软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LED显示电路、键盘电路,使人机交互简便易行。 二.系统总体方案设计 1.系统设计硬件框图 2.实现的基本原理 在本实验中,我引用了DS1302的时,分,秒功能,当时计数字24时通过74LS164给

单片机电子万年历课程设计报告书

单片机课程设计 姓名:吕长明 学号:04040804021 专业班级:机电四班

一、单片机原理及应用简介 随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术 的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机(Single-Chip Microcomputer)。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工 业控制系统、数据采集系统、自动测试系统、万年历电子表等。 二、系统硬件设计 8052 是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图图1: 图1 8052引脚 P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。 P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。 P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。 P3.0~P3.7 P2口8位双向口线(在引脚的10~17号端子)。 8052芯片管脚说明: VCC:供电电压。 GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用

于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如表1所示: 表1 特殊功能口 P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

51单片机实现万年历程序文件

51单片机实现万年历 利用AT89S52单片机的P0口来和另外几个口来控制1602液晶的显示和P1口还有其它口来控制ds12887时钟芯片。设置四个按键,1个定义为时间设置功能键,一个定义为闹钟设置功能键,另外两个用来调节时间的增减。 原理图: pcb图:

源程序: #include #define uint unsigned int #define uchar unsigned char sbit beep=P2^0;//蜂鸣器控制口 sbit timeadd=P2^1;//调节时间加 sbit timesub=P2^2;//调节时间减 sbit timeclk=P2^3;//闹钟设定键 sbit timefun=P2^4;//时间设定键 sbit lcdrs=P2^5;//液晶的命令和数据控制口 sbit ledrw=P2^6;//液晶的写数据口 sbit lcden=P2^7;//液晶显示模块的使能端 sbit timeds=P3^3;//时钟芯片地址闸 sbit timerw=P3^4;//时钟芯片读写 sbit timeas=P3^5;//时钟芯片地址闸 sbit timeen=P3^6;//时钟芯片片选 uchar code table[]="20 - - week "; uchar code table1[]=" : : ";//要显示的字符串 char num,shi,fen,miao,nian=2000,yue,ri,week,numfun,anumfun,flag,flag1; uchar leap;

void delay(uint x){ uchar i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } void didi() { beep=0; delay(1000); beep=1; delay(1000); } void write_(uchar ){ lcdrs=0; P0=; delay(5); lcden=1; delay(20); lcden=0; } void write_date(uchar date){ lcdrs=1; P0=date; delay(5); lcden=1; delay(20); lcden=0; } void write_sfm(uchar add,uchar date){ uchar shi,ge; shi=date/10; ge=date%10; write_(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); } void write_nyr(uchar add,uchar date){ uchar shi,ge; shi=date/10; ge=date%10;

相关主题
文本预览
相关文档 最新文档