基于单片机的数字时钟的设计.docx
《基于单片机的数字时钟的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字时钟的设计.docx(12页珍藏版)》请在冰豆网上搜索。
基于单片机的数字时钟的设计
摘要
单片机全称叫单片微型计算机(SingleChipMicrocomputer),是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域。
此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。
关键词:
单片机,电路芯片,计算机系统,领域。
Abstract
SingleChipMicrocomputerfullnamecalledsingle-chipMicrocomputer(useChipMicrocomputer),isAkindofintegratedcircuitchips,istouseverylargescaleintegratedcircuittechnologyhasdataprocessingabilityofthecentralprocessorCPUrandommemoryRAM,ROMROM,AvarietyofI/Oportandinterruptsystem,Atimer/timerfunctions(mayalsoincludedisplaydrivercircuit,pulsewidthmodulation(PWM)circuit,analogmulti-channelconverter,A/Dconvertercircuit)integratedintoApieceofsiliconwaferthatconstitutesAsmallandperfectcomputersystem.
thefunctionofthelooksbelikesimple,miniatureinthepureelectronicchip(differentfromthetapemachineprinciple),requirescomplexissimilartotheprincipleofthecomputer.Inaddition,theMCUintheindustryandcommerce,finance,scientificresearch,education,nationaldefenseaerospaceandotherfieldshasaverywiderangeofpurposes.
Keywords:
singlechip,chipcircuit,computersystems,etc.
一.总体设计思路
1硬件设计思路
00-99加计数器硬件系统主要由AT89C51单片机,数码管,电容,电源等元件组成,用单片机的P2.0-P2.7接一个共阴数码管,作为00-99计数的个位显示,用单片机的P0.0-P0.7接一个共阴数码管,作为00-99计数的十位数显示,通过单片中烧入程序,然后利用P3.7口作为输入端,通过点动控制实现开关量的控制和计数,然后再通过数码显示器显示出来。
通过调试仿真从而实现00-99加计数。
元件名称
型号
数量/个
用途
单片机
AT89C51
1
控制核心
晶振
12MHZ
1
晶振电路
电容
30pF
2
晶振电路
排阻
Respack8
2
上位电阻
电阻
10k
1
复位电路
电源
Vcc
3
提供电源
拨码开关
BUTTON
2
发出信号
数码管
7SEG-MPX1-CC
2
显示电路
2元器件清单
3系统框图
图1系统框图
4软件设计思路
实现00-99计数功能,子程序实现将高低电位转化为数码管的十进制数字,实现手动开关计数。
通过手动给脉冲信号,实现计数,同时也可以实现手动复位,再加到99时,在手动给脉冲时,回到初始状态00,从而实现00到99加计数。
图2程序流程图
二.硬件设计
1单片机系统
AT89C51是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,片内含2kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器。
本设计中单片机采用AT89C51,它是一种高性能低价格单片机。
引脚(20个)和指令系统与8031单片机完全兼容。
片内有2K字节的闪速程序存储器(采用电擦除编程,可重复编程1000次,数据可保10年),除没有P0口、P2口外,具有8031所有功能结构,即一片AT89C51相当于8031、373、2716组成的最小系统。
用它构成的测量、控制系统具有电路简单、可靠性好、体积小和成本低等优点。
AT89C51的P1口为八位双向I/O口,P1.2~P1.7有内部上拉电阻,P1.0与P1.1无内部上拉电阻。
P1.0与P1.1具有第二功能,分别作为片内精密比较器的同相、反相输入端。
P1口输出驱动器能提供20mA的灌电流驱动能力,其锁存器写1时可作为输入口。
AT89C51的P3口为七位双向I/O口,有内部上拉电阻,P3口输出驱动器能提供20mA灌电流驱动能力,其锁存器写1时可作输入口。
P316作为输入线与片内精密比较器输出端在片内相连,故无引出线,但可读该位的值。
P310~P315的第二功能与8031P3口相应口线的第二功能完全相同。
综上所述,P1和P3口中的各口线可直接驱动发光二极管,不用再配置发光二极管驱动电路,P1.0与P1.1具有第二功能,不用再配置比较器,从而简化了控制电路的结构。
以下是对其引脚及其功能的简要说明:
<1>主电源引脚:
接电源。
<2>外接晶体引脚XTAL1和XTAL2
XTAL1:
接外部晶体的一个引脚。
在单片机内部,它是构成片内振荡器的反放大器的输入端。
当采用外部振荡器时,该引脚接收振荡器的信号,即把此信号直接接到内部时钟发生器的输入端。
XTAL2:
接外部晶体的另一个引脚。
在单片机内部,它是上述振荡器的反相放大器的输出端。
采用外部振荡器时,此引脚应悬浮不连接。
<3>控制或与其他电源复用引脚RST,ALE/
,
/Vpp
RST:
复位输H入端。
当振荡器运行时,在该引脚上出现两个机器周期的高电平将使单片机复位。
ALE/
:
当访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。
即使不访问外部存储器,ALE端仍以不变的频率(此频率为振荡器频率的1/6)周期性地出现正脉冲信号。
因此,它可用作对外输出的时钟,或用于定时目的。
然而要注意的是:
每当访问外部数据存储器时,将跳过一个ALE脉冲。
/Vpp:
外部访问允许端。
要使CPU只访问外部程序存储器(地址为0000H~FFFFH),则
端必须保持低电平(接到GND端)。
然而要注意的是,如果保密位LB1被编程,复位时在内部会锁存
端的状态。
当
端保持高电平(接Vcc端)时,CPU则执行内部程序存储器中的程序。
<4>输入/输出引脚P0.0~P0.7,P1.0~P1.7,P2.0~P2.7和P3.0~P3.7
P0端口(P0.0~P0.7):
P0是一个8位漏极开路型双向I/O端口。
作为输出口用时,每位能以吸收电流的方式驱动8个TTL输入,对端口写1时,又可作高阻抗输入端用。
在Flash编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。
验证时,要求外接上拉电阻。
P1端口(P1.0~P1.7):
P1是一个带有内部上拉电阻的8位双向I/O端口。
P2的输出缓冲器可驱动(吸收或输出电流方式)4个输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(IIL)。
在对Flash编程和程序校验时,P1接收低8位地址。
P2端口(P2.0~P2.7):
P2是一个带有内部上拉电阻的8位双向I/O端口。
P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。
P2作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(IIL)。
在对Flash编程和程序校难期间,P2也接收高位地址和一些控制信号。
P3端口(P3.0~P3.7):
P3是一个带内部上拉电阻的8位双向I/O端口。
P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。
P3作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(IIL)。
在AT89S51中,P3端口还用于一些复用功能,在对Flash编程或程序校验地,P3还接收一些控制信号。
复用功能如表2-1所列:
表2-1P3各端口引脚与复用功能表
端口引脚
复用功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外部中断0)
P3.3
(外部中断1)
P3.4
T0(定时器0的外部输入)
P3.5
T1(定时器1的外部输入)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器读选通)
与MCS-51兼容
4K字节可编程闪烁存储器
寿命:
1000写/擦循环
数据保留时间:
10年
全静态工作:
0Hz—24Hz
三级程序存储器锁定
128*8位内部RAM
32可编程I/O线
两个16位定时器/计数器
5个中断源
可编程串行通道
低功耗的闲置和掉电模式
片内震荡器和时钟电路
2排阻的作用
所谓排阻就是若干个参数完全相同的电阻,它们的一个引脚都连到一起,作为公共引脚。
其余引脚正常引出。
所以如果一个排阻是由n个电阻构成的,那么它就有n+1只引脚,一般来说,最左边的那个是公共引脚。
它在排阻上一般用一个色点标出来。
排阻一般应用在数字电路上,比如:
作为某个并行口的上拉或者下拉电阻用。
使用排阻比用若干只固定电阻更方便。
排阻有a型和b型的区别。
a型排阻的引脚总是奇数的。
它的左端有一个公共端(用白色的圆点表示),常见的排阻有4、7、8个电阻,所以引脚共有5或8或9个。
B型排阻的引脚总是偶数的。
它没有公共端,常见的排阻有4个电阻,所以引脚共有8个。
排阻的阻值读法如下:
“103”表示:
10kΩ,“510”表示:
51Ω。
以此类推常用于显示数码管。
3电路原理图
根据编写的c语言程序以及为了满足设计的需要,画出的电路原理图如下:
三.软件设计
系统的软件设计也是工具系统功能的设计。
单片机软件的设计主要包括执行软件(完成各种实质性功能)的设计和监控软件的设计。
单片机的软件设计通常要考虑以下几个方面的问题:
(1)根据软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体结构,使软件开发清晰、简洁和流程合理;
(2)培养良好的编程风格,如考虑结构化程序设计、实行模块化、子程序化。
既便于调试、链接,又便于移植和修改;
(3)建立正确的数学模型,通过仿真提高系统的性能,并选取合适的参数;
(4)绘制程序流程图;
(5)合理分配系统资源;
(6)为程序加入注释,提高可读性,实施软件工程;
(7)注意软件的抗干扰设计,提高系统的可靠性
1汇编语言程序
SP1BITP3.7;定义SP1为P3.7管脚
ORG0
START:
MOVCount,#00H;到地址0处开始执行,也就是START就是0地址
NEXT:
MOVA,Count
MOVB,#10
DIVAB;A除以B,商(存于)A余(下)B
MOVDPTR,#TABLE;将最下面的表地址装入DPTR里准备寻址
MOVCA,@A+DPTR
MOVP0,A;把上面从表里得出的数输出的P0口这是十位数
MOVA,B;把余数送入A,也就是这其实是两位数码管的个位数
MOVCA,@A+DPTR
MOVP2,A;把个位数输出到P2口
WT:
JNBSP1,WT;SP为0转移//中断程序
WAIT:
JBSP1,WAIT;SP为1转移
LCALLDELY10MS;调用显示子程序
JBSP1,WAIT
INCCount;Count加1
MOVA,Count
CJNEA,#100,NEXT;累加器与立即数不等转移
LJMPSTART;返回初始值
DELY10MS:
MOVR6,#20;子程序
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET;子程序返回
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0---9//子程序
END
2C语言程序
C语言是一种面向过程的计算机程序设计语言,它是目前众多计算机语言中举世公认的优秀的结构程序设计语言之一。
它由美国贝尔研究所的D.M.Ritchie于1972年推出。
1978后,C语言已先后被移植到大、中、小及微型机上。
程序:
#include//插入51特殊功能寄存器头文件
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};//定义显示码
unsignedcharCount;//定义字符型计数器变量
voiddelay10ms(void)
{
unsignedchari,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
voidmain(void)
{
Count=0;//计数器清0
P0=table[Count/10];//计数器十位值送十位显示
P2=table[Count%10];//计数器个位值送个位显示
while
(1)
{
if(P3_7==0)
{
delay10ms();
if(P3_7==0)
{
Count++;//计数器加1
if(Count==100)//判断计数器是否加到100
{
Count=0;是,计数器清0
}
P0=table[Count/10];//计数器十位值送十位显示
P2=table[Count%10];//计数器个位值送个位显示
while(P3_7==0);
}
}
}
}
四.系统仿真
软件调试是通过对程序的编译、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
先在keil中为所编的程序设置环境,然后输入程序检测并编译,之后用Proteus将编译好的程序输入到已设计好的电路的AT89C51中,开始模拟调试。
进一步修改,完成设计。
调试结果如下图:
其复位调试结果图如下:
五.设计体会
为期两周的单片机课程设计,给我留下了很深刻的印象,由于这是我第一次从硬件方面接触到单片机,设计过程中我遇到了很多的困难,因为知识是不连贯的,所以需要准备很多方面的知识去融合,去联系。
由于在学习的时候更注重的是书面上的东西,而本次课程设计更多的是锻炼了我的动手动脑能力,让我有机会把课上学习的知识转化为可以在实际生产生活中应用的技术。
在制作过程中,我们首先是实验设计,设计电路图,然后画出电路流程图,这个大概耗时一周的时间,在这期间,我们花费大量的时间在寻找方法,上网查资料,不断的讨论,每天都研究的很晚,在焊电路片,由于以前有做过.所以没有什么问题.最后就是程序的下载,这个东西我们以前没有接触过,但是进过我们的研究还是终于成功了,我心情万分激。
本次课程设计的开发与设计全部过程,对于我的重要意义在于能在进一步层次了解单片机的工作原理,内部结构和工作状态。
理解单片机的接口技术,中断技术,时钟方式和控制方式的原理和意义,这样才能更好的利用单片机来做更有效和实用的设计。
在设计的过程中尽管是以最大努力去完成本次课程设计任务的研究,但是所做的工作仍有许多不足,由于水平有限,还有许多部分未能详细分析,不足的部分恳请各位老师对不足或疏漏之处给予指正,我将无比的感谢!
参考文献
[1]皮大能.单片机课程设计指导书.北京:
北京理工大学出版社,2010.7
[2]吴金戎.8051单片机实践与应用.北京:
清华大学出版社,2003.8
[3]夏路易.单片机技术基础教程与实践.北京:
电子工业出版社,2008.1
[4]王质朴.MCS-51单片机原理接口及应用.北京:
北京理工大学出版社2009.11
[5]蒋辉平.基于Proteus的单片机系统设计与仿真实例.北京:
机械工业出版社
2009.7