收藏 分销(赏)

单片机课程设计数字时钟.doc

上传人:快乐****生活 文档编号:9832005 上传时间:2025-04-10 格式:DOC 页数:26 大小:875KB
下载 相关 举报
单片机课程设计数字时钟.doc_第1页
第1页 / 共26页
单片机课程设计数字时钟.doc_第2页
第2页 / 共26页
点击查看更多>>
资源描述
资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。 单片机课程设计报告 课题名称: 数字时钟 一、 设计目的: 随着半导体技术的不断发展, 各种微处理芯片的性价比越来越高, 在各个领域的应用也越来越广泛, 其中MCU在工业控制、 航天航空、 民用家电、 医疗设备等方面占有十分重要的地位。我们在之前所学习的MCS-51系统单片机就是MCU中的一员, 作为低端的8位MCU它具有价格低、 适配器件成熟种类多等优势, 因此尽管现在32位、 16位MCU不断发展, 但8位的MCU仍占有大约50%的市场份额, 同时它也是我们学习MCU的必要的入门途径, 本次实习就是应用我们所学习的MCS-51单片机进行一次实际制作, 要经过从硬件设计、 软件设计、 实验电路调试、 软件调试直至最后作品焊接成型, 这对以前我们所学习的理论知识进行进一步的巩固和深化, 更重要的是学习以MCU为控制核心的应用的实际设计流程及基本的实践动手能力。 二、 设计内容 应用AT89S51及相关器件制做一个LED数码显示电子时钟。所需使用的软件及硬件具体内容如下: 1. 使用软件及器件 1) 软件: Keil uVision2( IDE集成开发环境) 、 ELITE-IV单片机开发系统、 protel99se 2) 器材清单: 序号 名称 数量 备注 1 面包板 1 2 AT89S51 1 3 双位数码块 3 4 12M晶振 1 5 按钮 4 6 三极管9012 6 7 电容30p 2 8 电容104 1 9 电容10uf/10v 1 10 电阻100Ω 7 11 电阻10k 1 12 二极管4148 1 13 导线若干 三、 实习步骤 1. 根据实习内容及所提供元器件, 设计硬件电路, 提供的参考电路见图1, 也可自行设计 1) 复位及晶振电路是单片机最小系统必备部分 2) 三个按钮接在P3.0、 P3.1、 P3.2上用于调整时、 分、 秒 3) P2口送LED数码显示的段码 4) P1.0至P1.5送数码显示控制的位码 2. 根据设计的硬件电路, 在面包板上搭接实验电路 3. 在硬件基础在keil上上进行软件设计, 调试 4. 调试经过后, 向AT89S51烧写程序 5. 将烧写好的AT89S51插接到实验电路中, 验证是否正常, 如果正常说明软、 硬件正确可进行电子时钟焊接制做。 6. 焊接好电子时钟后, 再次上电调试, 验证经过, 实习圆满完成。 注意的问题: l 单片机在锁紧座的正确放法: 单片机缺口朝上。 l 在面包板上接好电路后, 先用万用表测量一下电源及地是否会短路。 l 接电源调试时不能带电插拔元件 四、 元件参数 1.9012 9012是一种最常见的普通三极管。 它是一种低电压,大电流,小信号的PNP型硅三极管 集电极电流Ic: Max -500mA 集电极-基极电压Vcbo: -40V 工作温度: -55℃ to +150℃ 主要用途: 开关应用、 射频放大 2.89S51管脚图 3.双位共阴极数码块管脚图 a1 b1 c1 d1 e1 f1 g1 dp1 a2 b2 c2 d2 e2 f2 g2 dp2 a1 a b f c dp e d g com1 com 部分程序参考流程图 主程序流程图 结束 调按键处理程序 按键处理 调显示子程序 启动定时器 定时器初始化: 时间常数、 工作方式、 中断控制位设置 初始化: 时、 分、 秒、 定时最小单元设置初值 开始 显示程序流程图 返回 显示缓存地址指针加1, 位码左移一位 延时1MS 段码送P2口, 位码送P1口 取显示缓存中数据查表取段码 取显示缓存区首地址, 设置位控制码初始值 是否一轮动态显示结束? 分数据转换BCD码存入缓存区 秒数据转换BCD码存入缓存区 取显示缓存区首地址 开始 时数据转换BCD码存入缓存区 分调整键是否按下? 延时去抖 分调整键是否按下? 秒数据清0 秒是否为60? 秒值加1 秒调整键是否按下? 秒调整键是否按下? 延时去抖 开始 调显示子程序 键盘处理程序流程图 返回 时是否为24? 时调整键是否按下? 时数据清0 延时去抖 调显示子程序 时值加1 秒是否为60? 分数据清0 调显示子程序 分值加1 时调整键是否按下? 定时中断程序流程图 中断返回 时清零 分清零, 取时单元中数据加1 时单元中数据是否为24? 分单元中数据是否为60? 秒清零, 取分单元中数据加1 秒单元中数据是否为60? 50ms清零取秒单元中数据加1 50ms单元中数据是否为20? 取50ms单元中数据加1 重新加载时间常数 开始 ELITE-III系统硬件( V2.0) 介绍 ELITE-IV实物图: 硬件资源介绍: 1.电源输入( 6V) 2.电源开关按钮 3.电源正常指示灯 4.700mA过流指示灯 5.NE555 6.高档一体化红外接受头 7.流水等开关按键 8.Usb取电接口 9.DS1302时钟芯片 10. 流水灯 11. 24C02 12. 93C46 13. ADC0804 模数转换芯片 14. MAX232 15. 串口接口 16. AT89S**ISP切换键 17. 蜂鸣器 18. 复位键 19. 华邦ISP切换 20. COM1座 21. MCU冷启动 22. COM1切换 23. I2C接口 24. A/D内外切换 25. EA切换 26. A/D输入 27. INTO 28. INT_TO 29. SPI接口 30. COM0测试 31. 18B20温度传感器接口 32. KEY_A 33. KEY-B 34. 51单片机 35. 单片机缩紧座 36. A/D调节 37. LCD12864接口 38. 74HC574 39. LCD1602接口 40. ULN 步进电机驱动芯片 41. LCD12232接口 42. 1602、 12232LCD对比度 43. 74HC244 44. LCD12864对比度调整旋钮 45. 4*4键盘 46. 8*8键盘扩展接口 47. 输出5V电源接口 48. 6位8字数码管 49. 数码管开关按键。 50. 步进电机 ( 二) 下载器的安装和使用 一 AT89S系列下载器 1. 打开随机光盘中的”ISPSetup”文件夹, 双击ISPSetup.exe执行安装程序。 2.点击”下一步”, 出现图6对话框, 继续点”下一步”。 3.选择安装路径。 4.点击”完成”按钮, 完成安装过程。 说明: 本软件是对Atmel 的89S系列MCU进行在线下载程序, 打开hex文件之前需要执行”清空”操作, 同时要按下开发板上的 S1和S2 按钮。依次执行”鉴别”—”擦除”—”写入”操作后, 弹起S1和S2按钮, 按复位键, 单片机即可运行刚下载的新程序。 ( 三) 电子钟电路板布线 ( 四) 数字钟程序 程序 #include<reg51.h> #include<absacc.h> #define uchar unsigned char #define uint unsigned int /*七段共阴管显示定义*/ uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF}; /*定义并初始化变量*/ uchar seconde=0; uchar minite=0; uchar hour=12; uchar mstcnt=0; sbit P3_0=P3^0; // second 调整定义 sbit P3_1=P3^1; //minite调整定义 sbit P3_2=P3^2; //hour调整定义 /*函数声明*/ void delay(uchar k ); //延时子程序 void time_pro( ); //时间处理子程序 void display( ); //显示子程序 void keyscan( ); //键盘扫描子程序 /*****************************/ /*延时子程序*/ /****************************/ void delay (uchar k) { uchar j; while((k--)!=0) { for(j=0;j<125;j++) {;} } } /**************************/ /*时间处理子程序*/ /**************************/ void time_pro( void) { if(seconde==60) //秒钟设为60进制 { seconde=0; minite++; if( minite==60) //分钟设为60进制 { minite=0; hour++; if(hour==24) //时钟设为24进制 {hour=0; } } } } /*****************************/ /* 显示子程序*/ /*****************************/ void display(void) { P2=0xfe; P0=dispcode[hour/10]; //显示小时的十位 delay(4); P2=0xfd; P0=(dispcode[(hour%10)])|0X80; //显示小时的个位 delay(4); P2=0xfb; P0=dispcode[minite/10]; //显示分的十位 delay(4); P2=0xf7; P0=(dispcode[minite%10])|0X80; //显示分的个位 delay(4); P2=0xef; P0=dispcode[seconde/10]; //显示秒的十位 delay(4); P2=0xdf; P0=dispcode[seconde%10]; //显示秒的个位 delay(4); } /*******************************/ /*键盘扫描子程序*/ /*******************************/ void keyscan (void) { if(P3_0==0) //按键1秒的调整 { delay(30); if(P1_0==0) { seconde++; if(seconde==60) {seconde=0; } } } if(P3_1==0) //按键2分的调整 { delay(30); if(P1_1==0) { minite++; if(minite==60) {minite=0;} } } if(P3_2==0) //按键3小时的调整 { delay(30); if(P1_2==0) { hour++; if(hour==24) {hour=0; } } } } void timer0(void) interrupt 1 using 0 //定时器0方式1, 50ms中断一次 { TH0=0x3c; TMOD = 0x11; mstcnt++; if(mstcnt==20) { seconde++; mstcnt=0; //对计数单元的清零 } } /**************************/ /*主函数*/ /**************************/ void main(void) { P1=0xff; //初始化p1口, 全设为1 TMOD = 0x11; //time0为定时器, 方式1 TH0=0x3c; //预置计数初值 TL0=0xb0; EA=1; ET0=1; TR0=1; while (1) { keyscan( ); //按键扫描 time_pro( ); //时间处理 display( ); //显示时间 } } 附流水灯实验程序: #include <reg51.h> #define uint unsigned int #define uchar unsigned char uint count,i=0; void main() { TMOD=0x01;//定时器0工作方式1 TH0=0x3c;//装定时器初值高8位, 50ms中断一次 (65536-50000)/256 TL0=0xb0;//装定时器初值低8位, 50ms中断一次 (65536-50000)%256 EA=1;//开中断 TR0=1;//定时器0开始 ET0=1;//定时器0允许中断 while(1);//等待中断 } void timer0()interrupt 1 { TH0=0x3c;//重新设置初值 TL0=0xb0;//重新设置初值 count++; if(count==20) { count=0; P1=~(0X01<<i); //P1接8个LED if(++i==8) i=0; } } 实习心得 机制0973班 杨少波 963107 时光飞逝, 一转眼, 一个学期又接进尾声了, 本学期的单片机综合课程设计也在一周前完成了。 俗话说”好的开始是成功的一半”。说起课程设计, 我认为最重要的就是做好设计的预习, 认真的研究下老师所给的题目。其次, 老师对实验的讲解要一丝不苟的去听去想, 因为只有都明白了, 做起设计来才会事半功倍, 如果没有弄明白, 就迷迷糊糊的去做, 到头来一点收获也没有。最后, 要重视程序的模块化, 修改的方便, 也要注重程序的调试, 掌握其方法。 虽然这次的课程设计算起来在实验室的时间只有五天, 不过因为我们每个小组都有自己的实验板, 因此能够自己带回宿舍里做, 时间还是蛮充裕的。硬件的设计跟布线都要我们自己动手去连接, 软件的编程也要我们不断的调试, 最终一个能完成课程设计的劳动成果出来了, 很高兴它能按着设计的思想与要求运动起来。当然, 这其中也存在着很多问题, 能够总结如下: 第一、 不够细心比如由于粗心大意接错了线, 导致有些数码管不亮等等, 还有由于对课本理论知识的不熟悉导致编程出现错误。 第二、 是在学习态度上, 这次课设是对我的学习态度的一次检验。对于这次单片机课程实习, 我的第一大心得体会就是作为一名工程技术人员, 要求具备的首要素质绝对应该是严谨。我们这次实习所遇到的问题多数都是由于我们不够严谨不够细心照成的。 第三、 在做人上, 我认识到, 无论做什么事情, 只要你足够坚强, 有足够的毅力与决心, 有足够的挑战困难的勇气, 就没有什么办不到的。 在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。经过程序的编写以及设计电路的过程, 加强了我思考问题的完整性和理论联系实际的可行性。经过各个I/O口的接线,使我们对单片机的各个管脚的功能也有了进一步的认识。还锻炼我们个人的查阅技术资料的能力, 动手能力, 发现问题, 解决问题的能力。而且使我们熟练掌握了有关器件的性能及测试方法。 再次感谢老师的辅导以及同学们的帮助, 是她们让我有了一个更好的认识, 无论是学习还是生活, 生活是实在的, 要一步一个脚印的走。课程设计时间虽然很短, 但我还是学习了很多的东西, 使我眼界打开, 感受颇深。 实习心得 机制0973班 谢永福 963116 经过这一周的单片机的实训, 让我有了不少体会。 首先, 经过老师对单片机C51程序设计基础的讲解, 我对C语言程序中的数组、 指针以及函数的一些只是有了更深一步的认识, 而且经过老师对C51时钟芯片实时读写程序, 接口电路设计实例程序和液晶模块实例程序的读取, 让我对时钟芯片和液晶显示的功能有了更深的了解。 然后, 在上机实训中, 老师先让我们调试从课堂中认识的流水灯程序和电子时钟程序, 经过对这两个程序的调试, 我对液晶显示屏、 时钟芯片的工作原理有了更深的理解, 而且经过一些改编, 让我们发现了一些问题, 并经过自己修改, 最后完成实验。 最后, 在开始设计实验时, 先经过老师对我们的演示, 使我们对程序设计有了初步了解, 让后经过自己实践动手, 自己发现解决问题, 最后达到完成程序的问题, 在这过程中, 发现自己平时基本功不够扎实, 不能及时有效的解决问题, 而且不能善于思考问题, 不能对问题有本质上的了解, 而老师的一些点拨让我有些了解, 进而解决问题, 这次实训还是有了不少收获, 对单片机的认识更加深了, 自己动手能力也提高一些。 这次实训虽然其中会有些错误和失败, 但总的来说是受益匪浅, 在运用中发现问题, 解决问题, 就是最大的收获。专心做自己的事, 是一种乐趣; 互相交流, 是大家一起进步的必要过程; 上网查阅资料, 是获得所需信息的有效途径。我想, 这些练习和经验都将是我以后最宝贵的财富!  
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服