万年历单片机毕业设计.docx

上传人:b****8 文档编号:9717024 上传时间:2023-02-06 格式:DOCX 页数:35 大小:310.54KB
下载 相关 举报
万年历单片机毕业设计.docx_第1页
第1页 / 共35页
万年历单片机毕业设计.docx_第2页
第2页 / 共35页
万年历单片机毕业设计.docx_第3页
第3页 / 共35页
万年历单片机毕业设计.docx_第4页
第4页 / 共35页
万年历单片机毕业设计.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

万年历单片机毕业设计.docx

《万年历单片机毕业设计.docx》由会员分享,可在线阅读,更多相关《万年历单片机毕业设计.docx(35页珍藏版)》请在冰豆网上搜索。

万年历单片机毕业设计.docx

万年历单片机毕业设计

1总体方案论证及工作原理

 

1.1设计课题任务

利用单片机,结合键盘、显示器设计一个具有定时打铃功能的万年历,该万年历能正确完成显示时间、日期及定时时间的功能,上电或按键复位后能自动走表,并且,未经设定不能有闹铃的功能。

1.2总体方案选择

1.2.1单片机芯片选择方案和论证

方案一:

采用89C52作为硬件核心

采用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在先编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。

方案二:

采用AT89S52作为硬件核心

片内ROM全部采用FlashROM;能以3V的超低压工作,同时也与MCS-51系列单片机完全该芯片内部存储器为8KBROM存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成一定的损坏。

所以选择采用AT89S52作为主控制系统。

1.2.2显示模块的选择和论证

方案一:

使用液晶显示屏显示时间数字

液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影响稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强的特点。

但由于液晶是以点阵的模式显示各种符号,需要利用控制芯片创建字符库,编程工作量大,控制器的资源占用较多,其成本也偏高。

在使用时,不能有静电干扰,否则易烧坏液晶的显示芯片,不易维护。

方案二:

使用传统的LED数码管显示

数码管具有:

低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其精度比较高,称重轻,精度可靠,操作简单。

数码管采用BCD编码显示数字,程序编译容易,资源占用较少。

根据以上的论述,采用方案二。

我们采用八段四位一体数码管动态显示,由于显示位数较多,故应使用显示驱动,在本设计中采用三极管来作为驱动。

1.2.3键盘模块的选择和论证

方案一:

使用独立式键盘

独立式键盘是指直接用I/O口线构成的单个按键电路。

独立式按键电路配置灵活,软件结构简单。

方案二:

使用矩阵式键盘

矩阵式键盘是由行线和列线组成,按键位于行、列交叉点上,行线、列线分别连接到按键开关的两端。

其特点是简单且不增加成本,这种键盘适合按键数目较多的场合。

根据以上的论述,因本系统内需要的按键不多,要求简单,所以采用方案一。

1.2.3总体方案论证

该万年历电路由单片机AT98S52、键盘接口电路、显示接口电路及时钟电路和复位电路构成,总原理框图如图1.1所示。

在方案设计时选择用P1口的P1.0~P1.3外接四个键(K1~K4)调整显示接口电路;P0口和P2口分别作为数码管显示的位控和段控输出,其中在P0口接八个三极管作为显示驱动(接位选),P2口接数码管的段选。

图1.1总原理框图

1.3功能要求说明及工作原理

1.3.1功能要求说明

本次毕业设计所设计的万年历在功能上具有一般万年历的固有功能,即能比较准确显示时间外,还具有定时闹钟的功能。

该万年历上电或按键复位后能自动走表,进入时钟运行状态并在时、分、秒之间由“-”隔开,按K1键是选择调整位,选中位有闪烁效果,按一次右移一位;K2键是加一的功能(程序中有调整限制),K3键是开启和关闭定时功能,按一下会开启闹钟,此设计用二极管亮来表示,再次按下,闹钟关闭,相应的二极管灭;K4键为显示切换键,上电或按键复位8个数码管显示的是时间,按键一次切换到日期的显示,再按一次切换到定时,再按一次就返回显示时间;本单片机采用是AT89S52,fosc=12MHZ。

