gjx单片机原理及应用课程设计报告Word文件下载.docx
- 文档编号:16634519
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:12
- 大小:213.80KB
gjx单片机原理及应用课程设计报告Word文件下载.docx
《gjx单片机原理及应用课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《gjx单片机原理及应用课程设计报告Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
原理图9
附录2:
源程序10
任务书
题目:
基于单片机的电子时钟设计
设计要求:
(1)利用单片机的定时器,实现时、分、秒显示及设定;
(2)显示采用ZLG7290;
(3)讨论本系统计时误差。
课程设计进度安排:
本次课程设计为期一周。
周一
周二
周三
周四
周五
上午
布置任务、分组
硬件设计
软件设计、调试
验收成果
下午
查资料,定方案
整理资料,写报告
第一章方案设计
本次课程设计任务是设计一个电子时钟。
电子时钟可以用数码管来显示时、分、秒的数字,其中用小数点分隔。
若采用二十四小时计时,“时”的范围是0到24;
若采用十二小时计时,“时”的范围则是0到12,但要另外用一个数码管来显示“A”或者“P”来表示上下午。
程序设计时可采用三个寄存器来存放时、分、秒的当前数值,每过一秒,代表秒的寄存器加一,秒满60则清零,同时分钟加一,小时亦然。
若采用二十四小时计时,时满24清零;
若采用十二小时计时,时满12清零,但要同时翻转一个保存上下午状态的位变量来表示上下午状态的改变。
用按钮接外部中断来控制时和分钟的调整,每按一下秒清零且相应数字加一;
同时保证数值满了就清零不进位,但要改变上下午状态。
该方案计时有误差,误差来源于单片机外接的晶振误差和执行指令带来的微秒级延时。
第二章硬件系统设计
CPU选AT89C51,该单片机有3个并行I/O口,2个外接中断源,2个定时/计数器,可外接24MHz以下的晶振。
实验时,可用定时/计数器1来计时(因为定时/计数器1的中断优先级较低,避免了在设置时钟时进入改变秒的中断,也避免了有时无法修改小时),用外部中断0来修改分钟,用外部中断1来修改小时。
外部中断全部设为边沿触发方式,因为,每按一下按钮,只需改变相应的值一次。
显示数码管可以用ZLG7290。
它可以方便地驱动8个8段的共阴极LED数码管,显示时只需向缓冲区中放入要显示的值即可,并且能够自动刷新,不需要像常规办法一样先通过查表找到段码再循环点亮。
因此,使用这种方法显示时钟可是程序简洁易懂。
连接时只需依次将8951的
、
分别与7290的
相连,8951的外部中断
分别接外部按钮即可。
实验时选择6MHz的晶振。
第三章软件设计
选用R5、R6、R7作为存放时、分、秒的寄存器,可寻址位07H存放上下午的状态。
在6MHz的晶振下,选用定时/计数器1在方式1下工作,定时0.1s,初值设定:
=15535,即3CB0H。
因为每次只能定时0.1s,所以要使用一个专用的寄存器R4来判定定时是否到了1s。
主程序的任务仅为设定初始化并等待中断到来。
在定时/计数器1的中断服务子程序里,要先判断1s的定时是否完成,未完成则直接结束,完成的话则秒加一,如果秒溢出则考虑分和时的改变。
改变后则调用显示子程序刷新显示。
在外部中断0的中断服务子程序里,将分加一,并判断溢出(溢出后仅置零而不复位),最后调用显示子程序刷新显示。
外部中断1的中断服务子程序与外部中断0类似,只不过要注意改变上下午的状态。
下页图分别为主程序、定时/计数器中断子程序、外部中断0子程序、外部中断1子程序的流程图
第四章系统调试
在课程设计过程中,我主要遇到如下方面的问题:
1、刚开始时我将调用显示的程序段放入主函数,但效果不理想。
因为,在调用显示子函数时,需要先关闭中断,但如果正好这时要修改时钟的值,会导致请求无法得到解决。
2、最初编译时遇到“标号重复”的错误。
仔细检查后发现,“START”“LOOP”等标号已在“LEDDISP_ASM.INC”里使用过,修改自己的标号则能编译通过。
3、最初使用CY标志位来存放上下午的标志,结果导致该功能经常出错。
仔细分析后使用可位寻址单元代替,解决了这一问题。
4、修改时钟的值的时候按一下按钮会导致相应的数字家很多次,这是开关的抖动噪声造成的,可以采用硬件或者软件的消抖实现。
5、若晶振选择错误,如选择了12MHz的晶振,则会导致计时时间变快整整一倍。
部分最终运行结果如下页图:
小结
我们经历了一个学期的单片机原理及应用的学习,但是除了实验外并没有多少实践的机会。
课程设计与理论课程和实验有着很大的区别,它是一个综合性很强的课程环节,也是我们所必须经历的一个学习阶段。
在课程设计中,我们在学会理论知识的同时,还会加深自己对这门课程的理解。
在这门课程设计当中,我们能结合到一些其他课程,能巩固一些软件的运用。
通过知识的互相结合,相互渗透,来得到我们所需的数据、结论以及使我们掌握更多的知识。
这次单片机原理及应用课程设计过程中,我发现做编程首要的就是逻辑能力,我们要在最开始就规划出程序的流程。
编程时,一定要细心,尽量避免一些语法错误。
最后,还需要一颗耐心,不断地调试、完善自己的程序。
最重要的,这门课教会了我“做什么”要比“怎么做”难得多。
做任何事都要有一个目标,从一开始就要有一个明确的方向,这样才有意义。
最后还要感谢吴老师的指导和同学们的帮助,让我顺利完成了课程设计。
原理图
说明:
本原理图由“Protel99SE”软件绘制。
源程序
;
定义器件地址及存放单元/变量单元/I2C引脚
ZLG7290EQU70H;
ZLG7290的器件地址
SLADATA63H;
器件的从地址
SUBADATA64H;
器件的子地址
ACKBIT10H;
应答标志位
NUMBYTEDATA62H;
读/写的字节数变量
MTDEQU6EH;
发送数据缓冲器
DISBUFEQU66H;
66H~6DH为显示缓冲区,66H对应最右一位
SDABITP3.0
SCLBITP3.1
RSTBITP3.6
ORG0000H
AJMPSTART1
ORG0003H
AJMPINT0_INT
ORG0013H
AJMPINT1_INT
ORG001BH
AJMPT1_INT;
各程序段入口地址
ORG0100H
START1:
MOVR4,#10
MOVR5,#0
MOVR6,#0
MOVR7,#0;
寄存器赋初值
MOVSP,#70H;
堆栈的选择避开缓冲区
MOVTMOD,#10H
MOVTL1,#0B0H
MOVTH1,#3CH
SETBEX0
SETBEX1
SETBET1
SETBIT0
SETBIT1
SETBEA;
各类中断的设置
LCALLRE7290
MOVR0,#DISBUF
MOVA,#1FH
MOVR2,#08H
MLOOP:
MOV@R0,A
INCR0
DJNZR2,MLOOP
CLR07H
MOV66H,#0AH;
数码管复位,填入熄灭码
SETBTR1
SJMP$
T1_INT:
MOVTH1,#3CH;
重设初值
DJNZR4,T1_EXT;
判定时是否满1s
INCR7
CJNER7,#60,LOOP11
MOVR7,#0
INCR6
CJNER6,#60,LOOP11
INCR5
CJNER5,#12,LOOP11
MOVR5,#0;
时分秒的计算
CPL07H
JB07H,APCHANG
MOV66H,#0AH
SJMPLOOP11
APCHANG:
MOV66H,#16H;
上下午的变换
LOOP11:
MOVB,#10
MOVA,R7
DIVAB;
分离十位和个位
MOV68H,B
MOV69H,A
MOVA,R6
DIVAB
SETBB.7;
显示分隔用的小数点
MOV6AH,B
MOV6BH,A
MOVA,R5
SETBB.7
MOV6CH,B
MOV6DH,A
CLREA
LCALLLEDDISP;
调用显示子程序
SETBEA
T1_EXT:
RETI
INT0_INT:
CJNER6,#60,E0_EXT
E0_EXT:
LCALLLEDDISP
INT1_INT:
CJNER5,#12,E1_EXT
JB07H,APCHANG1
SJMPE1_EXT
APCHANG1:
MOV66H,#16H
E1_EXT:
$INCLUDE(LEDDISP_ASM.INC);
包含LED显示模块程序
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- gjx 单片机 原理 应用 课程设计 报告