单片机设计电子时钟说明书.docx
《单片机设计电子时钟说明书.docx》由会员分享,可在线阅读,更多相关《单片机设计电子时钟说明书.docx(39页珍藏版)》请在冰豆网上搜索。
单片机设计电子时钟说明书
郑州华信学院
课程设计说明书
题目:
电子时钟
姓名:
院(系):
机电工程学院
专业班级:
09电气工程及其自动化
(一)班
学号:
指导教师:
成绩:
时间:
年月日至年月日
0.引言
1.1单片机简介
单片计算机即单片微型计算机。
由RAM,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
而51系列单片机是各单片机中最为典型和最有代表性的一种。
这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。
本设计主要设计了一个基于AT89C51单片机的电子时钟。
并在液晶显示屏上显示相应的时间。
并通过一个控制键用来实现时间的调节。
应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。
该方法仿真效果真实、准确,节省了硬件资源。
0.2电子时钟
0.2.1电子时钟简介
1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。
现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。
从而达到计时的功能,是人民日常生活补课缺少的工具。
0.2.2电子时钟的基本特点
现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
1.2.3电子时钟的原理
该电子时钟由AT89C51,DS1302,LM016L等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。
而电路中的控制键可实现分、小时星期、日期的调节。
0.3单片机识的相关知识
0.3.1单片机简介
单片机全称为单片机微型计算机(SingleChipMicrosoftcomputer)。
从应用领域来看,单片机主要用来控制,所以又称为微控制器(MicrocontrollerUnit)或嵌入式控制器。
单片机是将计算机的基本部件微型化并集成在一块芯片上的微型计算机。
0.3.2单片机的发展史
(1)4位单片机
1975年,美国德克萨斯仪器公司首次推出4位单片机TMS-1000;此后,各个计算机公司竞相推出四位单片机。
日本松下公司的MN1400系列,美国洛克威尔公司的PPS/1系列等。
四位单片机的主要应用领域有:
PC机的输入装置,电池充电器,运动器材,带液晶显示的音/视频产品控制器,一般家用电器的控制及遥控器,电子玩具,钟表,计算器,多功能电话等。
(2)8位单片机
1972年,美国Intel公司首先推出8位微处理器8008,并于1976年9月率先推出MCS-48系列单片机。
在这以后,8位单片机纷纷面市。
例如,莫斯特克和仙童公司合作生产的3870系列,摩托罗拉公司生产的6801系列等。
随着集成电路工艺水平的提高,一些高性能的8位单片机相继问世。
例如,1978年摩托罗拉公司的MC6801系列及齐洛格公司的Z8系列,1979年NEC公司的UPD78XX系列。
这类单片机的寻址能力达64KB,片内ROM容量达4--8KB,片内除带有并行I\O口外,还有串行I\O口,甚至还有A\D转化器功能。
8位单片机由于功能强,被广泛用于自动化装置、智能仪器仪表、智能接口、过程控制、通信、家用电器等各个领域。
(3)16位单片机
1983年以后,集成电路的集成度可达几十万只管/片,各系列16位单片机纷纷面市。
这一阶段的代表产品有1983年Intel公司推出的MCS-96系列,1987年Intel推出了80C96,美国国家半导体公司推出的HPC16040,NEC公司推出的783XX系列等。
16位单片机主要用于工业控制,智能仪器仪表,便携式设备等场合。
(4)32位单片机
随着高新技术只智能机器人,光盘驱动器,激光打印机,图像与数据实时处理,复杂实时控制,网络服务器等领域的应用与发展,20世纪80年代末推出了32位单片机,如Motorlora公司的MC683XX系列,Intel的80960系列,以及近年来流行的ARM系列单片机。
32位单片机是单片机的发展趋势,随着技术的发展及开发成本和产品价格的下降,将会与8位单片机并驾齐驱。
(5)64位单片机
近年来,64位单片机在引擎控制,智能机器人,磁盘控制,语音图像通信,算法密集的实时控制场合已有应用,如英国Inmos公司的TransputerT800是高性能的64位单片机。
0.4单片机的特点
1.单片机的存储器ROM和RAM时严格区分的。
ROM称为程序存储器,只存放程序,固定常数,及数据表格。
RAM则为数据存储器,用作工作区及存放用户数据。
2.采用面向控制的指令系统。
为满足控制需要,单片机有更强的逻辑控制能力,特别是单片机具有很强的位处理能力。
3.单片机的I/O口通常时多功能的。
由于单片机芯片上引脚数目有限,为了解决实际引脚数和需要的信号线的矛盾,采用了引脚功能复用的方法,引脚处于何种功能,可由指令来设置或由机器状态来区分。
4.单片机的外部扩展能力很强。
在内部的各种功能部件不能满足应用的需求时,均可在外部进行扩展,与许多通用的微机接口芯片兼容,给应用系统设计带来了很大的方便。
1.设计目的、意义及系统主要功能
1.1设计目的
1、通过对电子时钟的设计,进一步熟练掌握单片机C语言的编程方法及思想。
2、通过对电子时钟的设计,掌握实时时钟DS1302及液晶显示器LM016l的使用方法。
3、通过对电子时钟的设计,进一步掌握C语言对独立式键盘的编程控制并认识独立式键盘在实际中运用。
4、通过对电子时钟的设计,增强同学们对单片机兴趣及动手能力。
并在此过程中学会对程序的逐步调试。
1.2功能描述
1.2.1总功能
此电子时钟可显示的时间范围为:
2000年1月1日0点至2079年12月31日23时59分59秒。
此时钟在正常计时模式下具有自动调整每月的天数、闰年的天数及星期的变化,而在调时模式下则不能自动调整,需操作者自行调整。
时间为24小时制。
1.2.2各键功能
(1)MENU:
菜单按键,松开按键时有效
第一次按下此键后,进入调时状态并且秒开始闪烁,表示此时可以对秒进行修改。
以后每按一次MENU键闪烁位右移一个可调位,即以后每按一次闪烁的分别为分、时、星期、日、月、年。
(2)INC:
加一键,松开按键有效
当MENU选中要修改的位时,如分(分闪烁时),按此按可以使分的值从当前值开始加一,加至60时变为00(59过后即显示00,不显示60),秒亦是如此;而时则在加至24时变为00(23过后即显示0,不显示24);星期在加至MON时变为SUN(即MON过后即显示SUN);日在加至32时变为00(即31过后即显示0,不显示32);月在加至13时变为00(即12过后即显示0,不显示13);年在至2080时变为2000(即2079过后即显示2000,不显示2080)
(3)DEC:
减一键,松开按键有效
此键的操作与INC键相同,但它的作用却与INC的作用相反(即在lcd上显示出的效果正好相反),在此不再赘述
(4)QUIT:
保存退出键,松开按键有效
按下此键松开后,会保存操作者对时钟时间的修改并退出调时模式进入正常计时状态,时间正常显示。
*注:
由于DS1302时由美国DALLAS公司生产的时钟芯片,所以在星期的计算方面是按美国的习俗来算的,即每个星期的第一天为SUN(周日),第七天为MON(周一)。
因此在计算时1为SUN(中国的7),7为MON(中国的1)。
2.电子时钟硬件设计及描述
2.1AT89C51单片机介绍
(1)VCC:
电源。
(2)GND:
接地。
(3)P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
(4)P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
(5)P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
图2.189C51单片机
(6)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口同时为闪烁编程和编程校验接收一些控制信号。
(7)RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
(8)ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
(9)PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
(10)EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
2.2实时时钟DS1302的引脚介绍
(1)DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
(2)X1和X2是振荡源,外接32.768kHz晶振。
(3)RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc>2.0V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
(4)I/O为串行数据输入输出端(双向)。
(5)SCLK为时钟输入端。
下图为DS1302的引脚功能图:
*注:
DS1302的工作电压在2.0V至5.0V之间不是Vcc2一定要接5V电压,Vcc1一定要接3V电压,这里说的只是一般的接法
2.3.2液晶显示器lm016l
(1)、引脚的认识
1:
VSS电源引脚接+5V直流电源
2:
VDD接地引脚
3:
VEE背光引脚调节lcd亮度
4:
RS数据/状态引脚1为数据;0为状态
5:
RW读/写引脚1为读;0为写
6:
E使能引脚高电平有效(可对其读写数据)
7~14:
D0~D7数据线
(2)、LM016控制字
0x02:
光标、画面,及AC回首地址
0x05:
画面平移(平移速度相当快)
0x06:
AC自动加1,且画面不动
0x0c:
显示开即可显示数据
0x08:
显示关不可显示数据及光标,但屏亮
0x0e:
显示开且光标显示
0x09:
显示开光标显示且闪烁
0x18:
画面右移一位(*注本人用时发现此指令不可用,会使屏关)
0x1c:
画面左移一位
0x10:
光标左移一位
0x14:
光标右移一位
0x38:
lcd双行显示
0x30:
lcd单行显示(第一行显示)
2.3控制系统的硬件设计
2.3.1单片机型号的选择
通过对多种单片机性能的分析,最终认为AT89C51是最理想的电子时钟开发芯片。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程闪烁存储器和1000写/擦循环,数据保留时间为10年等特点,是最好的选择。
2.3.2键盘电路设计
该设计的键盘实现的功能比较完善,该键盘可以实现小时、分钟、日期的调节以显示设计者的名字。
直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一。
达到时间、日期调节的目的。
图3.2多功能控制键
2.3.3整个电路原理图
图3.3系统电路图
3.软件设计思路及描述
3.1电路图
3.2程序流程图
4.软件、硬件调试过程
4.1软件介绍
用到了Keil和Proteus两个软件,Keil用来编译程序并生成hex文件,装入Proteus仿真图的芯片中,通过仿真结果一步步进行调整最后达到预期的功能。
4.1.1keil软件
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案。
(1)KeilC51单片机软件开发系统的整体结构
C51工具包的整体结构,uVision与Ishell分别是C51forWindowsforDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
(2)使用独立的Keil仿真器时,注意事项
*仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。
*仿真器上的复位按钮只复位仿真芯片,不复位目标系统。
*仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。
4.1.2Proteus软件
Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有仿真功能,还能仿真单片机及外围器件。
是将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
Proteus软件还具有其它EDA工具软件(例:
multisim)的功能:
原理布图、PCB自动或人工布线、SPICE电路仿真。
(1)选择元件:
P按钮(常用元件所在库及名称):
51单片机MicroprocessorAT89C51
晶振MiscellaneousCRYSTAL
继电器Switches&RelaysG2R
(2)选择要使用的元件
在PickDevice窗口双击相应元件名称,即可将元件添加到主界面左侧的列表中。
(3)放置元件到绘图区
单击列表中的元件,然后在右侧的绘图区单击,即可将元件放置到绘图区。
(每单击一次鼠标就绘制一个元件,在绘图区空白处单击右键结束这种状态)。
(4)绘制电源和地
单击工具栏上的左起第8个工具(Inter-SheetTerminal),左侧工具栏显示TERMINALS,可在其中选择POWER或GROUND,像放置元件一样放置到绘图区。
(5)调试
在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:
*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。
5.源程序代码
#include
/********位定义*********/
sbitio=P1^5;//ds1302的串行数据I/O口
sbitclk=P1^6;//ds1302的时钟口
sbitrst=P1^7;//ds1302的复位口
sbitacc0=ACC^0;//移位时的第0位
sbitacc7=ACC^7;//移位时用的第7位
sbitbusy=P0^7;//lcd忙标志位
sbitrs=P2^0;//lcd数据状态位
sbitrw=P2^1;//lcd读写控件位
sbitre=P2^2;//lcd使能位
sbitmenu=P3^0;//菜单
sbitinc=P3^1;//加一
sbitdec=P3^2;//减一
sbitquit=P3^3;//退出
/************全局变量***********/
unsignedcharsec,min,hour,day,month,week,year;//秒,分,时,日,月,星期,年
charnewsec,newmin,newhour,newday,newmonth,newweek,newyear;//重写数据用的秒,分,时——
unsignedcharbksec,bkmin,bkhour,bkweek,bkday,bkmonth,bkyear,down,count;//闪烁标志位
unsignedcharflag,daflag;//加减标志位,时间日期标志位
unsignedchartimete[8],timede[10];//分别存放,时分秒;年月日
unsignedcharweek1[3]="SUN";//星期日
unsignedcharweek2[3]="MON";//一
unsignedcharweek3[3]="TUE";//二
unsignedcharweek4[3]="WED";//三
unsignedcharweek5[3]="THU";//四
unsignedcharweek6[3]="FRI";//五
unsignedcharweek7[3]="SAT";//六
unsignedcharname[]="YiLin";//制作者(本人)的名字
/************函数申明***************/
voiddelay(unsignedcharms);//延时
voidwritebyte(unsignedcharwdat);//写一字节到ds1302
unsignedcharreadbyte();//从ds1302中读一字节
unsignedcharreaddat(unsignedcharwdat);//读ds1302某地址数据
voidwritedat(unsignedcharwaddr,unsignedcharx);//写数据到ds1302的某地址
voidifprotect(flag);//是否写允许
voidtimebuf();//时间缓冲区
voidcheckbusy();//测试lcd忙碌状态
voidwrcom(unsignedcharcom);//写指令到lcd
voidwrdat(unsignedchardat);//写数据到lcd
voidlcdinit();//lcd初始化
voidscanmenu();//menu扫描
voidfuncmenu();//menu功能
voidscaninc();//扫描加能函数
voidscandec();//扫描减一函数
voidscanquit();//扫描退出函数
voidfuncinc();//加一功能函数
voidfuncdec();//减一功能函数
voidfuncquit();//退出功能函数
voidturn_sub(unsignedcharnewval,unsignedcharnewbk,unsignedcharnewaddr);//调时子函数
voidsub_buf(unsignedcharsubk,unsignedcharbfte,unsignedcharfda);//时间缓冲子函数
voidsub_week(unsignedcharnum);//显示星期子函数
/**********************ds1302函数部分***************************/
voiddelay(unsignedcharms)//延时函数
{
unsignedchari;
unsignedcharm=4;
while(ms--)
{
for(i=0;i<5;i++)
{
do
{}while(m--);
}
}
}
voidwritebyte(unsignedcharwdat)//写一字节到ds1302
{
unsignedchari;
ACC=wdat;
for(i=8;i>0;i--)