单片机课程设计数字钟报告
- 格式:doc
- 大小:1.44 MB
- 文档页数:23
电子与信息工程学院综合实验课程报告
课题名称单片机课程设计
专业通信工程
班级
学生姓名
学号
指导教师
单片机课程设计正文
一、引言
现代社会科技飞速发展,人们生活节奏加快,时间就是金钱,时间就是生命。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
20世纪末,电子技术得到飞速发展,各类电子产品相继出现在市场,电子产品主要朝着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
数字化电子产品已渗入到人类生活的方方面面。
单片计算机即单片微型计算机(Single-Chip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多输入输出口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。
而52 单片机是51单片机的升级版,功能更强大。
单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
基于以上发展与现实需要本次设计课题就是基于单片机的设计-----基于单片机的多功能数字钟。
数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,
研究数字钟及扩大其应用,有着非常现实的意义。
二、题目及要求
设计一个多功能数字钟,使其具有以下功能:
1、由晶振电路产生标准秒信号。
2、能够显示时、分、秒:完成显示由秒00一直加1至59,再恢复为00;分加
1,由00至01,一直加1至59,再恢复00;时加1,由00至01,一直加1到23,再恢复00。
3、要有手动快速校时、校分、秒。
4、要有报时电路(蜂鸣器每分钟短叫一声,一小时长叫一声)。
5、自定义电路,设计、调试,并完成实验报告。
要求设计基于单片机的多功能数字钟,即用单片机来实现课程设计。
三、总体思路
数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。
由于计数的起始时间不可能与标准时间一致,故需要在电路上加一个校时电路。
对于一般的数字钟多会有报时功能。
针对以上叙述,可整体构想:标准频率可由振荡电路产生,更精确时,可由石英晶体产生。
计数,可由2个60进制计数器,分别作为秒、分计数单元,一个24进制,作为时计数单元。
计数单元同样可采用中断定时方式,这就需要由软件来实现。
对于校时部分,一般都是手动进行,通过按键来控制时、分、秒的快速校准。
报时电路,可每小时短报时,也可设定每天的几点准时闹铃。
至于,显示时间的部分可由数码管也可由液晶显示来完成。
针对以上设计思路,可有多种设计方案。
对于具体的,参考方案论证。
四、方案论证
方案一:纯电路设计
此方案电路总方框图如下:
图 1 系统原理框图
(1)振荡电路:振荡电路主要是用来产生一固定频率的方波,可由定时器555与RC 组合具体电路如下:
图 2 555与RC组成的多谐振荡器图
但由于一般情况下,数字钟需要较高的精确度,所以我们可以石英晶体来产生方波信号,电路图如下:
图 3 石英晶体振荡器图
振荡器是数字钟的核心。
振荡器的稳定度及频率的精确度决定了数字钟计时的准确程度,通常选用石英晶体构成振荡器电路。
石英晶体振荡器的作用是产生时间标准信号。
因此,一般采用石英晶体振荡器经过分频得到这一时间脉冲信号。
(2)分频电路:分频电路主要是用来将振荡器产生的固定频率方波,经一次或多次分频得到1Hz的方波即1秒的时间。
(3)计数电路:可用2个60进制计数器分别作为分、秒的计数单元,1个24进制计数器作为时的计数单元。
以1Hz的方波作为秒计数的CLK时钟信号,以秒计数溢满进位位作为分的CLK时钟信号,以分计数溢满进位位作为时的CLK时钟信号。
部分电路如下:
图4 秒、分计数电路
(4)校时电路:可通过手动来断开电路工作,然后快速调节时、分、秒,调整后,系统再继续计数。
(5)报时电路:可设定每小时短时报时,可以分计数溢满进位位控制蜂鸣器。
或者每次的固定时间闹铃。
对以上电路分析知,方案一完全由硬件电路实现,不需软件,也就不需编程。
这也就注定了其硬件电路的复杂性,需要较高的硬件技术。
因此,我们采用软硬件结合的方法,既减少硬件电路,也可保证此数字钟的高准确度。
因此,根据现实情况及课题要求,我们采用方案二。
具体过程见具体实现部分。
方案二:采用AT89S52单片机设计
主要以52芯片为核心,可内部或外部产生信号,采用中断的方式定时。
系统由AT89S52单片机、锁存器74HC573、LED 数码管、按键、发光二极管等部分构成,能实现比较精确的走时、时间的调整等功能。
秒信号是由单片机内部的定时器产生,通过软件计数和软件的译码,以动态扫描的方式将时间显示在数码管上面。
通过按键的检测可以控制单片机相应的动作,来达到调时的目的。
五、具体实现电路如下:
图 5 总体电路图
(一)、硬件设计
1、电源电路:
电源是单片机系统的重要组成部分,它不仅为系统提供多路电压源,还直接影响到系统的技术指标和抗干扰性能。
AT89S52单片机和一般的数字芯片一样,都是5V电压供电,所以可以共用一个5V电源。
另外,为了提高电源的稳定性,在离电源的最近处做好退耦处理,可用一个电容,以滤去干扰,保证电源的稳定。
2、锁存器74HC573:
74HC573包含八路D 型透明锁存器,每个锁存器具有独立的D 型输入,以及适用于面向总线的应用的三态输出。
所有锁存器共用一个锁存使能(LE)端和一个输出使能(OE)端。
Dn:第n路输入数据; On:第n路输出数据;
当LE为高时,数据从Dn输入到锁存器,在此条件下,锁存器进入透明模式,也就是说,锁存器的输出状态将会随着对应的D输入每次的变化而改变。
当LE 为低时,锁存器将存储D输入上的信息一段就绪时间,直到LE的下降沿来临。
当OE为低时,8个锁存器的内容可被正常输出;当OE为高时,输出进入高阻态。
OE端的操作不会影响锁存器的状态。
操作电压范围:2.0V~6.0V。
低输入电流:1.0uA
下图为74HC573的引脚图:
3、数码管显示电路:
要同时使得6个数码管点亮,所需的IO口是很多的。
为了节省单片机的IO
口,通常采用动态扫描的显示方法,将每个数码管的同名段连在一起,分6次向数码管写数据,每次对6个数码管写相同的数据,每次选通一个数码管,完成扫描,通过调整、缩短扫描的时间,由于人眼的视觉暂留作用,使得人们看起来就像同时显示一样,以达到动态显示的目的。
部分电路如下:
此处数码管采用LG5011AH型号的共阴极接法,其管脚如下:
4、AT89S52单片机:其引脚如下:
电源引脚:40(VCC)接+5V电源,20(GND)接地。
晶振采用内部方式。
晶体振荡器与AT89S52的接法为如图所示,XTAL1和XTAL2脚接到12MHz的晶体振荡器上,与两个30pf的电容并联,并接低电平。
19(XTAL1), 18(XTAL2)
XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。
内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。
晶振的频率可以在1MHz-24MHz内选择。
电容取30PF左右。
系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。
AT89单片机内部有一个用于构成振荡器的高增益反相放大器。
引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。
外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。
对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。
因此,此系统电路的晶体振荡器的值为
12MHz,电容应尽可能的选择陶瓷电容,电容值约为30μF。
在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。
9(RESET)复位键
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,52芯片便循环复位。
复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。
当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。
复位是由外部的复位电路来实现的。
本次采用了手动复位,电路如下:
输入输出口的连接
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
本次设计使用P0口的P0.0~P0.2来分别控制调时中的时、分、秒。
电路如下
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH
编程和校验时,P1口作为第八位地址接收。
本次设计P1口分别接段选74HC573的2~9引脚,锁存控制数码管的点亮。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
本次设计使用P2口的P2.0~P2.5分别接位选74HC573的2~7脚,控制数码管轮流点亮。
此外,我
们同样用P2.7口控制蜂鸣器的报时。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL 门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
本次使用了P3的P3.1~P3.2分别控制段选和位选。
蜂鸣器的使用
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
其中蜂鸣器电路中三极管的作用是放大声音信号.三极管是一种控制元件,主要用来控制电流的大小,以共发射极接法为例(信号从基极输入,从集电极输出,发射极接地),当基极电压UB有一个微小的变化时,基极电流IB也会随之有一小的变化,受基极电流IB的控制,集电极电流IC会有一个很大的变化,基极电流IB越大,集电极电流IC也越大,反之,基极电流越小,集电极电流也越小,即基极电流控制集电极电流的变化。
但是集电极电流的变化比基极电流的变化大得多,这就是三极管的放大作用。
具体电路如下:
(二)、软件实现
利用C语言编程如下(部分说明已注释):
/*P1口接段选,P2口接位选(P2.0到P2.5),段选letch接P3.1,位选letch 接P3.2*/
#include<stdio.h>
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
void SYSCLK_Init (void);
void Port_Init(void);
void delay();
sbit dula = P3^1;
sbit wela = P3^2;
sbit alarm = P2^7;
sbit key1=P0^0;
sbit key2=P0^1;
sbit key3=P0^2;
uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //共阴极数码管的显示译码
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //段选
编码
uchar i,j; //定义循环变量
uchar sec1=0,sec2=0,min1=0,min2=0,hour1=0,hour2=0,sec=0,min=0,hour=0; //定义代表时分秒的变量
uchar con=0;
uint ms10; //定义10ms定时变量
keyscan() //调时按键处理函数
{
EA=0;
if(key1==0)
{
delay();delay();
if(key1==0)
{
while(!key1);
sec++;
if(sec==60)
sec=0;
}
}
if(key2==0)
{
delay();delay();
if(key2==0)
{
delay();
while(!key2);
min++;
if(min==60)
min=0;
}
}
if(key3==0)
{
delay();delay();
if(key3==0)
{
while(!key3);
hour++;
if(hour==24)
hour=0;
}
}
EA=1;
}
void main (void)
{
alarm = 0;
TMOD=0x02;
TH0=0x06;
TL0=0x06;
EA=1;
ET0=1;
TR0=1;
while(1)
{
keyscan();
{
P2=0xff;
dula=0;
P1=duan[sec1]; /*6*/ //显示秒的个位dula=1;
wela=0;
P2=0xfe;
wela=1;
delay();
}
{
P2=0xff;
dula=0;
P1=duan[sec2]; /*5*/ //显示秒的十位dula=1;
wela=0;
P2=0xfd;
wela=1;
delay();
}
{
P2=0xff;
dula=0;
P1=duan[min1]; /*4*/ //显示分的个位dula=1;
wela=0;
P2=0xfb;
wela=1;
delay();
}
{
P2=0xff;
dula=0;
P1=duan[min2]; /*3*/ //显示分的十位dula=1;
wela=0;
P2=0xf7;
wela=1;
delay();
}
{
P2=0xff;
dula=0;
P1=duan[hour1]; /*2*/ //显示时的个位dula=1;
wela=0;
P2=0xef;
wela=1;
delay();
}
{
P2=0xff;
dula=0;
P1=duan[hour2]; /*1*/ //显示时的十位dula=1;
wela=0;
P2=0xdf;
wela=1;
delay();
}
}
}
void delay() //定义延时函数
{ uint j,k;
for(j = 0; j<50; j++)
for(k = 0;k<5;k++);
}
void timer0(void) interrupt 1 //使用定时器0中断
{
ms10++;
if(ms10==4000)
{
ms10=0;
sec++;
if(sec==60)
{
sec=0;
min++;
alarm=1;
alarm=0;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
alarm=1;
alarm=1;
alarm=1;
alarm=0;
}
}
}
}
sec1=sec%10;
sec2=sec/10;
min1=min%10;
min2=min/10;
hour1=hour%10;
hour2=hour/10;
ET0=1;
}
如此一个完整的基于单片机的多功能数字钟即完成。
六、其它
硬件制作电路板,并将程序烧至单片机内,运行并调试。
在此应注意:电路板的焊接,防止虚焊和短路,因为引脚较多,且排列紧密所以要求,焊接技术较高。
除此以外,编程也是较重要的,要注意每个引脚的功用,和确定准确的延时时间。
电路焊接完成后就运行调试,以及时发现并改正错误。
七、问题分析
制作一块完整电路板,一次性完全正确较不易,总会遇到这样或那样的问题。
我们在设计电路板是也同样遇到诸多问题,但经过组员的齐心协力终于完成任务。
问题如下:
1、在调试时,显示十位分的数码管始终不亮。
我们2位同学重新检查了关于此
数码管的所有连接,结果发现有一条电路线断路,重新连接后,此数码管同样不会点亮。
然后检查程序,才发现,秒的十位位选并没有选择,修改程序后,此数码管点亮。
2、接通电路后,蜂鸣器一直闹铃。
查找资料,分析后,知道不同型号的三极管
对应于蜂鸣器的接法是不一样的。
而我们,显然是弄错了三极管的型号。
改正后,电路工作正常。
3、编程时,同样出现了错误。
如P口对应错误,按键控制错误等。
八、心得体会
我在这一次数字电子钟的设计过程中,很是受益匪浅。
通过对自己在大学所学的知识的回顾,并发挥对所学知识的理解和思考及书面表达能力,亲手设计,最终完成目标了。
这为自己今后进一步深化学习,积累了一定宝贵的经验。
把知识转化为能力的实际训练。
培养了我运用所学知识解决实际问题的能力。
同样在本次试验中,我们掌握了更多的专业知识,了解了众多的芯片接法,各芯片功能引脚。
进一步加深了查找资料的方法。
此次试验让我们更进一步了解到只有理论知识是远不够的,要理论联系实际,将书中的理论知识转化为实际动手,这样,在实践中检验真理。
九、参考文献
《单片机原理与应用及C51程序设计》谢维成清华大学学出版社
《C程序设计》(第三版)谭浩强清华大学出版社
《模拟电子技术基础》(第四版)童诗白高等教育出版社
《数字电子技术基础》(第五版)阎石高等教育出版社
附:元件清单
单片机芯片 AT89S52 1 锁存器芯片 74HC573 2 三极管 9013 1 按键 6*6*5 1 蜂鸣器 5V驱动 1 瓷片电容 30pF 2 电解电容 47uF/50V 1 电解电容 10uF/50V 1 电阻 1K 9 电阻 4.7K 4 数码管 LG5011AH 6 晶振 12M 1 插槽 2C-40 1
插槽 2C-20 1 电路板 10*15cm 1。