多功能时钟Word文件下载.docx
- 文档编号:17697892
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:25
- 大小:443.76KB
多功能时钟Word文件下载.docx
《多功能时钟Word文件下载.docx》由会员分享,可在线阅读,更多相关《多功能时钟Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
在时钟计数到00:
00:
00后自动跳转为显示23:
59;
(2)实现按下一个按键后得到复位清0的功能;
(3)利用蜂鸣器编程实现正在跳动的时钟具有整点报时的功能。
2.2设计要求
(用哪些部件实现功能需求)
2.2.1单片机芯片部件功能
通过对多种单片机性能的分析,最终认为AT89C51是最理想的电子时钟开发芯片。
89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程闪烁存储器和1000写/擦循环,数据保留时间为10年等特点,是最好的选择。
2.2.2数码管显示器部件功能
数码管是一种把多个LED显示段集成在一起的显示设备。
有两种类型,一种是共阳型,一种是共阴型。
共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。
共阴型就是把多个LED显示段的阴极接在一起。
阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。
通常的数码管又分为8段,即8个LED显示段,这是为工程应用方便如设计的,分别为A、B、C、D、E、F、G、DP,其中DP是小数点位段。
而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起,即所有的A段都会连在一起,其它的段也是如此,这是实际最常用的用法。
数码管显示方法可分为静态显示和动态显示两种。
静态显示就是数码管的8段输入及其公共端电平一直有效。
动态显示的原理是,各个数码管的相同段连接在一起,共同占用8位段引管线;
每位数码管的阳极连在一起组成公共端。
利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。
此实验运用8位七段数码管共阴极动态扫描法显示时间。
2.2.3按键部件功能
该实验设计只用了三个按键,但实现的功能却是比较完善,减少了硬件资源的损耗,其中三个按键可以实现时钟的调节自加、自减以及复位清0。
直接将按键KEY1按下松开,则可以通过按键实现分钟的自加,按一次分钟自动无限循环自加一;
直接将按键KEY2按下松开,则可以通过按键实现分钟的自减,按一次分钟自动无限循环自减一;
同样直接将按键KEY3一次按下松开,则可以通过按键实现时间的复位清0功能;
就这样通过三个简单的按键得以实现从而达到时间调节的目的。
2.2.4蜂鸣器部件功能
蜂鸣器是一种把警示电信号转换成人耳能够感知的电声转换装置。
根据蜂鸣器的不同种类,其工作电源也不同,有的接直流,如汽车上用的电喇叭;
有的接交流,有的需要接在特定的电子电路中。
即蜂鸣器是一种能将音频信号转化为声音信号的发音器件,在家用电器上,在银行、公安的报警系统中,在电子玩具、游戏机中都得到普遍应用。
在此时钟实验中就是利用C语言编写来控制蜂鸣器作为整点报时的。
3硬件设计及描述
3.1总体描述(整体实现的功能简述)
从C语言程序中设置初始按键当前时间,在数码管上显示,,再利用三个按键的不同功能设置显示的时间,例如设置12-23-33;
按下按键KEY1从当前设置的时间开始走时,每一秒自动加1,当59秒后自动向分进位1、59分后自动向时进位1,在23:
按下按键KEY2从当前设置的时间开始走时,每一秒自动减1,当00秒后自动向分位借位1,00分后自动向时位借位1,在时钟计数到00:
实现按下按键KEY3后得到复位清0的功能;
并且利用蜂鸣器编程实现正在跳动的时钟具有整点报时的功能。
3.2系统总体框图
3.3Proteus电路图
图1-2系统整体Protues仿真图
3.4各部分硬件介绍
(proteus截图+解释)
图1-3晶振Protues仿真图
晶体振荡电路用于产生单片机工作时所需的时钟信号,从而保证各部分工作的同步。
单片机内部有一个高增益反相反大器,只要在输入端XTAL1与输出XTAL2之间挂一个晶体振荡器和微调电容就可以构成一个稳定的自激震荡器并在单片机内部产生的时钟脉冲信号。
振荡电路见图1-3,电容器C1与C2用于稳定频率和快速起振。
图1-4数码管Protues仿真图
LED显示器如图1-4所示就是通常所说的LED显示器由七个发光二极管组成,因此也称作七段LED显示器,通过七段发光二极管的不同组合,可以显示多种数字、字母或其它符号。
LED的接法,共阴极接法是指把发光二极管的阴极连接在一起构成公共阴极,使用时公共阴极接地,阳极输入高电平段的二极管则会导通发光,而输入低电平的则不会亮。
其显示方式为动态显示是指依次轮流点亮显示器的各个位,每隔一段时间则点亮一次,设置足够短的时间,利用人的视觉暂停效应和发光二极管的熄灭时的余辉,达到多个字符同时显示的效果。
运行这种显示方式可以降低成本与功耗,但需要较大的驱动电流。
本设计中采用的共阴极连接方式。
图1-5按键Protues仿真图
键盘接口电路如图1-5所示,与通用单片机相比,单片机应用系统中的键盘种类很多,键盘中按键数量设置依系统操作要求而定。
单片机应用系统中的键盘有独立式和行列式两种。
独立式键盘中,每个按键占用一个I/O口线,每个按键相对独立。
I/O口通过按键与地相连,无按键按下时,引脚端为高电平,有按键按下时,引脚为低电平,I/O口内部有上拉电阻外部不可接上拉电阻。
行列式键盘用I/O口线组成行列结构,按键设置在交叉点上,在按键数目较多时运用这种连接方式,可节省I/O口连线。
行列式键盘的标识最常用的两种方法:
行扫描法和线反转法。
本次设计中由于按键较少,采用三按键独立式键盘即可满足需要独立式键盘。
图1-6上拉电阻Protues仿真图
在此设计中P0需外加上拉电阻如上图1-6所示,才能构成完整电路。
图1-7C51芯片Protues仿真图
VCC:
电源。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输
出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是
ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;
当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
图1-8上电按钮复位电路Protues仿真图
本设计采用上电按钮复位电路:
首先经过上电复位,当按下按键时,开关直接与VCC相连,为高电平形成复位,同时电解电容被电路放电;
按键松开时,VCC对电容充电,充电电流在电阻上,开关依然为高电平,仍然是复位,充电完成后,电容相当于开路,开关为低电平,单片机芯片正常工作。
其中电阻R2决定了电容充电的时间,R2越大则充电时间长,复位信号从VCC回落到0V的时间也长。
图1-974HC138Protues仿真图
74HC138的作用是八位二进制译十进制译码器,74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。
74HC138译码器可接受3位二进制加权地址输入(A,B和C),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。
74HC138特有3个使能输入端:
两个低有效(E1和E2)和一个高有效(E3)。
除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。
利用这种复合使能特性,仅需4片74HC138芯片和1个反相器,即可轻松实现并行扩展,组合成为一个1-32(5线到32线)译码器。
任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则74HC138亦可充当一个8输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。
图1-1074HC573Protues仿真图
芯片74HC573是8位三态锁存器,可锁存地址,数据,可作缓冲器用。
主要用于数码管、按键等等的控制八进制,是3态非反转透明锁存器。
74HC573高性能硅门CMOS器件,74HC573跟LS/AL573的管脚一样的器件。
74HC573跟LS/AL573的管脚一样。
器件的输入是和标准CMOS输出兼容的,加上拉电阻他们能和LS/ALSTTL输出兼容。
输入是和标准CMOS输出兼容的;
加上拉电阻,他们能和LS/ALSTTL输出兼容。
74HC573锁存器在数码管显示时作用的确是为了节省IO口,用编程过程说明其作用:
单片机P0口先发送abcdefghp段选信号。
使用一个74HC573将段选信号保存住。
单片机P0口再发送位选信号,此时单片机P0口信号不影响被锁存住的段选信号。
使用另一个74HC573锁存住位选信号。
按以上1至4步循环,显示8位数码管只需要10个IO口。
图1-2蜂鸣器Protues仿真图
蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的。
因此需要一定的电流才能驱动它,单片机IO口输出的电流较小,其TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。
程序中通过改变单片机对应IO口输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。
另外,改变其占空比,也可以控制蜂鸣器的声音大小。
可以有两种驱动方式,即用PNP或NPN三极管电流放大电路驱动。
本电路通过一个NPN三极管来放大驱动蜂鸣器,基极连接R4,发射极E连接一个VCC,集电极C连接蜂鸣器后接地。
单片机在复位后的个I/O口是高电平,此时三极管是截止的,编写程序使选定的I/O为低电平,此时三极管导通,导通后蜂鸣器与电源正极连通,构成一个工作回路,从而发出滴滴的响声。
其中电阻R4在电路里起分压限流的作用,NPN三极管起到模拟开关的作用。
也就是说当输出高电平时,三极管Q1截止,没有电流流过线圈,蜂鸣器不发声;
当输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。
因此,我们可以通过程序控制IO口输出的电平来使蜂鸣器发出声音和关闭,从而实现各种可能音响的产生。
4
软件设计流程及描述
4.1程序流程图
主程序主要完成系统的初始化和按键的捕获,在按键没有按下时,调用显示子程序,程序流程图如下图4.1
4.2函数模块及功能
4.2.1函数头模块
函数开头定义数组,定义按键端口位置,定义时钟的初始显示时间值,定义定时计数器Count初始值和定义程序中最核心的数组部分,具体程序代码如下:
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineINT8Uunsignedchar
#defineINT16Uunsignedchar
sbitKEY1=P3^2;
sbitKEY2=P3^3;
sbitKEY3=P3^4;
sbitBEEP=P3^7;
inta=12,b=59,c=55;
intt=0;
ucharcodetable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//数码管段值
ucharCount=0;
4.2.2定时器模块
定时器定义了EA和ET0开中断,利用Count++实现自动计数功能,TH0和TL0计算设置得出时钟每隔100ms跳动一次,具体程序代码如下:
Time0_Init()
{TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
}
voidtimer0_int(void)interrupt1
{
Count++;
}
4.2.3延时模块
定义Delay延时,具体程序代码如下:
voidDelay(uintdel)
{uinti,j;
for(i=0;
i<
del;
i++)
for(j=0;
j<
140;
j++)
;
4.2.4时间显示模块
voidtime()
{Delay
(1);
P0=0x40;
P2=5;
Delay
(1);
P2=2;
//秒显示
P0=table[c%10];
//数码管段值
P2=7;
//点亮某一位数码管
Delay
(1);
if(c==60)
{c=0;
b++;
}
elseif(c==-1)
{c=59;
b--;
P0=table[c/10];
P2=6;
//分显示
P0=table[b%10];
P2=4;
if(b==60)
{b=0;
a++;
}
elseif(b==-1)
{
b=59;
a--;
}
P0=table[b/10];
P2=3;
//时显示
P0=table[a%10];
P2=1;
if(a==24)
{
a=0;
elseif(a==-1)
a=23;
c=59;
P0=table[a/10];
P2=0;
Delay(0);
4.2.4蜂鸣器模块
voidplay(uintg)
{
BEEP=~BEEP;
Delay(g);
BEEP=0;
4.2.5main主函数模块
voidMain(void)
Time0_Init();
while
(1)
{time();
if(KEY1==0)//计时开始
{
t=1;
TR0=1;
//Beep
(1);
Delay(0);
if(Count==100)
{Count=0;
if(t==1)//t=1时为加法
c++;
elseif(t==0)
c--;
if(b==0&
&
c==0)
play
(1);
if(KEY3==0)//改变加减法
b=0;
c=0;
TR0=0;
//Beep(3);
Delay(20);
if(KEY2==0)//计时开始
t=0;
//Beep
(2);
}
5
功能实现(功能介绍+照片)
5.1.1程序烧入显示
5.1.2时间自加
5.1.3时间自减
5.1.4时间复位
6
心得体会
经过两周的课程设计,不断的测试与分析,最终完成了电子时钟的设计与制作。
在实验的设计及仿真测试时,当没有得出正确的实验现象时,必须冷静、沉着的思考问题的来源,切勿太过紧张。
在程序的调试中,须仔细再仔细,不要太过于急躁,切勿乱了头绪。
这样才能在编程过程中减少许多不必要的错误。
本次设计主要是程序设计部分,在程序设计过程中,出现了很多的问题,经过和搭档的多次讨论与研究、,并参阅了一些电子资料,解决的很多难题。
此课程设计主要考察了对单片机技术原理及程序设计基础等知识。
理论结合实践,使得在平时学习的单片机技术知识有了一个新的认识。
此次设计的电子时钟是一个典型的单片机应用实例。
通过本次设计,使得对单片机技术有了进一步的认识,并且对此产生了浓厚的兴趣,为以后的学习打下了坚实基础。
通过和搭档的共同努力,成功的完成此次课程设计,在排除问题过程中,体验了程序设计及电路设计制作的艰辛,更能够体会到成功的喜悦。
7源程序代码:
//点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多功能 时钟