基于89C51设计的电子万年历

更新时间:2024-01-08 18:04:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章 设计要求

要求:

利用89c51单片机设计万年历,通过LED显示器显示年.月.日.时.分.秒,通过键盘较正时间,能自动计算闰年等。 1.走时准确,可显示年.月.日和时.分.秒; 2.可调整公历年.月.日和时.分.秒。

第二章 单片机系统简介

LCD液晶显示屏显示模块 DS1302时钟模块 89C51 主控制 模块 键盘模块

系统原理图

1. 89c51工作原理

89c51是一种带4K字节闪烁可编程可擦除只读存储器的低电压、高性能CMOS8位微处理器,俗称单片机。89c2051是一种带2K。单片机的可擦除只读存储器可以反复擦除100

次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令计划输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89c51是一种高效微控制器,89c2051是它的一种精简版本。89c单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 (1)主要特性

1. 与MCS-51兼容 4K字节可编程闪烁存储器

寿命:1000写/擦循环 数据保留时间:10年 全静态工作:OHz-24MHz 三级程序存储器锁定 128*8位内部RAM 32可编程I/O线 2个16位定时器/计数器 5个中断源 可编程串行通道

低功耗的闲置和掉电模式 片内振荡器和时钟电路 (2)管脚说明

AT89C51

AT89C51共有40个引脚,引脚的排列顺序为从靠芯片的缺口左边那列逆时针数起,依次为1、2、3、4.。。。。。40,其中芯片的1引脚上有一个凹点。在单片机的40个引脚中,电源引脚2根,外接晶体振荡器引脚2根,控制引脚4根以及4组8位可编程I/O引脚32根。 1)、主电源引脚(2根) Vcc:电源输入,接+5V电源 GND:接地线

2)、外接晶振引脚(2根) XTAL1:片内晶振电路的输入端 XTAL2:片内晶振电路的输出端 3)、控制引脚(4根)

RST/VPP:复位引脚,引脚上出现2个机器周期的高电频将使单片机复位

ALE/PROG:地址锁存允许信号

EA/VPP:程序存储器的内外部选通,接地电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令

4)、可编程输入/输出引脚(32根)

AT89C51单片机有4组8位可编程I/O口,分别为P0、P1、P2、P3口,每个口有8位(8根引脚),共32根、每一根引脚都可以编程,比如用来控制电机、交通灯等,开发产品就是利用这些可编程引脚来实现我们想要的功能。 P0口:8位双向I/O口线,名称为P0.0~P0.7 P1口:8位准双向I/O口线,名称为P1.0~P1.7 P2口:8位准双向I/O口线,名称为P2.0~P2.7 P3口:8位准双向I/O口线,名称为P3.0~P3.7

2.DS1302的工作原理

(1)时钟芯片DS1302的工作原理:

DS1302是DALLS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM标志位决定采用24或12小时时间格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信吗,仅需三根I/O线:复位(RST)、I/O数据线、串行时钟(SCLK)。时钟/RAM的读/写时数据以一字节或多达31字节的字符组方式通信。DS1302工作时功耗很低,保持数据和时钟信息时,功耗小于1mw

DS1302工作时为了对任何数据传送进行初始化,需要将

复位引脚(RST)置位高电平且将8位地址和命令信息装入移位寄存器。数据在时钟(SCLK)的上升沿串行输入,前8位指令访问地址,命令装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输出数据。时钟脉冲的个数在单字节方式下为8+8(8位地址+8位数据),再多字节方式下为8加最多可达248的数据。 (2)DS1302的控制字节

DS1302控制字节的高有效位(位7)必须是逻辑1,如果它为0;则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,位1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,位1表示要进行读操作,控制字节总是从最低位开始输出。 (3)数据输入输出(I/O)

在控制指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。、同样,在紧跟8位控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0到高位7。 (4)DS1302的寄存器和控制器

对DS1302的操作就是对其内部寄存器的操作,DS1302有12个寄存器,其中有七个寄存器与日历、时钟相关,存放的数据位为BCD码形式。此外,DS1302还有年份寄存器、

控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

DS1302 含充电电路,可以对作为后备电源的可充电电池充电,并可选择充电使能和串入的二级管数目,以调节电池充电电压。

3.LCD的工作原理

LCD的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水分子改变方向,将光线折射出来产生画面,比CRT要好的多,但是价格较其贵。 1)、LCD的特点 低压微功耗 平板型结构

被动显示(无眩光,不刺激人眼,不会引起眼睛疲劳) 显示信息量大(因为像素可以做得很小) 易于彩色化(在色谱上可以非常准确的复现)

无电磁辐射(对人体安全,利于信息保密)

