多功能数字钟的设计报告_第1页
多功能数字钟的设计报告_第2页
多功能数字钟的设计报告_第3页
多功能数字钟的设计报告_第4页
多功能数字钟的设计报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

多功能数字钟的设计报告一、设计内容内容:用单片机控制实现基本数字电子钟的设计,扩展了4X4键盘和4位LED数码显示器,可用于显示和按键控制。功能:能够显示时和分;可通过按键设置闹钟功能;可进行整点报时;可通过按键设置分校时。二、总体方案设计2.1功能分析数字电子钟系统可以分为主控制单元、复位电路、键盘电路、显示电路等。2.2各模块功能说明晶振电路的功能:每个单片机系统里都有晶振,全程是叫晶体震荡器,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。复位电路的功能:把电路初始化到一个确定的状态,一般来说,单片机复位电路作用是把一个例如状态机初始化到空状态,而在单片机内部,复位的时候单片机是把一些寄存器以及存储设备装入厂商预设的一个值。键盘电路:根据4×4矩阵键盘,它是用四条I/O线作为行线,四条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。实现按键控制闹钟,设置时间的功能。显示电路的功能:采用4位共阴极数码管驱动方式P2口相应的位置0

即选择要显示的数码管位,P0口相应的位置1即可显示相应的数码管段。负责显示时钟的时和分。三、硬件系统设计使用了Produce软件进行硬件原理图的仿真设计。部分电路如图所示:a.主控电路:80C51单片机b.晶振电路:89C51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反相振荡放大器的输入及内部时钟工作电路的输入和来自反相振荡器的输出,该反相放大器可以配置为片内振荡器。c.复位电路:采用上电复位,上电后,由于电容充电,使RST持续一段时间的高电平,从而实现上电复位操作。这不仅能使单片机复位,还能是单片机的外围设备同时复位,当程序出现错误时,可以随时使电路复位。d.键盘电路:当按键被按下时,相应的引脚被拉低,经扫描后,获得键值,并执行键功能程序,因此通过按下同一个键,将执行不同的功能程序。e.显示电路:主要是数码管显示数字电子钟的时和分。四、软件系统设计4.1程序总体流程图主函数的流程框图:先进行初始化设定初值,然后相关子程序的调用4.2主要模块程序流程1.调用中断服务子程序,循环次数++,因为定时时长为50ms,所以循环次数为20时,循环次数清0,秒++;秒为60时分加++,秒清0;分为60时,时++,分清0;时为24时,时清0,中断返回。2.先确认弹簧消抖是否有键按下,之后判断扫描按键,不同的按键触发不同功能。五、源代码部分代码展示:#include<reg51.h>#definetl0xba;

//宏定义tl赋初值#defineth0x3c;

//宏定义th赋初值sbitspeaker=P3^5;

//闹钟输出

蜂鸣器unsignedcharcodeled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//数码管显示的数字0-9的编码unsignedcharcount0,second,minit,hour;

//时间时分秒unsignedintsecond1,minit1,hour1;//闹钟时分秒//timenum1是调节时间的按键按下的次数//timenum2是调节闹钟的按键按下的次数//f1是否在设置闹钟//f2是否在设置时间unsignedchartimenum1,timenum2,f1,f2;unsignedintdsflg;unsignedchartemp;//延时子程序

代码烧路软件自动生成的voiddelay(void){unsignedinti;for(i=0;i<100;i++);}//50ms//数码管显示voiddisplay(void){P0=led[hour/10];//p0口送数据拆数显示,时的十位P2=0xFE;

//片选

P2.0delay();

//延时P2=0xFF;

//片选关P0=led[hour%10];

//p0口送数据拆数显示,时的个位P2=0xFD;

//P2.1delay();P2=0xFF;P0=led[minit/10];

//p0口送数据拆数显示,分的十位P2=0xFB;

//P2.2delay();P2=0xFF;P0=led[minit%10];

//p0口送数据拆数显示,分的个位P2=0xF7;

