用单片机内部定时器实现的数字钟智能测控仪器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用单片机内部定时器实现的数字钟智能测控仪器设计
“智能测控仪器设计”课程
项目设计总结报告
项目名称:用单片机内部定时器实现的数字钟指导老师:
学号:
专业年级:
完成时间: 2013 年 7 月
用单片机内部定时器实现的数字钟
摘要:近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
本文介绍了基于单片机AT89C51的数字钟的设计,详细讨论了它从软件上实现的过程,重点在时钟调整的方式:查询和中断的比较,然后,对数字钟的稳定性和精确性作了相关的讨论。
在文章的最后,给出了采用中断方式实现的数字钟的源程序。
本次设计通过对一个时钟显示、手动校时等功能的时间系统的设计,其中结合了LCD1602显示、单片机定时中断等技术。
关键词:单片机的应用,AT89C51,LCD
Abstrct:In recent years along with computer penetration in the social sphere and the large scale integrated circuit development, MCU applications are constantly deepening, because it has strong function, small volume, low power consumption, low price, reliable work, so that the use is convenient wait for a characteristic, thus it is especially suitable for and control of relevant system, more and more widely and its application in automatic control, intelligent instruments, instrumentation, data acquisition, military products and household appliances and other fields, the microcontroller is often used as a core component to use, in accordance with the specific hardware structure, and the specific characteristics of the target application software node, to make perfect. This article introduced based on the single-chip digital clock design, discussed in detail from the software implementation process, heavy in the clock adjustment way: queries and disruption of comparison, and then, on the digital clock made
of the stability and accuracy of closed the discussion. At the end of the article, gives the interrupt mode to achieve digital clock source. This design through to a clock display, manual school functions when the time system design, which combines the LCD1602 display, dynamic scanning, SCM timer interrupt technology.
Key words:The application of MCU, AT89C51, LCD
1. 项目研究意义与研究现状
数字钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,与机械式时钟相比具有更高的准确性和直观性,装置,具有更长的使用寿命,已得到广泛的使用。
数字钟的设计方法有许多种,例如,可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;还可以利用单片机来实现电子钟等等。
这些方法都各有其特点,其中利用单片机实现的电子钟具有编程灵活,并便于功能的扩展。
数字钟广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
本课题研究的基于51单片机数字钟采用专用实时时钟芯片,走时准确,且具有掉电保持功能,采用新颖简单的图像点阵液晶显示,开机有启动画面,具有良好的人机界面;是很好的时间指示工具。
2. 研究的内容与预期目标
2.1 研究内容
单片机经过1、2、3、3代的发展,正朝着多功能、高性能、低电压、低功耗、低价格、大存储容量、强I/O功能及较好的结构兼容性方向发展。
其发展趋势不外乎以下几个方面:
1、多功能
单片机中尽可能地把所需要的存储器和I/O口都集成在一块芯片上,使得单片机可以实现更多的功能。
比如A/D、PWM、PCA(可编程计数器阵列)、WDT(监视定时器---看家狗)、高速I/O口及计数器的捕获/比较逻辑等。
有的单片机针对某一个应用领域,集成了相关的控制设备,以减少应用系统的芯片数量。
例如,有的芯片以51内核为核心,集成了USB控制器、SMART CARD接口、MP3解码器、CAN或者I*I*C总线控制器等,LED、LCD或VFD 显示驱动器也开始集成在8位单片机中。
2、高效率和高性能
为了提高执行速度和执行效率,单片机开始使用RISC、流水线和DSP的设计技术,使单片机的性能有了明显的提高,表现为:单片机的时钟频率得到提高;同样频率的单片机运行效率也有了很大的提升;由于集成度的提高,单片机的寻址能力、片内ROM(FLASH)和RAM的容量都突破了以往的数量和限制。
由于系统资源和系统复杂程度的增加,开始使用高级语言(如C语言)来开发单片机的程序。
使用高级语言可以降低开发难度,缩短开发周期,增强软件的可读性和可移植性,便于改进和扩充功能。
3、低电压和低功耗
单片机的嵌入式应用决定了低电压和低功耗的特性十分重要。
由于CMOS 等工艺的大量采用,很多单片机可以在更低的电压下工作(1.2V或0.9V),功耗已经降低到uA级。
这些特性使得单片机系统可以在更小电源的支持下工作更长的时间。
2.2 预期目标
该多功能数字钟的设计,总体上大致可分为以下几个部分组成:1. 时钟电路部分;2.复位电路部分;3.LCD显示电路部分;4.按键选择电路部分;5. 蜂鸣器电路部分。
系统原理框图如图1所示。
整个电路的工作原理是由晶振芯片提供准确的时钟电路,由键盘调整数字钟的功能,并通过软件编程把时间数字通过LCD显示出来。
时钟复位
LCD显示
按键选
AT
图1 系统原理框图
3. 总体结构设计
1.系统的基本原理及设计思想
本设计采用AT89C51单片机模块、晶振电路模块、复位电路模块、独立键盘模块和显示电路模块。
晶振电路用于产生AT89C51单片机工作时所必需的控制信号。
AT89C51
单片机的内部电路正是在时钟信号的控制下,严格地按时序执行指令进行工作。
在执行指令时,CPU首先到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号完成指令所规定的操作。
复位是单片机的初始化操作,只需给AT89C51的复位引脚RESET加上大于2个机器周期的高电平就可使AT89C51复位。
当AT89C51进行复位时,PC 初始化为0000H,使AT89C51单片机从程序存储器的0000H单元开始执行程序。
除了进入系统的正常初始化之外,当程序运行出错(如程序“跑飞”)或操作错误使系统处于“死锁”状态时,也需要按复位键即RESET为高电平,使
AT89C51摆脱“跑飞”或“死锁”状态而重新启动程序。
键盘的任务有三项:(1)首先判别是否有键按下。
若有,进入下一步工作。
(2)识别哪一个键被按下,并求出相应的键值。
(3)根据键值,找到相应键值的处理程序入口。
在本设计中,键盘具有向单片机输入数据、命令等功能,是人与单片机对话的主要手段。
2.计时方案
电脑数字钟的秒信号是利用AT89C51单片机内部定时器TO产生的。
由于振荡器的晶振频率为12MHz,使得TO的最大定时时间远远小于1秒,因此,在设计时采用了硬件计数与软件计数相结合的方式,即通过TO产生0.1S的时基信号,然后再利用软件进行计数,从而产生1秒钟的时间信号。
在设计中,定时器TO采用了中断方式。
当定时时间到时,定时器向CPU申请一次中断,CPU响应中断后转入中断服务程序,在TO的中断服务程序中实现时、分、秒的累加,即每产生一次中断,0.1S时基单元的内容加1,当0.1S时基单元的内容等于10时,便产生1S信号,使秒计数单元的内容加1,并将0.1S时基单元的内容清0;当秒计数单元计满60后,向分计数单元进位,使分计数单元的内容加1,并将秒计数单元的内容清0;当分计数单元计满60后,向时计数单元进位,使时计数单元的内容加1,并将分计数单元的内容清0;时计数单元计满24后清O。
4.硬件设计
4.1 单片机的选择
本课程选用AT89C51型号的单片机。
AT89C51 是美国ATMEL 公司生产的低电压,高性能CMOS8 位单片机,片内含4k bytes 的可反复擦写的只读程序存储器(PEROM)和128 bytes 的随机存取数据存储器(RAM ),器件采用ATMEL 公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8 位央处理器(CPU)和Flash 存储单元,功能强大AT89C51 单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。
主要性能参数:
1、与MCS-51产指令系统完全兼容
2、4k字节可重擦写Flash 闪速存储器
3、1000 次擦写周期
4、全静态操作:0Hz-24MHz
5、三级加密程序存储器
6、128×8 字节内部RAM
7、32 个可编程I /O口线
8、2 个16 位定时/计数器
4.2 定时/计数器
8051系列单片机至少有两个16位内部定时器/计数器。
8052有三个定时器/计数器,其中连个基本定时器/计数器是定时器/计数器0和定时器/计数器1。
他们既可以编程为定时器使用,也可以编程为计数器使用。
若是计数内部晶振驱动时钟,则它是定时器;若是计数8051的输入引脚的脉冲信号,则它是计数器。
8051的T/C时加一计数的。
定时器实际上也是工作在技术方式下的,只不过对固定频率的脉冲计数;由于脉冲周期固定,由计数值可以计算出时间,有定时功能。
当T/C工作在定时器时,对振荡源12分频的脉冲计数,即每个机器周期计数值加一,频率加=fosc/12。
晶振为6MHz,计数频率=500KHz,每2Us计数加一。
当T/C工作在计数器时,计数脉冲来自外部脉冲输入引脚T0或T1。
当T0或T1脚上负跳变需2个机器周期,即24个振荡周期。
所以T0或T1脚输入的计数外部脉冲的最高频率为fosc/12。
当晶振为12MHz时,最高技术频率为
500KHz,高于此频率将计数出错。
4.3 显示电路
1602字符型LCD简介
1602LCD主要技术参数:
显示容量:16×2个字符
芯片工作电压:4.5—5.5V
工作电流:2.0mA(5.0V)
模块最佳工作电压:5.0V
引脚功能说明
表1:引脚接口说明表
编号符号引脚说明编号符号引脚说明
1 VSS 电源地9 D
2 数据
2 VDD 电源正极10 D
3 数据
3 VL 液晶显示偏压11 D
4 数据
4 RS 数据/命令选择12 D
5 数据
5 R/W 读/写选择13 D
6 数据
6 E 使能信号14 D
7 数据
7 D0 数据15 BLA 背光源正极
8 D1 数据16 BLK 背光源负极
第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W 为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
4.3.1 液晶显示器各种图形的显示原理
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。
下面以长沙太阳人电子有限公
司的1602字符型液晶显示器为例,介绍其用法。
一般1602字符型液晶显示器实物如图5,仿真图6:
1.线段的显示
点阵图形式液晶由M×N 个显示单元组成,假设LCD 显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM 区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
例如屏的第一行的亮暗由RAM 区的
000H ——00FH 的16字节的内容决定,当(000H )=FFH 时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH )=FFH 时,则屏幕的右下角显示一条短亮线;当(000H )=FFH ,(001H )=00H ,(002H )=00H ,……(00EH )=00H ,(00FH )=00H 时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。
这就是LCD 显示的基本原理。
2.字符的显示
用LCD 显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM 区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。
这样一来就组成某个字符。
但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD 上开始显示的行列号及每行的列数找出显示RAM 对应的地址,设立光标,在此送上该字符对应的代码即可。
4.3.2 时钟电路
时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。
因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
常用的时钟电路有两种方式:一种是内部时钟方式,另一种为外部时钟方式。
本文用的是内部时钟方式。
电路图
如图7:
MCS-51单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反向放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器。
图
2
4.3.3 按键电路
独立式按键是各按键相互独立,每个按键占用一根I/O 端线,每根I/O 端线上的按键工作状态不会影响其他I/O 端线上按键的工作状态。
如图9所示:
独立式按键电路配置灵活,软件结构简单,但每个按键必须适用于按键数
量较少的场合。
本设计中用到4个按键数量较少,所以采用的是独立式按键。
图 3 独立R1
R2
R3
80C51
P 1.0P 1.1P 1.2
K0K1K2
+5V
5.软件设计
系统的软件设计也是工具系统功能的设计。
单片机软件的设计主要包括执行软件(完成各种实质性功能)的设计和监控软件的设计。
单片机的软件设计通常要考虑以下几个方面的问题:
(1)根据软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体结构,使软件开发清晰、简洁和流程合理;
(2)培养良好的编程风格,如考虑结构化程序设计、实行模块化、子程序化。
既便于调试、链接,又便于移植和修改;
(3)建立正确的数学模型,通过仿真提高系统的性能,并选取合适的参数;
(4)绘制程序流程图;
(5)合理分配系统资源;
(6)为程序加入注释,提高可读性,实施软件工程;
(7)注意软件的抗干扰设计,提高系统的可靠性。
5.1 主控模块设计
开始工作时,先把一切都初始化,然后单片机里的定时器开始工作,主程序开始运行,同时对按键进行检测,检测完就可以开始计时。
以下是本实验程序:#include<reg52.h> #include<intrins.h> #include<stdlib.h> sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit BF=P0^7;
sbit K1=P3^0;
开始
初始化
启动定时器,主程序
开始运行
按键检
时间显
图4 主程序
sbit K2=P3^2;
sbit K3=P3^4;
sbit K4=P3^6;
unsigned char t;
unsigned char s,m,h;
unsigned char code string[]={"Beijing Time"}; unsigned char code digit[]={"0123456789"}; void delay(unsigned char i)
{
unsigned char j;
while(i--)
for(j=0;j<115;j++)
;
}
unsigned char BusyTest()
{
bit result;
RS=0;
RW=1;
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=BF;
E=0;
return result;
}
void Write_com(unsigned char dicate)
{
while(BusyTest()==1);
RS=0;
RW=0;
E=0;
_nop_();
_nop_();
P0=dicate;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
E=0;
}
void WriteAddress(unsigned char x) {
Write_com(x|0x80);
}
void WriteData(unsigned char y) {
while(BusyTest()==1);
RS=1;
RW=0;
E=0;
_nop_();
_nop_();
P0=y;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
void Lcdint()
{
delay(15);
Write_com(0x38);
delay(5);
Write_com(0x38);
delay(5);
Write_com(0x38);
delay(5);
Write_com(0x0c);
delay(5);
Write_com(0x06);
Write_com(0x01);
delay(5);
}
void Displayhour()
{
unsigned char i,j;
i=h/10;
j=h%10;
WriteAddress(0x44); WriteData(digit[i]); WriteData(digit[j]);
}
void Displayminute()
{
unsigned char i,j;
i=m/10;
j=m%10;
WriteAddress(0x47); WriteData(digit[i]); WriteData(digit[j]);
}
void Displaysecond()
{
unsigned char i,j;
i=s/10;
j=s%10;
WriteAddress(0x4a); WriteData(digit[i]); WriteData(digit[j]);
}
void main()
{
unsigned char i;
Lcdint();
TMOD=0x01;
EA=1;
ET0=1;
TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1;
t=0;
s=0;
h=0;
WriteAddress(0x02);
i=0;
while(string[i]!='\0')
{
WriteData(string[i]);
i++;
}
WriteAddress(0x46); WriteData(':'); WriteAddress(0x49); WriteData(':');
while(1)
{
Displayhour();
delay(5); Displayminute();
delay(5); Displaysecond();
delay(5);
if(K1==0)
{
delay(15);
if(K1==0)
{
h++;
if(h==24)
{
h=0;
}
}
while(K1==0);
delay(15);
}
if(K2==0)
{
delay(15);
if(K2==0)
{
m++;
if(m==60)
{
m=0;
}
}
while(K2==0);
delay(15);
}
if(K3==0)
{
delay(15);
if(K3==0)
{
m--;
if(m==0)
{
m=59;
}
}
while(K3==0);
delay(15);
}
if(K4==0)
{
delay(15);
if(K4==0)
{
h--;
if(h==0)
{
h=23;
}
}
while(K4==0);
delay(15);
}
}
}
void timer0(void) interrupt 1 {
t++;
if(t==20)
{
t=0;
s++;
}
if(s==60)
{
s=0;
m++;
}
if(m==60)
{
m=0;
h++;
}
if(h==24)
{
h=0;
}
TH0=(65536-50000)/256; TL0=(65536-50000)%256; }
图 5 实验结
经过将近一个月学习和设计,我收获颇多,有深刻的心得体会。
让我受益匪浅。
关于单片机方面的知识,我学到了许多关于单片机系统开发的知识,使我们各个方面都得到了充分的锻炼。
通过本次设计,使我更加扎实的掌握了有关电子线路、单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的讨论,一遍又一遍的检查我们终于找出了问题所在,也暴露出了前期在这方面的知识欠缺和经验不足。
实践才能出真知,实践才是检验真理的唯一标准,唯有通过亲自动手制作,才能令我们掌握的知识不再是一些纸上谈兵的东西。
在这次的设计中,我们遇到了很多困难,过程很艰难,但是我们都克服了,我们不断发现错误,不断改正,不断领悟,不断获取。
我们也曾灰心,也曾茫然,也曾不知所措,从一开始的自信满满,到最后的紧张繁杂,所有的这些都令我们回味无穷,这已经成为了我们人生的一个宝藏。
我想今后的学习和工作也是这样的,汗水见证着成功,我想不久之后,我们都已经走入了社会,在某个阳光明媚的夏日,午后醒来,突然想起大学经历的时候,最先映入脑海里的就是这门课程吧,就是这些为了一个共同的目标,相互合作,共同奋斗的日子吧。
通过这次设计,我掌握了常用元件的识别和测试;熟悉了常用仪器、仪表;了解了电路的连线方法;以及如何提高电路的性能等等。
我相信在接下来的日子里,我会更深刻地去研究它,发掘它。
在这次的设计里,我觉得过得很充实。
不仅培养了我们独立思考、动手操作的能力,在各种其它能力上也都有了提高。
更重要的是,让我们学会了很多学习的方法,而这是日后最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
这对于我们的将来也有很大的帮助。
以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。
汗水,是我们努力的过程,更是成功的使者。