单片机课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文华学院
单片机原理及应用
课程设计报告
姓名:
学号:
学部(系):
专业年级:
指导老师:
2016年12月5日
目录
一标题 (1)
二设计内容,设计要求 (1)
三设计思路 (1)
四工作原理 (2)
五硬件设计 (3)
六软件设计(含流程图) (5)
七调试 (9)
八改进意见 (10)
九收获及体会 (10)
十源程序(含注释) (11)
一、标题
简易计时器——LED 数码管显示接口技术应用
二、设计内容,设计要求
1、目的
a.通过简易计时器的制作,熟悉LED 数码管与单片机的接口方式;
b.定时/计数器、中断技术的综合应用;
c.学会简易键盘的使用。
2、明确要完成的任务
a.利用按键构成键盘实现秒表的启动、停止与复位,
b.利用LED 数码管显示时间。
c.进行简单的串行通信。
3、用单片机实现任务
a.如何运用单片机实现计时;
b.如何显示时间;
c.如何利用按键实施对秒表的控制。
d.定时器T0 或Tl 的定时时间作为时钟计时的基准
e.启动与停止定时器工作实现计时。
f.先用两个数码管动态显示时间,时间范围为0-60s
g.用三个独立式按键实现秒表的启动、停止和复位功能。
h.A机发送,B机接收
三、设计思路
1、硬件设计思路
a.采用P0 口输出并联控制两个数码管的8 个段选控制端
b.用P2.0、P2.1分别控制两个LED 数码管的位选控制端
c.动态显示电路接法,LED 采用共阳极数码
d.三个按键采用独立式键盘接法,
e.两个按键连接到外部中断INT0 、INT1 的输人引脚P3.2和P3.3
f.S4按键接到T1的外部脉冲输入引脚P3.5,以中断方式实现键盘输入状态的扫描
g.其中S2为启动按钮,S3为停止按钮,S4 清零按钮。
h.K1为复位键
2、程序设计思路
a.根据设计的总体要求划分出各功能程序模块,分别确定主程序、子程序及中断服务程序结构
b.对各程序模块占用的单片机资源进行统一调配
c.对各模块间的逻辑关系进行细化,优化程序结构
d.设计出各模块程序结构流程图
e.最后依据流程图编制具体程序
f.将整个程序划分为主程序、键盘扫描程序、秒计时程序三大模块
g.其中主程序除完成初始化外,主要由动态显示程序构成
h.秒计时程序由定时器0中断服务子程序构成
i.键盘扫描程序也由各中断服务子程序来实现
四、工作原理
1、计时表
原理图
S1:复位按键S2:启动按键S3:暂停按键
S4:清零按键T1(P3.5) INT1(P3.3) INT0(P3.2)
工作原理图如上图所示,单片机所需的晶振频率由振荡电路提供,复位由复位电路实现。
其中S2为启动按钮,S3为停止按钮,S4为清零按钮,三个按钮分别连接到外部中断INT0 、INT1 的输人引脚P3.2、P3.3和T1的外部脉冲输入引脚P3.5。设置外部中断为下降沿触发,当按键未被按下时,其相应的引脚为高电平,而当按键被按下后,变为低电平,因此有下降沿,产生中断,从而执行相应的外部中断服务程序,实现启动和停止的功能。同理,只要设置T1为计数器,因为计数器是对外脉冲的下降沿计数,当按键按下时,产生下降沿,计数值加1,这样,只要选择合适的计数初值,使其只要加1后产生溢出,也会执行T1的中断服务程序,实现清零的功能。而对1S时间的准确控制可以由定时器T0来控制,这样,就实现了T0、T1、INT0、INT1等4个中断源的运用。
对于数码管,采用P0 口输出并联控制两个数码管的8 个段选控制端,而用P2.0、P2.1分别控制两个LED 数码管的位选控制端,这是动态显示的电路接法,LED 采用共阳极接法,0-9的共阳极数码管编码如下所示:
共阳极数码管编码
五、硬件设计
图2 电路布线图(protel)
图3 PCB图
元器件清单
六、软件设计(含流程图)
K3(S4):001BH 方式2计数,中断,
计数初值:256-1=255,秒计数清0
K1(S2):0013H 下降沿中断,启动T0、T1
K2(S3):0003H 下降沿中断,关断T0,暂停计时
T0:000BH 方式1,50ms定时中断,中断20次为1S。
1. 两个LED 显示的时间由显示缓冲区31H 、30H 单元中的数据决定。动态显示每位的持续时间为lms ,采用软件延时。
2. 1 秒钟的定时采用定时器T0 的方式1 来实现。
3. T0每50ms中断一次,每中断一次计数单元R0 内容减1 ;若计满20 次,秒计数单元R4 内容加1。
4. R4 单元中的数据采用压缩BCD 码按十进制计数,将该单元中的数据拆成个位和十位两个十进制数据后分别送至显示缓冲区的3OH 、31H 单元。
主程序流程图:1.显示程序
2.查询程序
开始
保护现场
设定时器初值
3.按键子程序
七、调试(遇到的问题和解决方法)
1、输人源程序。
2、先调试主程序,实现基本的显示功能。
3、当无键按下时,将一直显示初值“00”。
4、再调试查询服务程序。
5、当按键S2按下时,程序将会跳转到启动子程序,启动定时器开始计时。
7、当按键S3按下时,程序将会跳转到停止子程序,定时器停止计时,秒表显示内容保持不变;当按键S3在次按下时定时器开始计时。
8、当按键S4按下时,程序将会跳转到清零停止子程序,停止定时器工作,秒表显示清零。
9、最后将各模块联调实现全部功能。
遇到的问题和解决方法
这次课设我用的是汇编对我来说是一个新的挑战,在程序设计过程中也遇到了很大的困难,开始对编程软件不熟悉,就连很小的问题也调试了很久,后来慢慢的解决了这些问题自己也学到了许多东西。
1.在调试时,遇到的最大的问题就是在使用开关查询的时候,对开关进行只按不松也会计时,停止和清零也是这样。后来加了一个按下开关时不计数,弹起来的程序,也就是等待。
2.在开始做的时候自己没把原理图看清楚,还是采用以前共阴极的方式来做结果数码管不亮。后来问同学知道这是共阳极的位选要给1、段选给0就可以亮了。
3.设置的暂停键只能暂停,不能恢复,只能重新按启动键才能开始计数。开始就把问题锁定在暂停程序那里,我发现我最开始编写的是按下暂停,则CLR TR0,关闭了启动,后来我改成了CPL TR0,将TR0取反这样再按下去就可以恢复。
4.按键没有消抖在后来调试中通过老师讲的必须消除抖动的不良后果,所以我加了一个延时10ms的子程序,从而消除抖动的影响。