单片机计数器设计报告.docx
《单片机计数器设计报告.docx》由会员分享,可在线阅读,更多相关《单片机计数器设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
![单片机计数器设计报告.docx](https://file1.bdocx.com/fileroot1/2023-7/14/79ddd92c-e5b0-439d-8650-d0ed46b06c09/79ddd92c-e5b0-439d-8650-d0ed46b06c091.gif)
单片机计数器设计报告
单片机系统课程设计报告
学院(部):
电气与信息工程学院
专业:
电气工程及其自动化
学生姓名:
指导老师:
班级:
学号
2013年12月
单片机系统课程设计报告
一:
系统设计要求:
1.最大计数值为:
99时59分59秒9/10秒,约100小时。
2.系统采用2个按键控制输入,其中一个按键用作系统清0,另一个按键用作秒表的启动/停止。
3.系统采用7个LED数码管实现计时显示。
4.电路原理图:
使用protel或visio或proteus绘制。
5.编程思路,用visio画程序设计流程图,且用文字描述
二:
系统设计:
1:
总体方案的设计
数字秒表具有显示直观、读取方便、精度高等优点,在计时中广泛应用。
本设计中用单片机和数码管组成数字秒表,力求结构简单。
设计中包括硬件电路的设计和系统程序的设计。
硬件电路主要有主控制器、控制按钮与显示电路组成。
主控制器采用单片机AT89C51,显示电路采用七位共阳极数码管显示计时时间。
2.硬件设计
2.1.:
输出设计:
设计要求在数码管上进行数据显示,,输出硬件设计可以采用1个BCD七段译码器74LS47驱动数码管的段选端,输出字形信息,采用3—8译码器输出作为动态扫描时数码管的位选痛信号。
这样在一定程度上节约了单片机的硬件资源,也简化了软件设计时的任务量。
在硬件设计时还应当注意一下问题:
(1)数码管接口方法与动态扫描原理;
(2)时、分、秒计数单元地址的分配及BCD码的调整方法;
(3)按键识别与消除抖动的方法。
2.2:
显示设计:
数码管显示可以分为静态显示和动态显示两种。
由于本设计需要采用数码管显示时间,如果静态显示则占用的口线多,硬件电路复杂,所以采用动态显示。
秒表设计原理图如图1.0所示。
单片机采用通用的AT89C51芯片,显示器为7个共阳极LED数码管,用1个BCD七段译码器74LS47驱动数码管(74LS47的输入为BCD码,其输出级为集电极开路输出,可直接驱动七段数码管,具有首尾消零等特点),用3—8译码器74LS138的输出作为动态扫描时数码管的选通信号。
因为采用了上述两个芯片,所以在对数码管进行扫描显示时,只需要单片机的7条I/O线就能完成显示功能。
电路图中采用P1.0~P1.3作为显示数据值的输出,连接在BCD七段译码器74LSs4的13~10管脚上(译码器74LS47的BCD码输入端);P1.4~P1.6作为扫描值的输出端连接在3—874LS138译码器的输入端(74LS138的A,B,C)。
因此,写程序应将P1口的高四位为扫描值,低四位为显示数据值(分离BCD码)。
单片机的P0.0~P0.1分别接在两个开关上,以控制启动/停止和清零。
秒表系统功能如下:
(1)开机时,秒表显示从00:
00:
00:
0开始计时。
(2)按键S1控制秒表的启动/停止。
(3)按键S2控制秒表的清零。
硬件电路按总体框图进行设计:
74LS47
AT89C51
单片机
控制开关
七位数码管
74LS138
图1:
硬件电路总体框图
三:
系统总体电路的设计
AT89C51单片机为主电路的核心部分,各个电路均与单片机相连,由单片机统筹协调各个电路的运行工作。
开始键和暂停键使用了检测的方法,所以需要连到单片机的P0.0和P0.1引脚上,对这两个I/O口进行循环扫描,检测是否按下。
显示电路由七位数码管组成,采用动态显示方式,因此有8位段控制和7位位控制,并且通过74LS47译码器进行控制8位段控制,接P1口,P1.0~P1.3分别控制数码管的abcdefg显示,位控制有3—8段译码器74LS138进行位控制接在P1.4~P1.6的I/O口上,对数码管实现位控制。
系统总体电路如下图所示:
图2:
总体电路图
四:
软件设计
4.1主程序设计
本系统程序主要模块由主程序、定时中断服务程序、显示子程序和扫描子程序组成。
其中主程序是整个程序的主体。
可以对各个中断程序进行调用。
协调各个子程序之间的关系。
主程序:
首先进行初始化。
设置秒表的计时初值为00:
00:
00:
0,设置T0高低位初值,且允许T0中断。
然后检测S1~S2是否按下,当S1按下时,启动T0进行4ms定时,开始进行计时。
系统主程序流程图:
N
主程序
置显示初值:
00.00.00.0
置T0为4ms定时
开T0中断
Y
启动,停止,清零
S1~S2按下
图3:
主程序流程图
4.2:
定时器T0中断服务子程序:
中断服务子程序的作用是进行“时”、“分”、“秒”的计时与显示。
定时器T0用于定时,定时周期设为4ms,中断累计25次(即0.1秒),对0.1秒计数单元进行加1操作。
时间计数值分别存放在2DH(0.1秒)、2CH(秒)、2BH(分)、2AH(时)内存单元中。
在计数单元中采用组合BCD码计数,0.1秒是满10进位,时、分、秒满60进位。
0.1S计时采用内部中断方式计时,通过内部中断设置4ms的定时溢出中断,单片机的频率为12MHz,则机器周期为1us,要实现4ms的定时,在4ms内需要计数N次:
①:
N=4ms÷1us=4000次
令定时器/计数器0工作方式1下,此时计数初值X为:
②:
X=最大计数值M-计数次数N
=65536-4000=61536=0F060H
即向TH0写入计数初值0F0H,向TL0写入计数计数初值60H。
TMOD初始化:
TMOD=00000001B=01H。
GATE=0,C/T=0,M1=0,M0=1.
TCON初始化:
TR0=1,启动T0。
IE初始化:
开放中断EA=1,允许定时器T0中断ET0=1。
定时器T0中断服务程序流程图如图所示:
图4:
TO中断服务流程图
显示子程序DISP:
DISP子程序的作用是分别将时间计数单元2DH(0.1秒)、2CH(秒)、2BH(分)、2AH(时)中的十进制时间值(组合BCD码)转化为个位和十位(分离BCD码)并分别存放在显示缓冲中。
显示缓冲区的地址为20H~26H。
其中20H中存放0.1秒数据,21H~22H中存放秒数据,23H~24H中存放分钟数据,25H~26H中存放小时数据。
由于每一个地址单元内均为分离BCD码,用BCD七段译码器74LS47直接进行译码,因此不需要软件方式对BCD码数据进行译码。
扫描子程序SCAN:
SCAN的作用是把显示缓冲区中的数据依次送往显示器显示。
把扫描值作为高4位,显示数值作为低4位,输出到P1口,以完成显示。
因为采用3—8译码器74LS138作为扫描输出,故用28H单元存放扫描指针,即28H单元中存放的是数码管的序号。
显示时,只需取出20H~26H某一地址中的数据,并从P1口的低4位输出,同时P1口的高四位作为扫描值输出,这样就能保证数码管正常工作。
4.3系统调试
ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件,它可以仿真、分析各种模拟器件和集成电路。
该软件的主要特点为:
实现了单片机仿真和SPICE电路仿真相结合的功能,支持目前主流单片机系统的仿真,提供了软件调试的功能,具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
在电子领域中起到了很大的作用,它的出现仿真不需要先焊接电路板,可以先仿真调试通过之后再焊接电路,节省了不少在硬件调试上花费的时间。
打开已经画好的ProteusDSN文件,双击图中的AT89C51芯片,就弹出一个窗口,在programfile项中通过路径选择在keil中生成hex文件,双击选中后确定,这样仿真图中的AT89C51芯片就已经读取了本设计中的hex文件。
然后进行仿真,仿真图如下所示:
图5:
proteus仿真图
五:
源程序
ORG0000H
JMPSTART
ORG000BH
JMPTIM0
START:
MOVSP,#70H
MOV28H,#00
MOV2AH,#00H
MOV2BH,#00
MOV2CH,#00
MOV2DH,#00
MOVP1,#0F0H
MOVR5,#1
MOVTMOD,#01H
MOVTH0,#0F0H
MOVTL0,#60H
MOVIE,#82H
MOVR4,#25
LOOP:
JBP0.0,N2
CALLDELAY
SETBTR0
MOVA,R5
CPLA
MOVR5,A
N1:
JNBP0.0,$
CALLDELAY
N2:
JBP0.1,LOOP
CALLDELAY
CJNER5,#0,LOOP
CLRTR0
JMPSTART
N3:
JNBP0.1,$
CALLDELAY
JMPLOOP
TIM0:
MOVTH0,#0F0H
MOVTL0,#60H
PUSHACC
PUSHPSW
DJNZR4,X2
MOVR4,#25
CALLCLOCK
CALLDISP
X2:
CALLSCAN
POPPSW
POPACC
RETI
SCAN:
MOVR0,#28H
CJNE@R0,#7,X3
MOV@R0,#00
X3:
MOVA,@R0
ADDA,#20H
MOVR1,A
MOVA,@R0
SWAPA
ORLA,@R1
MOVP1,A
INC@R0
RET
CLOCK:
CJNER5,#1,X4
MOVA,2DH
ADDA,#1
DAA
MOV2DH,A
CJNEA,#10H,X4
MOV2DH,#00
MOVA,2CH
ADDA,#1
DAA
MOV2CH,A
CJNEA,#60H,X4
MOV2CH,#00
MOVA,2BH
ADDA,#1
DAA
MOV2BH,A
CJNEA,#60H,X4
MOV2BH,#00
MOVA,2AH
ADDA,#1
MOV2AH,A
CJNEA,#99H,X4
MOV2AH,#00
X4:
RET
DISP:
MOVR1,#20H
MOVA,2DH
MOV@R1,2DH
INCR1
MOVA,2CH
MOV@R1,A
MOVB,#10
DIVAB
MOV@R1,B
INCR1
MOV@R1,A
INCR1
INCR1
MOVA,2BH
MOVB,#10H
DIVAB
MOV@R1,B
INCR1
MOV@R1,A
INCR1
MOVA,2AH
MOVB,#10H
DIVAB
MOV@R1,B
INCR1
MOV@R1,A
RET
DELAY:
MOVR6,#60H
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
END
六:
总结
经过两个星期紧张而充实的单片机实训,老师所要求的程序最终在自己的努力下调试出来了,并且通过了老师的验收,这次实训让我有了很大的收获。
从刚开始接到课题:
一个计数到99小时59分59秒0.9秒的计时秒表如何实现。
所需的数码管有七位,直接利用单片机的I/O口显然很难实现,通过老师的指导,通过利用扫描方式来控制八段数码管,这样既能节省很多硬件资源,又可以在排线布局方面节省很多时间,使整体电路简洁明了。
因此:
如何实现扫描控制成为了本次课题的重点突破目标。
在前期的准备过程之中,通过认真翻阅课本,分析单片机的内部工作原理和每条语句的功能。
对单片机内部的组成结构和单片机指令运用上应当注意的问题,认真查找参考书,翻阅资料。
有些指令虽然能够使用,但比较复杂,如何更的使用指令,并且更加合理的利用指令方面有所欠缺。
因此,我从图书馆借来许多单片机设计方面的书籍来看,认真分析程序,从程序中结合自己所学过的知识认真分析,如何把指令更好的运用到自己到自己的设计之中去。
在秒表设计的另一设计中:
中断计时功能也十分重要。
如何正确使用指令完成所需要的功能,都需要对程序进行很好的分析。
通过认真调试才能更好的运用。
平时书上所学的零碎的只是进行整理,各种语句的功能和使用方法,只有通过多学多调试,进行仿真才能真正掌握。
在设计过程中出现的问题也是挺多的:
首先由于对程序的编写设计量不足,容易出现不知如何入手的情况,通过对程序多分析,然后自己从一些简单的程序开始编译调试,逐渐熟悉,由简单到复杂,每个程序都是有很多语句组合在一起来实现其功能的,这样在编写时可以减少很多的麻烦。
其次:
有时候,在理论上编程没有什么错误,但是在调试和仿真的时候出现错误,通过查阅资料得知,单片机内部执行程序的有些区域是有限制的,超出区域会出现运行错误。
在仿真时与在理论上也有很多的差别,因为要考虑硬件部分的因素。
通过查找问题出现在哪一部分,并且近一步分析一些相同指令的功能,进行替换之后进行仿真是是否符合仿真电路,解决问题。
在使用proteus绘制电路图示,如何布局才能使整体更合理,如何更好地使用各个单片机的I/O口都需要知晓其原理。
另外,在proteus中如何快速查找各种元件,节约时间绘制电路图时间,都是需要多查阅资料的。
第三:
在编写软件过程中,如何运用编程思想去解决问题,也十分关键。
刚开始编程是,对于如何实现一个键控制秒表的启动和停止,我想了许久,最后想到利用计数奇、偶的不同来控制。
后来在其他资料上看到利用奇偶校验和取反等许多中方法,能够实现相同的功能,但是程序要简洁很多。
让我在学习中不对积累,不断丰富自己的知识。
通过自己的努力,最终实现了软件仿真调试的成功。
虽然在答辩的时候我的表现不够好,说明我的知识还很多欠缺。
但是,通过自己编写程序并进行调试,让我的单片机知识有了很大的提升。
看到只有两位同学采用汇编编写的程序,而我是其中之一,让我为我的努力和收获而高兴。
在很多时候,调试出问题时,自己也想放弃,但是坚持下来才可能成功,我这样告诫自己。
通过本次设计,不仅让我的自主的学习能力有了很大的提升,锻炼了我查阅资料解决问题的能力,而且对自己的毅力也是一次考验。
让我在自己的学习道路上有了更多的积累,为以后的工作打下良好的基础,付出决定收获!
参考资料:
[1]欧伟明.单片机原理与应用.—北京:
电子工业出版社,2009.7
[2]杜树春.基于Proteus和KeilC51的单片机设计与仿真.—北京:
电子工业出版社,2012.2
[3]李忠国,陈刚.单片机应用技能实训.—北京:
人民邮电出版社,2006.11
[4]冯育长.单片机系统设计与实例分析.—西安:
西安电子科技大学出版社,2007.5
[5]任万强.单片机原理与应用.—北京:
中国电力出版社,2007.1
[6]倪志莲.单片机应用技术.—北京:
北京理工大学出版社,2007.6