好文档 - 专业文书写作范文服务资料分享网站

单片机课程设计报告

天下 分享 时间: 加入收藏 我要投稿 点赞

电路原理图:

CD4028 是BCD码4—10译码器,它由4个缓冲输入端口、译码逻辑门和10个缓冲器组成。加至四个输入端口A0~A3的一个BCD码在十个十进制译码器输出十个相应的顺序脉冲,输出为高电平有效。同样,若A3=0,加在输出口具有高驱动能力,以在高输出应用中增强直流和动态性能。BCD-十进制译码器4028的引脚图如上页原理图中所示。

3.3 软件设计

基本思路:

(1)动态扫描显示LED电路程序:

设立8个内部RAM 显示缓冲区 ,将要显示的数据的BCD码送显示缓冲区,程序只需要将显示缓冲区的BCD码,送相应的端口即可。动态扫描显示

例如:将40H-48H 为“时:分:秒:毫秒”显示区 将49H-4FH 为“年:月:日”显示区

(2)动态扫描键盘程序:

循环扫描有无按键,有:判断是何按键,转入相应子程序处理。无:返回主程序执行。

(3)定时器设置与时间处理的程序:

此段为该程序段的关键所在,它决定时间的准确性,和进位的正确性。定时器计

数可用中断方式,也可以用软件查询方式进行。定时器中断定时方式的精确度高。采用软件延时方式要注意每条指令的机器周期的精确计算,否则会造成时间的不准。 (4) 各项功能键的子程序模块:

移位子程序:按下“SHIFT”后左边第一位数字闪动,继续按下“SHIFT”后面数字闪动移位。程序中可设置第二显示缓冲区,将移到要闪动的数字位设为不显示(黑)“0FFH/00H”,程序只需要将两组显示缓冲区的BCD码,分时间间隔发送出去,就会产生数字闪动效果。

数字+/-:将要显示的数据缓冲区的内容取出加一/减一,注意每个位都有自己的位限制,如“时”的位最大数23,“分、秒”最大数59,“月”最大数 12,“日” 最大数 31。两位数一起调整比较方便。还要注意的是计数后二/十进制之间的转换问题。 “存储”:即将修改好的数值存储到显示缓冲区,并返回,进入主程序运行。 软件设计流程图:

开始

时闪烁 再次按下按键1 秒闪烁 再一次按下按键1 分闪烁 再一次按下按键1 毫秒闪烁 判断40H的内容 为0 显示时间 否判断按键 1是否按下 否 初 始 化 判断按键0是否按下 是 判断40H的内容 为1 为0 为1 显示日期 判断按键1是否按下 否 是 日闪烁 再次按下按键1 按键2、3为加、减调整 月闪烁 再一次按下按键1 年闪烁 按下按键4 退出调整并保存 3.4 调试过程 (1)根据实验原理图焊接电路,然后进行硬件调试,用万用表点对点测量,看电路是否焊接好。特别是芯片的引脚,看是否连通,如:AT89C52芯片的18脚与信号连通的话,用示波器测量18脚时就会出现比较标准的正弦波。对按键进行测试时,如果按键没有按下,测量按键两端就会有大概5V的电压,如果按键两端没有电压,说明按键已经按下,按下后其已经接地。

(2)然后进行软件编程,对其进行功能仿真,仿真时要对仿真器进行设置,不然会出现超出地址范围的错误。然后进行断点设置,观察运行状态,看外部寄存器中20H~2AH中单元的变化,看是否达到要求,编程时注意对于在后面将发生变化的寄存器单元要进行清零操作,不然会影响后面的结果,对于加操作后要进行十进制调整,并且DA A的指令只对寄存器A操作。

(3)将编写好的程序用烧录器烧录到AT89C52芯片中,然后再安装到硬件电路板上,

接通5—12V的电源后会先显示时间,按键切换以后将显示日期,再切换后毫秒会闪烁通过+按键可对其进行加操作,—按键进行减操作。依次进行时间的修改,按保存后,再切换将进行从日到年对日期修改。 3.5 遇到的问题及解决方法

(1)当我把程序下载到AT89C52芯片中,然后再安装到硬件电路板上,接通5—12V的电源后,我发现LED数码管只有左边一半是亮的,我编的程序是让所有LED数码管都亮。

解决方法:我用别人的硬件试了一下我的芯片所有LED数码管都亮了,这肯定是我的硬件电路的问题,我找老师帮忙,老师先用万用表检查控制显示的CD4028芯片是否接通,发现是好的,然后用示波器检查AT89C52左边引脚的波形,发现左边第三个引脚没有波形,其次又发现CD4028芯片有一个引脚也没波形,老师断定是我的CD4028芯片坏了,最后老师给我换了一个CD4028芯片,再测试后就好了。 (2)编译后指令超出地址范围。

解决方法:可以采用接力的方式先转到中间再转到所要转的地方,灵活运用指令就会解决一些问题。

(3)按键不是很灵敏,按的太快没反应,或者按键反应太快了按一下跳好几下。

解决方法:按键延时时间太长或太短了,将延时时间调整到10—20毫秒,就可以解决了。

4.实验总结

对单片机AT89C52芯片内部结构以及各引脚功能有了进一步的了解,对硬件的焊接更加熟练,能基本做到不拖焊、虚焊,并且一次成功。第一次接触这么长程序的编写,思路开始很模糊,许多子程序不知道放哪里比较好,有时主程序也很模糊,通过参考别人的程序有了一定的思维,再根据自己的想法对别人的程序进行了一定的修改,就变为自己的东西,通过这次编写,我了解到思维逻辑性要在掌握程序的基础之上,这样才能做到有序,有条理。编写程序思路是很重要的,首先理清思路,画出程序流程图,根据流程图,一步步用指令实现。

参考资料

[1] 陈青.单片计算机原理课程设计指导书.华中科技大学武昌分校2012.1.8 [2] 姜志海.单片微机原理及应用.北京:电子工业出版社.2005.

[3] 李群芳.肖看.单片机原理、接口及应用.北京:清华大学出版社.2005.

附录1 硬件实物图 ORG 0000H AJMP MAIN1 ORG 001BH AJMP T1INT ORG 0030H

MOV A,#1

ADD A,31H ;到10毫秒 DA A MOV 31H,A

CJNE A,#100H,NEXT1 MAIN1: MOV SP,#70H ;初始化 CLR A CLR 20H.1 MOV TMOD,#20H MOV TH1,#06H MOV TL1,#06H SETB EA SETB ET1 SETB TR1 MOV 31H,#00H MOV 32H,#58H MOV 33H,#58H MOV 34H,#23H MOV 35H,#27H MOV 36H,#02H MOV 37H,#12H MOV 38H,#20H

MOV 40H,#0 ;标志位 MOV R0,#31H MOV R1,#32H LOPA:JNB 20H.1,NEXT1 CLR 20H.1

MOV 31H,#0 MOV A,#1

ADD A,32H DA A MOV 32H,A CJNE A,#60H,NEXT1 MOV 32H,#0 MOV A,#1

ADD A,33H DA A MOV 33H,A CJNE A,#60H,NEXT1 MOV 33H,#0 MOV A,#1

ADD A,34H DA A MOV 34H,A CJNE A,#24H,NEXT1 MOV 34H,#0 MOV A,#1

ADD A,35H ;到一秒 ;到一分 ;到一时 ;到一天

9e5gk5ppya0088t3x4ji0cqsi0v0jd00p4c
领取福利

微信扫码领取福利

微信扫码分享