欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    基于单片机的课程设计数字电子钟.doc

    • 资源ID:9108937       资源大小:713KB        全文页数:27页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于单片机的课程设计数字电子钟.doc

    单片机技术课程设计说明书 数 字 电 子 钟 系 、 部: 电气与信息工程学院 学生姓名: 胡 龙 海 指导教师: 凌云 职称 讲师 专 业: 自 动 化 班 级: 自 本 1002 班 完成时间: 2012-12-12 摘 要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。该电子钟设有四个按键S1、S2、和S3键,进行相应的操作就可实现功能选择,一个加一个减。具有时间显示、整点报时、校正等功能。走时准确、示直观运行稳定等优点。具有极高的推广应用价值。关键词 电子钟;AT89S52;硬件设计;软件设计ABSTRACTClock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMELs as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours, minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons S1, S2, S3 and S4 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value. Key words Electronic clock;;AT89S52;Hardware Design;Software Design 目 录1 设计课题任务、功能要求说明及方案介绍11.1 设计课题任务11.2 功能要求说明11.3 设计总体方案介绍及原理说明12 设计课题硬件系统的设计22.1 设计课题硬件系统各模块功能简要介绍22.2 设计课题电路原理图、PCB图、元器件布局图等 32.3 设计课题元器件清单43 设计课题软件系统的设计53.1 设计课题使用单片机资源的情况53.2 设计课题软件系统各模块功能简要介绍53.3 设计课题软件系统程序流程框图53.4 设计课题软件系统程序清单84 设计结论、仿真结果、误差分析、教学建议184.1 设计课题的设计结论及使用说明184.2 设计课题的仿真结果184.3 设计课题的误差分析194.4 设计体会194.5 教学建议19参考文献 20致 谢 21附 录 221 设计课题任务、功能要求说明及方案介绍1.1 设计课题任务设计一个具有特定功能的电子钟。具有时间显示、报时等功能。并有时间设定,时间调整功能。1.2 功能要求说明设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符“P.”, 进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。1.3 设计课题总体方案介绍及工作原理说明本电子钟主要由单片机、4*1独立键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1.1所示: 图1.1 总体设计方案图本电子钟的所有的软件、参数均存放在AT89S52的Flash ROM和内部RAM中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。键盘采用动态扫描方式。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。2 设计课题硬件系统的设计2.1 设计课题硬件系统各模块功能简要介绍本设计的硬件系统主要采用以下基本模块来实现,单片机最小系统模块,输入模块、输出模块、电源模块。(1)单片机最小系统模块:包括低功耗、高性能CMOS8位微控制器AT89S52;复位电路;晶振电路。本本模块AT89S52系统控制核心,单片机系统复位由复位电路完成,单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端位位引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容。这样就构成一个稳定的自激振荡器。 (2)输入模块:本模块共用到了5个按键,1个电源开关,一个复位键,单片机运行期间,利用按键完成复位操作。3个按键独立式键盘,S1键控制电子钟的启动调整状态,S2键为加1键,S3键为减1键。且S1、S2、S3任一键都独自连一个I/O(P1.0、P1.1、P1.2)口线,说明它们可以独立实现相应的电子钟功能。(3)输出模块:本次设计显示为8位,采用两个四位一体数码管(共阳极)作为显示窗口,既可以节约成本又能简化电路。数码管用8个PNP三极管驱动。(4)电源模块:现在市面上销售的编程器有很多都是由PC机的USB口直接供电为了降低本设计的成本及节省设计时间,没有另外设计编程器,而直接购买了市场上的USB供电及下载器。2.2 设计课题电路原理图、PCB图、元器件布局图 图2.1 电路原理图 图2.2 PCB图 图2.3 proteus仿真图2.3 设计课题元器件清单设计课题元器件清单如表2.1所示。表2.1 设计所用元器件清单名称数量参数电阻3个1K数码管2个4位一体电阻1个200下载口1个普通插座1个40PIN电阻16个470按键4个三极管9个PNPUSB供电线1根晶振1个12MHz电容2个30pF极性电容1个22F芯片1块AT89S52发光二极管1个六角开关1个3 设计课题软件系统的设计3.1 设计课题使用单片机资源的情况设计课题使用单片机资源的情况如下:P0口输出数码管段选信号,P3口输出数码管位选信号;晶振12MHz;调整选择键SET_KEY:P1.0;通过选择键选择调整位,选中位闪烁;增加键ADD_KEY:P1.1;按一次使选中位加1;减少键DEC_KEY:P1.2;按一次使选中位减1;P2.1为蜂鸣器发声报时;50H-5FH;16个寄存器单元作为显示单元; 50H 用于控制秒基准时钟源的产生;51H 清零秒寄存器;52H 清零分寄存器;53H 清零时寄存器;5FH 用于秒个位;5EH 用于秒十位;5DH 用于分个位;5CH 用于分十位;5BH 用于时个位;5AH 用于时十位;54H 用于控制调时闪烁;堆栈栈底:70H。3.2 设计课题软件系统个模块功能简要介绍 本设计的软件系统主要采用以下基本模块来实现,主程序、中断服务程序、键盘输入程序模块、数码管及其驱动模块和延时模块。主程序:主要是用于对输入信号的处理、输出信号的控制和对各个功能程序模块的运用及其控制。中断服务程序:主要是用于电子钟的准确运行、数据输入过程中的闪烁。键盘输入程序模块:主要是用于确定按键并得到特定的键码值。数码管及其驱动模块:主要是用于驱动数码管及利用数码管显示时间。延时模块:程序中有两种延时子程序,一种是短延时用于判键按下等,一种是长延时。3.3 设计课题软件系统程序流程框图系统软件采用汇编语言按模块化方式进行设计,然后通过Keil软件开发平台将程序转变成十六进制程序语言,接着使用Proteous 进行仿真,读出显示数据。主程序流程框图如3.1所示;加1子程序如3.2所示;中断服务程序程序如3.3所示;键盘扫描子程序框图如3.4所示;显示子程序框图如3.5所示; 图3.1 主程序流程框图 图3.2 加1子程序流程框图 图3.3 中断子程序图3.4 键盘扫描子程序 图3.5 显示子程序3.4设计课题软件系统程序清单;-;本电子钟实现24小时制,8位数码管显示时分秒,可整点报时;显示格式:00-00-00(设置小时十位为0时,不显示);通过3只按键来调整时间;调整选择键SET_KEY:P1.0;通过选择键选择调整位,选中位闪烁;增加键ADD_KEY:P1.1;按一次使选中位加1;减少键DEC_KEY:P1.2;按一次使选中位减1;如果长按ADD_KEY或DEC_KEY,可进行调时、调分快进快减,并停止闪烁;如果选中位是秒,则按增加键或减少键可实现,但无调时快进和快减功能;P0口输出数码管段选信号,P2口输出数码管位选信号;晶振12MHz;P3.1为蜂鸣器发声报时;编程人:胡龙海 编写日期:2012年7月12日 修改日期(最终):2010年12月12日;-;-;程序入口;- /* 数字电子钟-查询方式要求:<一>.显示系统提示符“P.” <二>.定义3个功能键:分别为电子钟启动键/停止键/功能选择键;加1键;减1键 ;并且有相应指示灯指示 <三>.在系统提示符状态下,只有按启动键/停止键才能开启电子钟,电子钟进入运行状态;再次按下启动键/停止键,电子钟进入调整状态,选择功能键,选择好想要的时或分或秒,此时,加1键,减1键才可以工作。调整结束后,按下启动键/停止键,电子钟由调整状态返回运行状态,紧跟着以调整以后的时间运行。作者:胡龙海时间:2012年8月5日电路描述:crystal=12Mhz P2口位控口,P0口段控口 P1口为按键控制位 P3口为指示灯控制口*/#include <reg52.h> #include <intrins.h>#define uchar unsigned char#define int signed int/*共阳数码管字型码数组*/*0,1,2,3,4,5,6,7,8,9,p.,灭*,/char code dis_code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xff,0xBF; /*共阳数码管位控码数组(从右往左点亮,反向驱动)*/char code weikong_code=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;char find_code8;sbit S2=P11; / 启动键/停止键/功能键(第一次按下-启动;第二次按下-暂停,第三次按下-功能选择)sbit S3=P12; /加1键sbit S4=P13; /减1键sbit P3_7=P37; / 启动键/停止键指示灯sbit P3_1=P31; /秒指示灯sbit P3_2=P32; /分指示灯sbit P3_3=P33; /时指示灯int second=0;int minite=0;int hour=0;uchar time=0;uchar times=0;uchar t,flag1,flag2,flag3;int H;void xianshishuzu(); /*缓冲数组函数*/void disp(); /*显示函数*/uchar keychuli(); /*P1口处理函数*/uchar key(); /*键扫描函数*/void delay0_5s(); /*0.5秒延时函数*/void delay1s(); /*1秒延时函数*/*1ms延时函数*/void DelayX1ms(int count) int j; while(count-!=0) for(j=0;j<80;j+); /*显示函数*/void disp() char i; char k; for(i=0;i<8;i+) P2=weikong_codei; k=find_codei; P0=dis_codek; DelayX1ms(1); /* 函数原型:keychuli();* 功 能:处理与键盘相连的P1口的内容,作为键值。*/uchar keychuli() uchar k; k=P1; /P1口内容送K k=k; /取反 return(k); /返回键值 /* 函数原型:key();* 功 能:键盘扫描函数,函数返回值即键值。*/uchar key() uchar keyzhi,keyzhii; /键盘按键键值临时存放 keyzhi=keychuli(); /调P1口处理函数 if(keyzhi!=0) /有键动作延时去抖动,否则函数返回 disp(); disp(); keyzhi=keychuli(); /再次调P1口处理函数 if(keyzhi!=0) /真正有键按下,取键值并暂存 keyzhii=keyzhi; while(keyzhi!=0) /判按键是否释放,没有释放延时去抖动等待释放 disp(); disp(); keyzhi=keychuli(); keyzhi=keyzhii; /按键释放后恢复按键键值 return(keyzhi); /返回按键键值 /*缓冲数组函数*/void xianshishuzu() find_code1=second/10; /时-分-秒显示数组初始化 find_code0=second%10; find_code2=12; find_code4=minite/10; find_code3=minite%10; find_code5=12; find_code7=hour/10; find_code6=hour%10; disp(); /*0.5s延时函数 ,查询方式*/void delay0_5s() EA=1; ET1=0; TMOD=0x10; /定时器1,工作方式1 TR1=1; do TH1 =0x3c; TL1 =0xb0; /50ms中断一次 dodisp(); while(TF1=0); times+; TF1=0; while(times!=5); TR1=0; times=0;/*1s延时函数*/ void delay1s() TMOD=0X01; EA=1; ET0=1; TH0=(65536-50000)/256; /10ms送计数初值 TL0=(65536-50000)%256; TR0=1; dodisp();H=key(); while(H!=1); /有条件转移 void time_() interrupt 1 /中断程序 time+; TH0=(65536-50000)/256; /10ms重新送初值 TL0=(65536-50000)%256;if(time=20) /时-分-秒-计时函数 second+; time=0; if(second=60) /秒值等于60,秒清零,分加1 second=0; minite+;if(minite=60) /分值等于60,分清零,时加1 minite=0; hour+; if(hour=24) /时值等于24,时清零,返回,全部归零 hour=0; xianshishuzu(); void main() while(1) find_code0=10;/*相当于初始化*/ find_code1=11; find_code2=11; find_code3=11; find_code4=11; find_code5=11; find_code6=11; find_code7=11; disp(); /初始化显示“P.” H=key(); if(H=1) /S2键按下,进入case1,进入延时函数,开始自动计时并显示 while(1) P3_7=0; /启动键/停止键/功能键指示灯亮 P3_1=0; /时-指示灯亮 P3_2=0; /分-指示灯亮 P3_3=0; /秒-指示灯亮 switch(H) case 0: disp();H=key(); /暂停显示 break; case 1: xianshishuzu(); t+; H=key(); if(t=5)t=1; switch(t) case 1:delay1s(); H=key();TR0=0;P3_7=1; delay0_5s(); /自动显示时间-时-分-秒 break; case 2: flag1=1; flag2=0; flag3=0; /秒加1调整条件 P3_1=1; delay0_5s(); /秒指示灯闪烁break; case 3: flag2=1; flag1=0; flag3=0; /分加1调整条件 P3_2=1; delay0_5s(); /分指示灯闪烁break; case 4: flag3=1; flag1=0; flag2=0; /时加1调整条件 P3_3=1; delay0_5s(); /时指示灯闪烁break; break; case 2: if(flag1)/按键加1函数 P3_1=1; second+; /秒自加1 find_code1=second/10; find_code0=second%10; delay0_5s(); if( second=60) /秒值等于60,清零 second=0; if(flag2) P3_2=1; minite+; /分自加1 find_code4=minite/10; find_code3=minite%10; delay0_5s(); if(minite=60) /分值等于60,清零 minite=0; if(flag3) P3_3=1; hour+; /时自加1 find_code7=hour/10; find_code6=hour%10; delay0_5s(); if( hour=24) /时值等于24,清零 hour=0; disp(); H=key(); break;case 4: if(flag1)/按键减1函数 P3_1=1; find_code1=second/10; find_code0=second%10; second-;/秒自减1 delay0_5s(); if(second<0)second=0; /秒变量为-1时,将秒变量置0,送给显示缓冲数组(以免乱码) if(flag2) P3_2=1; find_code4=minite/10; find_code3=minite%10; minite-;/分自减1 delay0_5s(); if(minite<0)minite=0; /分变量为-1时,将分变量置0,送给显示缓冲数组(以免乱码) if(flag3) P3_3=1; find_code7=hour/10; find_code6=hour%10; hour-; /时自减1 delay0_5s(); if(hour<0)hour=0; /时变量为-1时,将秒变量置0,送给显示缓冲数组(以免乱码) disp(); H=key(); break; 4 设计结论、仿真结果、误差分析、教学建议4.1 设计课题的设计结论及使用说明本设计为基于单片机的电子钟的设计。刚开始,我们很多地方理不清头绪,无从下手,但通过认真研究设计课题,找书上网查资料买元件,确定基本设计方案,对所用芯片功能进行查找、调试,然后画电路图制PCB板、打孔、溶铜、焊接等,真的经历了许多困难,却积累了很多宝贵的经验,本设计用2个四位一体的共阳数码管做为显示器,它显示时间值;设计中有三个按键,其中S1为启动/选择调整位置,S2为加控制键 S3为减控制键,当整点时间到时,蜂鸣器报警。这样的结果与设计要求完全相符,本设计成功。完成了设计任务。4.2 设计课题的仿真结果在Proteus ISIS的Debug菜单中选择Execute,运行程序,系统仿真结果如图4.1与4.2所示。实现功能:可调整运行的电子钟具有三种工作状态:“P.”状态、运行状态、调整状态。 (1)、“P.”状态,依靠上电或按复位键进入,在此状态下,按S2、S3键均无效,按S1键有效,进入运行状态; (2)、运行状态,在此状态下,按S2、S3键均无效,只有按S1键有效,按下S1键后,退出运行状态,进入调整状态; (3)、调整状态,按S1键进入时、分、秒的闪烁,在此状态下,按S2(+1键)、S3(-1键)键均有效;调整结束后必须按S1键,即可退出调整状态,进入运行状态。在调整状态时长按S2、S3时可以连加及连减。时间显示格式为:时-分-秒; 图4.1 “P.”运行状态仿真图4.2 时钟运行状态仿真4.3 设计课题的误差分析该电子钟在运行中存在一定的误差,误差产生有三种可能,首先是采用的计时方案是软件计时的,计时优势利用中断来实现。而当电子钟运行时间1秒时,又得去执行中断程序,这个过程是需要时间的,所以就产生了一定的误差,当然这个误差是避免不了的,其次还有硬件系统也有一定的影响。第三,设计用到11.0592MHz的晶振,计算是满20次为一秒钟,但实际会慢很多。4.4 设计体会本次课程设计,让我受益匪浅,认识到了自己的许多缺点和不足,使我深深的感受到了理论联系实际的必要性及其重要性。在我们以往的学习过程中,我们刻意地去加强理论的基础,对于一个程序我们只求它在运行时没有出错,我们便以为我们的计划成功了岂不知它能否在硬件结构中得以实现则是另外一回事,这就要求我们的动手能力,如果无法使软件与硬件实现有机的结合,那么再好的程序也只是一堆废字符。4.5 教学建议经过一个学期菱云老师教导的的单片机学习,我学会了如何学习一个新软件的方法,以由“外到里,由硬到软”。其中在编程的思路和PCB实物的制作上面。编程思路是整个程序的灵魂,没有编程思路,程序是不会出来,就失去了编程的意义。在开始编程之前,自己得想好编程的思路,这样编程能力才会提高,编程的过程才会顺畅,程序的质量才会提高。通过凌云老师的细心教导,我们学习很轻松,并且老师的那套教学方法很好,让我感觉由如鱼得水,加上老师的幽默,学习起来很是轻松。结合自己课堂的学习和单片机学习效果总结几点教学建议希望老师接纳:1、老师你上课时那句,嘿嘿又没反应,这不错,很幽默;2、在实验室时你的提问很独特,并且常笑是你的优点; 参考文献1 代启化.基于Proteus的电路设计与仿真J.现代电子技术.2006,第19期.2 刘文秀.单片机应用系统仿真的研究J.现代电子技术.2005, 第286 期.3 曹巧媛.单片机原理及应用M,北京:电子工业出版社,1997.7.4 张洪润.兰清华,单片机应用技术教程M,北京:清华大学出版社,1997.11.5 李广第.单片机基础M,北京航空航天大学出版社第三版,2006.7.6 Dai QiHua.Proteus-based circuit design and simulation J. Modern electronic technology.2006,No.197 Liu WenXiu .Microcontroller Application System Simulation J. Modern electronic technology.2005,No.2868 Cao QiaoYuan.Microcontroller Theory and Applications M, Beijing: Electronic Industry Press, 1997.7.9 Zhang Hongrun ,Lan Qinghua, MCU application technology tutorial M, Beijing: Tsinghua University Press, 1997.11.10 Li guangdi. Microcontroller based on M, Beijing Aerospace University Press, 2006.7. 致 谢在这次单片机课程中,让我真正感受到了,什么是理论与事物的联系,什么是学习。刚开学听说我们班这学期的我们是新老师教我们的单片机,我心里有兴奋又坏怕,兴奋时因为有新的老师上,

    注意事项

    本文(基于单片机的课程设计数字电子钟.doc)为本站会员(大张伟)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开