长寿命(这种器件几乎没什么劣化问题,因此寿命极长,但是液晶背光寿命有限,不过背光部分可以更换) 2)、1602的管脚功能

PIN ASSIGNMENT

PIN I 2 3 4 5 6 SYMBOL VSS VDD Vo RS R/W E FUNCTION Power Supply(ov) Power Supply(+5v) Contrast Ajust Date/Instruction Register Select Read/Write Enable Signal Data bus Line Power Supply for LED BL(+) Power Supply for LED BL(-) 7~14 DBO~DB7 15 A 16 K

第三章 系统主要功能介绍

对此次作品中方案选定:采用AT89C51作为主控制系统,DS1302提供时钟,LCD液晶显视屏作为显示。 单片机:

采用89C51芯片作为硬件核心,采用flashROM,内部具有4K存储空间,能3V超低压工作,而且与MCS—51系列单片机完全兼容。单片机算数运算功能强,软件编程灵活,自由度大,可用编程软件实现各种算法和逻辑控制,并且由于低功耗,体积小,技术成熟和成本等优点,在各个领域应用广泛,但应用于电路设计时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。

显示屏:

采用LCD液晶显示屏,液晶显示屏的显示功能强大。

可显示大量文字,图形,显示多样,清晰可见具有轻薄短小,低耗电量,无辐射,平面直角显示,以及硬性稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强等特点。但由于液晶是以点阵的模式显示各种符号,需要利用各种芯片,创建字符库,编程工作量大,控制器的资源占用较多,成本也偏高,在使用时不能有静电干扰,否则易烧坏液晶的显示芯片,不易维护。

时钟芯片:

采用DS1302芯片实现时钟,DS1302芯片是一种高性

能的电.5V-5.5V范围内,2.5V时耗电小于300mA。阻芯片,可自动对时,分,秒,年,月,日,周进行计数,而且精度高,低位的RAM作为数区,工作电压2 键盘模块:

在对日期和时间进行切换,对日期和时间进行校准过程中,系统需要产生激励电流,因此需要用按键。 矩阵式键盘是指有横线和列线组成,按键位于行列的交叉点上,行线列线分别连接到按键开关的两端。其特点是简单却不增加成本,这种键盘适合按键数较多的场合。

第四章 系统设计时遇见的问题解决办法

按键开关去斗问题:

按下键 松开键

前沿抖动 键盘稳定 后沿抖动

按键未按下时,A点电位为高电平+5V;但键按下时,A点电位为低电平。A点电位即用于向CPU传递按键的开关状态,但由于按键的结构为机械性弹性开关,在按键按下和断开时,触电在闭合和断开瞬间还会接触不稳定,引起A点电平不稳定。如

消除抖动的不良后果。

PCB

第五章 系统设计原理图和PCB图

一次键操作进行多次处理,从而可能产生错误。因此必须设法

图所示,键盘的抖动时间一般为5-10ms,抖动现象会引起CPU对

图A

图B

图C

图D

图E

图F

电路图说明:

图A 图B 此图为母图由4个模块组成 此图为开关模块,由3*4的矩阵键盘组成。前两行从左到右依次是时分秒年月日的加,后两行从左到右依次是时分秒年月日的减。 图C 此图为时钟模块,X1、X2是振荡源,外接32.768Hz晶振,RST是复位片选线,通过把RST输入驱动置高平来启动所有的数据传送,RST输入具有两种功能:首先,RST接通控制逻辑,允许地址/命令序列进入移位寄存器;其次,RST提供终止单字节或多字节的传输手段。当RST为高电平时,所有的数据传输被初始化,允许对DS1302进行操作。如果在传送的过程中,RST为低电平,则会终止此数据的传送,I/O引脚变为高阻态。 图D 此模块为时钟电路的核心,由89c51单片机以及复位电路组成。控制电子时钟的运行。 图 E 图 F 此图为显示模块,负责显示系统输出的时间。是此电路中最重要的输出设备。 此图为导入数据后的PCB敷铜图

使用元器件一览表: 器件序 1 2 3 4 5 6 7 8 9 89C51单片机 12Mhz 晶振 30pf 电容 LCD 1602 A103G 排阻 开关 DS1302 时钟芯片 32.768Khz 晶振 22uf 电容 1个 1个 2个 1个 1个 14个 1个 1个 1个 2个 2个 若干 器件名称 个数 10 760欧电阻 11 10千欧电阻 12 导线

第六章 设计心得

郭伟杰:

两周的课程设计已接近尾声,回顾这两周短暂的经

历,认为自己在51单片机理论知识与时钟芯片.显示器的工作过程方面有了更深层次的理解。这次的课程设计应该算是在之前所做的设计中最成功的一次。这主要是通过我们小组查阅资料,讨论,调试验收的成功实现。

