欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    微机原理课程设计数字闹钟课程设计报告.doc

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

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

    微机原理课程设计数字闹钟课程设计报告.doc

    目 录一、摘要2二、实验要求2三、实验电路及功能说明2四、实验程序流程图5五、实验结果分析7 六、设计心得8七、程序清单9八、参考文献14九、附录(AT89C51单片机)14一、摘要:作为一个合格的大学生,不仅需要有过硬的理论知识,还应该有动手实践的能力,并且是将理论结合实际,提升到应用层面。以后走上社会,还是会有很多新的知识是需要我们学习的,届时需要我们有比较强的自学能力。此次微机课程设计对理论结合实际的动手能力和自学能力有很强的体现。我们这次是基于AT89C51单片机数字闹钟的设计。关键词:数字闹钟,单片机AT89C51,LED数码管。二、 实验要求:1.通过单片机实现秒、分、小时的进位(24小时制)。2.将当前时分秒在七段LED显示器上显示(如:091132)。3.可设置闹钟的时间当前值(对准时间),设置闹铃时间,闹铃功能的关闭和开放。.三、实验电路及功能说明:仿真电路图如下:图1图2该数字闹钟是用一片AT89C51A单片机通过编程去驱动8个数码管实现的。通过5个开关控制,从上到下5个开关KEY1KEY5的功能分别为: KEY1,调节时间,每调一次分加1;KEY2, 调节时间,每调一次时加1;KEY3,从其它状态切换至时钟状态;KEY4,切换至闹钟设置状态;KEY5,闹钟关闭和开放.控制键分别与P1.0P1.4口连接其中:A. 通过P2口和P3口去控制数码管的显示如图所示P2口接数码管的ag端,是控制输出编码,P3口接数码管的18端,是控制动态扫描输出B. 从P0.4输出一个信号发光二极管发光,二极管在闹铃开关打开时发光。C. 从P0.0输出一个信号使蜂鸣器发声,蜂鸣器在闹铃打开并设置的闹钟时间到了时候鸣叫。(图1是时钟运行状态,图2是闹钟运行状态)功能说明:1 各个控制键的功能:可对时间进行校准调节(只能加);按下设置键数字时钟进入闹钟设置状态,设置闹钟的时间;时加、分加键是在校准时间时或设置闹钟时间对小时数或分钟数调节而设置的;2 AT89C51单片机,通过编写程序对数码显示进行控制。3 八个7段数码管显示时钟信号。四、实验程序流程图:1. 主程序流程图: 图32. 时钟中断程序流程图: 图43. 按键程序流程图:图5五、实验结果分析:此数字闹钟设计是利用protues仿真软件进行仿真。基本上实现了要求的功能,该多功能数字钟实现的时钟显示、闹钟功能,校准时钟时只设计了时加键和分加键以及清零键,没有设置减分减时键。可发通过循环调节得到正确的调节数值。本程序共有分端口设置模块,计数模块,显示模块等几个模块。经过调试,本程序可以实现题目的要求。时、分、秒都分两位。个位满十后就向前进一位。分秒的十位满六十后也向前进一位。显示小时两位在满二十四后重新计数。程序中设置5个开关控制,从上到下5个开关KEY1KEY5的功能分别为: KEY1,调节时间,每调一次分加1;KEY2, 调节时间,每调一次时加1;KEY3,从其它状态切换至时钟状态;KEY4,切换至闹钟设置状态;KEY5,闹钟关闭和开放.控制键分别与P1.0P1.4口连接应该注意的是,经仿真,程序中设置的功能全都可以良好运行。下面对几个重点部分的调试过程和遇到的问题作一定的讨论:1.修改后的中断服务子程序(改变进位的条件)其中进位的条件判断以及后面的闹铃的程序段位置的设置都与程序结果有很大的关系.进位判断特别要注意仔细,编程实现前应该画个流程图,直接再源文件上改不但不能节省时间,反而更加浪费时间。2.在程序中要注意延时程序的使用,否则可能产生按键或led显示失灵。六、设计心得通过对数字闹钟的编程实现,对硬件特别是单片机的原理和实现都有了很深的解。更加深了对C语言和汇编的使用.整个程序中涉及单片机的使用,C语言和汇编语言熟练掌握的要求。可以说整个文件中最麻烦的就是进位条件的判断,编程中经常犯想当然的错误。另外对于中断服务子程序的类型设置问题,由于以前对这个概念的理解留于表面,编程中出现了不少奇怪的错误。再调试中尝试使用了分割法,对错误模块进行定位,再进行排查.在算法实现上要有一定的思路要更能体现设计的目的。同时上机调试也是十分重要的,在调试的过程中能够不断的发现在编写算法时应该注意的一些细节和算法语句的非法使用,在调试过程中通过对算法的不断测试、更正、扩充功能、修饰细节,使算法程序不断的得到完善。通过这次的课程设计使我认识到要将微机原理这门计算机专业的课学好不仅仅是要把书上的基本知识学好而且还要不断进行实践,将所学的跟实践操作结合起来才能更好地巩固所学,才能提高自己实践能力.通过这次的设计使我认识到只停留在表面理解问题是很难使问题得到很好的解决的,实践能力与理论知识同样重要。可以说此课程设计的理论难度并不大,但是若要深入发掘其中的东西,并且实际去编程实现,就遇到了相当大的难度。因为与之涉及的很多方面并没有学过,需要自己去自学和实践检验。所以在以后的学习中一方面我要不断的巩固自己所学的理论知识,一方面还要多参加实际操作工作以便提高自己的实际操作能力。其实这次课程设计的最大收获应该是找到了解决问题的几个很好的途径:1.讨论2.通过网络,在自己的网站上也收获了很多,共享让我们共同进步。此外,我学会了看硬件结构图,并学会了自己去独立的完善一个程序,对程序的效用等做思考。并体会到:问别人只能帮你开拓思路,真正解决问题还是要靠自己去摸索。当然讨论是很好的学习途径,它会让你事半功倍.由于时间不是很充裕,程序中有很多值得改善的地方,我尝试再其中加入更多的功能,但调试的结果没有,所以需要继续努力。七、 程序清单#include<reg51.h>#define uchar unsigned char#define uint unsigned intuint tcount,u;dat2=0,0,0,0,0,0,0,0;/uchar dat1=0,0,0,0,0,0,0,0;/时钟定时缓冲区uchar alarms=0,0,0,0,0,0,0,0;/闹钟定时缓冲区uchar dis_bit=0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01;/unsigned char code SEG711=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,;/共阳极led数码管"09","-"的字段码sbit tminute=P10;sbit thour=P11;sbit shizhong=P12;sbit alarm=P13;sbit alarmswitch=P14;sbit P0_4=P04;sbit P0_0=P00;uint sw=0;uchar k;uchar ms=0;uchar flag=0;/闹钟切换标志位uchar sec=0;/闹钟计时秒uchar minit=0;/闹钟计时分struct timeuchar second;uchar minute;uchar hour;time1;/定义名为time的结构体,变量名time1 uchar n,i;void delay(n)/1ms延时函数 while(n-) for(i=120;i>0;i-); void modify(void)/时间调整 EA=0; if(thour=0) if(flag=0)/时钟调整每次加1 dat16+;delay(200); if(dat16>3&&dat17=2) dat16=0;dat17=0; if(dat16>9) dat16=0;dat17+;if(dat17>2) dat17=0; if(flag=1)/闹钟时钟定时 alarms6+;delay(200); if(alarms6>3&&alarms7=2) alarms6=0;alarms7=0; if(alarms6>9) alarms6=0;alarms7+; if(alarms7>2) alarms7=0; if(tminute=0)/分钟调整每次加1 if(flag=0) dat13+;delay(200); if(dat13>9) dat14+;dat13=0;if(dat14>5) dat14=0; if(flag=1)/闹钟分钟定时 alarms3+;delay(200); if(alarms3>9) alarms4+;alarms3=0; if(alarms4>5) alarms4=0; if(shizhong=0)/时钟返回,秒表显示和缓冲初始化 flag=0; if(alarmswitch=0) if(sw=0) sw=1; P0=0x10;else sw=0; P0=0x00; delay(500); if(alarm=0)/闹钟键按下,显示00-00-00flag=1; alarms0=0; alarms1=0;alarms2=10; alarms3=0;alarms4=0;alarms5=10;alarms6=0;alarms7=0; EA=1; void init(void)/初始化TMOD = 0x11; TH0 = 0xDB;TL0 =0xFF;/工作方式3(两个8位定时/计时器(只有T0有),定时24 ET0 = 1; TR0=1; tcount=0;u=0;P0=0x00;EA = 1;/开放中断 void test(void) for(k=0;k<8;k+) if(flag=0) P3=dis_bitk;P2=SEG7dat1k; delay(1);P3=0X00; if(flag=1) P3=dis_bitk;P2=SEG7alarmsk; delay(1);P3=0X00; void main() init(); delay(10); while(1) /括号的“1”表示while()判断条件为真,只要不是“0”,这个循环就一直循环下去,要跳出这个循环,只能在子程序里设置出口。 modify(); test(); void diplay() interrupt 1 /定时/计数器T0中断 time1.second=dat10+dat11*10; time1.minute=dat13+dat14*10; time1.hour=dat16+dat17*10; ET0=0; TR0=0; TH0 = 0xDB; TL0 = 0xff; TR0=1; tcount+; if(tcount=100) time1.second+; tcount=0;dat10=(time1.second)%10;dat11=(time1.second)/10; if(time1.second>59) time1.second=0; time1.minute+; dat10=(time1.second)%10;dat11=(time1.second)/10; dat13=(time1.minute)%10;dat14=(time1.minute)/10; if(time1.minute=60) time1.minute=0; time1.hour+; dat13=(time1.minute)%10;dat14=(time1.minute)/10; dat16=time1.hour%10;dat17=time1.hour/10; if(time1.hour>23) time1.hour=0; dat15=10; dat12=10; if(alarms7=dat17)&&(alarms6=dat16)&&(alarms4=dat14)&&(alarms3=dat13)&&(sw=1) P0=0x11; ET0=1;八、参考文献1. 微型计算机原理与接口技术(中国科学技术大学出版社)2. 戴梅萼等. 微型计算机技术及应用.北京:清华大学出版社,20033. 王成耀等. 汇编语言程序设计.北京:机械工业出版社,20044. 单片机原理与应用及C51程序设计(清华大学出版社)九、附录(At89c51资料)(一)、AT89C51功能及管脚图: VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。    P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。     P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。    P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。    EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。    XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。    XTAL2:来自反向振荡器的输出。

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开