单片机课程设计数字钟报告.docx
- 文档编号:23363418
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:18
- 大小:322.26KB
单片机课程设计数字钟报告.docx
《单片机课程设计数字钟报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计数字钟报告.docx(18页珍藏版)》请在冰豆网上搜索。
单片机课程设计数字钟报告
Forpersonaluseonlyinstudyandresearch;notforcommercialuse
单片机课程设计正文
数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
二、Forpersonaluseonlyinstudyandresearch;notforcommercialuse
三、
四、题目及要求
设计一个多功能数字钟,使其具有以下功能:
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组合具体电路如下:
图2555与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
#include
#defineucharunsignedchar
#defineuintunsignedint
voidSYSCLK_Init(void);
voidPort_Init(void);
voiddelay();
sbitdula=P3^1;
sbitwela=P3^2;
sbitalarm=P2^7;
sbitkey1=P0^0;
sbitkey2=P0^1;
sbitkey3=P0^2;
ucharcodeduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//共阴极数码管的显示译码
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
ucharcodewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//段选编码
uchari,j;//定义循环变量
ucharsec1=0,sec2=0,min1=0,min2=0,hour1=0,hour2=0,sec=0,min=0,hour=0;//定义代表时分秒的变量
ucharcon=0;
uintms10;//定义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;
}
voidmain(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();
}
}
}
voiddelay()//定义延时函数
{uintj,k;
for(j=0;j<50;j++)
for(k=0;k<5;k++);
}
voidtimer0(void)interrupt1//使用定时器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程序设计》(第三版)谭浩强清华大学出版社
《模拟电子技术基础》(第四版)童诗白高等教育出版社
《数字电子技术基础》(第五版)阎石高等教育出版社
仅供个人用于学习、研究;不得用于商业用途。
Forpersonaluseonlyinstudyandresearch;notforcommercialuse.
NurfürdenpersönlichenfürStudien,Forschung,zukommerziellenZweckenverwendetwerden.
Pourl'étudeetlarechercheuniquementàdesfinspersonnelles;pasàdesfinscommerciales.
толькодлялюдей,которыеиспользуютсядляобучения,исследованийинедолжныиспользоватьсявкоммерческихцелях.
以下无正文
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 数字 报告