MCS51单片机可调电子钟设计Word文档格式.docx
《MCS51单片机可调电子钟设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《MCS51单片机可调电子钟设计Word文档格式.docx(16页珍藏版)》请在冰点文库上搜索。
本项目采用智能芯片机设计了一个具有数码管显示、键盘输入的时钟系统,使其具有时、分、秒的实时显示和调整功能:
1)自动计时,显示24小时制时间,由6位LED显示器显示时、分、秒。
2)起始时间为:
00:
00
3)具备校准功能,可以直接由按键设置当前时间。
4)加了一个LED灯,实现了整点报时的功能。
第二部分课程设计报告
一、单片机发展概况
单片机的发展从嵌入式系统的角度可分为:
SCM(Single-ChipMicrocomputer)单片微型计算机、MCU(MicroControllerUnit)微控制器、SOC(SystemOnChip)片上系统三个阶段。
目前,单片机的主流仍然是8位高性能单片机。
其发展体现在CPU功能增强、集成度提高、可靠性提高、内部资源增多、引脚的多功能化、外围电路的内装化、低电压、低功耗、与互联网连接等。
并且逐步向SOC、嵌入式系统过渡。
民用电子产品、计算机系统中的部件控制器、智能仪器仪表、工业测控、网络与通信的职能接口、军工领域、办公自动化、集散控制系统、并行多机处理系统和局域网络系统。
二、MCS-51单片机系统简介
MCS-51系列单片机产品都是以Intel公司最早的典型产品8051为核心构成的。
MCS-51单片机由CPU、RAM、ROM、I/O接口、定时器/计数器、中断系统、内部总线等部件组成。
8051单片机的基本性能有:
◆8位CPU;
◆布尔代数处理器,具有位寻址能力;
◆128B内部RAM,21个专用寄存器;
◆4KB内部掩膜ROM;
◆2个16位可编程二进制加1定时器/计数器;
◆32个(4×
8位)双向可独立寻址的I/O口;
◆1个全双工UART(异步串行通信口);
◆5个中断源,两级中断结构;
◆片内振荡器及时钟电路,晶振频率为1.2MHz~12MHz;
◆外部程序/数据存储器寻址空间均为64KB;
◆111条指令,大部分为单字节指令;
◆单一+5V电源供电,双列直插40引脚DIP封装。
MCS-51系列单片机都是相互兼容的,只是引脚功能略有差异。
8051单片机有40个引脚,分为端口线、电源线和控制线三类。
三、设计思路
整个系统工作时,秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,采用单片机振荡器加软件分频来实现。
将标准秒信号送入“秒计数器”,“秒计时器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计时器”的时钟脉冲。
“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。
“时计数器”采用24进制计数器,可实现对一天24小时的累计。
显示电路将“时”、“分”、“秒”计数器的输出,通过六个七段LED显示器显示出来,显示小时、分、秒;
设计三个按钮开关作为手动校准。
其工作流程如下:
1)时间显示:
上电后,系统自动进入时钟显示,从00:
00开始计时。
2)时间校准:
按下第一个按钮开关后,系统停止计时,循环进入小时、分钟、秒设定状态,分别按下第二、第三个按钮开关上下设置时间,系统将自动由设定后的时间开始计时显示。
置初始时钟用三个键:
K2(P3.4)用于改变显示状态,有四个状态:
1—修改时2—修改分3—修改秒0—显示状态。
K3(P3.5)用于当修改“时”、“分”、“秒”分别在这三个状态下对时、分、秒内容加1.
K4(P3.6)用于当修改“时”、“分”、“秒”分别在这三个状态下对时、分、秒内容减1.
加了一个LED灯,实现了整点报时的功能。
四、硬件电路设计
五、软件设计框图
六、程序源代码
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};
unsignedinti,hh,mm,ss,count,k;
//初值
unsignedchartemp;
sbitt0=P1^0;
voiddelay()
{
unsignedcharx,y;
for(x=2;
x>
0;
x--)
for(y=125;
y>
y--);
}
voiddisplay(hh,mm,ss)
P2=0xfe;
P0=table[ss%10];
delay();
P2=0xfd;
P0=table[ss/10];
P2=0xfb;
P0=table[10];
P2=0xf7;
P0=table[mm%10];
P2=0xef;
P0=table[mm/10];
P2=0xdf;
P2=0xbf;
P0=table[hh%10];
P2=0x7f;
P0=table[hh/10];
P0=table[11];
voidmain()//主函数
{
P2=0x01;
//位码初值
TMOD=0x01;
//方式寄存器初值
TH0=(65536-1000)/256;
//定时器0设置初始值1ms中断初始值
TL0=(65536-1000)%256;
//
EA=1;
ET0=1;
TR0=1;
//起动定时器0
while
(1)
{P3=0xff;
temp=P3;
while(temp==0xef)
{
delay();
temp=P3;
while(temp==0xef)
{
EA=0;
count++;
if(count==4)
{count=0;
EA=1;
}
{
display(hh,mm,ss);
}
}
}
P0=table[10];
P2=0xdf;
display(hh,mm,ss);
P3=0xff;
while(temp==0xdf||temp==0xbf)
{
for(k=20000;
k>
k--);
{delay();
temp=P3;
for(k=5000;
if(count==1)
{
switch(temp)
case0xdf:
hh++;
if(hh==24)
hh=0;
}break;
case0xbf:
hh--;
if(hh==-1)
hh=23;
}
if(count==2)
case0xdf:
{
mm++;
if(mm==60)
mm=0;
}
break;
case0xbf:
mm--;
if(mm==-1)
mm=59;
if(count==3)
ss++;
if(ss==60)
ss=0;
ss--;
if(ss==-1)
ss=59;
if(count==4)
display(hh,mm,ss);
}
switch(count)
{
case1:
P2=0x7f;
P0=table[hh/10];
delay();
P2=0xbf;
P0=table[hh%10];
break;
case2:
P2=0xef;
P0=table[mm/10];
P2=0xf7;
P0=table[mm%10];
case3:
P2=0xfd;
P0=table[ss/10];
P2=0xfe;
P0=table[ss%10];
}break;
}
}
voidtime0()interrupt1using2//定时器0中断函数
TF0=0;
//定时器0中断溢出标志清0
//定时器0设置初始值1ms中断初始值
k++;
if(k==1000)
{
k=0;
ss++;
if(ss==60)
{
ss=0;
mm++;
if(mm==60)
mm=0;
hh=0;
}
if(ss==0&
&
mm==0)
t0=1;
elset0=0;
七、结束语
这次实习让我受益匪浅,无论从知识上还是其他的各个方面。
上课的时候的学习从来没有见过真正的单片机,只是从理论的角度去理解枯燥乏味。
但在实习中见过甚至使用了单片机及其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。
在这次课程设计中又让我体会到了合作与团结的力量,当遇到不会或是设计不出来的地方,我们就会在QQ群里讨论或者是同学之间相互帮助。
团结就是力量,无论在现在的学习中还是在以后的工作中,团结都是至关重要的,有了团结会有更多的理念、更多的思维、更多的情感。
八、参考文献
1、张鑫.单片机原理及应用(第2版)[M].电子工业出版社,2010年;
2、周景润等.基于PROTEUS的电路及单片机设计与仿真(第2版)[M].北京航空航天大学出版社,2010年;