单片机原理及应用课程设计-电子跑表(编辑修改稿)内容摘要:

D 534P 0 .6 /A D 633P 0 .7 /A D 732P 1 .0 /T 21P 1 .1 /T 2 E X2P 1 . 23P 1 . 34P 1 . 45P 1 . 56P 1 . 67P 1 . 78P 3 .0 /R X D10P 3 .1 /T X D11P 3 .2 /I NT 012P 3 .3 /I NT 113P 3 .4 /T 014P 3 .7 / R D17P 3 . 6 / W R16P 3 .5 /T 115P 2 .7 /A 1 528P 2 .0 / A 821P 2 .1 / A 922P 2 .2 /A 1 023P 2 .3 /A 1 124P 2 .4 /A 1 225P 2 .5 /A 1 326P 2 .6 /A 1 427U1S T C89 C5 2X1CR Y S T A LC13 0 pC23 0 pS W 1S W S P S TC31uFR11kR 2 31kR 2 41kP 1 .2R 1 51k 图 3 系统总电路图 3 系统程序设计 总体设计 : 图 4 总体框架图 STC89C52RC NEC8255 数码管驱动电路 4 位数码管显示实时时钟 键盘实现开始暂停复位 晶振时钟电路 复位电路 显示切换电路 5 图 5 主程序流程图 :主程序 本设计中秒表采用定时器 T0 中断完成。 主程序循环调用显示子程序和查键子程序,当端口有开关按下时,转入相应功能程序。 其程序执行流图如图 5 所示。 显示子程序 时间显示子程序每次显示 4 个连续内存单元的十进制 BCD 码数据,首地址在调用显示程序时先指定 [3]。 60H~65H 为秒表计时单元, 70H~75H 为时钟显示单元。 由于采用 7 段共阳极数码管动态扫描实现数据显示,所以显示用十进制 BCD 码数据的对应段码存放在 ROM 表中。 显示时,先取出内存地址中的数据,然后查得对应的显示用段码从 P0 口输出, P2口将对应的数码管选中供电,就能显示该地址单元的数据值。 时间等内部 RAM 初始化 键盘,时钟的初始化 显示初始化时间 有键按下 判断键值 秒表/时钟开始 秒表/时钟暂停 秒表/时钟清零 秒表与时钟切换 N Y 0键 1键 2键 INTO 键 6 图 6 电子时钟程序流程 图时钟初始化 第一次按下 0键 59分 59秒到 60 秒到 第一次按下 0 键 秒个位 +1 分个位 +1,秒位清 0 重置 T0 定时初值 T0 中断服务程序 N N Y Y 7 图 7 跑表程序流程图 第一次按下 3 键 1 秒到 秒 100 秒到 100 秒到 第一次按 0 键下 秒表初始化 秒百十位 +1,秒个位清 0 重置 T0 初始值 十分秒位 +1 秒百十位 +1,秒十位清 0 秒个位 +1,十分秒位清 0 T0 中断服务程序 N N N Y Y Y 8 时钟计时程序 50ms 定时器溢出累加 20 次,使得最小单位为 1s。 此处电子时钟计时最大范围为59 分 59 秒。 如图 6。 秒表 本模块利用了 STC89C52 的定时器 0 进行定时,每隔 50ms 就产生一次中断, 2 次累加从而实现跑表的最小计时单位为十分秒。 按下 2 键后,启动跑表,数码管显示如图7 所示。 再次按下 3 键后,跑表停止,显示所记的时间。 显示的时间范围为 ~秒。 表格 1 电子时钟和秒表的显示 电 子 时 钟 分 秒 秒 表。 秒 其中, 为所显示的数值。 进行初始化时, 均显示的为 00。 跑表程序的流程图如图 7 所示。 定时器 T0 中断服务程序 跑表和时钟显示共用定时器 T0。 定时溢出中断周期设为 50ms,中断进入后先进行定时中断初值校正,当中断累计 20 次(即 50*20=1s)时,对秒计时单元进行加 1 操作。 时钟计数单元地址分别在 70H~71H(秒)、 76H~77H(分)中,最大计时值为 59 分 59秒。 7AH 单元内存放“熄灭符”数据( 0AH),用于时间调整的闪烁功能。 在计数单元中,采用十进制 BCD 码计数,满 10 进位。 9 4 调试及性能分析 硬件调试 硬件调试时可以检查印制板及焊接的质量情况,在检查无误的后可通点检查 LED显示器的点亮状况。 若亮度不理想,可以调整 P0 口的电阻大小,一般情况下取 200Ω 电阻即可获得满意的亮度效果。 实验室制作时,可结合示波器测试晶振及 P0、 P2端 口的波形情况进行综合硬件测试分析。 软件调试 根据上述需求分析得出的思路,进行 C 语言程序的编写。 C 语言程序一共分为三个部分:第一部分是 STC89C52 芯片的初始化;第二部分是 8255 可编程定时 /计数芯片的初始化;第三部分是,模块的编写。 在该电子跑表的设计过程中一共有两个模块: 1. 计时和显示模块; 2. 秒表模块。 在各模块中可编写如 P1=0x55 进行各模块的测试。 软件调试在 Wave 或 Keil C51 编译器下进行,源程序编译及仿真调试应分段或以子程序为单元逐个进行,最后可结合硬件实时调试。 性能分析 设计之初的思路是选择将分,秒分别保存在一个字节的内存单元中,这样在计时的设计上将变得简单,但这样的设计也带来一个问题,那就是在读入用户输入和将时间显示到屏幕上时的 16 进制转到 ASCII 码时,由于涉及到将一个字节内容拆分转化,灵活性受到限制,于是考虑将分,秒的每一位用一个字节储存,这样在进行转化时将节省很多操作时间 ,设计过程中反复修改了程序的结构以达到优化目的 ,在时间显示出现问题后 ,我们进行了单元测试并最终发现了问题 ,在找到问题症结后,我们对显示部分代码及电路进行了完善 [5],最终得到了正确的显 示结果。 按照设计程序分析, LED 显示器动态扫描的频率约为 167Hz,实际使用观察时完全没有闪烁。 由于计时中断程序中加了中断延时误差处理,所以实际计时精度非常高。 可满足多种场合的应用需要。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。