基于单片机的电脑时.docx
《基于单片机的电脑时.docx》由会员分享,可在线阅读,更多相关《基于单片机的电脑时.docx(13页珍藏版)》请在冰点文库上搜索。
![基于单片机的电脑时.docx](https://file1.bingdoc.com/fileroot1/2023-4/30/2f9353d6-7983-413c-9d83-22c14d8e2d97/2f9353d6-7983-413c-9d83-22c14d8e2d971.gif)
基于单片机的电脑时
毕业论文诚信声明
本人郑重声明:
所呈交的毕业论文《 基于单片机的电脑时钟设计 》是本人在指导老师的指导下,独立研究、写作的成果。
论文中所引用是他人的无论以何种方式发布的文字、研究成果,均在论文中以明确方式标明。
本声明的法律结果由本人独自承担。
毕业论文作者签名:
年 月 日
江西科技师范学院毕业设计(论文)
题目(中文):
基于单片机的电脑时钟
设计
(外文):
院(系):
通信与电子学院
专 业:
电子信息工程
学生姓名:
冷中秋
学 号:
20061698
指导教师:
宗文军
年 月 日
目录
引言.............................................................................................................1
1基本功能.....................................................................................................1
2硬件框图......................................................................................................1
2.1单片机.................................................................................................1
2.2 时间显示电路..................................................................................2
2.3 时间、闹钟设置电路......................................................................2
2.4 闹钟电路..........................................................................................2
2.5 复位电路采用按钮电平复位电路(如下图)...................................2
3 软件设计...................................................................................................3
3.1 初始化参数设置...............................................................................4
3.2 键盘设置子程序...............................................................................5
3.3 显示子程序.......................................................................................6
3.4 控制子程序........................................................................................7
3.5 中断定时子程序................................................................................8
4.结束语..............................................................................................................8
参考文献..............................................................................................................9
附录Ⅱ部分软件程序代码..................................................................................11
基于单片机的电脑时钟设计
摘 要:
时钟电路是保证计算机系统正常工作的基础,概述了用单片机实现电子时钟的硬件框图及软件实现方法
关键词:
电脑时钟;单片机;8155芯片;时钟芯片
1.引言
时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。
在一个单片机应用系统中,时钟有两方面的含义:
一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:
一是用软件实现,即用单片机内部的可编程定时/计数器来实现;二是用专门的时钟芯片实现,本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法。
1 基本功能
(1)时间显示功能:
显示时、分、秒。
(2)时间和闹钟设置功能:
可以通过键盘的任意设定、修改显示时间和闹钟时间。
2 硬件框图
2.1 单片机
MCS-51单片机内部定时计数器概述MCS-51单片机内部包含2个定时计数器T。
和T。
,它们都是16位的加法计数器,既可用于定时,也可用于计数,在用于定时的情况下,计数脉冲由内部提供,因此计数速率固定为CPU振荡频率的1/12;在用于计数的情况下,计数脉冲来自外部,外部计数脉冲通过MCS一51的引脚T。
(第14脚)或Tl(第15脚)输入[1。
2],在发生从1到0的跳变时计数加1。
每个定时计数器又有4种工作方式可供选择:
方式0构成13位定时计数器,高3位未用;方式1构成16位定时计数器;方式2构成8位定时计数器,低位字节用于计数,高位字节存放初值[3—1;方式3只适合于T。
,构成两个独立的8位定时计数器。
在方式0、方式1及方式3时,初值不能自动装入,当定时时间已到或计数次数已满时,若要进行下一次定时计数,必须利用软装入初值,否则,系统会按上限自动定时或计数,即以0初值进行定时或计数[5卅;而在方式2时,初值可自动装入,只需向高位字节写入一次初值,则当低位字节定时时间到(或计数满)时,高位字节的初值会自动装入低位字节,且高位字节的值保持不变。
当系统需用MCS-51单片机的串行接口进行串行通信时,定时计数器T。
被固定为波特率发生器,因此,在软时钟设计中,总是选择T。
作为定时器m]。
单片机采用AT89C51型,它是一种带4K字节闪烁可编程可擦除只读存储的低电压、高性能CMOS8位微处理器,该器件采用ATMEL高密度非易失性存储器制造技术与工业标准的MCS—51指令集和输出管脚相兼容,由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入控制系统提供了一种灵活性高且价廉的方案。
2.2 时间显示电路
由于AT89C51单片机I/O口有限,采用可编程的并行I/O口芯片8155进行扩展,时间显示电路为了简化硬件线路,降低成本,利用LED动态显示接口电路实现。
2.3 时间、闹钟设置电路
由于时间的设置只需四个按键(秒、分、时、闹钟时间设置启动),电路简单,所以可以采用独立式按键来实现。
2.4 闹钟电路
当时间与设置闹钟时间相等时,通过I/O口控制继电器接通闹钟实现。
2.5 复位电路采用按钮电平复位电路(如下图)
3 软件设计
软件采用模块化设计,其流程图如下:
3.1 初始化参数设置
包括数据堆栈区、定时/计数器的初始化、8155芯片的初始化及时间、显示数据的初始化设置。
定时/计数器的初始化:
包括对TMOD、TCON以及根据定时时间对时间初值的设置。
设电子钟采用中断定时100ms,fosc=6MHZ,采用T0方式1,则X=216.100ms=15536=3CB0H,则TH0=3CH,TL0=0BOH。
8155芯片的初始化:
8155对单片机来讲是一个外部接口芯片,它与外部RAM的操作方法一样。
即:
MOV DPTR,#addr16
MOV A,#03H
MOVX @DPTR,A
3.2 键盘设置子程序
这里主要介绍秒设置子程序的部分代码。
KEY:
JBKEY-S,M-SET;秒设置键按下吗?
如没按下则判断分设置键是否压下
LCALLDELAY
JBKEY-S,M-SET
INCDATA-S;如秒设置键压下,则秒单元加1
MOVA,DATA-S
CJNEA,#60,DATA-S;秒单元=60;则清0
MOVDATA-S,#00H
S-DIS:
MOVA,DATA-S
LCALLHEX-BCD;调用BCD码转换子程序
MOV69H,A
MOV6AH,B
S-REP:
LCALLDIS
JNBKEY-S,S-REP;待秒设置键释放
M-SET:
……;分设置键判断程序略
其中KEY-S,DATA-S需在主程序中用伪指令定义后,才能使用。
3.3 显示子程序
采用动态扫描的方式和查表程序可实现实时时间的显示。
3.4 控制子程序
作用是判断时间是否与设置的闹钟时间是否相等,如相等则开启闹钟。
3.5 中断定时子程序
是电子时钟的核心,在这里主要介绍一下秒单元的定时过程,其中5FH存放100ms单元的数值。
CLOCK:
PUSH ACC;参数入栈保护
PUSH PSW
CLR TR0
MOV TL0,#0B0H;定时参数重新设置
MOV TH0,#03CH
SETB TR0
INC 5FH
MOV A,5FH
CJNE A,#10,FK;100ms单元内容=10,则秒单元加1
MOV 5FH,#00H;100ms单元内容清0
MOV A,DATA-S
ADD A,#01H;秒单元加1
MOV DATA-S,A
CJNE A,#60,FK;秒单元内容=60,则秒单元清0
MOVDATA-S,#00H(分、时单元定时过程略)
FK:
POPPSW;出栈,退出中断子程序
POP ACC
RETI
4.结束语
由于时钟电路的重要性,时钟电路在很多应用系统中必不可少,用软件方法可以实现,但误差很大,主要用在对时间精度要求不高的场合,在对时间精度要求很高的情况下,通常采用时钟芯片来实现。
典型的时钟芯片有:
DS1302,DS12887,X1203等都可以满足精度要求.提出了采用MCS-51内部定时计数器作为软时钟设计的方法,不仅节省了硬件开销,而且提高软时钟的
定时精度,具有广泛的应用价值。
在实际测试中,当晶体振荡器的振荡频率不是标准6MHz时,通过调整中断周期常数,以及必要时通过增加秒以下时间单元缓冲区的字节数,可使中断周期常数准确到所需精度。
参考文献
[1]陈建铎.单片机原理与应用[M].北京:
科学出版社,2004.
[2]李群芳,方事明,游华杰.单片机原理与应用[M].湖北:
武汉大学出版社,2006.
[3]李刚,林凌,姜苇.51系列单片机系统设计与应用技巧[M].北京:
北京航空航天大学出版社。
2004.
[4]高峰.单片微机应用系统设计及实用技术[M].北京:
机械工业出版社,2004.
E5]李广弟,朱月秀,冷祖祁.单片机基础[M].北京:
北京航空航天大学出版社,2001.
[6]张专成.多参量火警监测器的软判决与单片机实现[J].微计算机信息,2008,[7]黄天录.PICl2F675单片机在复合式火灾探测器设计中的应用[J].西安通信学院学报,2006
[8]窦振中.单片机外围器件使用手册EM3.北京:
北京航空航天大学出版社,2003.
[9]邵贝贝.MotorolaDSP型16位单片机原理与实践[M3.北京:
北京航空航天大学出版社,2003.
[10]马忠梅,籍顺心,张凯,等.单片机的c语言应用程序设计[M].北京:
北京航空航天大学出版社,2003.
附录Ⅱ部分软件程序代码
#include"reg52.h"
#defineTHCO0xee
#defineTLCO0x0
UnsignedcharcodeDuan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F};//共阴极数码管,0-9段码表
unsignedcharData_Buffer[4]={0,0,0,0};//四个数码管显示数值,数组变量定义
unsignedcharHour=0,Min=0,Sec=0;
bitflag=0;//1分时间到标志
sbitP10=P1^0;//四个数码管的位码口定义
sbitP11=P1^1;
sbitP12=P1^2;
sbitP13=P1^3;
sbitK_Mode=P2^0;//按键定义
sbitK_UP=P2^1;
sbitK_DN=P2^2;
sbitLED1=P2^3;//四个指示灯
sbitLED2=P2^4;
voidmain()
{
TMOD=0x11;//定时器0初始化
TH0=THCO;
TL0=TLCO;
TR0=1;
ET0=1;
EA=1;
while
(1)
{
if(flag==1)
{
flag=0;
Data_Buffer[0]=Hour/10;
Data_Buffer[1]=Hour%10;
Data_Buffer[2]=Min/10;
Data_Buffer[3]=Min%10;
}
}
}
voidtimer0()interrupt1
{
staticunsignedcharBit=0;//静态变量,退出程序后,值保留
staticunsignedcharcount=0,K_count=0;
staticunsignedcharMode=0;
//MODE,0:
实时时钟;1:
修改小时;2:
修改分钟
TH0=THCO;
TL0=TLCO;
count++;
if(count>=200)//秒计时,定时器定时5ms,计200次为一秒
{
count=0;
Sec++;
if(Sec>=60)
{
Sec=0;
Min++;flag=1;//更新数码管显示
if(Min>=60)//时间计时
{
Min=0;Hour++;
if(Hour>=24)Hour=0;
}
}
}
Bit++;
if(Bit>=4)Bit=0;
P1|=0x0f;//先关位码
P0=Duan[Data_Buffer[Bit]];//开段码
if(count<100&&Bit==1)P0|=0x80;//0.5S中间小数点亮,之后灭,不断循环
switch(Bit)//送位码
{
case0:
P10=0;break;
case1:
P11=0;break;
case2:
P12=0;break;
case3:
P13=0;break;
}
if(K_Mode==0||K_UP==0||K_DN==0)//有键按下
{
K_count++;
if(K_count>=30)//消抖处理
{
K_count=0;
flag=1;
if(K_Mode==0)//修改Mode,
{
Mode++;
if(Mode>=3)Mode=0;
if(Mode==0){LED1=1;LED2=1;}//实时时间
elseif(Mode==1)LED1=0;//修改小时
elseif(Mode==2){LED1=1;LED2=0;}//修改分钟
}
elseif(K_UP==0)
{
if(Mode==1)//小时加
{Hour++;if(Hour>=24)Hour=0;}
elseif(Mode==2)//分钟加
{Min++;if(Min>=60)Min=0;}
}
elseif(K_DN==0)
{
if(Mode==1)//小时减
{
if(Hour==0)Hour=23;
elseHour--;
}
elseif(Mode==2)//分钟减
{
if(Min==0)Min=59;
elseMin--;
}
}
}
}
elseK_count=0;
}