单片机课程设计-(51单片机实现电子时钟)_第1页
单片机课程设计-(51单片机实现电子时钟)_第2页
单片机课程设计-(51单片机实现电子时钟)_第3页
单片机课程设计-(51单片机实现电子时钟)_第4页
单片机课程设计-(51单片机实现电子时钟)_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、湖北文理学院湖北文理学院 单片机课程设计题目:用 51 单片机实现电子时钟院 部 物理与电子信息工程学院 专 业 名 称 电子信息科学与技术 班 级 1111 姓 名 杨庆月 学 号 2021111136 指 导 教 师 李刚 2021 年 12 月 09 日 目录摘要-11 单片机的相关知识 -11.1 单片机的简介-11.2 单片机的特点-11.3 89C52单片机的根本特点-22 电子时钟-32.1电子时钟的根本特点-32.2电子时钟的原理-43 控制系统的硬件设计 -43.1单片机型号的选择-43.2 lcd1602工作的原理-43.3 键盘电路的设计-63.4 复位电路设计-63.5

2、 时钟电路设计-73.6 整体电路原理图-74 控制系统的软件的设计 -84.1程序的设计-84.2程序源代码-85 仿真结果和实物图-195.1仿真结果-195.2实物图-196 总结-20参考文献 -210摘要:单片计算机即单片微型计算机。由 RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。它体积小,本钱低,功能强,广泛应用于智能产业和工业自动化上。而 51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而到达学习、设计、开发软、硬的能力。本设计主要设计了一个基于 AT89C52单片机的电子时钟。并在 1602上显示相应的时间。并通

3、过一个控制键用来实现时间的调节和是否进入省电模式的转换。具有时钟和日历的功能,年限显示范围是2021-2099可修改,且具有闰年自动修正功能关键字:单片机;子时钟;键盘控制;LCD1602。1 1 单片机识的相关知识1.11.1 单片机简介MCS-51是 INTEL公司在成功推广的 MCS-48单片机根底上加以改良而成的 8位单片机。这种单片机大约是上世纪 70年代末推出的,内部程序可重写的为 8751,外扩程序的是 8031,一次性生产,不可改变程序的是 8051。外形一般为 DIP40封装。不久又推出了增强型的 8052,其资源更加丰富。以后又采用 CHMOS技术推出了 80c51,耗电大

4、大降低。到了 90年代,INTEL公司把精力放到更赚钱的计算机上,将 51单片机技术转让给了一此其它公司,如 ATMEL Philips等半导体制造公司,使 51系列单片机的市场份额不断扩大。尽管十多年前就有人认为 51单片时机很快淘汰,但事实证明 51单片机经过不断的改良后,由于技术成熟,使用方便,至今在 8位单片机市场仍然拥有庞大的用户。特别是 MCS-51技术的 20年专利期限到期后,大量的兼容型号不断推出。从上世纪 90年代后期开始,美国 ATMEL公司在掌握快速擦写的存储器后,推出了 AT89C系列,此系列在中国获得了广泛的应用。在此之前,由于可擦写的 8751价格昂贵,国内长时间采

5、用 8031+27C64这样的外扩存程序储器方式。51单片机最初只有 DIP40这种很古老的封装,后来推出了 CHMOS工艺的80C51后开始有了 PLCC44这种相对较小的方形封装。AT89C系列中开始有 20脚的 DIP20的精简型封装,这极大方便了在一些相对简单的单片机应用,缩小了 PCB的体积。20脚的有 AT89C1051、AT89C1051、AT89C1051,对应程序存储器分别为 1K、2K、4K。标准的 51为 4K程序空间,128字节的 RAM,32条端口,5个中断,2个定时/计数器,12个时钟周期执行一条根本指令,最长的除法为 48个周期。52为 8K程序空间,256字节的

6、 RAM,32条端口,6个中断,3个定时/计数器。AT89S51是可在板上直接下载程序的改良型号,并增加了看门狗功能,AT89C51只能在编程器下写入程序,所以经常会有人在 PCB上安装 IC插座,以便取下来编程更新程序。AT的 51系列后来也推出了单周期的 51,但价格没什么优势,国内很少使用。最近几年宏晶在国内大量推广 STC51系列单片机,最近又推出不少所谓 1T1的单片机,价格较低STC采用串口直接下载程序,写入程序很方便。1.21.2 单片机的特点1 . 单片机的存储器ROM 和RAM 时严格区分的。ROM 称为程序存储器,只存放程序,固定常数,及数据表格。RAM 那么为数据存储器,

