单片机课程设计报告.docx
- 文档编号:26324867
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:18
- 大小:374.75KB
单片机课程设计报告.docx
《单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。
单片机课程设计报告
文华学院
单片机原理及应用
课程设计报告
姓名:
学号:
学部(系):
专业年级:
指导老师:
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机接收
3、设计思路
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的共阳极数码管编码如下所示:
共阳极数码管编码
0xc0
0xf9
0xa4
0xb0
0x99
0
1
2
3
4
0x92
0x82
0xf8
0x80
0x90
5
6
7
8
9
五、硬件设计
图2电路布线图(protel)
图3PCB图
元器件清单
元件名称
参数/型号
说明
封装
数量
1
单片机
89C51
厂家:
ATMEL
DIP-40
1
2
IC插座
DIP40
双列直插式/40个引脚孔
1
3
晶体振荡器
12MHZ
石英晶体振荡器
(非温度补偿式)
直插式
1
4
数码管
HS-5101BS2
6
5
IC插座
单排针插座/16个引脚孔,间距2.54mm
说明:
串口下载RS232
1
6
RS232通讯
MAX232
DIP
1
7
普通按键
DTS65K
3
8
复位按键
6*6*4.3
1
9
瓷片电容
30pF
直插式
2
10
电解电容
104
0.1uF
直插式
6
11
电阻
1kΩ
6
12
电阻
10kΩ
4
13
电阻
510Ω
6
14
直流电源
GM-050100
5V/1A
1
15
电源插头
DC座(中号)
与直流电源的插口直径相同
1
16
串口接口
9针
1
17
USB转串口线
9针
1
18
三极管
9014
6
19
电源拨动开关
单排
1
20
制PCB板
1
六、软件设计(含流程图)
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.显示程序
3.按键子程序
7、调试(遇到的问题和解决方法)
1、输人源程序。
2、先调试主程序,实现基本的显示功能。
3、当无键按下时,将一直显示初值“00”。
4、再调试查询服务程序。
5、当按键S2按下时,程序将会跳转到启动子程序,启动定时器开始计时。
7、当按键S3按下时,程序将会跳转到停止子程序,定时器停止计时,秒表显示内容保持不变;当按键S3在次按下时定时器开始计时。
8、当按键S4按下时,程序将会跳转到清零停止子程序,停止定时器工作,秒表显示清零。
9、最后将各模块联调实现全部功能。
遇到的问题和解决方法
这次课设我用的是汇编对我来说是一个新的挑战,在程序设计过程中也遇到了很大的困难,开始对编程软件不熟悉,就连很小的问题也调试了很久,后来慢慢的解决了这些问题自己也学到了许多东西。
1.在调试时,遇到的最大的问题就是在使用开关查询的时候,对开关进行只按不松也会计时,停止和清零也是这样。
后来加了一个按下开关时不计数,弹起来的程序,也就是等待。
2.在开始做的时候自己没把原理图看清楚,还是采用以前共阴极的方式来做结果数码管不亮。
后来问同学知道这是共阳极的位选要给1、段选给0就可以亮了。
3.设置的暂停键只能暂停,不能恢复,只能重新按启动键才能开始计数。
开始就把问题锁定在暂停程序那里,我发现我最开始编写的是按下暂停,则CLRTR0,关闭了启动,后来我改成了CPLTR0,将TR0取反这样再按下去就可以恢复。
4.按键没有消抖在后来调试中通过老师讲的必须消除抖动的不良后果,所以我加了一个延时10ms的子程序,从而消除抖动的影响。
8、改进意见
主要是暂停按键按下暂停在按一下启动是有时候有点不灵敏,我想主要的原因可能是在按键扫描时但我们再次按下时CPU没有及时反应过来花费时间在扫描按键上去了,我后来通过自己去查资料去学习问题的所在。
我用的是查询方式做的后来自己看书把中断方式也写了通过改进把程序在完善,通过自己的学习编写程序多加一些功能。
九、收获及体会
通过这次的设计使我认识到我对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,有很多我们需要掌握的知识在等着我去学习,我会在以后的学习生活中弥补我所缺少的知识。
在做本次课程设计的过程中,为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。
其次,在这次课程设计中,我们运用到了以前所学的专业课知识,这是我做这次课程设计的又一收获是要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。
发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。
设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
我们通过查阅大量有关资料,若遇到实在搞不明白的问题就会及时请教同学,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
我觉得作为一名自动化专业的学生,单片机的课程设计是很有意义的。
更重要的是如何把自己平时所学的东西应用到实际中。
我认为这个收获应该说是相当大的。
本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。
在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争。
10、源程序(含注释)
简易时钟(时分秒)
ORG0000H;初始化程序入口地址
AJMPMAIN;主程序
ORG0030H;程序入口地址
MAIN:
MOVTMOD,#01H;定时器T0工作于方式1
MOVDPTR,#TABLE;DPTR指向TABLE表首地址
MOVR1,#59;秒表时间置初值
MOVR2,#59;分钟时间置初值
MOVR3,#23;小时时间置初值
LP1:
MOVR0,#20;软件计数器置初值
LP2:
MOVTH0,#3CH;置50ms定时初值高位
MOVTL0,#0B0H;置50ms定时初值低位
LP3:
LCALLDISP;调用显示程序
JNBP3.2,K1;判断启动键是否按下
JNBP3.3,K2;判断停止键是否按下
JNBP3.5,K3;判断清零键是否按下
JNBTF0,LP3;判断中断标志位是否溢出
CLRTF0;定时50到ms,则中断标志位清零
DJNZR0,LP2;中断二十次
MOVR0,#20;重新装软件计数器初值
INCR1;1秒时间到,秒表数加一
CJNER1,#60,LP1;与60比较,小于60就跳转
MOVR1,#0;若秒表数加到60秒,则清零
INCR2;60秒时间到,分钟数加一
MOVA,R2;R2地址里面的数赋给A
CJNEA,#60,LP1;与60比较,小于60就跳转
MOVR2,#0;若秒表数加到60分钟,则清零
INCR3;60分钟时间到,小时数加一
MOVA,R3;R3地址里面的数赋给A
CJNEA,#24,LP1;与24比较,小于24就跳转
MOVR3,#0;若秒表数加到24小时,则清零
K1:
LCALLDELAY;按下,调用显示子程序
LCALLDISP;消除抖动
JBP3.2,LP3;判断启动键是否释放
SETBTR0;启动T0
LJMPLP3;跳转到启动键是否按下的指令段,不断判断
K2:
LCALLDELAY;按下,调用显示子程序
LCALLDISP;消除抖动
JBP3.3,LP3;判断暂停键是否释放
CPLTR0;取反TR0
LJMPLP3;跳转到暂停键是否按下的指令段,不断判断
K3:
LCALLDELAY;按下,调用显示子程序
LCALLDISP;消除抖动
JBP3.5,LP3;判断清零键是否释放
CLRTR0;关闭T0
MOVR1,#0;秒表时间清零
MOVR2,#0;分钟时间清零
MOVR4,#0;小时时间清零
LJMPLP3;跳转到清零键是否按下的指令段,不断判断
DISP:
MOVA,R1;显示程序,先将秒表计时值给累加器作为被除数
MOVB,#10;除数为10,存放在B累加器
DIVAB;当前值除以10
MOV20H,A;得出的商送给十位
MOV21H,B;得出的余数送给个位
MOVA,20H;十位显示
MOVCA,@A+DPTR;查表找个位数段码
MOVP0,A;将个位段码送给P0口
SETBP2.4;用第一个数码管显示十位数
LCALLDELAY;延时
CLRP2.4;清零
MOVA,21H;个位显示
MOVCA,@A+DPTR;查表找个位数段码
MOVP0,A;将个位段码送给P0口
SETBP2.5;用第二个数码管显示十位数
LCALLDELAY;延时
CLRP2.5;清零
MOVA,R2;显示程序,先将分钟计时值给累加器作为被除数
MOVB,#10;同理秒表显示程序
DIVAB
MOV30H,A
MOV31H,B
MOVA,30H
MOVCA,@A+DPTR
MOVP0,A
SETBP2.2
LCALLDELAY
CLRP2.2
MOVA,31H
MOVCA,@A+DPTR
MOVP0,A
SETBP2.3
LCALLDELAY
CLRP2.3
MOVA,R3;显示程序,先将小时计时值给累加器作为被除数
MOVB,#10;同理秒表显示程序
DIVAB
MOV40H,A
MOV41H,B
MOVA,40H
MOVCA,@A+DPTR
MOVP0,A
SETBP2.0
LCALLDELAY
CLRP2.0
MOVA,41H
MOVCA,@A+DPTR
MOVP0,A
SETBP2.1
LCALLDELAY
CLRP2.1
RET
DELAY:
MOVR5,#10;延时子程序(1ms)
DL0:
MOVR4,#50
DJNZR4,$
DJNZR5,DL0
RET;延时子程序返回
TABLE:
DB0C0H,0F9H,0A4H,0B0H,99H;共阳极0-9显示代码
DB92H,82H,0F8H,80H,90H
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 报告