您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 51单片机、数字钟、LCD显示年月日、闹钟、纪念日功能完整测试成功版
实现功能基于内部定时器的走时、调时、整点报时(蜂鸣器、LED)、3个闹钟设置,LCD显示时、分、秒、年、月、日、5个按键操作,添加纪念日功能。题目:单片机电子钟院(系):专业:学号:姓名:2011年11月11日摘要...关键词:单片机AT89C511602液晶显示器2.实验内容22.1电子钟的仿真及原理图原理图如下:2.2电子钟的PCB封装图32.3AT89C51的工作原理AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。3、功能特性概述:AT89C51提供以下标准功能:4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。43.1主要性能参数:·与MCS-51产品指令系统完全兼容·4k字节可重擦写Flash闪速存储器·1000次擦写周期·全静态操作:0Hz-24MHz·三级加密程序存储器·128×8字节内部RAM·32个可编程I/O口线·2个16位定时/计数器·6个中断源·可编程串行UART通道·低功耗空闲和掉电模式4、电子钟工作原理:利用51单片机内部定时计数器功能产生1S的计时,通过设定好的变量及函数分别按一定进制累加到时、分、秒、日、月、年上,通过按键扫描完成时间修改及闹钟设置,最后通过LCD1602显示时间,通过蜂鸣器及LED进行整点报时和闹钟报时。5、通用1602液晶介绍:56、电子钟源程序程序/*********************************************************************使用说明:K1键为菜单选项:单击→进入位选择修改;双击:修改;K2键为上调键;K3键为下调键;K4键为退出修改;K5键为闹钟时间设置键;按一次:闹钟一;两次:闹钟二;三次:闹钟三;四次:重置五次:纪念日**********************************************************************/#includereg51.h/********************************************************************位定义*********************************************************************/sbitRS=P2^0;//功能数据选择位sbitRW=P2^1;//读写选择位sbitE=P2^2;//使能位0sbitbusy=P0^7;//lcd忙标位sbitmenu=P1^0;//菜单及确定sbitinc=P1^1;//增一sbitdec=P1^2;//减一sbitquit=P1^3;//退出sbitsound=P1^4;//闹钟控制6/*********************************************************************全局变量**********************************************************************/unsignedchardatasec20,sec,min,hour,amin1,ahour1,amin2,ahour2,amin3,ahour3,temp,year1,year2,month,day,amonth,aday;//计秒,秒,分,时unsignedchardatatimebuf[]={0,0,0x3a,0,0,0x3a,0,0,0,0,0,0,0x2d,0,0,0x2d,0,0};//存放时间unsignedcharkey;//按键标志unsignedchartime=0;//记录按menu键的次数unsignedcharplace=0x84;//记录光标的位置unsignedcharsignal=0;//光标与时间值增减标志位//0光标1时间值/*********************************************************************函数申明**********************************************************************/voiddelay(unsignedcharms);//延时函数voidcbusy();//测试lcd忙碌状态函数voidwrcom(unsignedcharcmd);//写指令函数voidwrdat(unsignedchardat);//写数据函数voidlcdinit();//lcd初始化函数voidprotime();//时间处理函数voiddisplay();//时间显示函数unsignedcharscankey();//按键扫描voidkeywork();//按键功能处理函数voidnaoling1();voidnaoling2();voidnaoling3();/*********************************************************************延时函数**********************************************************************/voiddelay(unsignedcharms){unsignedchari;unsignedcharm=4;while(ms--){for(i=0;i20;i++)7{do{}while(m--);}}}/*********************************************************************测试lcd忙碌状态函数**********************************************************************/voidcbusy(){do{P0=0xff;RS=0;RW=1;E=0;E=0;busy=P0&0x80;E=1;}while(busy!=0);}/*********************************************************************写指令函数**********************************************************************/voidwrcom(unsignedcharcmd){P0=cmd;RS=0;RW=0;E=0;cbusy();E=1;}/*********************************************************************写数据函数**********************************************************************/voidwrdat(unsignedchardat){P0=dat;RS=1;8RW=0;E=0;cbusy();E=1;}/*********************************************************************lcd初始化函数**********************************************************************/voidlcdinit(){wrcom(0x01);//清屏wrcom(0x38);//8位总线,5*7点阵wrcom(0x14);//文字不动光标自动右移wrcom(0x0c);//开显示光标不显不闪}/*********************************************************************定时器0中断产生秒**********************************************************************/voidtime0()interrupt1/*定时中断0*/{TL0=0xb0;//定时50msTH0=0x3c;sec20++;//计数到一秒protime();}/*********************************************************************闹铃函数**********************************************************************/voidnaoling1(){amin1=min;ahour1=hour;}voidnaoling2(){amin2=min;ahour2=hour;9}voidnaoling3(){amin3=min;ahour3=hour;}/*********************************************************************时间处理函数**********************************************************************/voidprotime(){if(sec2019)//一秒到{sec20=0;sec++;}if(sec59){sec=0;min++;}if(min59){min=0;hour++;}if(hour23){hour=0;day++;}if(day31){day=0;month++;}if(month12){month=0;year2++;}timebuf[0]=sec%10+48;//时间数据更新timebuf[1]=sec/10+48;10timebuf[3]=min%10+48;timebuf[4]=min/10+48;timebuf[6]=hour%10+48;timebuf[7]=hour/10+48;timebuf[8]=year1/10+48;//时间数据更新timebuf[9]=year1%10+48;timebuf[10]=year2/10+48;//时间数据更新timebuf[11]=year2%10+48;timebuf[13]=month/10+48;timebuf[14]=month%10+48;timebuf[16]=day/10+48;timebuf[17]=day%10+48;display();/*if(min==0&&sec==0){sound=0;delay(1);sound=1;delay(1);sound=0;delay(1);sound=1;delay(1);sound=0;delay(1);sound=1;delay(1);}*/if(min==0&&sec==0||amin1==min&&ahour1==hour&&sec==0||amin2==min&&ahour2==hour&&sec==0||amin3==min&&ahour3==hour&&sec==0||aday==day&&amonth==month&&min
本文标题:51单片机、数字钟、LCD显示年月日、闹钟、纪念日功能完整测试成功版
链接地址:https://www.777doc.com/doc-5470385 .html