目录
单片机的个性化电子钟设计报告
作者:黄淀钧 吴耿彬 09电信3班
一、设计背景----------------------------------------------2
二、作品简介----------------------------------------------2
三、设计目的与意义----------------------------------------3
四、设计要求----------------------------------------------3
五、总体方案设计------------------------------------------3
5.1 硬件设计------------------------------------------3
5.1.1 总原理图----------------------------------------3
5.1.2 各模块设计--------------------------------------4
5.1.3 器件清单----------------------------------------7
5.2 软件设计----------------------------------------7
5.2.1 硬件框图----------------------------------------8
5.2.2 程序流程图--------------------------------------9
5.2.3 源程序代码--------------------------------------10
六、遇到的困难和解决办法----------------------------------18
七、参考文献----------------------------------------------18
八、附录--------------------------------------------------18
一、设计背景
电子钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用也方便,但鉴于单片机的定时器功能也可以完成数字钟电路的设计,因此进行数字钟的设计是必要的。在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。
单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。
二、作品介绍
该作品是个性化电子钟设计,技术上主要用单片机(AT89c52)主控,8位LED数码显示,分别显示“小时-分钟-秒”。该作品主要用于24小时计时显示,能调整显示时间,能调整闹钟时间,能做秒表使用,能定时闹铃1分钟,闹钟响的时候可以手动按停。
使用方法:开机后时钟在00:00:00起开始计时。
按K1进入调时状态:按K2加1,按K3减1.再按K1进入分调整状态,加减调整同调时一样.再按K1进入秒调整状态。之后再按K1分别进入闹钟的时分秒调整状态。最后一次按K1,则返回显示状态。
三、设计目的及意义
(1)熟悉protues、keil-c软件的应用。
(2)巩固、加深和扩大51系列单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力;
(3)培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力;
(4)对课题设计方案的分析、选择、比较、熟悉用51单片机做系统开发、研制的过程,软硬件设计的方法、内容及步骤。
四、设计要求
(1)上电以后自动进入计时状态,起始于00:00:00。
(2)设计键盘调整时间,完成时间设计,并设置闹钟。
(3)定时时间为1/100秒,采用定时器实现。
(4)采用LED数码管显示,时、分,秒采用数字显示。
(5)采用24小时制,具有方便的时间调校功能。
五、总体方案设计
5.1硬件设计
5.1.1总原理图
如原理图所示,硬件系统主要由单片机最小应用系统、LED数码管显示模块、电源模块、晶振模块、按键模块等组成
。
电子钟原理图
5.1.2各个模块设计
1.单片机最小系统 AT89S52 AT89c52概述:是一款非常适合单片机初学者学习的单片机,它完全兼容传统的8051,8031的指令系统,他的运行速度要比8051快最高支持达33MHz的晶体震荡器,在此系统中使用12MHz的晶振。
AT89c52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止……
详述:AT89c52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16位定时器/计数器。一个6向量2级中断结构,全双工串行口及时钟电路。另外,AT89c52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止.
2、显示模块
LED数码管是由发光二极管构成的,亦称半导体数码管。将条状发光二极管按照共阴极(负极)或共阳极(正极)的方法连接,组成“8”字,再把发光二极管另一电极作笔段电极,就构成了LED数码管。若按规定使某些笔段上的发光二极管发光,就能显示从0~9的…系列数字。同荧光数码管(VFD)、辉光数码管(NRT)相比,它具有:体积小、功耗低、耐震动、寿命长、亮度高、单色性好、发光响应的时间短,能与TTL、CMOS电路兼容等的数显器件。+、-分别表示公共阳极和公共阴极。a~g是7个笔段电极,DP为小数点。另有一种字高为7.6mm的超小型LED数码管,管脚从左右两排引出,小数点则是独立的。
本系统利用6位LED数码管显示时间,共阴极结构。LED数码管由7段发光二极管组成,当要显示某个数字时只要将数字所对应的引脚送入低电平。
表一 LED数码管真值表
3.按键模块
本设计中主要有三个控制按键,按键功能为:
(1)P0.0为调时间模式,按P0.0进入调分状态:按P0.1加1,按P0.2减
1.再按P0.0进入分调整状态,,加减调整同调时.按P0.0进入秒调整状态。
(2)再按P0.0进入设定闹时状态 ,可进行时设定,按P0.1时加1,按P0.2时减1,再按P0.0为分调整,按P0.1分加1,按P0.0进入秒调整,再按P0.0调闹钟结束.在闹铃时可按P0.1或P0.2停闹,不按闹铃1分钟。
4.晶振模块
下图所示为时钟电路原理图,在AT89c51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
晶振电路
5.1.3 器件清单 表二 元件清单与封装
5.2 软件设计
5.2.1 硬件框图
根据以上的电子钟的设计要求可以分为以下的几个硬件电路模块:单片机模块、数码显示模块、晶振模块、电源模块与按键模块等,模块之间的关系图如下面得方框电路图所示。
5.2.2 程序流程图
(1)总体流程图
(2)时钟调整模式
否
是
(3)闹钟模式
5.2.3 源程序代码
#include<reg51.h>
#define uchar unsigned char
uchar time,hour,min,sec;
uchar hhs,mms,sss;
uchar hhg,mmg,ssg;
uchar key1num;
uchar naomiao,naofen,naoshi;
uchar naomiaog,naomiaos,naofeng,naofens,naoshig,naoshis;
uchar led[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
uchar table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit key1=P0^0;
sbit key2=P0^1;
sbit key3=P0^2;
sbit keynaozhong=P2^0;
void delay(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display0(uchar hhs,uchar mms,uchar sss,uchar hhg,uchar mmg,uchar ssg)
{ ssg=sec%10;
sss=sec/10;
mmg=min%10;
mms=min/10;
hhg=hour%10;
hhs=hour/10;
P1=led[ssg];
P3=table[7];
delay(1);
P1=0x00;
P1=led[sss];
P3=table[6];
delay(1);
P1=0x00;
P1=0x02;
P3=table[5];
delay(1);
P1=0x00;
P1=led[mmg];
P3=table[4];
delay(1);
P1=0x00;
P1=led[mms];
P3=table[3];
delay(1);
P1=0x00;
P1=0x02;
P3=table[2];
delay(1);
P1=0x00;
P1=led[hhg];
P3=table[1];
delay(1);
P1=0x00;
P1=led[hhs];
P3=table[0];
delay(1);
P1=0x00;
}
void display1(uchar naoshis,uchar naoshig,uchar naofens,uchar naofeng,uchar naomiaos,uchar naomiaog)
{ naomiaos=naomiao/10;
naomiaog=naomiao%10;
naofens=naofen/10;
naofeng=naofen%10;
naoshis=naoshi/10;
naoshig=naoshi%10;
P1=led[naoshis];
P3=table[0];
delay(1);
P1=0x00;
P1=led[naoshig];
P3=table[1];
delay(1);
P1=0x00;
P1=0x02;
P3=table[2];
delay(1);
P1=0x00;
P1=led[naofens];
P3=table[3];
delay(1);
P1=0x00;
P1=led[naofeng];
P3=table[4];
delay(1);
P1=0x00;
P1=0x02;
P3=table[5];
delay(1);
P1=0x00;
P1=led[naomiaos];
P3=table[6];
delay(1);
P1=0x00;
P1=led[naomiaog];
P3=table[7];
delay(1);
P1=0x00;
}
void keyscan()
{
if(key1==0)
{
delay(5);
if(key1==0)
{
key1num++;
while(!key1)
if(key1num<=3)
{display0(hhs,mms,sss,hhg,mmg,ssg);}
else {display1(naomiaog,naomiaos,naofeng,naofens,naoshig,naoshis);};
if(key1num==1){TR0=0;}
if(key1num==2){TR0=0;}
if(key1num==3){TR0=0;}
if(key1num==4){TR0=0;}
if(key1num==4){TR0=0;}
if(key1num==6){TR0=0;}
if(key1num==7){key1num=0;TR0=1;}}}
if(key1num!=0)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2)
if(key1num<=3)
{display0(hhs,mms,sss,hhg,mmg,ssg);}
else
{display1(naomiaog,naomiaos,naofeng,naofens,naoshig,naoshis);};
if(key1num==1)
{
hour++;
if(hour==24)
hour=0;
display0(hhs,mms,sss,hhg,mmg,ssg);
}
if(key1num==2)
{
min++;
if(min==60)
min=0;
display0(hhs,mms,sss,hhg,mmg,ssg);
}
if(key1num==3)
{
sec++;
if(sec==60)
sec=0;
display0(hhs,mms,sss,hhg,mmg,ssg);
}
if(key1num==4)
{
naoshi++;
if(naoshi==24)
naoshi=0;
display1(naoshis,naoshig,naofens,naofeng,naomiaos,naomiaog);
}
if(key1num==5)
{
naofen++;
if(naofen==60)
naofen=0;
display1(naoshis,naoshig,naofens,naofeng,naomiaos,naomiaog);
}
if(key1num==6)
{
naomiao++;
if(naomiao==60)
naomiao=0;
display1(naoshis,naoshig,naofens,naofeng,naomiaos,naomiaog);}}}
if(key3==0)
{
delay(5);
if(key3==0)
{
while(!key3)
if(key1num<=3)
{display0(hhs,mms,sss,hhg,mmg,ssg);}
else
{display1(naomiaog,naomiaos,naofeng,naofens,naoshig,naoshis);};
if(key1num==1)
{
hour--;
if(hour==-1)
hour=23;
display0(hhs,mms,sss,hhg,mmg,ssg);
}
if(key1num==2)
{
min--;
if(min==-1)
min=59;
display0(hhs,mms,sss,hhg,mmg,ssg);
}
if(key1num==3)
{
sec--;
if(sec==-1)
sec=59;
display0(hhs,mms,sss,hhg,mmg,ssg);
}
if(key1num==4)
{
naoshi--;
if(naoshi==-1)
naoshi=23;
display1(naoshis,naoshig,naofens,naofeng,naomiaos,naomiaog);
}
if(key1num==5)
{
naofen--;
if(naofen==-1)
naofen=59;
display1(naoshis,naoshig,naofens,naofeng,naomiaos,naomiaog);
}
if(key1num==6)
{
naomiao--;
if(naomiao==-1)
naomiao=59;
display1(naoshis,naoshig,naofens,naofeng,naomiaos,naomiaog);}}}}}
void TIMER0 (void) interrupt 1
{
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if(time>=20)
{
time=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;}}}}}
{if((sec==naomiao)&&(min==naofen)&&(hour==naoshi))
{
keynaozhong=1;
}
if(key2==0||key3==0)
{keynaozhong=0;}
if((hour==naoshi)&&(sec==naomiao)&&(min-naofen>=1))
{keynaozhong=0;}}}
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
hour=00;
min=00;
sec=00;
naoshi=00;
naofen=00;
naomiao=06;
keynaozhong=0;
}
void main()
{
init();
while(1)
{
keyscan();
if(key1num<4)
{display0(hhs,mms,sss,hhg,mmg,ssg);}
else
{display1(naoshis,naoshig,naofens,naofeng,naomiaos,naomiaog);}
}
}
六、遇到的困难和解决的办法
由于用到了单片机的P0口,仿真的时候没有加上上拉电阻,所以导致有些用到P0口的按键没有作用。后来检测程序发现没问题后就检测仿真图,尝试接了三个上拉电阻之后就可以实现之前的功能了。
七、参考文献
1. 李建忠编著 《单片机原理及应用》 西安电子科技大学出版社 20##年
八、附录
基于单片机电子时钟的设计绪论单片机自20世纪70年代问世以来以其极高的性能价格比受到人们的重视和关注应用很广发展很快单片机体积小重…
科技创新实践[数字时钟设计][用AT89S52单片机设计电子时钟的实验报告]目录单片机的个性化电子钟设计报告1一、设计背景1二、作…
单片机电子时钟的设计目录1引言12设计任务与要求221设计题目222设计要求23系统的功能分析与设计方案331系统的主要功能332…
电子时钟实验报告全部代码在文档末尾51单片机LCD1602液晶显示屏平台下编程实现可直接编译运行目录一实验目的1二实验要求2三实验…
第一部分设计任务和要求11单片机课程设计内容利用STC89C51单片机和LCD1602电子显示屏实现电子时钟可由按键进行调时和12…
一6该课程设计是利用MCS51单片机内部的定时计数器中断系统以及行列键盘和LED显示器等部件设计一个单片机电子时钟设计的电子时钟通…
JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20x…
单片机原理与应用课程设计与实现实训报告专业自动化年级班级姓名实训时间实训地点指导教师一实训题目基于51单片机电子时钟设计设计要求1…
第一部分设计任务和要求11单片机课程设计内容利用STC89C51单片机和LCD1602电子显示屏实现电子时钟可由按键进行调时和12…
基于单片机电子时钟的设计绪论单片机自20世纪70年代问世以来以其极高的性能价格比受到人们的重视和关注应用很广发展很快单片机体积小重…
1234目录绪论6第一章电子时钟711电子时钟简介712工作原理7第二章单片机简介及应用821单片机的简介822单片机的发展823…