C52单片机电子时钟报告.docx
- 文档编号:6315685
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:20
- 大小:720.26KB
C52单片机电子时钟报告.docx
《C52单片机电子时钟报告.docx》由会员分享,可在线阅读,更多相关《C52单片机电子时钟报告.docx(20页珍藏版)》请在冰豆网上搜索。
C52单片机电子时钟报告
单片机原理及应用课程设计
题目:
C52单片机电子时钟电路设计
组员:
王新吉、王浪、王庆伟、陶鹏鹏
专业:
电子科学与技术
班级:
121班
指导教师:
高海涛
2015年6月18日
安徽科技学院数理学院
目录
1、基于单片机的电子时钟电路设计2
1.1设计任务与要求2
1.1.1设计目的:
2
1.1.2设计要求:
2
1.2方案设计2
2、单片机应用系统简介3
2.1AT89C52单片机的功能结构3
2.2单片机的引脚定义及功能3
2.3定时/计数器4
2.3.1定时/计数器结构4
2.3.2工作原理5
2.4键盘接口技术5
2.5复位操作6
2.6显示控制模块6
3、硬件电路设计7
3.1电子时钟的电路图7
3.2单元电路设计7
3.2.1晶振、复位电路模块7
3.2.2键盘控制模块8
3.2.3蜂鸣器电路模块8
3.2.4显示器电路模块9
4、软件设计9
4.1系统主程序设计9
4.2主程序清单9
4.3系统仿真与调试15
5、结论与心得15
附录一17
电子时钟实物演示图17
摘要
电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。
随着人们生活环境的不断改善和美化,在许多场合都用到电子时钟。
现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用数码管显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时,分和秒的校对,片选的灵活性好。
本课程设计就是用一块89C52单片机和共阴极数码管显示屏及其他元器件设计出一个电子时钟。
用单片机的定时器来产生时钟信号,通过扫描几个按键来控制时钟。
把这几个模块的程序及原理图设计好后组合在一起就成了一个电子时钟。
关键词:
89C52单片机;共阴极数码管;定时器;石英晶体振荡器;
1、基于单片机的电子时钟电路设计
1.1设计任务与要求
1.1.1设计目的:
(1)学习输出口的使用方法;
(2)学习定时/计数器的使用;
(3)学习中断的使用;
1.1.2设计要求:
电路的基本功能应包括数码显示时间、可以手动调节时间、定时闹铃等,制作出实物并调试演示成功。
1.2方案设计
方案:
该系统采用52系列单片机AT89C52作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。
由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。
整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。
AT89C52单片机特点如下:
(1)单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以写在ROM里,许多信号通道都在同一芯片,因此可靠性高,易扩充。
(2)单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统。
(3)控制功能强:
单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。
图1.1时钟电路结构设计总框图
2、单片机应用系统简介
2.1AT89C52单片机的功能结构
如下图所示,单片机是属于三总线结构,89C52单片机功能方框图。
图2.1单片机内部结构框
2.2单片机的引脚定义及功能
图2.1双列直插式引脚分布
引脚功能:
VCC——工作电源+5V。
GND——电源地。
ALE/PROG——访问外部存储器时作为低8位地址锁存控制信号;在对EPROM编程时作为编程脉冲输入;在不访问外部存储器和非EPROM编程状态下,该脚输出频率为1/6单片机晶振频率的方波信号,该信号,可作为时钟脉冲,但在访问数据存储器时会丢失一个脉冲。
PSEN——外部程序存储器读选通信号。
EA/VPP——访问程序存储器控制信号。
当EA为低电平时,只读外部存储器,当EA为高电平时则先读内部程序存储器,再读外部程序存储器;这个引脚在编程时接编程电压VPP。
RST——复位信号,对系统复位信号要>2T。
XTAL1——片内振荡电路输入端。
XTAL2——片内振荡电路输出端。
P0-P3——输入输出端口。
2.3定时/计数器
2.3.1定时/计数器结构
图2.2定时/计数器结构
89C52单片机内部设有两个16位定时/计数器,简称为定时器0(T0)和定时器1(T1)。
定时器/计数器的结构如图2.2所示:
TMOD——方式控制寄存器,用于设定定时/计数器的工作方式
TCON——定时器控制寄存器,用于启动定时/计数器
IE——中断允许控制寄存器:
定时/计数器是微机的中断源
2.3.2工作原理
89C52系列单片机内部定时/计数器的工作原理可用图2.3来说明。
图2.3定时/计数器的工作原理
定时/计数功能选择:
当C/T=0时,为定时器功能,此时,C与A相连(计数脉冲为机器周期);当C/T=1时,为计数功能,此时,C与B相连(计数脉冲从P3.4或P3.5口输入)。
定时/计数器设置:
定时/计数器设置由工作方式控制寄存器(TMOD)、定时控制寄存器(TCON)以及中断允许寄存器(IE)共同完成。
2.4键盘接口技术
键盘分两类:
独立连接多键盘和矩阵式键盘,如图2.4所示。
图2.4独立式键盘
独立式按键结构独立式按键结构的键盘是最简单的键盘电路,每个键独立接入一根输入线。
这种键盘的优点是结构简单、使用十分方便,目前这种结构的键盘应用还相当普遍,这种键盘的缺点是随着键数数量的增加所占用的I/O口线也增加。
独立式按键结构的键盘在没有键按下时,数据输入线均为高电平,当有键按下时,与之对应的数据线将变成低电平。
因此可用位指令判别是否有键按下。
2.5复位操作
复位操作是单片机的初始化操作,单片机在进入运行前和在运行过程中程序出错或操作失误使系统不能正常运行时,需要进行复位操作。
复位操作后,程序将从0000H开始重新执行。
除此之外,复位操作还使单片机的ALE和PSEN引脚信号在复位期间变为无效状态。
单片机对复位信号的要求:
一是复位信号为高电平,二是复位信号有效持续时间不少于24个振荡脉冲(两个机器周期)以上。
在这里特别要提醒的是,在一个应用系统中,如果有几片单片机同时工作,在程序上有连接关系,系统复位时,应确保每一片单片机同时复位。
复位信号由单片机的RST引脚输入,复位操作有上电自动复位、按键复位和外部脉冲复位三种方式。
随着单片机技术的发展,目前有些单片机内部带有看门狗电路,当程序进行出错或进入了无休止循环时,看门狗电路将利用软件强行使系统复位。
2.6显示控制模块
图2.5八位共阴数码管显示
为了节省I/O口,采用动态显示的方法,用两片74HC573,用作段锁存和位锁存器。
3、硬件电路设计
3.1电子时钟的电路图
图3.1电子时钟电路原理图
3.2单元电路设计
3.2.1晶振、复位电路模块
图3.2晶振、复位电路图
晶振电路:
采用12Mhz的晶振,22pF的电容。
当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。
如果RST持续为高电平,单片机就处于循环复位状态。
根据应用的要求,复位操作通常有两种基本形式:
上电复位和上电或开关复位。
上电复位要求接通电源后,自动实现复位操作。
上电后,保持RST一段高电平时间。
3.2.2键盘控制模块
图3.2键盘控制电路图
根据题目要求,只需要6个按键(如图3.2),选用独立按键模式。
这6个键的功能分别为:
KEY1:
时钟时位加键,每按一次时位的时间值加1;
KEY2:
时钟时位减键,每按一次时位的时间值减1;
KEY3:
时钟分位加键,每按一次分位的时间值加1;
KEY4:
时钟分位减键,每按一次分位的时间值减1;
KEY5:
时钟秒位加键,每按一次秒位的时间值加1;
KEY6:
时钟秒位减键,每按一次秒位的时间值减1;
3.2.3蜂鸣器电路模块
图3.3蜂鸣器电路模块
蜂鸣器一脚接一三极管,三极管基极接一10K的电阻R2,与单片机的P2.3相连,一脚接地。
如图3.3所示。
3.2.4显示器电路模块
图3.4共阴极数码管显示电路
4、软件设计
4.1系统主程序设计
初始化程序:
设置单片机的定时器0工作在模式1(16位定时器),对定时器0赋初值,开启总中断和定时器中断,定时器开始计时,可计时24小时,为节省I/O口,用动态扫描的方法,用两片74HC573分别控制段选通和位选通,将时间显示到共阴极数码管上,计时完成后重新开始计时,蜂鸣器电路可通过P2^3口在整点时发声报时。
4.2主程序清单
根据硬件电路的连接以及我们要实现的功能,编写出了如下的C程序,该程序能够实现我们设计所需要的功能,具体的程序代码如下:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
sbitbeep=P2^3;
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitkey5=P1^4;
sbitkey6=P1^5;
ucharbeepflag;
unsignedcharmiao,fen,shi;
uchart,miaos,miaog,fens,feng,shis,shig;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f,};
voiddelay(uintz)
{
uintx;
uchary;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidinit()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
voiddisplay(unsignedcharshis,unsignedcharshig,unsignedcharfens,unsignedcharfeng,unsignedcharmiaos,unsignedcharmiaog)
{
dula=0;
P0=table[shis];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(10);
dula=0;
P0=table[shig];
dula=1;
dula=0;
wela=0;
P0=0xfd;
wela=1;
wela=0;
delay(10);
dula=0;
P0=0x40;
dula=1;
dula=0;
wela=0;
P0=0xfb;
wela=1;
wela=0;
delay(10);
dula=0;
P0=table[fens];
dula=1;
dula=0;
wela=0;
P0=0xf7;
wela=1;
wela=0;
delay(10);
dula=0;
P0=table[feng];
dula=1;
dula=0;
wela=0;
P0=0xef;
wela=1;
wela=0;
delay(10);
dula=0;
P0=0x40;
dula=1;
dula=0;
wela=0;
P0=0xdf;
wela=1;
wela=0;
delay(10);
dula=0;
P0=table[miaos];
dula=1;
dula=0;
wela=0;
P0=0xbf;
wela=1;
wela=0;
delay(10);
dula=0;
P0=table[miaog];
dula=1;
dula=0;
wela=0;
P0=0x7f;
wela=1;
wela=0;
delay(10);
}
voidKeyScan()
{
if(key1==0)
{
delay(10);
if(key1==0)
{
shi++;
if(shi==24)
shi=0;
while(!
key1);
delay(10);
while(!
key1);
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
shi--;
if(shi==-1)
shi=23;
while(!
key2);
delay(10);
while(!
key2);
}
}
if(key3==0)
{
delay(10);
if(key3==0)
{
fen++;
if(fen==60)
fen=0;
while(!
key3);
delay(10);
while(!
key3);
}
}
if(key4==0)
{
delay(10);
if(key4==0)
{
fen--;
if(fen==-1)
fen=59;
while(!
key4);
delay(10);
while(!
key4);
}
}
if(key5==0)
{
delay(10);
if(key5==0)
{
miao++;
if(miao==60)
miao=0;
while(!
key5);
delay(10);
while(!
key5);
}
}
if(key6==0)
{
delay(10);
if(key6==0)
{
miao--;
if(miao==-1)
miao=59;
while(!
key6);
delay(10);
while(!
key6);
}
}
}
voidmain()
{
init();
while
(1)
{
KeyScan();
miaos=miao/10;
miaog=miao%10;
fens=fen/10;
feng=fen%10;
shis=shi/10;
shig=shi%10;
display(shis,shig,fens,feng,miaos,miaog);
if(beepflag==1)
{
beepflag=0;
beep=~beep;
delay
(1);
}
}
}
voidT0Isr()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t==20)
{
t=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
}
}
}
if(miao==0)
{
if(fen==0)
{
beepflag=1;
}
}
}
4.3系统仿真与调试
设计中分4个模块,测试的步骤如下:
(1)上电后,数码管显示00—00—00,之后秒钟自动增加。
(2)整点时蜂鸣器发声报时。
(3)按下KEY1,KEY3,KEY5,可分别看到数码管时位,分位,秒位时间数值的加值变化。
(4)按下KEY2,KEY4,KEY6,可分别看到数码管时位,分位,秒位时间数值的减值变化。
5、结论与心得
在此次单片机课程设计过程中,我们经历了缺乏实践经验的失落,也经历了仿真成功而热情高涨。
特别是Proteus仿真软件的使用,经历了从陌生到熟悉的过程,从头开始学起,对着芯片原理进行仿真画图,刚刚开始时候感觉到有些难下手,因为是英文版的软件,很多东西都看不太明白,查找元件都是通过自己一个个来寻找的,才把仿真图画了出来,然后把写好的程序导入芯片,进行仿真,当看到程序正常运行的那一刻,心中真是有几分的喜悦,感谢高老师的细心指导。
生活就是这样,汗水预示着结果,也见证着收获。
劳动是人类生存生活永恒不变的话题。
虽然这只是一次的较简单的课程制作,可是平心而论,也耗费了我不少的心血。
对我们而言,知识上的收获重要,精神上的丰收更加可喜。
让我们知道了学无止境的道理。
通过这次课程设计,我们体会到了知识的重要性,在今后的学习中,我们会更加努力。
参考文献:
李全利.单片机原理及应用(C51编程)【M】.2版.北京:
高等教育出版社,2012.12
附录一
电子时钟实物演示图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C52 单片机 电子 时钟 报告