电子时钟实习报告.docx
- 文档编号:3675573
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:21
- 大小:310.63KB
电子时钟实习报告.docx
《电子时钟实习报告.docx》由会员分享,可在线阅读,更多相关《电子时钟实习报告.docx(21页珍藏版)》请在冰豆网上搜索。
电子时钟实习报告
绪论
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
51单片机是各单片机中最为典型和最有代表性的一种。
本设计使用12MHZ晶振与单片机AT89C51相连接,以AT89C51芯片为核心,采用动态扫描方式显示,通过使用该单片机,加之在显示电路部分使用HD74LS373驱动电路,实现在4个LED数码管上显示时间,通过4个按键进行调时、设置、复位等功能,在实现各功能时数码管进行相应显示。
软件部分用C语言实现,分为显示、延迟、调时、复位等部分。
通过软硬件结合达到最终目的。
从而到达学习、设计、开发软、硬件的能力。
电子时钟是采用数字电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。
电子钟的时钟具有可选的24h(小时)或12h(小时)的计时方式,显示时、分、秒;具有快速校准当前时、分、秒的功能;能设置起闹时刻、响闹时间,具有人工止闹功能,止闹后不再重新操作,将不再发生起闹等。
本次实习的主要内容是基于51系列单片机,结合任务书要求以及自我创新编程设计出电子时钟的某些功能,并自己亲手设计出电路以及在焊好的电路板上进行运行,进行硬件调试,呈现设计结果。
关键字:
AT80C51芯片;LED数码管;电子时钟;按键扫描;硬件调试
1实习目的
这次课程计通过对51系列单片机的学习、应用,以AT80C51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟电路,并亲手将自己所设计出来的电路板焊接出来,它由5V直流电源供电,通过数码管能够准确显示时间,调整时间,并进行闹钟设置。
为实现定时控制以及对外界事件进行计数,在单片机应用系统中,常需要用到实时时钟和计数器。
还要进行单片机软件编程,目的是为了提高学生的软件编程和系统设计能力,整个设计系统包括两个部分,硬件及软件部分,硬件部分已经制作成功,学生需要掌握其原理和焊接相应的元器件,掌握元器件的辨别和元器件的作用以及应用场所即可,另外对所焊接的电路进行仔细的检查,判断是否有焊接错误的地方或者短路的地方,对出现的异常情况要能够根据现象判别原因,并具备解决问题的能力,从而切实提高学生的硬件电子电路的分析、判断能力。
程序的编写是本次实习的重要环节,学生要完成的软件编程任务主要包括以下四点:
熟悉KeilC51编程平台及相关编程软件;编写、调试键盘扫描子程序并进行软硬件联调;编写、调试数码管动态扫描程序并进行软硬件联调;电子钟设(包括键盘、时钟、显示等)。
电子钟要求设计一个简单的单片机编程设计,要求电子钟软件程序必须具备键盘扫描、数码管显示、时钟以及闹钟功能。
通过实习,使同学们更加深入地理解了实习期间作用各种芯片的功能,以及引脚的作用,同时加深了对于主要芯片的应用的认识。
本次实习旨在锻炼学生各方面的能力,提升自身的竞争力,加深对所学内容的理解,强化动手能力和实践精神。
2实习内容
2.1主要内容
本课题的主要内容是采用单片机实现一个简单的带闹钟定时功能的电子时钟,通过这个实习进一步加深《C语言程序设计》、《单片机原理及应用》等相关课程中的理论知识,熟练掌握单片机的编程、调试和应用系统的开发。
具体任务要求:
1、显示“时.分”进行显示,例如“12.18”,其中小数点每秒闪烁一次。
2、能够校正时间的时和分,按键分为5个功能键
(1)设定键:
在计时模式时,按下此键时停止计时,进入设置状态,并切换到分钟的设置状态,再按一次切换到小时的设置状态,每按下一次完成时.分设置的切换,用点亮时.分个位的数码管小数点表示分或秒处于设置状态。
在闹钟时间设定状态时,按下此键同样进入设置状态,完成分、秒设置的切换。
(2)递增键:
在设置状态时,按一次递增键,被设置的分钟数字或时钟数字增1,持续按下数字自动增1。
(3)递减键:
在设置状态时,按一次递减键,被设置的分钟数字或时钟数字减1,持续按下数字自动增1。
(4)计时键:
在设置状态或闹钟时间设定状态时,按下此键则单片机切换到计时的显示模式,按照新的时.分设置值进行计时。
如果已经在计时状态则此键无效。
(5)闹钟键:
在计时模式时,按下此键则单片机切换到闹钟时间设定状态的显示模式。
等待“设定键”、“递增键”、“递减键”来设定分钟和秒钟。
3、当计时到闹钟设定时间,用发光二极管闪烁,十秒钟后结束闪烁,正常计时。
3设计过程
3.1PROTEUS软件
PROTEUS是英国LabcenterElectronic公司研发的EDA。
PROTEUS不仅是摸拟电路、数字电路、模数混合电路的设计与仿真平台,更是目前世界上最先进的、最完整的多种型号单片机(微控制器)应用系统的设计与仿真平台。
它真正实现了在计算机上完成从原理图设计与电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证到形成PCB的完整的电子设计、研发过程。
主要由ISIS电路设计与仿真平台、ProSPICE模数混合仿真器、VSM单片机系统协同仿真和ARESPCB设计构成。
PROTEUS还有众多的虚拟仪器(示波器、逻辑分析仪等)、信号源;还有高级图表仿真ASF。
它们提供了检测、调试、分析的手段。
3.2硬件部分
3.2.1STC89C52单片机介绍
STC89C52单片机是由深圳宏晶公司代理销售的一款MCU,是由美国设计生产的一种低电压、高性能CMOS 8位单片机,片内含8kbytes的可反复写的FlashROM和256bytes的RAM,2个16位定时计数器。
STC89C52单片机内部主要包括累加器ACC(有时也简称为A)、程序状态字PSW、地址指示器DPTR、只读存储器ROM、随机存取存储器RAM、寄存器、并行I/O接口P0~P3、定时器/计数器、串行I/O接口以及定时控制逻辑电路等。
这些部件通过内部总线联接起来,构成一个完整的微型计算机。
其管脚图如图1所示。
图1STC89C52单片机管脚结构图
3.3功能设计流程
根据题目的要求,需要实现如下几个方面的功能。
(1)计时功能:
要实现计时功能则需要使用定时器来计时,通过设置定时器的初始值来控制溢出中断的时间间隔,再利用一个变量记录定时器溢出的次数,达到定时1秒中的功能。
然后,当计时每到1秒钟后,倒计时的计数器减1。
当倒计时计数器到0时,触发另一个标志变量,进入闪烁状态。
(2)显示功能:
显示倒计时的数字要采用动态扫描的方式将数字拆成“十位”和“个位”动态扫描显示。
如果处于闪烁状态,则可以不需要动态扫描显示,只需要控制共阴极数码管的位控线,实现数码管的灭和亮。
(3)键盘扫描和运行模式的切换:
主程序在初始化一些变量和寄存器之后,需要不断循环地读取键盘的状态和动态扫描数码管显示相应的数字。
根据键盘的按键值实现设置状态、计时状态及闹钟模式的切换。
电子时钟设计原理框图如下所示(设计源程序见附录C):
图2程序设计总体流程框图
3.4模块功能
3.4.1按键扫描模块
本次实习所用单片机包含的为矩阵式键盘,又称行列式键盘。
用I/O口线组成行、列结构,按键设置在行列的交点上。
4*4的行列结构可构成16个键的键盘,无键按下时各行、列线彼此相交而不相连,一般使之处于高电平状态;当有按键按下时,则与其相连的行线、列线相连,一般使之处于低电平状态。
由行、列线的点平状态可以识别唯一与之相连的按键。
此次编程用STC芯片上的P2口扫描读取键盘上我们所需的仅5个键盘值。
扫描获取键值程序如下:
unsignedcharscan_key()
{unsignedchara,t,b;
b=255;
a=0xef;
P2=a;
t=P2&0x0f;//列
switch(t)
{case0x0e:
b=1;//P2.0列down
break;
case0x0d:
b=2;//P2.1列down
break;
case0x0b:
b=3;//P2.2列down
break;
case0x07:
b=4;//P2.3列down
break;
}
a=0xdf;
P2=a;
t=P2&0x0f;//列
switch(t)
{case0x0e:
b=5;//P2.0列down
break;
}
returnb;
}
3.4.2数码管显示模块
所有数码管通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示。
将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
本次编程用到四个数码管,分别显示时的十位和个位、分的十位和个位,用P3.4-P3.7口分别控制四个数码管的显示。
数码管显示模块程序如下:
voidled_show(unsignedintu,unsignedintv,unsignedintw)
{
unsignedchari;
P3=0xff;
i=u/10;//暂存十位
P0=~led_seg_code[i];
P3=0x7f;
delay(100);//延时
P3=0xff;
i=u%10;//暂存个位
P0=~led_seg_code[i];
if(w==1)
{P0=P0&0x7f;
}
else
{
P0&=0xFF;
}
P3=0xbf;
delay(100);//延时
P3=0xff;
i=v/10;//暂存十位
P0=~led_seg_code[i];
P3=0xdf;
delay(100);//延时
P3=0xff;
i=v%10;//暂存个位
P0=~led_seg_code[i];
P3=0xef;
delay(100);//延时
P3=0xff;
}
3.4.3闹钟模块
蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的。
因此需要一定的电流才能驱动它,单片机IO口输出的电流较小,其TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。
程序中通过改变单片机对应IO口输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。
另外,改变其占空比,也可以控制蜂鸣器的声音大小。
它有两种驱动方式,即用PNP或NPN三极管电流放大电路驱动。
因此,我们可以通过程序控制IO口输出的电平来使蜂鸣器发出声音和关闭,从而实现各种可能音响的产生。
闹钟模块编程如下:
voidalarm()
{deng=1;
speak=1;
if(sec<=nsec+10)
{
if(banmiao==1)
{deng=1;
speak=1;}
else{deng=0;speak=0;}
}
else{deng=1;speak=1;}
}
3.5电路板焊接
运用所学知识识别元器件,并动手在已画好线路的电路板上将元器件焊接进去,使电路板正常工作。
对所焊接的电路进行仔细的检查,判断是否有焊接错误的地方或者短路的地方,对出现的异常情况根据现象判别原因,并解决问题。
下图为焊接好后的电路板:
图3电路板
4硬件调试
4.1调试结果
连接电脑,将源程序烧录到STC芯片中,开启电源,调试程序,检查结果显示是否正常,如有错误,及时修改源程序,直到调试结果正确。
图4设置状态
图5计时状态
5实习总结
两周的实习结束了,有很多的心得体会,有关于单片机的,也有关于模电数电等基本电子基础的。
因为单片机知识已经很久没复习,刚拿到任务书的时候,不知道如何着手,后来通过对书本的回顾,加深了对单片机的记忆。
有些知识会迁移和联系模电数电。
课堂教学考虑到大多数同学的需求,主要强调“基本”——基本知识、基本理论、基本方法、基本技能。
而这次实习正是为我们提供了一个深入学习、探索的机会,成为课堂教学的有益补充。
我们正面临就业问题,这次课设给了我们一个机会去试验。
单片机理论的学习是为课程的设计作准备的,但有时学习的理论也解决不了实践中的问题。
实践中获得的知识能让我对单片机的知识有更好的认识和理解。
这次的实习中不单单是考察编程能力,还锻炼了我动手调试和解决问题的能力,不过更应该感谢老师们的耐心教导,在遇到问题向老师求教时,老师不仅仅只是解决问题,还会时不时帮我们扩展思维。
在焊接电路板的过程中,有一段一插曲,我用了一上午在实验室认识元器件并学习焊接技巧,自己细心的焊接好每个引脚,可在调试的时候出问题了,电路跑不起来,我当时就傻眼了,感觉这预示着我要重新焊一块板子啊,当我请教了老师之后,老师很耐心的给我讲解了这种情况应该如何应对并解决,在老师的帮助下我顺利的找出了问题所在并解决了。
虽然此次实践我参考了一些文献资料,没有做到很大程度上的创新,但在对程序的读写过程中我明白了许多。
这次课程设计的最大收获是只有把理论用到实践中我们才能真正掌握好所学知识。
参考文献
[1]李鸿等.单片机原理及应用[M].湖南大学出版社,2005.
[2]何立民.单片机高级教程---应用与设计[M].北京航空航天大学出版社,2000,8.
[3]戴佳.51单片机C语言应用程序设计实例精讲[M].北京:
电子工业出版社,2006.
[4]于京. 51系列单片机C程序设计与应用案例[M].北京:
中国电力出版社,2006.
[5]孙育才. ATMEL新型AT89S52系列单片机及其应用[M].北京:
清华大学出版社,2005.
[6]李华.MCS-51系列单片机实用接口技术[M].北京:
北京航空航天大学出版社,2000.
附录A电路板原理图
附录B元器件清单
名称
PartType
Designator
数量
Footprint
PCB封装库
金属线
0欧姆,金属线,单面板中元件面的跳线
R21、R23、R24、R25、R27、R28、R29、R30、R31、R32、R33、R34、R35、R39
14
AXIAL0.4
Protel99库
色环金属电阻
100欧姆
R1、R2、R3、R4、R5、R6、R7、R8、R36
9
500欧姆
R14、R15、R17、R18、R19、R26
6
1K欧姆
R9、R10、R11、R12、R16、R20
6
10K
R13、R22、R38
3
9PIN排阻
1K
RP2
1
SIP9
Protel99库
10K
RP1、RP3
2
电解电容
1u
E2、E3、E4、E5、E6
5
RB.1/.2
自制
10U
C1、E1
2
C_1
自制
30p
C2、C3
2
RAD0.1
Protel99库
晶振
11.0592M
Y1
1
XTAL1
Protel99库
元件
24C01
IC2
1
DIP8
Protel99库
DS18B20三芯座
J9
1
DS18B20
自制
MAX232
IC4
1
DIP16
Protel99库
STC89C52
IC1
1
DIP40
Protel99库
四位共阳极数码管
LED5641BR
U1
1
LED5641BR
自制
二极管
1N5817
D1
1
DIODE-0.4H
自制
发光二极管
红色
L1、L2、L3、L4、L5、L6、L7、L8、L11、L14、L15、L20、L21
13
LED
自制
黄色
L10、L13、L16、L19
4
LED
自制
绿色
L9、L12、L17、L18
4
LED
自制
三极管
9012
Q1、Q2、Q3、Q4、Q5
5
PNP3
自制
5V无源蜂鸣器
BELL
U7
1
RAD0.3
Protel99库
自锁开关
SW-DPDT
S20
1
DIP_KEY6
自制
轻触开关
S1、S2、S3、S4、S5、S6、S7、S8、S9、S10、S11、S12、S13、S14、S15、S16、S23
17
TP-KEY
自制
跳线端子
3Pin排针
S17、S18、S19、S22、J2
5
SIP3
Protel99库
接插件
2芯接线端
DC5V_IN
1
CON2P
自制
S51_ISP
JP1
1
IDC10
Protel99库
DB9
J1
1
DB9/F
Protel99库
USB
J3
1
USB-A-F-90
自制
IC座
DIP8
1
DIP16
1
DIP40
1
跳线帽
4
自恢复保险丝
1
附录C电子时钟模块原理图
附录D电子时钟源程序
#include"c:
\DocumentsandSettings\Administrator\桌面\dzsz.prj"
sbitdeng=P1^7;
sbitspeak=P1^0;
unsignedchardatakey_val_old,key_val_new;//暂存倒计数的初始值和保存倒计数的当前值
unsignedintdataT1_cnt=0;//保存定时器溢出次数
unsignedintdatastate_val=0,nao=0;//状态值
unsignedchardatakey_pre,key_cur;//存放当前扫描的键和前一次按下的键值
unsignedintbanmiao=0;
charsec=0,min=0,hour=0;
charksec,kmin,khour;
charnsec=10,nmin=0,nhour=0;
Charcodeled_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
//-----------延时-------------
voiddelay(unsignedinti)
{while(--i);}
//-------------获取键值-----------
unsignedcharscan_key()
{unsignedchara,t,b;
b=255;
a=0xef;
P2=a;
t=P2&0x0f;//列
switch(t)
{case0x0e:
b=1;//P2.0列down
break;
case0x0d:
b=2;//P2.1列down
break;
case0x0b:
b=3;//P2.2列down
break;
case0x07:
b=4;//P2.3列down
break;
}
a=0xdf;
P2=a;
t=P2&0x0f;//列
switch(t)
{case0x0e:
b=5;//P2.0列down
break;
}
returnb;
}
//----------数码管显示--------------
voidled_show(unsignedintu,unsignedintv,unsignedintw)
{
unsignedchari;
P3=0xff;
i=u/10;//暂存十位
P0=~led_seg_code[i];
P3=0x7f;
delay(100);//延时
P3=0xff;
i=u%10;//暂存个位
P0=~led_seg_code[i];
if(w==1)
{P0=P0&0x7f;
}
else
{
P0&=0xFF;
}
P3=0xbf;
delay(100);//延时
P3=0xff;
i=v/10;//暂存十位
P0=~led_seg_code[i];
P3=0xdf;
delay(100);//延时
P3=0xff;
i=v%10;//暂存个位
P0=~led_seg_code[i];
P3=0xef;
delay(100);//延时
P3=0xff;
}
//----------T1中断---------------
voidtimer1()interrupt3//T1中断,250us中断一次
{TH1=(65535-5000)/256;
TL1=(65535-5000)%256;
T1_cnt++;
if(T1_cnt>1999)//如果计数>1999,计时0.5s
banmiao=1;
if(T1_cnt>3999)//如果计数>3999,计时1s
{T1_cnt=0;
sec++;
banmiao=0;
}
if(sec==60)
{sec=0;
min++;
}
if(min==60)
{min=0;
hour++;
}
if(hour==24)
{hour=0;
min=0;
sec=0;
}
}
//---------闹钟----------------
voidalarm()
{deng=1;
speak=1;
if(sec<=nsec+10)
{
if(banmiao==1)
{deng=1;
speak=1;}
else{deng=0;speak=0;}
}
else{deng=1;speak=1;}
}
//---------主程序----------------
main()
{TH1=(65535-5000)/256;/******装入计数初值****/
TL1=(65535-5000)%256;
state_val=0;
key_val_old=255;
T1_cnt=0;
TMOD=0x20;//用T1计时8位自动装载定时模式
//TH1=0x19;//250微秒溢出一次;250=(256-x)*12/11.0592->x=230.4
//TL1=0x19;
EA=1;//打开总中断允许
ET1=1;//开中断允许
TR1=1;//开定时器T1
while
(1)
{
if(hour==nhour&&min==nmin&&sec>=nsec)
alarm();
led_show(hour,min,banmiao);
key_val_new=scan_key();//255表示无键按下
if(key_val_new!
=key_val_old)
{//只有当前扫描的键值与上次扫描
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 时钟 实习 报告