再刚找到题目是,着实有些恨自己所学知识太少的心情,所以提前借了一些关于单片机外围接口设计电路的资料,查看单片机的工作原理与应用,同时也上网查阅了相关的芯片功能说明与电路设计。综合了众多信息后,我们就是筛选有用信息了,基于之前对设计思想的理解,我们反复的讨论与推敲,再结合实际提供的芯片,确定了四个模块的连接。而且我们再学习新事物.筛选有用信息,分析问题与解决问题方面有了更大的进步。

秦丹丹:

课程设计我从刚开始的什么都不懂不会,到现在的完成这次课程设计,掌作为计算机应用专业的学生,我深知课程设计的重要性。这次握了AT89C51的知识及相关Protel dxp的基本操作,提高了自己的设计能力。实践是检验真理的唯一标准。理论知识的不足在这次实习中表现的很明显。这将有助于我今后更加明确学习的方向,可认识到自己的不足,确定自己的目标,从而更加努力的学习。只有这样我们才能真正的去掌握它,真正的去运用它。虽然只是初步学会

了使用Protel dxp,离真正掌握还有一定距离,但学习的这段日子确实令我收益匪浅。我以后会更加注重这方面能力的培养,在学习好理论知识的同时加强实践能力。

在整个设计过程中,我们通过Protel dxp设计了一套电路原理和PCB连接图。课程设计对我们的作用是非常大的。在制作PCB时,发现细心耐心,恒心一定要有才能做好事情,首先是线的布局上既要美观又要实用和走线简单,兼顾到方方面面去考虑是很需要的,否则只是一纸空话。在画好原理图后的做PCB版时,由于项目组成员对单面板的不熟悉,导致布线后元件出现在另一边,增加了布线难度,也产生很多不曾注意的问题,今后要牢记这个教训,使以后布线更加顺利。在此期间我们也失落过,也曾一度热情高涨。从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。我想说,设计确实有些辛苦,但苦中也有乐,在如今单一的理论学习中,很少有机会能有实践的机会,但我们可以,而且设计也是一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下。同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。某个人的离群都可能导致导致整项工作的失败。设计中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。团结协作是我们课设成功的一项非常重要的保证。而这次课设也正好锻炼我们这一点,这也是非常宝贵的。

这次课程设计终于顺利完成了,在设计中遇到了很多专业知识问题,最后在同伴的共同努力下,终于游逆而解。此次课程设计,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高,都受益非浅,今后的制作应该更轻松,自己也都能扛的起并高质量的完成项目。

黄家前:

这次课程设计我们组的题目是利用89c51单片机设计万

年历,要求通过LCD显示器显示年、月、日、时、分、秒,通过键盘校正时间,能自动计算闰年。虽然这学期学过单片机课程,但那基本都是书面知识,刚拿到这个题目时,就是一片茫然,所以一切都是从零开始。

分好组后我们每个人都有分工,刚开始我们一起查资料讨论方案。在设计电路初期,由于我们没有经验感觉无从下手,通过查阅一些资料,我们的设计渐渐有了头绪,基本确立了设计方案和流程图。就是LCD显示屏驱动电路的设计是个比较头疼的问题,因为提供的四位一体数码管,我们的设计需要显示年月日和时分秒,会使电路接线非常复杂,通过大家的努力解决这个问题后,我们很快确定了四个模块的电路以及需要的器件,然后就是编程和仿真,开始时也遇到很多问题,对程序不能得心应手,真是纸上得来终归浅,绝知此事要躬行。经过静下心来思考,和小组讨论,理清了思路,慢慢修改,终于仿真成功了。布线时对电路的设计、布局要先有个好的构思,才显得电路板美观、大方,由于我们用矩阵式键盘输入,有对年月日、时分秒的分别加、减调整,用到了12个开关按钮,布线还是有些复杂的。

同时这两周我学到了很多东西,液体哦回到了团队合作的重要性,有些问题自己是很难解决的,但通过小组一起讨论、查阅资料就很有可能一会就解决了。在团队中,我们相符帮助,对整个课程设计来说,这是至关重要的,这位我们日后工作培养了运用团队合作能力。

王文进:

两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学

会了合作,学会了宽容,学会了理解,也学会了做人与处世。

课程设计是我们专业课程知识综合应用的实践训练, 这是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.

通过这次PROTELL课程设计,本人在多方面都有所提高,绘图能力,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。在这次设计过程中,体现出自己单独设计模块的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。

孙秀乾:

通过本次单片机设计,我知道了团队的力量,本来如果让我自己设计,我不知该怎么设计。但是通过我们几个人的合作,一个单片机系统就这样渐渐地出来了。团队的力量团队的凝聚力出乎我的意料。

