单片机课程设计基于数码管的电子钟

上传人:1888****888 文档编号:37330152 上传时间:2021-11-02 格式:DOC 页数:25 大小:713.01KB
返回 下载 相关 举报
单片机课程设计基于数码管的电子钟_第1页
第1页 / 共25页
单片机课程设计基于数码管的电子钟_第2页
第2页 / 共25页
单片机课程设计基于数码管的电子钟_第3页
第3页 / 共25页
点击查看更多>>
资源描述
摘 要 AT89S52单片机是一款应用广泛、功能强大的八位单片机。本设计是由单片机AT89S52作为核心,通过单片机使电子钟具有调节显示时分秒的功能,电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示电子钟直观、无机械传动装置等优点。它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能。本设计在原来电子钟的基础上,增加了年月日显示、闹铃、整点提示等功能。使用时S8键为控制键,控制运行的调时,S4键为翻页查看键,S5、S6、S7键为调时状态下的控制键,分别为减一、加一、移格功能。关键词 电子钟;单片机;定时;闹铃;ABSTRACTAT89S52 SCM is a eight bit microcontroller of wided applicationan and powerful. Cores this design is by monolithic AT89S52 SCM . it has adjust display by that electric clock.electric clock is a device that use of digital circuit to display seconds, points and the timer. compare of the tradition, , display electric clock intuitive, no mechanical transmission device etc. its timing cycle be for 24 hour, the full scale is hour of 23,minutes of 59, second of 59, another reset function is also the function. The foundation of clock display year month day and other functions. S8 keys control tone. S4 keys scroll view. On the state of adjust, S5、S6、S7control functions of minus one,plus one, move lattice function. Key words :electronic clock; single-chip; timing; alarm目 录。1目 录31.1 设计课题任务41.2 功能要求说明41.3 总体方案介绍及工作原理42 硬件系统的设计62.1 系统各功能模块介绍62.1.2 键盘功能模块62.1.4 定时提示模块72.1.5 整时提示模块72.2 系统电路图7总原理图.总布局图.PCB图见附录(1)72.3 系统的元器件清单73 软件系统的设计83.1使用单片机资源介绍83.3.1 独立式键盘模块83.2.2 数码管显示模块83.2.3 整点提示、秒表模块83.4 软件系统的程序10软件系统的程序如附录(2)104 系统的仿真分析及结论114.1 系统设计的使用说明114.2 系统设计的仿真结果114.3 系统的误差分析124.4 设计体会12参考文献13致 谢13附录(1) 13附录(2) 151 系统总体设计方案1.1 设计课题任务设计一个具有特定功能的电子钟。1.2 功能要求说明 (1)、屏幕保护(P.显示);(2)、时、分、秒之间用“-”分割,年、月、日之间用“_”分割,定时时间用=分开;(3)、运行时按下s8键进入调时分秒状态,再按一次进入调年月日状态,再按一次进入调定时状态,调整状态时二极管全亮、调整单位闪烁;(4)、在运行状态下,按下s4键切换时分秒、年月日和定时时间的显示;(5)、在调整状态下,按s7键移动调整单位,每按一次移动一个单位,可调整时分秒、年月日和定时;(6)、整点提示功能:当时间为整时时,二极管交替显示4次;(7)、闹铃功能:当定时时间到时,闹铃会滴滴滴报警;(7)、附加功能:当在运行状态时,二极管循环移动.1.3 总体方案介绍及工作原理单片机控制原理图如图1.1所示。图1.1电子钟的总体功能原理是以AT89S52单片机为主要的控制核心,通过外接5个独立式键盘作为控制信号源,八个七段数码管作为显示器件,在数码管上显示出来,时通过不同的按键来观看和调节各种数据。2 硬件系统的设计2.1 系统各功能模块介绍2.1.1 AT89S52控制模块考虑到设计功能需要,控制器的功能用于外部键盘信号的接收和识别、数码管的显示控制,定时器应用等,我们选择了学习过的AT89S52系列单片机,具有反应速度极快,工作效率特高的特点。AT89S52主要性能 与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器,1000次擦写周期,全静态操作:0Hz33Hz三级加密程序存储器32个可编程I/O口线 、三个16位定时器/计数器 八个中断源 、全双工UART串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针 、掉电标识符 。 AT89S52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非 易失性存储器技术制造,与工业80C51 产品指令和引脚完 全兼容。另外,AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。2.1.2 键盘功能模块根据系统的基本的要求,基于时间的观看和设定等功能,采用由八个键构成的独立式键盘分别接在AT89S52单片机的P1.0-P1.7口,非常的方便,同时相对于独立式键盘大大节省了空间,在软件的设计时带来了极大的方便,使程序简易明了,可读性强。本次设计中,五个功能键分别定义为s4键、s5键、s6键、s7键和s8键,对应着翻页切换、加一、减一、控制单位移动、时间显示与控制,操作起来十分的清晰与方便。2.1.3 数码管显示模块 显示模块要具有显示时分秒,年月日和间隔闪烁符(至于每两级单位之间)的功能,共需要八位数码管。数码管的八个位控口接在AT89S52单片机的P0口线上,从左到右顺序连接,段控制线接在AT89S52单片机的P2口线上,从低位到高位对应连接.再由于数码管的本身显示亮度不够,所以一般都会在其位控和段控口前加上一定的驱动电路,本次设计中采用三极管作为驱动。 本次采用的数码管型号为s9012。2.1.4 定时提示模块电子钟的另外一个要求功能是在定时到达时候发出闹铃,本次设计利用蜂鸣器来实现。具有电路结构非常简单,控制极其方便等优点。2.1.5 整时提示模块电子钟的一个功能是在整时到达时候二极管交替显示。具有电路结构非常简单,控制极其方便等优点。2.1.5 二极管显示模块 二极管采用共阳接法,其负极接在P3口线上。在正常运行时,二极管流水工作,当在调整状态时,二极管全亮,当整点时,二极管交替显示。2.2 系统电路图总原理图.总布局图.PCB图见附录(1) 2.3 系统的元器件清单本系统中所用到的元件如表2.1所示。表2.1 系统元器件表器件型号数量器件型号数量单片机AT89S521个按键普通8个晶振12MHZ1 个开关6脚双路2个电容22F,33pF1个,2个 数码管 CPS05641B8个电阻普通若干下载接口10针接口1个蜂鸣器压电式1个单排针普通若干253 软件系统的设计3.1 使用单片机资源介绍AT89S52的P0、P1、P2、P3口作为输入输出口,: P1.5 MOSI(在系统编程用) P1.6 MISO(在系统编程用)P1.7 SCK (在系统编程用) XTAL1、XTAL2:晶振输入 RST: 复位输入片内资源主要为:定时器/计数器T0,定时器/计数器T1,定时器中断0,通用寄存器前三组,专用寄存器A、PSW、IE、P1、P2、P3、TCON、SCON,位寻址单元F0H、F1H、F2H、 F3H、F4H、F5H。3.2 软件系统各功能模块介绍3.3.1 独立式键盘模块独立式键盘软件设计通过在主程序中调用子程序key去执行键盘扫描和调用子程序chuli去执行相应的功能 ,单片机P1口在复位后保持高电平,当键按下相应口线为低电平,此时CPU做初期判断,之后延时12ms,确定为按键后等待键松,之后执行子程序。达到通过键功能程序的分支执行相应的程序段,完成对应的操作。3.2.2 数码管显示模块数码管显示是通过调用子程序display来实现的,由于数码管动态显示,所以在执行其他的程序的时候依然要经常调用显示子程序DISP。数码管的段控由单片机改变P2口相应位电平来实现,为实现不同的显示功能,设置了不同的显示缓冲单元,通过控制标志位控制。数码管的位控由CPU改变P0口相应位电平来实现,基于人的视觉延迟性,通过从右到左的循环保证所有数码管都被点亮。3.2.3 整点提示、闹铃在软件的设计中整点提示,提示模块是通过二极管的交替显示来告诉整点是否已到,通过在中断中运行程序执行相应的功能,二极管交替显示十次来作为提示信号。当时间达到定时时间时,闹铃报警。3.3 软件系统程序流程框图软件系统的总体流程框图如图3.1,键扫和显示程序流程框图分别如图3.2、图3.3所示。图3.2总体流程框图图3.2键扫流程图图3.3显示程序流程图 3.4 软件系统的程序 软件系统的程序如附录(2)。4 系统的仿真分析及结论4.1 系统设计的使用说明在Proteus上画好原理图,检查无误后再通电,主要在数码管上显示P. 循环左移。其按下不同的键进入不同的功能,其具体的操作步骤是:按s4键进入电子钟翻页模式,按s5、s6键加一、减一,按s7键进入单位移动,按s8键进入调整运行模式。连续按s7循环上述功能,按s6循环移动,按s4循环查看.4.2 系统设计的仿真结果仿真主要争对是对独立式盘和数码管,在按键盘不同的键值的时,显示正确的显示信息,不同功能的仿真的结果如图4.1、4.2、4.3和4.4所示。 图4.1 时分秒显示结果 图4.2 年月日显示结果图4.3 屏保显示图 4.3 系统的误差分析 系统准备工作结束后,在硬件调试中有时候按下键但却没反应者是最主要的误差,也许这是老化的现象以及硬件的焊接有些地方存在虚焊的原因,但是范围很小,还有在最初几次数码管显示有一定的问题,但最后发现是位控线和段控线的焊接存在问题。4.4 设计体会电子技术的快速发展,使一些新型电子器件和集成芯片应用越来越广泛,电子系统的功能越来越强大,印刷电路板越来越复杂和精密。单片机的应用使得我们对各种电路变得模块化,集成化,电子设计自动化(Electronics Design Automates,即EDA)工具的集成设计环境,电子设计软件Protel 软件等的运用使得电子设计电路更加方便,而我做为电子信息工程专业的学生,应该熟练掌握各种电路编辑软件,在这次的设计中我深刻的体会到电子产品的快乐,当我们看到显示屏上正确的显示出现时,好开心,这意味着我们的设计成功了,几十天的努力方案设计,和实践工作我们从中熟练各种电子的技术和强大,并不断地总结经验。这次课设对我们来说非常重要,也是我们最满意的一次,好的开头是成功的第一步,只有经历过,才会懂得过程的重要性。4.5 教学建议 号召同学们购买实验板,强化单片机实训,随着单片机学习的深入,渐渐的就涌入出一批对单片机兴趣很强的学生,单纯的仿真和一周才二次的试验课已不能满足学生对单片机强烈的兴趣,因此花点钱买试验版式个明智的选择!我还知道老师在实验课上很是注重学生的动手操作能力,要求很严格,但由于学校给我们的实验课时还不够。老师应该给我们学生多一些布置课外的实物制作课题,让学生从操作的过程中学到一些经验。参考文献 附 录(1) 图1 电路原理图 图3 PCB Bottom layer 图图4 PCB Top layer 图附 录(2);= /设计项目:电子钟 /功能: s8键:开始/调时分秒/调年月日/调定时 / s7键:调时选择 / s6键:减一 / s5键:加一 / S4键:切换页面 #include #define uchar unsigned char #define uint unsigned int/* uchar code tab_duan=0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0x0c,0xbf,0xf7,0xb7; /*0-F、灭(16)、P.、-、=*/void delay(uint count) ;void display(uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar); void ini();void send();void chuli();void xiangling();void zhengdian();void liushuideng(); uchar t0,t1,t2,t3,sec,min,hour,ri=1,yue=1,nian=10,function,function1=0,function2,function3; uchar i,j,k1,k2,k3,k4=20,k5,n,l1=4,l2; uchar m0,m1,m2,m3,m4,m5,m6,m7,a0,a1,a2,a3,a4,a5,a6,a7; /时分秒; uchar n0,n1,n2,n3,n4,n5,n6,n7,b0,b1,b2,b3,b4,b5,b6,b7; /年月日; uchar x0,x1,x2,x3,x4,x5,x6,x7,c0,c1,c2,c3,c4,c5,c6,c7,dsec=5,dmin,dhour; /定时; uchar key(); uchar keychuli();/*/*主函数*/void main() ini(); for(j=0;j=5;j+)for(i=0;i30)m0=16;m1=16;n0=16;n1=16;x0=16;x1=16; else if(k11)m0=a0;m1=a1;n0=b0;n1=b1;x0=c0;x1=c1; else if(k1=0)k1=60; break; case 1: case 4: case 7: k1-;if(k130)m3=16;m4=16;n3=16;n4=16;x3=16;x4=16; else if(k11)m3=a3;m4=a4;n3=b3;n4=b4;x3=c3;x4=c4;else if (k1=0)k1=60; break; case 2: case 5: case 8:k1-;if(k130)m6=16;m7=16;n6=16;n7=16;x6=16;x7=16; else if(k11)m6=a6;m7=a7;n6=b6;n7=b7;x6=c6;x7=c7; else if (k1=0)k1=60; break; case 9: break; switch(function1) case 0:display( m0,m1,a2,m3,m4,a2,m6,m7);break; case 1:display( n0,n1,b2,n3,n4,b2,n6,n7);break; case 2:display( x0,x1,c2,x3,x4,c5,x6,x7);break; /* /*按键程序*/ void chuli()switch(key()case 0:break;case 128: function3+; switch (function3) case 1:TR0=0;P3=2;function1=0;break; case 2:function1=1;break; case 3:function1=2;break; case 4:TR0=1;function3=0;function1=0;break; break;case 64: if(function3!=0) switch(function) case 0: case 1: case 2: case 3: function+;if(function=3)function=0;break; break; case 32: switch(function3) case 1: if(function=0) sec+; if(sec59)sec=0; if(function=1) min+; if(min59)min=0; if(function=2) hour+; if(hour23)hour=0; break;case 2: if(function=0) ri+; if(ri30)ri=1; if(function=1) yue+; if(yue12)yue=1; if(function=2) nian+; if(nian99)nian=10; break; case 3: if(function=0) dsec+; if(dsec59)dsec=0; if(function=1) dmin+; if(dmin59)dmin=0; if(function=2) dhour+; if(dhour23)dhour=0; break; break;case 16: switch(function3) case 1: if(function=0) sec-; if(sec=-1)sec=59; if(function=1) min-; if(min=-1)min=59; if(function=2) hour-; if(hour=-1)hour=23; break;case 2: if(function=0) ri-; if(ri=-1)ri=30; if(function=1) yue-; if(yue=-1)yue=12; if(function=2) nian-; if(nian=10)nian=99; break; case 3: if(function=0) dsec-; if(dsec=-1)dsec=59; if(function=1) dmin-; if(dmin=-1)dmin=59; if(function=2) dhour-;if(dhour=-1)dhour=23; break; break; case 8: if(function3=0) function1+; switch(function1) case 1: break;case 2: break;case 3: function1=0;break; break;/*/*中断程序*/void timer0() interrupt 1 using 3TH0=0x3c,TL0=0xb0;t0+;t1+;t2+;if(sec=dsec)&(min=dmin)&(hour=dhour)t3=1000;/定时响铃if(t31)t3-; xiangling();if(function2!=1)if(t2=7) /流水灯 t2=0;if(t330) ri=1; yue+; if(yue12) yue=1; nian+; if(nian99)nian=1; /定时响铃* void xiangling() k4-; if(k411) k5+; switch (k5) case 1:P3=0xfd;break; case 2:P3=0xff;k5=0;break; if(k49)P3=0xff; if(k4=0)k4=20; /整点提示*void zhengdian() k3-; if(k3%2)P3=0xaa; if(k3%2)=0)P3=0x55; if (k3=0)function2=0; /流水灯*void liushuideng() l2=0xff-l1; P3=l2; l1=l11; if(l2=0x7f)l1=4; /中断初始化,定时器赋初值*voidini()TMOD=0x01,TH0=0x3c,TL0=0xb0;EA=1,ET0=1,TR0=0;/*/*显示子程序*/void display(uchar a0,uchar a1,uchar a2,uchar a3,uchar a4,uchar a5,uchar a6,uchar a7)P0=tab_duana0;P2=0xfe;delay(1);P0=tab_duana1;P2=0xfd;delay(1);/从左到右依次写数即可 P0=tab_duana2;P2=0xfb;delay(1); P0=tab_duana3;P2=0xf7;delay(1);P0=tab_duana4;P2=0xef;delay(1); P0=tab_duana5;P2=0xdf;delay(1); P0=tab_duana6;P2=0xbf;delay(1); P0=tab_duana7;P2=0x7f;delay(1); P0=0xff;/*void send()/第一页显示;a0=sec%10;a1=sec/10;a2=18;a3=min%10;a4=min/10;a5=18;a6=hour%10;a7=hour/10;/第二页显示;b0=ri%10;b1=ri/10;b2=19;b3=yue%10;b4=yue/10;b5=19;b6=nian%10;b7=nian/10;/第三页显示;c0=dsec%10;c1=dsec/10;c2=20;c3=dmin%10;c4=dmin/10;c5=20;c6=dhour%10;c7=dhour/10;/*void delay(uint count) uint j; while(count-!=0) for(j=0;j80;j+); /*uchar keychuli() uchar k; k=P1; /P1口内容送K k=k; /取反 k=(k&0xff); /屏蔽高4位,如果扫描8键,屏蔽该句。 return(k); /返回键值 /* 函数原型:key();* 功 能:键盘扫描函数,函数返回值即键值。*/uchar key() uchar keyzhi,keyzhii; /电子钟键盘按键键值临时存放 keyzhi=keychuli(); /调P1口处理函数 if(keyzhi!=0) /有键动作延时去抖动,否则函数返回 send(); switch(function1) case 0:display( m0,m1,a2,m3,m4,a2,m6,m7);break; case 1:display( b0,b1,b2,b3,b4,b5,b6,b7);break; case 2:display( c0,c1,c2,c3,c4,c5,c6,c7);break; switch(function1) case 0:display( m0,m1,a2,m3,m4,a2,m6,m7);break; case 1:display( b0,b1,b2,b3,b4,b5,b6,b7);break; case 2:display( c0,c1,c2,c3,c4,c5,c6,c7);break; keyzhi=keychuli(); /再次调P1口处理函数 if(keyzhi!=0) /真正有键按下,取键值并暂存 keyzhii=keyzhi; while(keyzhi!=0) /判按键是否释放,没有释放延时去抖动等待释放 send(); switch(function1) case 0:display( m0,m1,a2,m3,m4,a2,m6,m7);break; case 1:display( b0,b1,b2,b3,b4,b5,b6,b7);break; case 2:display( c0,c1,c2,c3,c4,c5,c6,c7);break; switch(function1) case 0:display( m0,m1,a2,m3,m4,a2,m6,m7);break; case 1:display( b0,b1,b2,b3,b4,b5,b6,b7);break; case 2:display( c0,c1,c2,c3,c4,c5,c6,c7);break; keyzhi=keychuli(); keyzhi=keyzhii; /按键释放后恢复按键键值 return(keyzhi); /返回按键键值;=/程序结束/=
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸下载 > CAD图纸下载


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!