单片机课程设计格式.docx
《单片机课程设计格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计格式.docx(21页珍藏版)》请在冰豆网上搜索。
![单片机课程设计格式.docx](https://file1.bdocx.com/fileroot1/2023-7/21/f6fe7765-fd7f-4602-9557-8b5ef0bada8a/f6fe7765-fd7f-4602-9557-8b5ef0bada8a1.gif)
单片机课程设计格式
封面:
单片机课程设计
题目:
班级:
计算机一班
学号:
20118661
姓名:
田周
学号:
20118663
姓名:
刘赫业
指导老师:
谭业梅
完成日期:
2013/6/26
设计任务书
设计题目
秒表系统的设计
设计任务
以AT89C51单片机为控制中心,设计一个两位LED显示的电子秒表。
设计方案
[1]现实时间为00~99秒,每秒自动加1。
[2]设计一个“开始按键”、“暂停键”、及一个“复位清零键”。
[3]计时精度:
误差≤1秒/月(具有微调设置)。
[4]基本电路包括:
单片机最小系统、LED显示电路、独立键盘电路等。
[5]提交设计报告、电路图及程序源码。
[6]电子妙表具有倒计时功能,即时时间到,蜂鸣器启动。
任务分配
一起做
正文
摘要:
一引言
本文设计了一种以单片机AT80C51为核心的数字频率计。
介绍了单片机、数字译码和显示单元的组成和工作原理。
实现开始键用来控制秒表工作的开始;暂停键用来暂停程序的运行;上翻键是正计数的开始,下翻键是倒计时的开始,利用暂停键停止;复位清零键是用来对程序复位用的,当程序出现死循环或想从00开始重新计时,按下复位键可返回程序开始,重新执行。
系统简单可靠、操作简易,能基本满足一般情况下的需求。
既保证了计时精度,又使系统具有较好的实时性。
本秒表系统设计简洁,便于携带,扩展能力强,适用范围广。
二总体方案
本系统采用单片机AT80C51为LED显示屏的控制核心,系统主要包括LED显示电路,复位电路,时钟振荡电路等。
2.1显示电路
方案一:
使用LED数码管显示
该方案控制最简单,根据设计要求显示格式XXXX。
可以准确的显示频率大小,又由于数码管简单便宜且满足设计要求,所以选着数码管显示比较合理。
顾本次设计选择方案一。
方案二:
使用LCD1520液晶显示
点阵液晶可以显示多种字符及图形,拥有友好的人机界面及强大的显示功能。
特别适用于智能控制的可编程人性化显示。
但是比较复杂。
使用不方便。
增加了难度。
2.2主控制器选择
方案一:
采用MCU内部定时器
AT80C51内部含有2个定时器,可以利用一个定时器计时与一个定时器计数方式采集信号。
方案二:
采用数字逻辑芯片
本系统有功能设置、数据装入、定时、显示、音响控制多个功能模块。
各个状态保持或转移的条件依赖于键盘控制信号。
由于键盘控制信号繁多,系统的逻辑状态以及相互转移更是复杂,用纯粹的数字电路或小规模的可编程逻辑电路实现该系统有一定的困难,需要用中大规模的可编程逻辑电路。
这样,系统的成本就会急剧上升(相对于方案一)。
因此,本设计并未采用这种方案。
由于方案一具有较好的灵活性、较少的电路器件和较高的性价比,而且通过精确的软件补偿使精度完全可以满足控制需要,所以我们选择该方案完成设计。
2.3计时方案选择
方案一:
采用MCU内部定时器
AT80C51内部含有2个定时器,可以利用一个定时器计时与一个定时器计数方式采集信号。
方案二:
使用专用时钟芯片
使用微控制器控制专用时钟芯片实现计时控制,这种方案有着计时精度高、控制简单的优点,而且更易于实现日期/时间显示、定时等计时扩展功能。
由于方案一具有较好的灵活性、较少的电路器件和较高的性价比,而且通过精确的软件补偿使精度完全可以满足控制需要,所以我们选择该方案完成设计。
三硬件设计(可以按各实现模块分)
为使该模块化LED显示屏控制系统具有更加方便和灵活性,我们对系统的硬件做了精心设计。
硬件电路包括数字秒表电路设计、电源电路设计、单片机晶振电路设计、单片机复位电路设计。
3.1数字妙表电路设计
数字电子秒表具有显示直观、读取方便、精度高等优点,在计时中广泛使用。
本设计用单片机组成数字电子秒表,力求结构简单、精度高为目标。
设计中包括硬件电路的设计和系统程序的设计。
其硬件电路主要有主控制器,计时与显示电路和回零、启动和快加电路等。
主控制器采用单片机8051,显示电路采用两位共阴极LED数码管显示计时时间。
本设计利用AT89C51单片机的定时器/计数器定时和记数的原理,使其能精确计时。
利用中断系统使其能实现开始和复位的功能。
P1口与P0口为输出段码数据,P0.0、P0.1、P0.2、P0.3、P0.4口接五个按钮开关,分别实现开始、设置、拨位、上翻和下翻的功能。
外部中断0实现暂停的功能,外部中断1实现复位清零的功能。
电路原理图设计最基本的要求是正确性,其次是布局合理,最后在正确性和布局合理的前提下力求美观。
硬件电路图按照图3-1进行设计。
主电路见附录。
3.2复位电路设计
上电自动复位电路是通过外部复位电路的电容充电来实现的。
当电源接通时只要Vcc的上升时间不超过1ms,就可实现自动上电复位。
按键电平复位电路是通过RST端经电阻与电当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。
如果RST持续为高电平,单片机就处于循环复位状态。
上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间用开关操作也能使单片机复位。
上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。
当单片机已在运行当中时,按下复位键RESET后松开,也能使RST保持一段时间的高电平,从而实现上电或开关复位。
为了便于设计的进行,本设计选用按键复位。
图3-2上电复位电路
图3-3按键加上电复位电路
3.3单片机时钟振荡电路设计
单片机的时钟产生方式有两种,分别为:
内部时钟方式和外部时钟方式。
利用其内部的震荡电路XTAL1和XTAL2外接定时元件,内部震荡电路便产生自激震荡,用示波器可以观察到XTAL2的输出时钟信号。
在MCS-52中通常用内部时钟方式,也就是在XTAL1和XTAL2之间连接晶体振荡器与电容构成稳定的自激震荡器。
晶体和电容决定了单片机的工作精度为1微秒,晶体可在1.2-12MHZ之间选择。
MCS-51单片机在通常情况下,使用震荡频率为6MHZ的石英晶体,而12MHZ频率主要是在高速串行通信情况才使用,在这里我们用的是12MHZ的石英晶体。
对电容无严格要求,但它在取值对震荡频率的输出的稳定性、大小及震荡电路起震荡速度有点影响。
C1和C2可在10-100pF之间取值,一般情况下取30pF。
外部时钟方式是把外部震荡信号源直接接入XTAL1或XTAL2。
由于XTAL2的逻辑电平不是TTL,所以还要接上拉电阻。
图3-4外部振荡电路
图3-5内部振荡电路
四软件设计
因为秒表设计相对较为简单,因此在软件设计中我们一般采用模块化程序设计的方法。
模块是一个具有独立功能的程序,可以单独设计、调试与管理,模块可分为功能模块和控制模块两类。
我们通过模块化程序设计可按适当的原则把一个情况复杂、规模较大的程序系统划分为一个个较小的、功能相关而又相对独立的模块。
每个小的模块完成一个确定的功能,在这些小的模块之间建立必要的联系,互相协作完成整个程序要完成的功能。
它具有明显的优点,把一个多功能的复杂的程序划分为若干个简单的、功能单一的程序模块,有利于程序的设计和调试,有利于程序的优化和分工,提高了程序的阅读性和可靠性,使程序的结构层次一目了然。
其中的模块即为子程序,子程序是功能独立的程序段。
子程序的基本思想是编写一次,可以重复使用。
子程序的形式可以是一个程序文件,也可以是一个过程或函数。
子程序总被其他程序调用而不单独执行,这与主程序相对。
这个主程序也是由多个子程序模块组成,各程序模块都要完成一个明确的任务,实现某个具体的功能,暂停、开始、复位,计数和显示等,在具体需要时调用相应的模块即可。
4.1主程序设计
本系统程序主要模块由主程序、定时中断服务程序、外部中断0服务程序和外部中断1服务程序组成。
其中主程序是整个程序的主体。
可以对各个中断程序进行调用。
协调各个子程序之间的联系。
系统复位后,进入主程序,主程序流程图如图4-1所示,部分子程序流程图由图4-2、4-3给出。
首先对系统进行初始化,包括设置各入口地址、中断的开启、对各个数据缓存区清“0”、赋定时器初值,初始化完毕后,就进入数码管显示程序。
在主程序中还进行了赋寄存区的初始值、设置定时器初值以及开启外部中断等操作,当定时时间到后就转去执行定时中断程序。
当外部中断有请求则去执行外部中断服务。
并在执行完后返回主程序。
4.2设置子程序设计
4.3加减1子程序设计
五调试(有调试中出现的问题及该系统实现的优缺点)
根据系统设计方案,本系统的调试共分为三大部分:
硬件调试,软件调试和软硬件联调。
由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试:
定时计数的调试,数码显示的调试等,最后将各模块组合后进行整体测试。
5.1硬件调试
对各个模块的功能进行调试,主要调试各模块能否实现指定的功能。
5.2软件调试
软件调试采用单片机仿真器WAVE6000L及微机,将编好的程序进行调试,主要是检查语法错误。
5.3硬件软件联调
将调试好的硬件和软件进行联调,主要调试系统的实现功能。
5.4测试结果
此次系统设计结果较好,数字电子秒表是由8051单片机、共阴数码显示管、控制按键等器件构成的,设有两位计时显示,开始、暂停以及复位清零按键,计时精度小于且等于1s/月。
六总结
现了用AT80C51单片机模拟数字秒表控制。
输出结果用两个共阴极LED数码管显示。
软件设计时,应用中断子程序和查表的方式
系统总体电路由计时电路,复位电路和显示电路构成。
计时电路由单片机AT80C51中的两个定时器完成。
复位电路由按键复位电路构成。
显示由LED数码管显示电路构成。
通过软硬件的仿真调试,实现了本次设计的基本功能:
开始键实现了秒表开始计时的功能,暂停键实现随时停止的功能,复位键实现了复位清零的功能,设置键控制指示灯的亮灭。
系统还添加了蜂鸣器,起到定时时间到时的提醒作用,拨位开关可以使秒表倒计时,上翻和下翻使秒表随时都可正计时和倒计。
参考文献(按正规格式,参考教材后的参考文献格式)
[1]李川,汪秋蒙.ISP技术的原理及实现方法[J].科技资讯,2007,35期:
93-94.
[2]万光毅.单片机实验与实践教程[M].北京航空航天大学出版社,2005.1.
[3]张毅刚.单片机原理及应用[M].高等教育出版社,2003:
160-190.
[4]赵全利,肖兴达.《单片机原理及应用教程》(第二版)[M].机械工业出版社,2007.
[5]蔡美琴等.《MCS-51系列单片机系统及其应用》[M].高等教育出版社,2003.
[6]吴国经.《单片机应用技术》[M].北京:
中国电力出版社,2003.
[7]胡烨,姚鹏翼,陈明.Protel99SE原理图与PCB设计教程[M].机械工业出版社,2005:
23-99.
[8]马忠梅.单片机的C语言应用程序设计[M].北京:
北京航空航天大学出版社,2006.
[9]周润景.基于Proteus的电路与单片机仿真系统设计与仿真[M].北京:
北京航空航天大学出版社,2005.
附录1程序
org0000h
ajmpmain
org0003h
ljmpzhongduan0
org000bh;设置中断转移位置
ljmpdingshi0
org0013h
ljmpzhongduan1
org001bh
ljmpdingshi1
org0100h
;主程序
main:
movsp,#60h
movtcon,#05h;初始化程序
movtmod,#11h
movie,#85h
movdptr,#table
movr2,#00h
movr3,#00h
mov40h,#100
movr0,#60h
movr1,#70h
movP1,#0FFh
movP2,#0FFh
movP1,#0C0H
movP2,#0C0H
clrp3.6
clrp3.7
clrtr0
clrtr1
kaishi:
jbP0.0,shezhi;判断开始按钮p0.0是否按下,未按
;转移
lcallyanshi;消除抖动
jbP0.0,shezhi
jnbP0.0,$;等待按键松开
movth1,#0d8h
movtl1,#0f0h;设置计数初值
setbet1
setbtr1;开中断1
jbet1,$;等待暂停
;设置程序
shezhi:
jbP0.1,kaishi;判断设置按纽是否按下,未按转移
lcallyanshi;消除抖动
jbP0.1,kaishi
jnbP0.1,$
setbp3.6;打开查时指示灯
ljmpchashi;转到查时
;每秒加减1程序
dingshi1:
movth1,#0d8h;定时一秒
movtl1,#0f0h
setbtr1
djnz40h,looP1;定时一秒
clrP1.7
jbP0.4,loopa;判断加减拨位开关p0.4平调用加1
lcalljian1;程序,低电平调用减1程序
lcallxianshi
mov40h,#100
reti
loopa:
lcalljia1
lcallxianshi
mov40h,#100
looP1:
reti
dingshi0:
movth0,#0d8h;定时10ms用于快加减
movtl0,#0f0h
setbtr0
jb20h,loop0;判断快加减标志位,高电平快加
lcalljian1;低电平快减
lcallxianshi
reti
loop0:
acalljia1
lcallxianshi
loop2:
reti
;快加子程序
shangjia:
jbP0.2,xiajia;判断快加键是否按下,未按转移
acallyanshi;消抖
jbP0.2,xiajia
setb20h;快加减标志位置1
setbet0;开定时器0
movth0,#0d8h
movtl0,#0f0h
setbtr0
jnbP0.2,$;等待快加键松开
clret0
;快减子程序
xiajia:
jbP0.3,stop;判断快减键是否按下,未按转移
clr20h;快加减标志位置0
setbet0;开中断0
movth0,#0d8h
movtl0,#0f0h
setbtr0
jnbP0.3,$;判断是否松开
clret0
;跳出快加减功能子程序
stop:
jbP0.1,shangjia;判断是否按下设置键,未按转移
lcallyanshi
jbP0.1,shangjia
jnbP0.1,$
clrp3.7;关掉快加减指示灯
ljmpkaishi;跳到开始
;暂停子程序
zhongduan0:
lcallyanshi;消抖
jbp3.2,loop7
jnbp3.2,$
clret1;关定时器
clrtr1
clrtr0
loop7:
reti
;复位清零子程序
zhongduan1:
lcallyanshi;消抖
jbp3.3,loop3
jnbp3.3,$
movr2,#00h
mova,r2;把驱动数据放入r0r1所存的地址中
movr3,#00h
mova,r3
clrtr0
clrtr1
acallyanshi
loop3:
reti
;加1子程序
jia1:
incr2
cjner2,#0ah,loop4
movr2,#00h
incr3
cjner3,#0ah,loop4
movr3,#00h
loop4:
ret
;减1子程序;
jian1:
cjner2,#00h,loop5
cjner3,#00h,loop6
movr2,#09h
movr3,#09h
ret
loop5:
decr2
ret
loop6:
movr2,#09h
decr3
ret
;延时子程序
yanshi:
movr6,#20
d2:
movr5,#248
djnzr5,$
djnzr6,d2
ret
;显示子程序
xianshi:
mova,r2
movdptr,#table
movca,@a+dptr
movp2,a
mova,r3
movdptr,#table
movca,@a+dptr
movP1,a
ret
;查时子程序
chashi:
movr0,#60h;进入查时功能后,修改r0r1使
;指向第一个数据存储单元
movr1,#70h
movr2,#00h;刚进入查时功能让显示器显示0
movr3,#00h
lcallxianshi
shangcha:
jbP0.2,xiacha;判断上查键是否按下,未按转移
lcallyanshi;消抖
jbP0.2,xiacha
jnbP0.2,$
cjner0,#64h,loop9;判断是否显示到第四个数,不到继续
ajmpchashi;按顺序显示,到了则回到第一个
loop9:
mova,@r0
movr2,a
mova,@r1
movr3,a
incr0
incr1
lcallxianshi
ajmpshangcha
loopd:
movr0,#64h
movr1,#74h
acallloope
xiacha:
jbP0.3,stop1;判断下查键是否按下
lcallyanshi
jbP0.3,stop1
jnbP0.3,$
cjner0,#60h,loope;判断是否显示到第一个数,不到
ajmploopd;继续按顺序显示,到了再回到最
loope:
decr0;后一个
decr1
mova,@r0
movr2,a
mova,@r1
movr3,a
lcallxianshi
ljmpxiacha
stop1:
jbP0.1,shangcha
lcallyanshi
jbP0.1,shangcha
jnbP0.1,$
clrp3.6;关掉查时指示灯
setbp3.7;打开快加减指示灯
ljmpshangjia
table:
db0c0h,0f9h,0a4h,0b0h,99h,92h,82H,0f8h,80h,90h
end
protues仿真效果图