其按键功能如表1.1所示。

表1.1按键功能

按键

键名

功能

P1.0

K1键

选择调整位(相应位闪烁)

P1.1

K2键

选中位加一(超调调整)

P1.2

K3键

闹钟的开启和关闭

P1.3

K4键

显示切换

1.3.2工作原理

万年历的运行主要是利用单片机定时/计数器的工作和中断服务的作用完成计时功能的。

首先时钟电路产生单片机工作时所需要的时钟信号,这是单片机能够正常工作的前提,而单片机有无定时以及定多长的时间,这些还需要我们人为的确定。

先要有“秒”的计时,而单片机内部定时器是达不到“秒”数量级的定时的,所以我要多次定时,我们人为在确定工作方式的之后,再计算出定时的初值,这就可以实现所谓的定时了。

如果定时时间到了的话,那么单片机会自动地产生中断使程序转向中断服务程序执行,中断服务程序执行完了就会返回原程序,等待下一次定时时间的到来再产生中断。

在此基础上,单片机就会按照人为设定的程序执行下去。

只完成对秒的计数,才能能完成其他时间量的计数。

当然,单片机如果要执行多种不同的计时功能的话,还需要选择多种不同的工作方式,这样才不会使单片机产生混乱。

万年历的基本计时单位是秒,而秒表的基本计时单位却是毫秒了,因而我们把定时器的初始时间设计为50ms,将其乘以20便可得到我们的时间秒单位。

本设计是采用复合定时方式,一个定时间一个就去计数,合作完成一秒的定时。

2硬件系统的设计

 

2.1硬件系统各模块功能介绍

2.1.1AT89S52芯片介绍

AT89S52是一种低功耗高性能CHMOS8位单片机,管脚如图2.1所示。

片内含4KbytesISP的可反复擦写1000次Flash只读程序存储器,128bytes的随机存取数据存储器(RAM)。

其特点如下:

-兼容MCS-51指令系统;

-最大的工作频率为33MHz;

-具有双工UART串行通道;

-内部集成看门狗计时器,不需要再外接看门狗计时器单元电路;

-双数据指示器;

-支持ISP(在线更新程序)功能,其优势在于改写单片机存储器内的程序不需要把芯从工作环境中剥离;

-电源关闭标识;

-全新的加密算法,使程序的保密性大大加强;

-电压范围宽达4-5.5V,而89C52在低于4.8V或高于5.3V则无法工作;

-烧写寿命长,其标称为1000次,实际至少是1000-10000次,这样有利于初学者反复烧写,减低学习成本;AT89S52是一种低功耗、高性能的CMOS8位单片机。

它带有8KFlash可编程和擦除的只读存储器(EPROM),该器件采用ATMEL的高密度非易失性存储器技术制造,与工业上标准的80C51和82C52的指令系统及引脚兼容,片内Flash集成在一个芯片上,可用与解决复杂的问题,且成本较低。

AT89S52提供了8K字节Flash,256字节RAM,32线I/O口,3个16位定时器/计数器,6向量两极中断,一个双工串行口,片内根据振荡器和始终电路等标准功能。

此外,AT89S52设有静态逻辑,并支持软件选择的两种节电运行方式、空闲方式使CPU停止工作,而允许RAM、定时器/计数器、串行口和中断系统继续工作。

掉电方式下,片内振荡器停止工作,由于之中被冻结,一切能都停止,只有片内RAM的内容被保存,直到硬件复位才恢复正常工作。

(1)AT89S52的结构框图

AT89S52结构框图如图2.2所示:

(2)引脚介绍:

/输入/输出口线:

P0.0~P0.7:

P0口8位双向口线;P1.0~P1.7:

P1口8位双向口线;P2.0~P2.7:

P2口8位双向口线;P3.0~P3.7:

P3口8位双向口线。

/ALE地址锁存控制信号:

在系统扩展时,ALE用于控制把P0口输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。