7、用作工作区及存放用户数据。2 . 采用面向控制的指令系统。为满足控制需要,单片机有更强的逻辑控制能力,特别是单片机具有很强的位处理能力。3 . 单片机的I/O 口通常时多功能的。由于单片机芯片上引脚数目有限,为了解决实际引脚数和需要的信号线的矛盾,采用了引脚功能复用的方法,引脚处于何种功能, 可由指令来设置或由机器状态来区分。4 . 单片机的外部扩展能力很强。在内部的各种功能部件不能满足应用的需求时,均可在外部进行扩展,与许多通用的微机接口芯片兼容,给应用系统设计带来了很大的方便。1.31.3 89C5289C52 单片机介绍P0 口:P0 口为一个8 位漏级开路双向I/O 口,每脚可吸收8T

8、TL 门电流。当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 口缓冲器可接

9、收,输出4 个TTL 门电流,当P2 口被写“1时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2 口当用于外部程序存储器或16 位地址外部数据存储器进行存取时,P2 口输出地址的高八位。在给出地址“1时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能存放器的内容。P2 口在FLASH 编程和校验时接收高八位地址信号和控制信号。P3 口:P3 口管脚是8 个带内部上拉电阻的双向I/O 口,可接收输出4 个TTL门电流。当P3 口写入“1后,它们被内部上拉为高电平,并用作输入。作为输入,

10、由于外部下拉为低电平,P3 口将输出电流ILL这是由于上拉的缘故。2P3 口也可作为AT89C52 的一些特殊功能口,如下表所示:口管脚备选功能P3.0 RXD串行输入口P3.1 TXD串行输出口P3.2 /INT0外部中断0P3.3 /INT1外部中断1P3.4 T0记时器0 外部输入P3.5 T1记时器1 外部输入P3.6 /WR外部数据存储器写选通P3.7 /RD外部数据存储器读选通P3 口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST 脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位

11、字节。在FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE 脉冲。如想禁止ALE 的输出可在SFR8EH 地址上置0。此时,ALE 只有在执行MOVX,MOVC 指令是ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE 禁止,置位无效。PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN 有效。但在访问外部数据存储器时,这两次有效的/PSEN 信号将不出现。E

12、A/VPP:当/EA 保持低电平时,那么在此期间外部程序存储0000H-FFFFH ,不管是否有内部程序存储器。注意加密方式1 时, /EA 将内部锁定为RESET;当/EA3端保持高电平时,此间内部程序存储器。在FLASH 编程期间,此引脚也用于施加12V 编程电源VPP 。2 2 电子时钟2.1 电子时钟的根本特点 现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用用液晶显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时

13、间的功能,还可以进行时和分的校对,片选的灵活性好。2.2 电子时钟的原理该电子时钟由89C52,1602 液晶等构成,采用晶振电路作为驱动电路,由延时程序和循环程序到达时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。而电路中有四个控制按键,一个是选择,一个进行加数,一个进行减数,还有一个保存。例如按下选择键,然后1602显示光标,此时可以用加或减来进行调节,在按下选择键,光标移到不同的单位上,同理进行调节,最后待日期时间调节好后,按下保存键,时钟开始计时。3 3 控制系统的硬件设计3.1 单片机型号的选择通过对51单片机的学习,认为STC89C52 是最理想的电子时钟开发芯

14、片。STC89C52,最终认为89C52是一种带8K 字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用高密度非易失存储器制造技术制造,与工业标准的MCS-52指令集和输出引脚相兼容。还有一点重要原因,就是采用AT89C52时不能用开发板进行程序的下载,所以最终选用STC89C52进行设计。3.2 1602 工作原理及显示电路 字符型LCD 通常有14 条引脚线或16 条引脚线的LCD,多出来的2 条线是背光电源线VCC(15 脚)和地线GND(16 脚),其控制原理与14 脚的LCD 完全一样 1602液晶的根本的操作分为以下四种:4状态字读操作:输入RS=低、RW

