单片机课程设计报告-数字时钟.doc_第1页
单片机课程设计报告-数字时钟.doc_第2页
单片机课程设计报告-数字时钟.doc_第3页
单片机课程设计报告-数字时钟.doc_第4页
单片机课程设计报告-数字时钟.doc_第5页
免费预览已结束,剩余9页可下载查看

下载本文档

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

文档简介

单片机课程设计报告 题 目:数字时钟专业班级:电子信息工程2班姓 名:江奇峰、陈雪丰 设计题目数字时钟 设计目的熟悉单片机的编程及应用了解单片机指令的应用掌握动态显示的原理掌握led的原理掌握按键原理设计任务实现时钟的显示实现时钟的调整(只能加不能减)实现闹钟的显示实现闹钟的调整(只能加不能减)设计分工硬件部分: 陈雪丰软件部分: 江奇峰一、功能能实现定时、时间的调整(只能加不能减)、闹钟的设定(只能加不能减),当闹钟按键按下就进入闹钟设定,再按下那个键就进入时间显示,并且闹钟响铃时间是10秒钟。其整个设计的电路图如下:其中显示的是8个8段led显示,单片机是80c51,外部晶振是12mhz,其中和晶振连接的是两个47pf的电容。单片机的p3.2p3.5作为地址总线起到控制作用,p3.7在电路中我用一个电阻代替,在实际中接喇叭,起到闹钟的作用。 p0.0p0.7作为数据总线,把单片机的信号输入到显示器上,p2.0p2.7作为单片机的额数据总线,其作用在显示总起到位选的作用,决定8段led的亮灭。最下面的那个是respack-8排阻,在电路中防止输入到显示的电压很小,是为输出提供电源的装置,配合显示器的显示。在整个程序中时间的秒、分、时的计数分别存放在20h、21h、22h,闹钟的秒、分、时的计数分别存放在40h、41h、42h。我的电路图开始的时候是用静态显示的,现在用动态显示程序还是用的是静态的,所以在一些程序不一样。实现定时闹钟的程序有以下几个部分组成:二、流程图1、 定时程序(时间的设定)其程序流程图如下:返回分钟和时钟的流程图和秒钟的一样(20h)+1(20h)是否等于5fh延时1sda修正20h中的书(20h)+1开始 n y2、 调时间的流程图开始 y判断p3.2是否为60h判断p3.2是否为0判断p3.2是否为0(20h)+1 nn y n n清零(20h) y 判断p3.3是否为60h y判断p3.3是否为0判断p3.3是否为0 (21h)+1 n n y n n清零(21h) y判断p3.4是否为24h判断p3.4是否为0判断p3.4是否为0 y(22h)+1 n n y n n清零(22h) y3、 显示的流程图(因为显示的刚好是8个,所以不要去考虑左移的个数,直接跳转到初始值。开始提取(20h)的个位查询并送给p0延时50us左移p2提取(20h)的十位查询并送给p0延时50us返回4、 闹钟设定开始(30h)清零判断p3.5是否为0判断p3.5是否为0和时间设置一样,把(20h)、(21h)、(22h)改成(40h)、(41h)、(42h)时间显示(30h)置1判断p3.5是否为0判断p3.5是否为0nynyyn时间的设定结束ny三、总程序org 0000hmov p0,#00hmov p2,#00hmov sp,#60hclr 20hclr 21hclr 22hclr 40hclr 41hclr 42hmov dptr,#tabvv: mov r6,#1mm: mov r5,#4nn: mov r4,#100bb: jnb p3.5,lpp sjmp lllpp: jnb p3.5,lpp0 setb 30haac: mov r3,#1aab: mov r2,#4aaa: mov r1,#100cc0: jnb p3.2,cc1 ;判断p3.2是否为按下 sjmp dd0cc1: jnb p3.2,lpp1 ;判断p3.2是否松开,松开秒钟加1 mov a,40h add a,#01h da a cjne a,#60h,cc2 clr acc2: mov 40h,add0: jnb p3.3,dd1 ;判断p3.3是否按下 sjmp ee0dd1: jnb p3.3,lpp2 ;判断p3.3是否松开,松开分钟加1 mov a,41h add a,#01h da a cjne a,#60h,dd2 clr add2: mov 41h,aee0: jnb p3.4,ee1 ;判断p3.4是否按下 sjmp hh1ee1: jnb p3.4,lpp3 ;判断p3.4是否松开,松开时钟加1 mov a,42h add a,#01h da a cjne a,#24h,ee2 clr aee2: mov 42h,ahh1:lcall lp jnb p3.5,lp1 djnz r1,cc0 djnz r2,aaa djnz r3,aab lcall b2 sjmp aaclp1:jnb p3.5,lpp4ll: clr 30h lcall c0 djnz r4,bb djnz r5,nn djnz r6,mm lcall b2 sjmp vvlpp0:lcall lp nop nop nop sjmp lpplpp1:lcall lp nop nop nop sjmp cc1lpp2:lcall lp nop nop nop sjmp dd1lpp3:lcall lp nop nop nop sjmp ee1lpp4:lcall lp nop nop nop sjmp lp1c0: jnb p3.2,c1 ;判断p3.2是否为按下 sjmp d0c1: jnb p3.2,llp ;判断p3.2是否松开,松开秒钟加1 mov a,20h add a,#01h da a cjne a,#60h,c2 clr ac2: mov 20h,ad0: jnb p3.3,d1 ;判断p3.3是否按下 sjmp e0d1: jnb p3.3,llp1 ;判断p3.3是否松开,松开分钟加1 mov a,21h add a,#01h da a cjne a,#60h,d2 clr ad2: mov 21h,ae0: jnb p3.4,e1 ;判断p3.4是否按下 ajmp h0e1: jnb p3.4,llp2 ;判断p3.4是否松开,松开时钟加1 mov a,22h add a,#01h da a cjne a,#24h,e2 clr ae2: mov 22h,ah0: lcall lpretllp: lcall lp nop ;3个空指令是消除松开时执行指令的时间差 nop nop sjmp c1llp1:lcall lp nop nop nop sjmp d1llp2:lcall lp nop nop nop sjmp e1b2: mov a,20h ;设置秒钟 add a,#01h da a dec a cjne a,#5fh,a1 clr a mov 20h,a mov a,21h ;设置分钟 add a,#01h da a dec a cjne a,#5fh,a2 clr a mov 21h,a mov a,22h ;设置时钟 add a,#01h da a mov 22h,a cjne a,#24h,loop clr a mov 22h,a sjmp loopa1: inc a mov 20h,a sjmp loopa2: inc a mov 21h,aloop:djnz r0,rr1 setb p3.7rr1: mov a,42h ;比较时钟和闹钟的时间是否相等,相等把 xrl a,22h ; p3.7置高电平启动闹钟 cjne a,#00h,qq mov a,41h xrl a,21h cjne a,#00h,qq mov a,40h xrl a,20h cjne a,#00h,qq clr p3.7 mov r0,#10qq: retlp: mov p2,#01111111b jnb 30h,ww mov a,40h sjmp ww0ww: mov a,20h ;显示秒钟的个位ww0: mov b,#10h div ab mov 50h,a mov a,b movc a,a+dptr mov p0,a lcall del mov a,p2 ;显示秒钟的十位 rr a mov p2,a mov a,50h movc a,a+dptr mov p0,a lcall del mov a,p2 ;显示- rr a mov p2,a mov p0,#01000000b lcall del mov a,p2 ;显示分钟的个位 rr a mov p2,a jnb 30h,ww1 mov a,41h sjmp ww2ww1: mov a,21hww2: mov b,#10h div ab mov 51h,a mov a,b movc a,a+dptr mov p0,a lcall del mov a,p2 ;显示分钟的十位 rr a mov p2,a mov a,51h movc a,a+dptr mov p0,a lcall del mov a,p2 ;显示- rr a mov p2,a mov p0,#01000000b lcall del mov a,p2 ;显示时钟的个位 rr a mov p2,a jnb 30h,ww4 mov a,42h sjmp ww5ww4: mov a,22hww5: mov b,#10h div ab mov 52h,a mov a,b movc a,a+dptr mov p0,a lcall del mov a,p2 ;显示时钟的十位 rr a mov p2,a mov a,52h movc a,a+dptr mov p0,a lcall del retdel: mov r7,#150 ;显示延迟150us djnz r7,$ rettab: db 3fh 06h 5bh 4fh 66h 6dh 7dh 07h 7fh 6fh end总结在整个设计中我学到了在显示程序中的一些方法,比如说怎么实现动态显示,开始的时候总是显示不了,在经过把位选放慢就可以知道自己在设计程序中先显示后左移,所以没有显示的余光,使得显示出现异常。在经过先左移后显示的情况下动态能够正常显示。还有在设定闹钟的时候经常出现到了闹钟的设定时间不跳转,在经过在闹钟的设定的同时还要进行时间的调用,使得这次程序使用的都是程序的调用,把闹钟的设定看作一个主程序,就相当于p3.5按下之后进入闹钟的设定和显示,之后一直在查询p3.5再一次的按下

温馨提示

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

评论

0/150

提交评论