基于单片机的倒计时钟的设计内容摘要:

显示的控制。 显示子程序流程图如图 13所示。 执行主程序 执行一条指令 定时器 0 有中断请求 取 下一条指令 保护现场和断点 定时器 0 中断服务程序 恢复现场 返回 否 是 14 图 13 显示子程序流程图 键盘扫描 子程序 流程图 在本设计中由 8255 的 PC口控制 4*4键盘,其中 PC口低四位控制行,PC口高四位控制列。 通过逐行扫描给各行的各个键赋键值并判断那个键按下。 键盘扫描子程序流程图如图 14所示。 定义字型码 给 8255 PB 口赋段选值 给 8255 PA口赋位选值 调用延时子程序 在相应的位显示值 给 PA 口 PB 口赋不同的值 循环 6 次 开始 子程序返回 15 图 14 键盘扫描子程序流程图 4 系统调试 整体电路仿真以 及仿真结果分析 系统仿真用的是 Protues 软件,可通过仿真显示出所设计系统的功能,对于程序的调试等有很大的帮助。 系统仿真时如果使用 C 语言编程或 C 语言与汇编语言联合编程,一般使用Keil C 译码器,把所写的程序进行编译,同时在仿真器里设置生成 HEX 文件,编译无错进行 Protues 仿真。 等所有的元件都连接完成后可以把 Keil C 生成的无错误文件编译加载到 AT89C51 中,然后点击运行。 开始 PC0 口置 0 PC口高四位为全 1。 PC1 口置 0 PC口高四位为全 1。 PC2 口 置 0 PC口高四位为全 1。 PC3 口置 0 PC口高四位为全 1。 子程序返回 读入 PC口值 读入 PC口值 读入 PC口值 读入 PC口值 查表对照求出键值 查表对照求出键值 查表对照求出键值 查表对照求出键值 执行键功能 执行键功能 执行键功能 执行键功能 Y N Y N Y N Y N 16 启动 Protues 软件的运行按钮,用矩阵键盘设定倒计时初值。 按下相应的键 6 次,数码管上从左到右依次显示 6个 数字从而设定初值,当按开始键时,数码管上的数值减 1,也就是 1s计时时间到了,如果中间按暂停键则暂停倒计时,当之后第二遍再按暂停键则继续开始倒计时,若按停止键则停止倒计时。 数码管显示 功能的调试 数码管显示功能正常,按运行键时,单片机和 8255 各引脚的高低电平显示正常。 但按键功能有点异常,致使显示无数据。 如图 15所示: 图 14 数码管显示功能调试图 5. 总结 本系统存在的问题及改进措施 存在的问题 本系统存在的主 要问题是软件上的问题,其中键盘扫描电路程序编译运行是正确的,但加载到单片机上无法实现按键在数码管上显示初值的功能。 键盘扫描程序是按逐行扫描进行的,把错误锁定到这一块之后仔细检查也未查出错误。 改进措施 ( 1) 变换编程的思路 本设计现在采用的是逐行扫描,在每一行读入 PC口值,查表对照求出键值。 逆变换思路采用逐行逐列循环扫描实现键盘扫描功能。 ( 2) 分块调试程序定位错误 把程序的各个模块写成单独的程序文件,加载到单片机中,运行看结果,如果这个模块运行的结果正确,则说明这个模块的程序没问题,如果这个模 块运行的结果错误,则说明这块有错,然后主要修改这块的错误。 心得体会 17 ( 1) 在本次课程设计中,我对 AT89C5 8255A、 74LS37 7SEG 系列显示器、按键 矩阵键盘 等都加深了了解,巩固了对它们的使用,对于硬件和软件综合运用有了更深一步理解,为以后的电路分析和设计奠定了一定的基础。 ( 2) 在本次课程设计中,我们将课本理论知识与实际应用联系起来,加深了对课本知识的认识理解,也加深了对电路设计方法和实际电路连接的实践知识。 拿到课程设计题目后,我们按照书本上的知识和老师讲授的方法,首先和同学一起分析研究此次 电路设计任务和要求,然后按照分析的结果进行实际连接操作,检测和校正,再进一步完善电路。 ( 3) 在本次课程设计中,我们普遍感到不仅实际电路设计能力有所提高,更重要的是通过对电路设计的学习和了解,进一步激发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。 参考文献 [1] 郭文川主编 . 单片机原理与接口技术 . 北京:中国农业出版社, 2020. [2] 百度文库 , 20200707. [3] 道客巴巴 , 20200709. 附录 1: 倒计时钟 系统的源程序清单 include include /*******************************宏定义 *******************************/ define uchar unsigned char define uint unsigned int /************************定义 8255 各端口地址 **************************/ define porta XBYTE[0x7F00] define portb XBYTE[0x7F01] define portc XBYTE[0x7F02] define caddr XBYTE[0x7F03] /*******************************接口定义 *****************************/ sbit cs = P2^7。 /***************************定义全局变量 ******************************/ uchar keys[6]。 18 uchar key,temp。 uint i。 uint flag=0。 uchar h,m,s。 uint x=0。 /***************************共阴极字型码 ****************************/ uchar code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}。 /***************************毫秒延时子程序 ******************************/ void delayms(uint i) { uchar j。 while(i) { for(j=0。 j115。 j++)。 } } /***************************显示 子程序 *************************/ void disp() //时间的显示变量时分秒 { portb = table[h/10]。 //数码管显示段选,第一位数字显示时的十位 porta = 0xfe。 //数码管显示位选 delayms(3)。 //延时显示 portb = table[h%10]。 //第二位数字显示时的个位 porta=0xfd。 delayms(3)。 portb = table[m/10]。 //第三位数字显示分的十位 porta=0xfb。 delayms(3)。 portb = table[m%10]。 //第四位数字显示分的个位 porta=0xf7。 delayms(3)。 portb = table[s/10]。 //第五位数字显示秒的十位 porta=0xef。 delayms(3)。 portb = table[s%10]。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。