而且通过单片机系统的制作,我也学习了不少关于单片机的知识,同时也熟悉了PCB设计很有收获。很感谢老师给我们这次单片机系统设计的任务。同时也希望以后有更多这样的机会。

主程序:

#include #include\#include\

#define uchar unsigned char #define unit unsigned int sbit speaker=P2^4;

bit key_flag1=0,key_flag2=0; SYSTEMTIME adjusted; uchar

sec_add=0,min_add=0,day_add=1,mon_add=1,yea_add=0; uchar data_alarm[7]={0}; int key_scan() { int i=0; unit temp; P1=0xf0; temp=P1; if(temp!=0xf0)

i=1; else i=0; return i; }

uchar key_value() {unit m=0,n=0,temp; uchar

v[4][3]={'2','1','0','5','4','3','8','7','6','b','a','9'};

P1=0xfe;temp=P1;if(temp!=0xfe)m=0; P1=0xfd;temp=P1;if(temp!=0xfd)m=1; P1=0xfd;temp=P1;if(temp!=0xfb)m=2; P1=0xfe;temp=P1;if(temp!=0xf7)m=3; P1=0xef;temp=P1;if(temp!=0xef)m=0; P1=0xef;temp=P1;if(temp!=0xef)m=1; P1=0xef;temp=P1;if(temp!=0xef)m=2; value=v[m][n]; return value; }

void reset(void) {sec_add=0;

min_add=0; hou_add=0; day_add=1; mon_add=1; yea_add=0; }

void adjust(void)

{if(key_scan()&&key_flag1) switch(key_value()) {caue'0':sec_add++;break; cade'1':min_add++;break; cade'2':hou_add++;break; cade'3':day_add++;break; cade'4':mon_add++;break; cade'5':yea_add++;break; cade'6':sec_add++;break; cade'7':min_add++;break; cade'8':hou_add++;break; cade'9':day_add++;break; cade'a':mon_add++;break; cade'b':yea_add++;break; cade'c':reset();break;

default:break; }

adjusted.Second+=sec_add; adjusted.Minuate+=min_add; adjusted.Hour+=hou_add; adjusted.Day+=day_add; adjusted.Month+=mou_add; adjusted.Year+=yea_add; if(adjusted.Second>59)

{adjusted.Second=adjusted.Second`;adjusted.Minute++;}

if(adjusted.Miute>59)

{adjudted.Minute=adjusted.Minute`;adjusted.Hour++}

if(adjusted.Hour>23)

{adjusted.Hour=adjusted.Hour$;adjusted.Day++} if(adjusted.Month>12)

adjusted.Month=adjusted.Month; if(adjusted.Year>100)

adjusted.Year=adjusted.Year0; if(adjusted.Year%4==0)

{if(adjusted.Month==4||adjusted.Month==6||adjusted.

Month==9||adjusted.Month==11) {if(adjusted.day>30)

{adjusted.Day=adjusted.Day0;} }

else if(adjusted.Month==2) {if(adjusted.Day>29)

{adjusted.Day=adjusted.Day0;} } else

{if(adjusted.Day>32)} } else

{if(adjusted.Month==1||adjusted.Month==3||adjusted.Month==5||adjusted>Month==7||adjused.Month==8||adjusted.Month==10||adjusted.Month==12) {if(adjusted>Day>32)

{adjusted.Day=adjusted.Day2;} }

else if(adjusted.Month==2) {if(adjusted.Day>32)} } }

void changing(void)interrupt 0 usig 0 {if(key_flag1)key_flag1=0; else key_flag1=1;}

void alarming(void)interrupt 3 using 0 {if(key_flag2)key_flag2=0; else key_flag2=1;} main() {unit i;

uchar p1[]=\SYSTEMTIME T; EA=1; EX0=1; IT0=1; EA=1; EX1=1; IT1=1; init1602(); Initial_DS1302(); while(1)

{write_com(0x80); write_string(p1,4); write_com(0xc0);

write_string(p2,1); DS1302_GetTime(&T); adjusted.Second=T.Second; adjusted.Minute=T.Miute; adjusted.Hour=T.Hour; adjusted.Day=T.Day; adjusted.Month=T.Month; adjusted.Year=T.Year; for(i=0;i<9;i++)

{adjusted.DateString[i]=T.DateString[i]; adjusted.TimeString[i]=T.TimeString[i];} adjust();

DateToStr(&adjusted); TimeToStr(&adjusted); write_com(0x84);

write_string(adjusted.DateString,8); write_com(0xc2);

write_string(adjusted.TimeString,8); delay(10);}

本文来源:https://www.bwwdw.com/article/11yo.html

Top