15、=高、EP=高; 输出:DB07 读出为状态字;数据读出操作:输入RS=高、RW=高、EP=高; 输出:DB07 读出为数据;指令写入操作:输入RS=低、RW=低、EP=上升沿; 输出:无;数据写入操作:输入RS=高、RW=低、EP=上升沿; 输出:无。如图 1602 模块的引脚 LCD1602 正面5LCD1602 反面1602 与单片机连接图3.3 键盘电路设计6本时钟采用四个按键控制,一个(实物图蓝色线24号引脚)是选择,一个进行加数实物图紫色线25号引脚 ,一个进行减数实物图灰色线26号引脚 ,还有一个保存实物图白色线27号引脚 。例如按下选择键,然后1602显示光标,此时可以用加或减

16、来进行调节,在按下选择键,光标移到不同的单位上,同理进行调节,最后待日期时间调节好后,按下保存键,时钟开始计时。3.4 复位电路设计 单片机复位有上电复位和手动复位两种方式,上电复位是接通电源后利用 RC 充电来实现复位。手动复位是通过人为干预,强制系统复位。 连接至9号复位引脚 复位电路如下图,可以实现上电复位和手动复位功能。3.5 时钟电路设计7系统时钟源由内部时钟方式产生,时钟电路由 12MH 晶振和两个 30PF 瓷片电容组成,构成自激振荡,形成振荡源提供应单片机。电容可在 5PF 到 30PF之间选择,电容的大小对振荡频率有微小影响,可起频率微调作用。 3.6 整体电路原理图4 控制

17、系统的软件设计 4.1 程序设计 由于C 语言程序设计较汇编可读性强,可移植性,且可以大大降低编程的难8度和缩短开发周期,本系统程序采用c 语言设计。4.2 程序源代码#include /包含单片机存放器的头文件#include /包含_nop_()函数定义的头文件#define uchar unsigned char#define uint unsigned intsbit RS=P20; /存放器选择位,将RS位定义为P2.0引脚sbit RW=P21; /读写选择位,将RW位定义为P2.1引脚sbit E=P22; /使能信号位,将E位定义为P2.2引脚sbit BF=P07; /忙碌标