此外由于ALE是以晶振六分之一的固定频率输出的正脉冲,因此可作为外部时钟或外部定时脉冲使用。

/PSEN外部程序储器读选取通信号:

在读外部ROM时/PSEN有效(低电平),以实现外部ROM单元的读操作。

/EA访问程序存储器控制信号:

当/EA信号为低电平时,对ROM的读操作限定在外部程序存储器;而当/EA信号为高电平时,则对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。

-RST复位信号:

当输入的复位信号延续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作。

-XTAL1和XTAL2外接晶体引线端:

当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于拉外部的时钟脉冲信号。

-GND地线

-VCC+5V电源

(3)信号引脚的第二功能:

由于工艺及标准化等原因,芯片的引脚数目是有限制的,例如MCS—51系列把芯片引脚数目限定为40条,但单片机为实现其功能所需要的信号数目却远远超过此数,因此就出现了需要与可能的矛盾。

因此,给一些信号引脚赋以双重功能。

P3的8条口线都定义有第二功能,如表2.1所示:

表2.1P3口第二功能图

口线

第二功能

替代的专用功能

RXD

RXD(串行输入口)

TXD

TXD(串行输出口)

(外部中断0)

(外部中断1)

(定时器0的外部输入)

(定时器1的外部输入)

/WR

/WR(外部RAM写选通)

/RD

/RD(外部RAM读选通)

(4)总线结构

AT89S52的管脚除了电源、复位、时钟接入、用户I/O口部分P3外,其余管脚都是为实现系统扩展而设置的。

这些管脚构成了三总线形式,即:

1)地址总线(AB):

地址总线宽度为16位,因此,其外部存储器直接地址外围为64K字节。

16位地址总线由P0经地址锁存器提供低8位地址(A0~A7);P2口直接提供高8位地址(A8~A15)。

2)数据总线(DB):

数据总线宽度为8位,由P0口提供。

3)控制总线(CB):

由部分P3口的第二功能状态和4根独立控制线RESET、

、ALE、

组成。

2.1.2时钟电路

时钟电路用来产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。

通过在芯片的外部XTAL1和XTAL2两个引脚跨接晶体振荡器和两个微调电容(F陶瓷电容,理论值为33pF),形成反馈电路,就构成了一个稳定的自激振荡电路。

时钟电路为单片机产生时钟脉冲序列,本设计中采用的晶振频率为12MHz。

如图2.3所示。

图2.3时钟电路

2.1.3复位电路

复位是单片机的初始操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。

除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需安装复位键以重新启动。

RST引脚是复位信号的输入端,复位信号是高电平有效,其有效时间应持续24个振荡脉冲周期(即2个机器周期)以上,本设计使用频率为12MHz的晶振,所以复位信号持续时间应超过2μs才能完成复位操作。

复位操作有上电自动复位和按键手动复位两种方式。

在本设计中采用的是按键复位,按键复位是通过使复位端经电阻与Vcc电源而实现的,如图2.4所示。

图2.4复位电路

2.1.4显示及显示驱动电路

由于七段数码显示器在显示字形代码时需要有足够的功率,单片机口线的驱动能力明显不够,所以需在显示器前加显示驱动器,以提高其输出功率,满足显示器的需求。

在本设计中,我采用三极管作为显示电路的8路正向驱动器。

LED显示器俗称数码管,在其内部是由8个发光二极管加限流电阻组成,其连接方式有共阴和共阳两种,在共阴极接法中,因公共端接地,只要给某一段加高电平,该段就会亮。

而在本设计中采用的是共阳极接法,公共端接+5V电源,在某一段上加低电平,该段就会亮。

在本次设计中,为了使硬件电路更简单化,我采用四位一体的LED数码管,显示原理与单个LED的显示原理完全相同。

但在它的内部把四个数码管的段控端对应的连在了一起与单个的数码管相比其外部电路连接更加简单,故它只有8个段控端和4个位控端,4个位控端分别对四个数码管进行控制。

如图2.5所示。

图2.5显示电路

2.1.5控制电路

