基于单片机数字时钟课程设计Word文档下载推荐.docx
- 文档编号:19601382
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:29
- 大小:442.64KB
基于单片机数字时钟课程设计Word文档下载推荐.docx
《基于单片机数字时钟课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于单片机数字时钟课程设计Word文档下载推荐.docx(29页珍藏版)》请在冰豆网上搜索。
用C语言和汇编语言进行程序编写。
方案二:
用VHDL语言进行编写。
两种方法都非常好而且比用单个数字芯片制作简单,但考虑到制作的成本,我选着方案一,单片机价格便宜,市场价5元。
而CPLD器件的价格在几十元以上。
2、设计原理
2.1单片机STC89C52简介
STC89C52是一个低电压,高性能CMOS型8位单片机,片内含4KB的可反复擦写的Flash只读程序存储器(ROM)和128B的随机存取数据存储器(RAM),器件采用STCMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-52指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的STC89C52为用户提供了许多高性价比应用场合,可灵活应用于各种控制领域。
STC89C52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,STC89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
主要特性:
·
与MCS-52兼容
4K字节可编程闪烁存储器
寿命:
1000写/擦循环
数据保留时间:
10年
全静态工作:
0Hz-24Hz
三级程序存储器锁定
128×
8位内部RAM
32可编程I/O线
两个16位定时器/计数器
5个中断源
可编程串行通道
低功耗的闲置和掉电模式
片内振荡器和时钟电路
引脚使用说明(图2-1):
图(2-1)
VCC:
供电电压(一般接5伏)。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当
P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为STC89C52的一些特殊功能口,如下所示:
管脚……备选功能:
P3.0……RXD(串行输入口)P3.1……TXD(串行输出口)
P3.2……/INT0(外部中断0)P3.3……/INT1(外部中断1)
P3.4……T0(记时器0外部输入)P3.5……T1(记时器1外部输入)
P3.6……/WR(外部数据存储器写选通)P3.7……/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;
当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度
2.2时钟频率的设计原理
利用单片机内部的定时器产生时钟频率,选择定时器的工作方式为方式一,所以定时时间为50ms,那么设计定时的计算如下:
初始值=(65536-定时时间)*12/11059200=(65536-50000)*12/11059200
从而TH0=4CH,TL0=00H;
程序如下:
INT_T0:
PUSHPSW
MOVTH0,#(65536-50000)/256
MOVTL0,#(65536-50000)MOD256
INCTCNT
MOVA,TCNT
CJNEA,#20,RETUNE;
计时1S
INCSECOND
MOVA,TCNT1
CLRC
RLCA;
带进位左移。
MOVP3,A
MOVTCNT1,A
CJNEA,#0,NEXT
MOVTCNT1,#0FFH
NEXT:
MOVTCNT,#0
MOVA,SECOND
CJNEA,#60,RETUNE
INCMINUTE;
计时1min
MOVSECOND,#0
MOVA,MINUTE
INCHOUR
LCALLBZ
MOVMINUTE,#0
MOVA,HOUR
CJNEA,#24,RETUNE
MOVHOUR,#0;
计时1hour
MOVTCNT,#0
RETUNE:
POPPSW
RETI
2.3数码管显示电路原理
单片机中通常使用7段LED,LED是发光二极管显示器的缩写。
LED显示器由于结构简单,价格便宜,体积小,亮度高,电压低,可靠性高,寿命长,响应速度快,颜色鲜艳,配置灵活,与单片机接口方便而得到广泛应用。
LED显示器是由若干个发光二极管组成显示字段的显示部件,当发光二极管导通时,相应的一个点或一个笔划发光,控制不同组合的二极管导通,就能显示出各种字符。
LED七段数码显示器由8个发光二极管组成显示字符,根据内部发光二极管的连接形式不同,LED有共阴极和共阳极两种,本系统采用共阴极。
LED的结构及连接如图1-2所示
图2-2
LED显示原理
当选用共阴极的LED时,所有发光二极管阴极连在一起接地,当某个发光二极管的阳极加入高电平时,对应的二极管点亮。
因此要显示某字形就应使此字形的相应段的二极管点亮,实际上就是送一个用不同电平组合代表的数据字来控制LED的显示,此数据为字符的段码或称为字型码。
字型码与LED显示器各段的关系为
D7
D6
D5
D4
D3
D2
D1
D0
dp
g
f
e
d
c
b
a
表1-1
dp为小数点,字符0、1、2……F的段码如表1-2所示
字符
段码(共阴)
段码(共阳)
3FH
C0H
8
7FH
80H
1
06H
F9H
9
6FH
90H
2
4FH
A4H
A
77H
88H
3
66H
B0H
B
7CH
83H
4
6DH
99H
C
39H
C6H
5
7DH
92H
D
5EH
A1H
6
07H
82H
E
79H
86H
7
F8H
F
71H
8EH
表1-2
下图是本系统采用的共阴极LED七段数码显示器:
图2-3
3、电路设计
3.1本设计输入输出电路
该系统输入电路采用的是P1口中的P1.0、P1.1、P1.2作为校正的输入分别为秒校正、分校正、时校正。
(如图2-4)
图2-4
系统的输出电路采用的是P0口、P3和P2口分别是段码输出、循环彩灯输出和位选输出。
段码输出P0口外界一个74ls373作为输出锁存保证数据输出稳定
图2-5
3.2系统软件设计说明
该系统软件程序主要有主程序模块,定时中断服务程序,中断等待服务程序,键盘服务程序,显示子程序服务程序等六大模块组成。
图2-4中按键从上往下设定为S1,S2,S3。
S1与p1.0相连,S2与p1.1相连,S3与p1.2相连。
当需要设定当前时间时,按一下S2键,时钟加1;
按一下S1,分钟加1;
按一下S1,秒钟加1。
3.3LED的编程思想
本设计使用LED数码管显示,LED显示器具有耗电少、成本低、配置简单灵活、安装方便、耐震动、使用寿命长等优点,因而应用广泛。
该方案控制最简单,但是只能显示有限的符号和数字,对于设计中复杂的显示功能显然不能胜任。
虽然点阵液晶可以显示多种字符和图形,拥有友好的人机界面及强大的显示功能。
特别适用于智能控制的可编程人性化显示。
但是考虑到本设计的实际要求,使用数码管显示就足以达到要求了。
七段LED由七个发光二极管按日字排开,所有发光二极管的阳极连在一起成共阳极,阴极连在一块称共阴极接法。
当采用芯片驱动时不需要加限流电阻,其他情况下一般应外接限流电阻。
动态显示电路有显示块,字形码封锁驱动器,字位锁存驱动器三部分组成。
4、程序调试
1)将程序输入到KEIL的环境下;
(如图2-6所示)
2)用单步运行和断点运行方式调试程序;
3)调试T0中断服务程序,首先在记数单元39H、3AH、3BH、3CH单元中预置数,调试秒单元向分单元进位及分单元向时单元的进位,最后将T0中断服务程序统调通过;
4)在39H、3AH、3BH、3CH单元中预置数,调试显示程序;
5)调试主程序,使闹钟走时系统工作正常。
图2-6
5、Proteus软件仿真
①仿真步骤
第一步:
用KEIL软件对程序进行编译,编译通过后,会自动生成HEX文件。
第二步:
在Proteus的元件库中找到STC89C52以及相应的元件,按照硬件设计中的说明把各部件连接起来组成一个时钟的硬件系统。
第三步:
把在伟福环境调试下生成的.HEX文件装入到STC89C52里,点击运行符号就可以使软硬件的配套设施在Proteus的环境下仿真实现。
第四步:
验证系统能否实现所要求的功能,并检验错误。
②仿真过程中出现的错误及解决措施
1)当把程序生成的.HEX文件装入到STC89C52后运行时,显示模块出现数字显示错误,但是软硬件都没有错误,经检查是它们不配套,在修改扫描显示控制字而且改变硬件布线顺序后方显示正常。
2)P0口是漏极开路的并行I/O口和分时复用数据地址总线,在用作I/O口是必须接上拉电阻,否则造成电平不稳地,从而显示出乱码。
由于对硬件不了解产生错误。
3)在设计的初期把主程序设计成顺序结构,但是在运行的时候没有注意到这个问题,没有按照软件说明中的顺序操作。
③仿真结果
开始仿真时,显示如图2-7所示:
图2-7
按一下minute按键,分钟加一。
如下图2-8
图2-8
按一下hour按键,时钟加一。
如下图2-9
图2-9
6、protel99制作
6.1原理图:
6.2PCB图:
如果能制作到PCB板,那么焊接和连接都非常的简单,而且制作出的作品性能稳定,美观。
7、课程设计元器件清单
元器件名称
类型
数量
价格(元)
单片机
STC89C52
底座
DIP40
0.3
DIP16
0.15
数据锁存器
74LS373
1.2
瓷片电容
22pf
0.1
晶振
12MHZ
0.24
按键开关
LED灯
红色
排阻A09-471
470欧
0.14
自锁开关
单刀双掷
0.18
若干导线
铜线
若干
数码管4位5461AS
共阴
1.99
单排座
1*40
0.25
8、课程设计体会
单片机是一门应用性很强的学科,课程设计是培养我们综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程,为自己今后从事与单片机控制系统有关的工作打下了基础。
虽然在做课程设计以前已经系统的把单片机课本认真的学习了一下,但是在刚开始时还是有点一头雾水,不知道该从哪里下手。
令人欣慰的是经过几周的学习,虽然过程很艰辛,问了很多朋友,但是总算实现了定时闹钟的功能,所有的努力都很值得。
这几周的大部分时间都在研究程序怎么处理,在这个过程中加深了我对汇编语言命令的应用,而且也更加了解到软硬件配套的重要性。
以下是我本次单片机课程设计的几点心得与体会:
1.在设计程序之前,务必要对所学单片机课程的内容有一个系统的了解,知道单片机片内片外的内容及其功能。
2.设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思路和一个完整的软件流程图。
模块化的设计思想在程序设计中的作用是十分大的,它可以为你提供一个比较清晰的思路,并且很容易找到头绪,不至于在设想一个程序时感觉到无从下手。
3.在设计程序时,不能妄想一次就将整个程序设计好,"
反复修改,不断改进"
是程序设计的必经之路。
程序刚开始编好时,一般情况下会存在很多错误,要不断地修改,不断的改进才能达到预期的目的,编写程序的时间并不是很长,主要是修改程序会花很多时间。
4.要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。
刚开始我在编写程序时,很不习惯于写注释,感觉很麻烦,而且没用,但是在修改的过程中我就遇到了较大的麻烦,以至于不得不重新的作了注释,以增加程序的易读性,从而使修改过程变得容易一些。
5.课程设计是在学《单片机原理及接口技术》课程综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现,从而加深对单片机软硬知识的理解,获得初步的应用经验,为走出校门从事单片机应用的相关工作打下基础。
总之,通过这次课程设计不仅使我巩固了本课程所学的基本知识,还使我具有了撰写设计报告的初步训练能力,我相信这些能力在我以后的工作或者是再学习中一定会起到不小的作用,看到自己几周的小成果,感觉一切的辛苦和艰难都是值得的。
9、参考文献
[1]余发山著.单片机原理及应用技术江苏:
中国矿业大学出版社.2003年.97-118
[2]阎石.数字电子技术基础(第三版).北京:
高等教育出版社,1989
[3]廖常初.现场总线概述[J].电工技术,1999.
[4]康华光.数字电子技术.
北京:
高等教育出版社,2003
[5]吴金戌.8051单片机实践与应用.北京:
清华大学出版社,2003
[6]楼然苗.51系列单片机设计实例.北京:
北京航空航天出版社,2004
[7]黄仁欣.单片机原理及应用技术.
北京:
清华大学出版社,2005
[8]何立民.单片机高级教程.第1版.北京:
北京航空航天大学出版社,2001
[9]赵晓安.MCS-51单片机原理及应用.天津:
天津大学出版社,2001.3
[10]李广第.单片机基础.第1版.北京:
北京航空航天大学出版社,1999
[11]徐惠民、安德宁.单片微型计算机原理接口与应用.第1版.北京:
北京邮电大学出版社,1996
[12]夏继强.单片机实验与实践教程.北京:
北京航空航天大学出版社,2001
附1:
源程序代码
S_SETBITP1.0;
数字钟秒控制位
M_SETBITP1.1;
分钟控制位
H_SETBITP1.2;
小时控制位
AlarmBITP1.3
SECONDEQU30H
MINUTEEQU31H
HOUREQU32H
TCNTEQU34H
TCNT1EQU35H
ORG00H
SJMPSTART
ORG0BH
LJMPINT_T0
START:
MOVDPTR,#TABLE
MOVHOUR,#0;
初始化
MOVTMOD,#11H;
写控制字
MOVTH0,#(65536-50000)/256;
定时50ms
MOVIE,#8AH
SETBTR0
;
*********************************************************************
判断是否有控制键按下,是哪一个键按下
A1:
LCALLDISPLAY
JNBS_SET,S1
JNBM_SET,S2
JNBH_SET,S3
LJMPA1
S1:
LCALLDELAY;
去抖动
JBS_SET,A1
INCSECOND;
秒值加一
MOVA,SECOND
CJNEA,#60,J0;
判断是否加到60S
MOVSECOND,#0
LJMPK1
S2:
LCALLDELAY;
JBM_SET,A1
K1:
INCMINUTE;
分值加一
MOVA,MINUTE
CJNEA,#60,J1;
判断是否加到60min
MOVMINUTE,#0
LJMPK2
S3:
JBH_SET,A1
K2:
INCHOUR;
小时值加一
CJNEA,#24,J2;
判断是否加到24h
MOVHOUR,#0
LJMPA1
**********************************************************************
等待按键弹起
J0:
JBS_SET,A1
SJMPJ0
J1:
JBM_SET,A1
SJMPJ1
J2:
SJMPJ2
*******************************定时器0终端服务程序,对秒,分钟和小时的计数
PUS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 数字 时钟 课程设计