//P2.3delay();P2=0xFF;}//扫描按键voidkeyscan(){unsignedchartemp;P1=0xfe;

//给P1.0赋低电平temp=P1;temp=temp&0xf0;

//判断P1.0那一列是否有键按下if(temp!=0xf0)//确定有键按下的时候{delay1(10);

//延时子程序进行消抖temp=P1;temp=temp&0xf0;//再次判断p1.0那一列是否有键按下if(temp!=0xf0)

//确定有键按下{temp=P1;

//将P1的值给tempswitch(temp){case0xee:

//p1.4口timenum1++;

//标记++TR1=0;

//不启动T1,关闭蜂鸣器f2=0;

//进入调时间的状态if(timenum1==1||timenum2==1)

//如果timenum1==1调时{dsflg=0;

//正在调时间}if(timenum1==3)

如果timenum1==4退出{TR1=1;

//启动T1timenum1=0;

//将按键次数归零dsflg=1;

//退出调时间f2=1;

//退出调节时间}break;case0xde:

//p1.5口//调时间if(timenum1==1)

//如果timenum1==1调时{hour++;

//小时++}if(timenum1==2)

//如果timenum1==2调分{minit++;}//调闹钟if(timenum2==1)

//如果timenum2==1调时

闹钟{hour1++;

//小时++}if(timenum2==2)

//如果timenum2==2调分

闹钟{minit1++;}break;case0xbe:

//p1.6口speaker=1;

//蜂鸣器处于不响状态在设置时间的时候if(timenum1==1)

//如果timenum1==1调时{hour--;

//小时--}if(timenum1==2)

//如果timenum1==2调分{minit--;

//分钟--}//调闹钟if(timenum2==1)

//如果timenum2==1调时

闹钟{hour1--;

//小时--}if(timenum2==2)

//如果timenum2==2调分

闹钟{minit1--;}break;case0x7e://p1.7timenum2++;

//标记++f1=0;

//进入设置闹钟if(timenum2==1||timenum2==2)

//如果timenum2=1设定脑钟的小时{dsflg=0;

//正在调时间}if(timenum2==3)

//如果timenum2=3退出{timenum2=0;

//将按键次数归零dsflg=1;

//退出调时间f1=1;

//退出设置闹钟}break;}while(temp!=0xf0)

//判断按键是否弹起{temp=P1;temp=temp&0xf0;}}}}//按键控制时间设置voidKeykonzhi(){if(timenum1==1)

//如果timenum1==1调时{if(hour>23)

//限位{hour=0;}P0=led[hour/10];

//显示小时P2=0xFE;

//小时十位p2.0delay();P2=0xFF;P0=led[hour%10];//显示小时P2=0xFD;

//小时个位

p2.1delay();P2=0xFF;}if(timenum1==2)

如果timenum1==2调分

//以下也是和调时一样的方法{if(minit>59){minit=0;}P0=led[minit/10];P2=0xFB;

//分钟十位

p2.2delay();P2=0xFF;P0=led[minit%10];P2=0xF7;

//分钟个位

p2.3delay();P2=0xFF;}}//设置闹钟voidalmset(){timenum1=0;if(timenum2==1)

//如果timenum2==1设定闹钟的小时{if(hour1>23)

//限位{hour1=0;}P0=led[hour1/10];//小时显示

十位P2=0xFE;//p2.0delay();P2=0xFF;P0=led[hour1%10];P2=0xFD;//p2.1

小时个位显示delay();P2=0xFF;}if(timenum2==2)

//如果timenum2==2设定闹钟的分钟

和上面小时一样{if(minit1>59){minit1=0;}P0=led[minit1/10];//显示分钟十位P2=0xFB;//

p2.2delay();P2=0xFF;P0=led[minit1%10];//显示分钟个位P2=0xF7;//p2.3delay();P2=0xFF;}}//控制闹钟(闹钟到了设定时间就会响)voidalmkozi(){if((hour1==hour)&&(minit1==minit)&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论