在单片机控制电路中,可把单片机使用的键盘分为独立式和矩阵式两种。

独立式实际上就是一组独立的按键,这些按键可直接与单片机的I/O口连接,即每个按键独占一条口线,这种接法简单。

矩阵式键盘也称行列式键盘,因为键的数目较多,所以键按行列组成矩阵。

本设计中键盘数目较少,且为安装方便,因此在本设计中采用独立式接法。

如图2.6所示。

图2.6控制电路

按从一个键到键的功能被执行主要应包括两项工作:

一是键的识别,即在键盘中找出被按的是哪个键,另一项是键功能的实现。

第一项工作是使用接口电路实现的,而第二项工作则是通过执行中断服务程序来完成。

具体来说,独立式键盘接口应完成以下操作功能:

a键盘扫描,以判定是否有键被按下(称之为“闭合键”)。

b排除多键、串键(复键)及去抖动。

c键识别,根据各口线的值判断按键的位置。

以上这些内容通常是以软硬件结合的方式来完成的,即在软件的配合下由接口电路来完成。

但具体哪些由硬件哪些由软件完成,要看接口电路的情况。

总的原则是,硬件复杂软件就简单,硬件简单软件就得复杂一些。

2.2电路原理图

电路原理图见附录1所示

2.3元器件布局图

元器件布局图见附录2所示

2.4PCB图

电路PCB图见附录3所示

2.5元器件清单

元器件清单如表2.2所示。

表2.2元器件清单

名称

规格

数量

电阻

200Ω

1

电阻

220Ω

8

电阻

1KΩ

1

电阻

6.2KΩ

9

电阻

4.7KΩ

4

电阻

4.2KΩ

2

电解电容

22μF

1

陶瓷电容

33pF

2

晶振

12MHz

1

单片机

AT89S52

1

2口插座

CON2

1

下载插座

DB25

1

按键开关

SW-PB

2

按键

SWSPST

5

三极管

NPN

8

四位一体共阳七段数码显示器

CPS05641BR

2

蜂鸣器

发声

1

发光二极管

普通发光二极管

2

 

3软件系统的设计

 

3.1单片机的使用资源情况

3.1.1硬件资源使用说明

●P1.0~P1.3为键盘输入端

●P0口用作数码管位控

●P2口用作数码管段控

●采用了定时/计数器T0和T1中断

既在AT89S52的P0口和P2口外接由八个LED数码管(LED7~LED0)构成的显示器,用P2口作LED的段码输出口(P0.0~P0.7对应于LED的a~dp),P0口作LED的位控输出线(P1.7~P1.0对应于LED的1~8),其中在P2的串行口外接8个三极管作为显示驱动,显示为八个数码管(LED0~LED7)进行动态显示。

P1口外接四个按键K1、K2、K3、K4(对应于P1.0~P1.3)用于调整显示接口电路,P1.6接一个发光二极管,表示开启定时功能,P1.7接一个蜂鸣器来表示的定时时间到就闹铃。

3.2软件模块功能介绍

在定时器T0中选择了工作方式1,定时时间为50ms,晶振频率为12MHz,所以定时初值根据

(216-X)*1/12*10-6*12=0.05s

求解得X=15536D=0011110010110000B

所以TH0=3CH,TL0=0B0H.

在计数器T1中选择了工作方式2,计数大小为10,所以计数器的初值:

TH1=256-10=251

TL1=256-10=251

主程序模块的主要任务是程序的初始化及复位后从08-30-00开始走表,以及进行键扫,如果有键按下,则执行相应的键功能程序。

显示模块的主要功能是将单片机内部的时间量在数码管上显示,通过这些模块完成了显示的功能,并能按照我们所熟悉的时钟时间格式进行显示。

定时器T0中断模块的功能主要是完成计时,每50ms执行中断程序一次。

在计数器T1的中断模块是完成秒的计数,有了秒的计数,就能完成秒到分,分到时,时到日,日到月,月到年的进位。

该中断模块的另一功能就是将时间与闹钟时间进行比较,如果定时时间到了,并且P1.6是高电平时,P1.7置为高电平,即开始闹铃。