18、志位,将BF位定义为P0.7引脚uchar code table=2021-12-07 WEEK6; /初始化液晶显示 16uchar code table1=TIME: 19-27-50; /14 uchar count,s1num;char second,minute,hour,day,month,year,week;sbit s1=P23; /功能键sbit s2=P24; /加键sbit s3=P25; /减键sbit s4=P26; /保存并退出 /* 延时假设干毫秒 */void delay(uchar n)uchar i,a,b;for(i=0;i0;b-) for(a=1;a0

19、;a-);/*函数功能:判断液晶模块的忙碌状态返回值:result。result=1,忙碌;result=0,不忙*/uchar BusyTest(void)bit result;RS=0; /根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1; /E=1,才允许读写9_nop_(); /空操作_nop_();_nop_();_nop_(); /空操作四个机器周期,给硬件反响时间result=BF; /将忙碌标志电平赋给resultE=0; /将E恢复低电平return result;/*函数功能:写指令入口参数:dictate*/void WriteInstruction(u

20、char dictate)while(BusyTest()=1); /如果忙就等待RS=0; /根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0; /E置低电平(根据表8-6,写指令时,E为高脉冲, /就是让E从0到1发生正跳变,所以应先置0_nop_();_nop_(); /空操作两个机器周期,给硬件反响时间P0=dictate; /将数据送入P0口,即写入指令或地址_nop_();_nop_();_nop_();_nop_(); /空操作四个机器周期,给硬件反响时间E=1; /E置高电平_nop_();_nop_();_nop_();_nop_(); /空操作四个机器周期

21、,给硬件反响时间E=0; /当E由高电平跳变成低电平时,液晶模块开始执行命令/*函数功能:写数据入口参数:y(为字符常量)*/void WriteData(uchar y)while(BusyTest()=1);RS=1; /RS为高电平,RW为低电平时,可以写入数据RW=0;10E=0; /E置低电平(根据表8-6,写指令时,E为高脉冲, /就是让E从0到1发生正跳变,所以应先置0P0=y; /将数据送入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_(); /空操作四个机器周期,给硬件反响时间E=1; /E置高电平_nop_();_nop_();_no

22、p_();_nop_(); /空操作四个机器周期,给硬件反响时间E=0; /当E由高电平跳变成低电平时,液晶模块开始执行命令/*函数功能:对LCD的显示模式进行初始化设置*/void LcdInitiate(void)uchar num;second=50;minute=27;hour=19;week=6;day=7;month=12;year=13;count=0;s1num=0;E=0;delay(15); /延时15ms,首次写指令时应给LCD一段较长的反响时间WriteInstruction(0 x38); /显示模式设置:162显示, /57点阵,8位数据接口delay(5); /延

23、时5ms?,给硬件一点反响时间WriteInstruction(0 x38);delay(5);WriteInstruction(0 x38); /连续三次,确保初始化成功delay(5);WriteInstruction(0 x0c); /显示模式设置:显示开,无光标, /光标不闪烁delay(5);WriteInstruction(0 x06); /显示模式设置:光标右移,字符不移11delay(5);WriteInstruction(0 x01); /清屏幕指令,将以前的显示内容去除delay(5);WriteInstruction(0 x80);for(num=0;num16;num+

24、) /让液晶显示日期WriteData(tablenum);delay(5);WriteInstruction(0 x80+0 x40);for(num=0;num7)s1num=1;if(s1num=1) /第一个键被按一次TR0=0;WriteInstruction(0 x80+0 x40+13);WriteInstruction(0 x0f);if(s1num=2)WriteInstruction(0 x80+0 x40+10);if(s1num=3)13WriteInstruction(0 x80+0 x40+7);if(s1num=4)WriteInstruction(0 x80+9

25、);if(s1num=5)WriteInstruction(0 x80+6);if(s1num=6)WriteInstruction(0 x80+3);if(s1num=7)WriteInstruction(0 x80+15);if(s1num!=0) /如果功能键被按下if(s2=0) /第二个按下delay(5);if(s2=0)while(!s2);if(s1num=1) /第一个键被按一次,秒钟加一second+;if(second=60)second=0;write_sfm(12,second);WriteInstruction(0 x80+0 x40+13);if(s1num=2)

26、 /第一个键被按二次,分钟加一minute+;if(minute=60)minute=0;write_sfm(9,minute);WriteInstruction(0 x80+0 x40+10);14if(s1num=3) /第一个键被按三次,时钟加一hour+;if(hour=24)hour=0;write_sfm(6,hour);WriteInstruction(0 x80+0 x40+7);if(s1num=4) /日期加一day+;if(day=32)day=1;write_nyr(8,day);WriteInstruction(0 x80+9);if(s1num=5) /月加一mon

27、th+;if(month=13)month=1;write_nyr(5,month);WriteInstruction(0 x80+6);if(s1num=6) /年加一year+;if(year=99)year=0;write_nyr(2,year);WriteInstruction(0 x80+3);if(s1num=7) /星期加一week+;if(week=8)week=1;write_week(15,week);WriteInstruction(0 x80+15);if(s3=0) /第三个键被按下15delay(5);if(s3=0)while(!s3);if(s1num=1) /

28、秒减一second-;if(second=-1)second=59;write_sfm(12,second);WriteInstruction(0 x80+0 x40+13);if(s1num=2) /分减一minute-;if(minute=-1)minute=59;write_sfm(9,minute);WriteInstruction(0 x80+0 x40+10);if(s1num=3) /时减一hour-;if(hour=-1)hour=23;write_sfm(6,hour);WriteInstruction(0 x80+0 x40+7);if(s1num=4) /日减一day-;

29、if(day=0)day=31;write_nyr(8,day);WriteInstruction(0 x80+9);if(s1num=5) /月减一month-;if(month=0)month=12;write_nyr(5,month);WriteInstruction(0 x80+6);16if(s1num=6) /年减一year-;if(year=-1)year=99;write_nyr(2,year);WriteInstruction(0 x80+3);if(s1num=7) /日期减一week-;if(week=0)week=7;write_week(15,week);WriteI

30、nstruction(0 x80+15);if(s4=0) /保存并退出s1num=0; WriteInstruction(0 x0c);TR0=1;/*main function*/void main(void)uchar k=0;LcdInitiate(); /调用LCD初始化函数while(1)keyscan();k=1;/*函数功能:定时器T0的中断效劳函数17*/void timer0() interrupt 1count+;if(count=13)count=0;second+;if(second=60) /秒计满60,秒归0,分+1second=0;minute+;if(minute=60)/分计满60,分归0,时+1minute=0;hour+;if(hour=24) /时计满24,时归0,星期+1,日+1hour=0;week+;day+;if(week=8)week=1; /星期计满7,星期归1if(month=1|month=3|month=5|month=7

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论