单片机多功能电子钟设计Word格式.docx
- 文档编号:19413081
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:19
- 大小:916.34KB
单片机多功能电子钟设计Word格式.docx
《单片机多功能电子钟设计Word格式.docx》由会员分享,可在线阅读,更多相关《单片机多功能电子钟设计Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
00:
00,然后电路会自动开始计时。
(3)电路中有时、分、秒各自单独的调整按钮,时间调整按钮每按一次,相应的显示时间加1。
(4)实现时分秒和的调时功能。
(5)采用C语言编写程序并调试。
2设计流程图
NN
N
N
Y
NYY
图2设计流程图
3电子元件介绍
3.1AT89C51介绍
高AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能、CMOS、8位单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
AT89C51的管脚图如图3.1所示:
图3.1AT89C51管脚图
3.1.1AT89C51标准功能
4k字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,2个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51降至0Hz的静态逻辑操作,并支持两种可选的节电工作模式。
空闲方式体制CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器体制工作并禁止其他所有不见工作直到下一个硬件复位。
3.1.2AT89C51主要特性
1、与MCS-51兼容
2、4K字节可编程闪烁存储器
3、寿命:
1000写/擦循环
4、数据保留时间:
10年
5、全静态工作:
0Hz-24Hz
6、三级程序存储器锁定
7、128*8位内部RAM
8、32可编程I/O线
9、两个16位定时器/计数器
10、5个中断源
11、可编程串行通道
12、片内振荡器和时钟电路
4电路设计
4.1数字钟的构成
数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路.由于计数的起始时间不可能与标准时间一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定.通常使用石英晶体振荡器电路构成数字钟.
⑴晶体振荡器电路
晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定.不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路.
⑵分频器电路
分频器电路将32768Hz的高频方波信号经32768()次分频后得到1Hz的方波信号供秒计数器进行计数.分频器实际上也就是计数器.
⑶时间计数器电路
时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为24进制计数器.
⑷译码驱动电路
译码驱动电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并且为保证数码管正常工作提供足够的工作电流.
⑸数码管
数码管通常有发光二极管(LED)数码管和液晶(LCD)数码管,本设计提供的为LED数码管.
4.2数字钟的工作原理
设计原理主要利用AT89C51单片机,由单片机的p2口控制数码管的位显示,p1口控制数码管的段显示,p3.0——p3.2与按键相接用于时间校正。
整个系统工作时,秒信号产生器是整个系统的时基信号,他直接决定计时系统的精度,将标准信号送入计数器的时钟脉冲。
分计数器也采用60进制计数器,每累计60分钟,发出一个“分脉冲”信号,该信号将被送到时计数器。
时计数器采用24进制计数器,可以实现对一天24小时的累计。
显示电路将“时”“分”“秒”计数器的输出,通过六个八段led显示器现出来。
校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”“分”“秒”显示数字进行校对调整。
4.3各部分电路分析
此实时时钟的设计与实现,主要采用了6只LED数码管,89C51内部二进制16位定时器/计数器,可编程中断控制器89C51等芯片,包括显示模块,运算模块和校时模块三大功能模块。
4.3.1显示模块
用89C51控制,用数码管的显示功能来设计。
显示部分硬件用六只LED为显示管,这些LED发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。
通过在这8只发光二极管的阳极加+5V或0V的电压使不同的二极管发光,形成不同的数字。
该模块主要是将运算模块和校时模块运算出来并存放在内存单元里的十六进制表示的时位、分位和秒位数值转化为十进制,并通过8只数码管显示出来。
CPU直接往LED输出八段代码,省去了硬件译码器。
P1口作为8段数据输出口,经74LS04驱动后到达各LED。
只要做到每送一次段选码时也送一次位扫描码,并且每送一次位扫描码后,位码中的0右移一位作为下一次的位扫描码,即可实现由左向右使6只LED依次出现数字显示。
4.3.2运算模块
该模块的主要功能是对时、分、秒的运算,并把运算出的最终结果存到事先已经开辟的内存单元里,以便显示模块即时地显示出来。
该模块可以细分为秒定时模块和运算模块。
秒定时模块负责提供中断信号,由于CPU运算模块中的指令消耗一定的时间,所以中断信号最好通过硬件来实现。
本实验中用89C51定时器/计数器,但因为89C51供的信号的周期是毫秒级的,因此必须通过软件的方法在运算模块中设置一个统计中断次数的变量,并且这一变量必须事先在内存里开辟存储单元。
中断信号是89C51工作方式为方式1,产生一个50ms的脉冲信号。
运算模块负责时、分、秒的计算,该模块主要通过89C51的IR1号中断来实现,但由于每50ms一次中断请求,所以在中断服务程序必须利用已申请内存单元35H来统计中断请求的次数,只有当35H的值为20时,才能让秒单元内的数值加1。
在中断服务程序里,必须对秒、分和时的单元内的数值进行判断,当秒加到60时,分必须加1、秒清零;
当分加到60时,时加1、分清零。
当时加到24时,直接清零。
然后转到调用处。
4.3.3校时模块
该模块主要功能是修改时、分、秒内存单元的数值。
每按一次键,对应的显示值便加1。
分、秒加到59后变为00;
小时加到23后再按键即变为00.再调校时均不向上一单位进位(例如分加到59后变为00;
但小时不发生改变)。
注意:
在主程序中对时间进行调校前应关闭中断,以防在调校过程中定时中断服务程序也对时间进行修改而造成混淆。
4.3.4电路仿真图
在6块LED数码管上能实现数字时钟的时、分、秒显示,并能对时、分、秒进行加1校对、减1校对和清零。
本实验中陪。
P3.0键、P3.1键、P3.2键是分别对时、分、秒的加1校对。
并且开机时时钟时从120000开始计时的,到235959时在回到000000.
图4.3.4电路仿真图
5软件设计
在单片机应用系统的开发中,软件的设计是最复杂和困难的,大部分情况下工作量都较大,特别是对那些控制系统比较复杂的情况。
如果是机电一体化的设计人员,往往需要同时考虑单片机的软硬件资源分配。
本系统的软件设计主要分为系统初始化、按键、显示处理及信号频率输入处理。
程序设计是一件复杂的工作,为了把复杂的工作条理化,就要有相应的步骤和方法。
其步骤可概括为以下三点:
(1)分析系统控制要求,确定算法:
对复杂的问题进行具体的分析,找出合理的计算方法及适当的数据结构,从而确定编写程序的步骤。
这是能否编制出高质量程序的关键。
(2)根据算法画流程图:
画程序框图可以把算法和解题步骤逐步具体化,以减少出错的可能性。
(3)编写程序:
根据程序框图所表示的算法和步骤,选用适当的指令排列起来,构成一个有机的整体,即程序。
程序数据的一种理想方法是结构化程序设计方法。
结构化程序设计是对利用到的控制结构类程序做适当的限制,特别是限制转向语句(或指令)的使用,从而控制了程序的复杂性,力求程序的上、下文顺序与执行流程保持一致性,使程序易读易理解,减少逻辑错误和易于修改、调试。
根据系统的控制任务,本系统的软件设计主要由主程序、初始化程序、显示子程序、数据采集子程序和延时程序等组成。
5.1C语言在单片机中的应用
C语言是一种通用的计算机程序设计语言,在国际上非常流行。
它既可以用来编写计算机的系统程序,也可以用来编写一般的应用程序。
以前计算机的系统软件主要用汇编语言编写,单片机应用系统更是如此。
C语言是当前最流行的程序设计语言,它像其它高级语言一样,面向用户,面向解题的过程,编程者不必熟悉具体的计算机内部结构和指令;
C语言又像汇编语言一样,可以对机器硬件进行操作。
如进行端口I,0操作、位操作、地址操作,并可内嵌汇编指令,将汇编指令当作它的语句一样。
我们知道,汇编语言将涉及计算机硬件,所以C语言又像低级语言一样,可以对计算机硬件进行控制,因此人们把它称为介于高级语言与低级语言之间的一种中级语言。
正是因为C语言具有这样的特性,所以很适合编写要对硬件进行操作的软件程序。
本文采用C语言进行编写.因为此系统软件比较,其存储量较大,因此必须应用C语言编程。
5.2程序设计
结束语
第三学期的单片机课程设计到目前为止可以说是告一段落了,我也顺利的完成了自己的课题简易电子时钟的设计,由于自己一心准备考研在这次课程设计上除了那些必要的时间其余也么有花太多的时间,本想着是做实物的,但在程序上出了点问题就没花时间去做了,所以这次设计还不算很完美。
刚开始被拿到这个课题的,感觉挺迷茫的,当时就只知道软件编程要用到定时器,自己也就在这方面懂一点,其余的关于硬件电路,液晶显示电路的驱动的什么都不知道,后来回来之后就看了一下51单片机课程设计那本书,自己还学过这门专业可,加上在网上找了一些资料对硬件电路的设计有了一定的了解。
在大脑里面有了一个大致的思路了,于是就把仿真软件装好开始了我的课设。
本次课设让我对单片机有了更深入的认识,现代社会中几乎处处都有单片机的影子,电子产品离不开它。
课设提高了我的单片机实际运用能力,也发现了自己以前学习的不扎实,对问题不求甚解。
现在才知道“书到用时方少”啊!
学习还是得扎实。
本次课设能顺利完成,甚是感谢指导老师的帮助。
参考文献
[1]张洪润,易涛.单片机应用技术教程[M].清华大学出版社.2006
[2]康华光.电子技术基础[M].高等教育出版社.2000
[3]阎石.模拟电子技术基础[M].华中科技大学出版社.2005
[4]刘乐善.微型计算机接口技术及应用[M].华中科技大学出版社.2005
[5]张毅刚.MCS-51单片机应用设计[M].哈尔滨工业大学出版社.2005
附录一C语言程序
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitrs=P3^3;
sbitrw=P3^4;
sbitlcden=P3^5;
unsignedinta,b,c;
ucharcount,k;
ucharshi,fen,miao;
ucharcodetable[]="
12:
00:
00"
;
voiddelay(uintz)
{
uintx,y;
for(x=0;
x<
z;
x++)
for(y=0;
y<
110;
y++);
}
voidw_com(ucharcom)
rs=0;
lcden=0;
P1=com;
delay(5);
lcden=1;
//给高脉冲
/*********************************
写指令
*********************************/
voidw_data(uchardate)
rs=1;
P1=date;
写数据
初始化函数
voidw_sfm(ucharadd,uchardate)//时分秒
ucharshi,ge;
shi=date/10;
ge=date%10;
w_com(0x80+add);
w_data(0x30+shi);
w_data(0x30+ge);
voidinit()
ucharnum;
//初始化使能为0
fen=00;
miao=00;
shi=00;
w_com(0x30);
//写入显示模式指令码
w_com(0x0c);
//写入显示开/关及光标指令码
w_com(0x06);
//当写一个字符后,地址指针加一,光标加一,不动光标不闪烁
w_com(0x01);
//清零作
w_com(0x00);
//代表第一位
for(num=0;
num<
8;
num++)
{
w_data(table[num]);
delay(5);
}
w_sfm(0,shi);
w_sfm(3,fen);
w_sfm(6,miao);
TMOD=0x01;
TH0=(65536-50000)/256;
//50毫秒产生一次中断
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
voidkey()
P2=0x0f;
//,a=P2;
//先对P2置数行扫描
if(P2!
=0x0f)//判断是否有键按下
{
delay(100);
//延时,软件去干扰
if(P2!
=0x0f)//确认按键按下
{
a=P2;
P2=0x0f0;
if(P2!
=0x0f0)
{
b=P2;
c=a&
b;
}
}
}
else
c=P2;
voidkeyscan()
{
key();
if(c==0x88)//闪烁位置//选择要调整的项目,左移
{
k++;
if(k==1)//k键按一下依次向左移
TR0=0;
delay(100);
w_com(0x80+0x07);
w_com(0x0f);
//左移光标开始闪烁
if(k==2)
w_com(0x80+0x04);
if(k==3)
w_com(0x80+0x01);
//光标恢复原样,不闪烁
if(k==4)
k=0;
w_com(0x0c);
TR0=1;
if(c==0x84)
if(k==1)//秒升调节
miao++;
if(miao==60)
miao=0;
w_sfm(6,miao);
if(k==2)//分升调节
fen++;
if(fen==60)
fen=0;
w_sfm(3,fen);
if(k==3)//时升调节
shi++;
if(shi==24)
shi=0;
w_sfm(0,shi);
}
if(c==0x82)
if(k==1)//秒降调节
miao--;
if(miao==-1)
miao=59;
if(k==2)//分降调节
fen--;
if(fen==-1)
fen=59;
if(k==3)//时降调节
shi--;
if(shi==-1)
shi=23;
}
voidmain()
rw=0;
init();
while
(1)
keyscan();
if(count==20)//20*50毫秒=1000毫秒=1秒
count=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
w_sfm(0,shi);
}
w_sfm(3,fen);
voidtimer0()interrupt1
TH0=(65536-50000)/256;
count++;
附录二原理图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 多功能 电子钟 设计