时间调整和闹钟子程序的功能是完成校时和闹钟校时。

按下K1将有时间量需要调整,选中位就会有闪烁效果,(当右移5次,会自动退出调整状体,正常显示),再按K2键完成加一的功能,同时也有超调调整的功能;按K4键是完成显示的切换,将要显示的时间量在数码管上显示;按下K3是开启和关闭定时的功能,由发光二极管的亮和灭来代表其功能的开和关。

3.3程序流程图

主函数的流程图如图3.1所示,定时中断子函数的流程图如图3.2所示,键扫子函数流程图如图3.3所示,显示子函数流程图如图3.4所示。

 

3.4程序清单

//***********AT89S52万年历C程序*******************//

//P2口作为数码管的段选//

//P0口作为数码管的位选//

//P1口接独立式键盘、蜂鸣器以及发光二极管//

//采用三极管作为显示驱动//

//设定初始时间8点30分00秒//

//设定初始日期2010年5月22日//

//设定初始定时时间为7点30分//

//**************************************************//

#include

#include//包含头文件//

#defineucharunsignedchar

voidchaotiao(void);

voidyanshi(intx);

voidxianshi(void);

voidjiantiao(void);

uchara[8]={0,0,0,0,0,0,0,0};

ucharK1=0,K2=0,K3=0,K4=0;

ucharh1=0,h2=8,m1=3,m2=0,s1=0,s2=0,yue,ri,year;

uchardh1=0,dh2=7,dm1=3,dm2=0,ds1=0,ds2=0,sz,mz,hz;

uchar*xs1,*xs2,*xs4,*xs5,*xs7,*xs8;

ucharyear1=1,year2=0,yue1=0,yue2=5,ri1=2,ri2=2;

staticunsignedcharcodedanma[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};

sbitP3_6=P3^6;

sbitP1_0=P1^0;

sbitP1_1=P1^1;

sbitP1_2=P1^2;

sbitP1_3=P1^3;

sbitP1_7=P1^7;

sbitP1_6=P1^6;

/********************************************************************

键扫程序********************************************************************/

voidjiansao(void)

{inty,a;

s3=K1;

a=P1&0x0f;

if(a!

=0x0f)//判断是否有键按下//

{yanshi(8);//延时2ms//

a=P1&0x0f;

if(a!

=0x0f)//去抖动看是否真有键按下//

{y=a;

while(a!

=0x0f)

{xianshi();

a=P1&0x0f;}//重复调延时等待键释放//

switch(y)

{case0x0e:

{++K1;

switch(K1)

{case1:

K2=*xs1;break;

case2:

K2=*xs2;break;

case3:

{++K1;K2=*xs4;}break;

case5:

K2=*xs5;break;

case6:

{++K1;K2=*xs7;}break;

case8:

K2=*xs8;break;

case9:

K1=0;break;

default:

break;}}break;

case0x0d:

++K2;break;

case0x0b:

{++K3;//K3为0,就开启闹钟//

if(K3>1)

{K3=0;P1_7=0;P1_6=1;}

elseP1_6=0;

P1_7=1}break;//K3为1,就关闭闹钟//

case0x07:

{++K4;K1=0;}break;

default:

break;}//若按下的是其他键就退出该程序//

if(K2>9)

K2=0;

jiantiao();

}

}

}

/********************************************************************

键调节程序********************************************************************/

voidjiantiao(void)

{switch(K1)

{case0:

break;

case1:

*xs1=K2;break;

case2:

*xs2=K2;break;

case4:

*xs4=K2;break;

case5:

*xs5=K2;break;

case7:

*xs7=K2;break;

case8:

*xs8=K2;break;

default:

break;}//将选中位加一//

if(K1!

=0)

chaotiao();}//判断是否要超调//

/********************************************************************

超调调节********************************************************************/

voidchaotiao(void)

{if(K4==0||K4==2)

{if(*xs1>2)

{*xs1=0;

K2=0;}

if

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1