




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 毕业设计(论文)毕业设计(论文) 课题:单片机定时闹钟 学生:系部: 班级:学号: 指导教师: 2 目录目录 摘要.1 1 基于单片机的时钟应用及其特点. 2 1.1 基于单片机的时钟应用.2 1.2 基于单片机的时钟介绍.2 2 基于 AT89C51 单片机的定时闹钟设计方案.3 2.1 整体设计方案.3 2.2 硬件设计方案.4 2.2.1 主控芯片 AT89C51 的设计.4 2.2.2 时钟电路部分设计. 5 2.2.3LCD 显示电路部分的设计. 6 2.3 软件设计方案.7 2.3.1 软件设计说明.7 2.3.2主函数的设计.8 3 基于 AT89C51 单片机定时闹钟的实现.9 3.1 系统仿真.10 3.2 液晶显示模块.10 3.3 程序部分.11 3.3.1 液晶程序初始化.11 3.3.2 基于 AT89C51 单片机定时闹钟的程序.11 总结.22 致谢.23 参考文献. 单片机定时闹钟 1 摘摘要要 单片机自 20 世纪 70 年代问世以来,以其极高的性能价 格比,受到人们的重视和关注,应用很广、发展很快。单片 机体积小、重量轻、抗干扰能力强、环境要求不高、价格低 廉、可靠性高、灵活性好、开发较为容易。而 AT89C51 单片 机是各单片机中最为典型和最有代表性的一种。这次毕业设 计通过对它的学习、应用,以 AT89C51 芯片为核心,辅以必 要的电路,设计了一个简易的电子时钟,它由 5V 直流电源 供电,通过数码管能够准确显示时间,调整时间,从而到达 学习、设计、开发软、硬件的能力。 基于单片机的定时闹钟在设计时需要解决三个方面的 主要问题:一是 LCD 显示模块的驱动和编程,二是有关单片 机中定时器的使用,三是如何利用单片机的按键键盘实现时 钟调整时间的功能和运行模式的转化。在本设计的电路中, 除了基本的单片机系统和外围电路外,还需按键键盘作控制 装置,LCD 液晶显示器作显示装置。 本文主要介绍用单片机内部的定时/计数器来实现电子 时钟的方法,由单片机 AT89S51 芯片和液晶显示为核心,辅 以必要的电路,构成了一个单片机电子闹钟/时钟。 关键词:单片机关键词:单片机AT89S51AT89S51闹钟闹钟 单片机定时闹钟 2 1 基于单片机的时钟应用及其特点基于单片机的时钟应用及其特点 1.1 基于单片机的时钟应用基于单片机的时钟应用 以单片机为核心的数字时钟是很有社会意义和社会价值的。 钟表 原先的报时功能已经原不能满足人们日益增长的要求, 现代的电子时 钟多带有类似自动报警、按时自动打铃、时间程序自动控制、定时广 播、自动起闭路灯、通断动力设备、甚至各种定时电气的自动启用等 功能。 1.2 基于单片机的时钟介绍基于单片机的时钟介绍 时钟是将小时、分钟、秒钟显示于人的肉眼的计时装置。而单片 机模块中最常见的正是数字钟,数字钟是一种用数字电路技术实现 时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观 性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。 而 LCD 电子定时闹钟是以单片机为基础的数字电路实现对时、分、秒 的数字显示的数字计时装置,它的计时周期为 24 小时, 另外应有校时 功能和一些显示日期、闹钟等附加功能。一个基本的数字钟电路主要 由译码显示器、 “时” , “分” , “秒” , “星期”计数器、校时电路、报 时电路和振荡器组成。目前电子钟广泛用于各种私人和公众场合,成 为我们生活、工作和学习中不可缺少的好帮手。 单片机定时闹钟 3 2 基于基于 AT89C51 单片机单片机的定时闹钟设计方的定时闹钟设计方 案案 2.1 整体设计方案整体设计方案 在本次 LCD 定时闹钟设计中,是以单片机及外围接口电路为核心 硬件,辅以其他外围硬件电路,用汇编语言设计的程序来实现的。根 据 C51 单片机的外围接口特点扩展相应的硬件电路, 然后根据单片机 的指令设计出数字钟相应的软件, 再利用软件执行一定的程序来实现 数字钟的功能。由于采用集成芯片性的单片机来制作电子钟,这样设 计制作简单而且功能多、精确度高,也可方便扩充其他功能,实现也 十分简单。这次设计是利用 AT89C51 单片机为主控芯片,由 LCD、晶 振、电阻、电容、发光二极管、开关、喇叭等元件组成硬件电路,通 过编写软件程序来实现和控制的数字定时闹钟。整体示意图如下; AT89C51 震荡 电路 调时电路 喇叭 LCD 片选代码 单片机定时闹钟 4 2.2 硬件设计方案硬件设计方案 2.2.1 主控芯片主控芯片 AT89C51 的设计的设计 在本次电子闹钟设计中是采用我们熟悉的 AT89C51 单片机为主 控芯片。AT89C51 单片机由微处理器,存储器,I/O 口以及特殊功能 寄存器 SFR 等部分构成。 其存储器在物理上设计成程序存储器和数据 存储器两个独立的空间,片内程序存储器的容量为 4KB,片内数据存 储器为 128 个字节。89C51 单片机有 4 个 8 位的并行 I/O 口:P0 口, P1 口,P2 口和 P3 口。各个接口均由接口锁存器,输出驱动器,和输 入缓冲器组成。P1 口是唯一的单功能口,仅能用作通用的数据输入/ 输出口。P3 口是双功能口除了具有数据输入/输出功能外,每条接口 还具有不同的第二功能,如 P3.0 是串行输入口线,P3.1 口是串行输 出口线。在需要外部程序存储器和数据存储器扩展时,P0 可作为分 时复用的低 8 位地址/数据总线,P2 口可作为高 8 位的地址总线。P3 口也可作为 AT89C51 的一些特殊功能口, 同时为闪烁编程和编程校验 接收一些控制信号. 单片机定时闹钟 5 2.2.2 时钟电路部分设计时钟电路部分设计 AT89C51 系列的单片机的时钟方式分为内部方式和外部方式。内 部方式就是在单片机的 XTAL1 和 XTAL2 的两引脚外接晶振, 就够成了 自激振荡器在单片机内部产生时钟脉冲信号。 外部时钟方式是把外部 已经有的时钟信号引入到单片机内部。 时钟电路在计算机系统中起着 非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系 统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡 定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片 机系统工作的快慢;二是指系统的标准定时时钟,即定时时间。 在本次电子闹钟设计中是采用内部时钟方式, 用一个 12MHz 晶振 和两个 30Pf 瓷片电容组成,为单片机提供标准时钟,其中两个瓷片 电容起微调作用. 之所以采用高性能的振荡电路,因为: 1.单片机电子钟的计时脉冲基准是由外部晶振的频率经过 12 分 频后提供,采用内部的定时/计数器来实现计时功能。所以,外接晶 振频率精确度直接影响电子钟计时的准确性。 2.单片机电 子钟利用内部定时/计数器溢出产生中断(12M 晶振 一般为 50ms)再乘以相应的倍率来实现秒、分、时的转换。大家都 知道从定时/计数器产生中断请求到响 应中断需要 3-8 个机器周期, 定时中断子程序中的数据入栈和重装定时/计数器的初值还需要占用 数个机器周期, 还有从中断入口转到中断子程序也要占用一定的机器 周期。 单片机定时闹钟 6 2.2.3LCD 显示电路部分显示电路部分的设计的设计 为了获得更好的效果本设计并没有采用常见的 LED,而是采用了 型号为 1602 的 LCD。LCD 有 LED 数码显示更好的更的直观效果,也 更加经久耐用。液晶显示模块体积小功耗低、显示内容丰富,现在字 符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件 之一了。本 LCD 是 2 行 16 列液晶 可显示 2 行 16 列英文字符,有 8 位数据总线 D0-D7,RS,R/W,EN 三个控制端口(共 14 线) ,工作电 压为 5V。没背光,和常用的 1602B 功能和引脚一样(除了调背光的 二个线脚). 该模块也可只用 D4-D7 作为四位数据分两次传送。这样 的话可以节省 MCU 的 I/O 口资源。 引脚说明,见下表。 VDD:电源正极,4.55.5V,通常使用 5V 电压; VL:LCD 对比度调节端,电压调节范围为 05V。接正电源时对 比度最弱,接地电源时对比度最高,但对比度过高时会产生“鬼影” , 因此通常使用一个 10K 的电位器来调整对比度或者直接串接一个电 阻到地; RS:MCU 写入数据或者指令选择端。MCU 要写入指令时,使 RS 为 低电平;MCU 要写入数据时,使 RS 为高电平; R/W: 读写控制端。 R/W 为高电平时, 读取数据; R/W 为低电平时, 写入数据; E:LCD 模块使能信号控制端。写数据时,需要下降沿触发模块。 D0D7:8 位数据总线,三态双向。如果 MCU 的 I/O 口资源紧张 的话,该模块也可以只使用 4 位数据线 D4D7 接口传送数据。本充 电器就是采用 4 位数据传送方式; BLA:LED 背光正极。 需要背光时, BLA 串接一个限流电阻接 VDD, BLK 接地,实测该模块的背光电流为 50mA 左右; BLK: LED 背光地端。 单片机定时闹钟 7 LCDLCD 显示屏引脚说明显示屏引脚说明 编号符号引脚说明编号符号引脚说明 1VCC电源地9D2双向数据口 2VDD电源正极10D3双向数据口 3VL对比度调节11D4双向数据口 4RS数据/命令选择12D5双向数据口 5R/W读/写选择13D6双向数据口 6E模块使能端14D7双向数据口 7D0双向数据口15BLK背光源地 8D1双向数据口16BLA背光源正极 2.3 软件设计方案软件设计方案 2.3.1 软件设计说明软件设计说明 本次设计用汇编的单片机程序构成了本 LCD 电子闹钟的软件系 统。该程序实现时间及定时(时间以 0 点 0 分 0 秒为基准计算,闹铃 定时以 0 时 0 分为基准计算)的显示,有外中断 0 和五个开关实现校 时,闹钟功能。其中程序的晶振频率为 12MHz,最小计时单位为 1/20 秒。 主芯片 p0.1-p0.7 输出数据到 LCD 数据总线,p3.0-2.2 输出 LCD 控 制信号,P2.1 输出声音信号,.P1.0-P1.3 输入外部控制信号,整个 软件系统也是根据这个关系连接成一个完整的系统。 单片机定时闹钟 8 2.3.2主函数的设计主函数的设计 本 LCD 电子闹钟的的主程序流程图如下图所示: 系 定时器 定时器 串口初始 显示待机 设定闹铃 判设置闹铃 显示刷新 启动走时 有关变量 刷新显示 判断日期 秒指示 判断时间 闹铃 判是否到闹 延时 Y Y Y Y 单片机定时闹钟 9 3 基于基于 AT89C51 单片机定时闹钟的实现单片机定时闹钟的实现 闹钟功能的实现涉及到两个方面:闹铃时间设定和是否闹铃判别 与相应处理。闹铃时间设定模块的设计可参照时间设定模块,这里着 重阐述闹铃判别与处理模块的设计问题。 闹铃判别与闹铃处理的关键 在于判别何时要进行闹铃。当时十位、时个位、分十位、分个位中任 一位发生改变 (进位) 时, 就必须进行闹铃判别。 程序设计思想如图。 时十位、个位,分十位、个位改变了 设置闹铃标志 是否设置了闹铃 清除闹铃标志 判当前时间是设定时间 中断返回 中断返回 闹铃判别处理 单片机定时闹钟 10 3.1 系统仿真系统仿真 单片机定时闹钟系统仿真图 为了更好的验证系统软件设计的正确性,我使用了 Proteus ISIS 软件对系统 进行了仿真。我们使用 Proteus ISIS 绘制了与实验向“基础型实验”部分相同 的电路图,将使用 keil 编译后的 hex 加载进入了单片机里面,结合仿真结果调 整源代码,最终实现设计要求的全部功能。 3.2 液晶显示模块液晶显示模块 液晶显示模块是一个慢显示器件, 所以在执行每条指令之前一定要确认模块 的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字 符地址,也就是告诉模块在哪里显示字符,下表是 TC1602EL 液晶模块的内部显 示地址。 单片机定时闹钟 11 内部显示地址内部显示地址 12345678910111213141516 000102030405060708090A0B0C0D0E0F 404142434445464748494A4B4C4D4E4F 3.3 程序部分程序部分 3.3.1 液晶程序初始化液晶程序初始化 在系统开始上电时,需要首先初始化液晶: void TimeInit() write_com(0 x01);/初始化 1602 液晶 write_com(0 x80);/设置现实初始坐标 for(num=0;num0;x-) for(y=110;y0;y-); /蜂鸣器子程序 void di() beep=0; delay(100); beep=1; /写命令函数 void write_com(uchar com) lcdrs=0; lcdrw=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; /写数据函数 void write_date(uchar date) 单片机定时闹钟 13 lcdrs=1; lcdrw=0; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; /写时间函数 void write_sfm(uchar add,uchar date) uchar shi,ge; shi=date/10; ge=date%10; write_com(0 x80+0 x40+add); write_date(0 x30+shi); write_date(0 x30+ge); /显示时间初始化 void TimeInit() write_com(0 x01); write_com(0 x80); for(num=0;num9;num+) write_date(tablenum); delay(5); write_com(0 x80+0 x40+6); write_date(:); delay(5); write_com(0 x80+0 x40+9); write_date(:); delay(5); write_sfm(4,shi); write_com(0 x80+0 x40+4); write_sfm(7,fen); write_com(0 x80+0 x40+7); write_sfm(10,miao); write_com(0 x80+0 x40+10); /设置当前时间 单片机定时闹钟 14 void SetNowTime() if(K1=0) delay(5); if(K1=0) while(!K1); di(); shi+; if(shi=24) shi=0; write_sfm(4,shi); write_com(0 x80+0 x40+4); write_add(3,shi); if(K2=0) delay(5); if(K2=0) while(!K2); di(); fen+; if(fen=60) fen=0; write_sfm(7,fen); write_com(0 x80+0 x40+7); write_add(2,fen); if(K3=0) delay(5); if(K3=0) while(!K3); di(); k1num=0; TR0=1; TimeInit(); 单片机定时闹钟 15 /设置闹钟时间 void SetAlarmTime() flag=0; if(K1=0) delay(5); if(K1=0) while(!K1); di(); ashi+; if(ashi=24) ashi=0; write_sfm(4,ashi); write_com(0 x80+0 x40+4); write_add(4,ashi); if(K2=0) delay(5); if(K2=0) while(!K2); di(); afen+; if(afen=60) afen=0; write_sfm(7,afen); write_com(0 x80+0 x40+7); write_add(5,afen); if(K3=0) delay(5); if(K3=0) while(!K3); di(); k3num=0; EA=1; 单片机定时闹钟 16 flag=1; TimeInit(); /显示闹钟函数 void DisplayAlarmTime() write_com(0 x01); write_com(0 x80); for(num=0;num11;num+) write_date(alarmnum); delay(5); write_com(0 x80+0 x40+6); write_date(:); delay(5); write_sfm(4,ashi); write_com(0 x80+0 x40+4); write_sfm(7,afen); write_com(0 x80+0 x40+7); /键盘扫描函数 void keyscan() if(K1=0) delay(5); if(K1=0) TR0=0; while(!K1); di(); k1num+; if(k1num!=0) write_com(0 x80); for(num=0;num13;num+) write_date(table1num); delay(5); 单片机定时闹钟 17 SetNowTime(); else if(K2=0) delay(5); if(K2=0) while(!K2); di(); k2num+; if(k2num=1) EA=0; DisplayAlarmTime(); k2num=2; if(k2num=3) k2num=0; EA=1; TimeInit(); else if(K3=0) delay(5); if(K3=0) while(!K3); di(); k3num+; write_com(0 x01); if(k3num=1) EA=0; write_com(0 x80); 单片机定时闹钟 18 for(num=0;num15;num+) write_date(table2num); delay(5); write_com(0 x80+0 x40+6); write_date(:); delay(5); write_sfm(4,ashi); write_com(0 x80+0 x40+4); write_sfm(7,afen); write_com(0 x80+0 x40+7); SetAlarmTime(); else if(K4=0) delay(5); if(K4=0) while(!K4); di(); k4num+; if(k4num=1) di(); k4num=2; flag=0; if(k4num=3) k4num=0; di(); delay(500); di(); delay(500); di(); flag=1; 单片机定时闹钟 19 if(flag=1 delay(500); if(K4=0 if(K4=0 di(); flag=0; k4num=0; /lcd1602 初始化 void init() lcden=0; shi=0; fen=0; miao=0; ashi=0; afen=0; count=0; k1num=0; init_24c08(); write_com(0 x38);/设置 16X2 显示,5X7 点阵,8 位数据接口 write_com(0 x0c);/设置开显示,不显示光标 write_com(0 x06);/写一个字符后地址指针加 1 write_com(0 x01);/显示清 0,数据指针清 0 miao=read_add(1);/首次上电从 AT24C08 中读取出存储的数据 fen=read_add(2); shi=read_add(3); ashi=read_add(4); afen=read_add(5); TimeInit(); TMOD=0 x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; 单片机定时闹钟 20 ET0=1; TR0=1; /主函数 void main() init(); write_com(0 x80); while(1) keyscan(); /中断服务子程序 void timer0() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; count+; if(count=20) count=0; miao+; if(miao=60) miao=0; fen+; if(fen=60) fen=0; shi+; if(shi=24) shi=0; write_sfm(4,shi); write_add(3,shi); write_sfm(7,fen); write_add(2,fen); write_sfm(10,miao); write_add(1,miao); 单片机定时闹钟 21 单片机定时闹钟 22 总结总结 这一次的单片机课程设计,使我考虑的很多东西,通过实践,使 我对所学的知识进行了系统的复习与巩固, 在以前的学习中不够清晰 的概念得到了更好地理解。同时,通过课设,培养和锻炼了我的动手 能力,这一点非常重要不仅对我以后的学习有帮助,还可以为以后的 工作打下一定的基础。这段时间的学习,使我了解到了理论和实际之 间的差别,第一次真正接触到了实际
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业文化体验旅游创新创业项目商业计划书
- 金融合规服务创新创业项目商业计划书
- 汽车客户关系管理系统升级创新创业项目商业计划书
- 2025年共青城市市级机关公开遴选考试笔试试题(含答案)
- 消费者购物体验研究创新创业项目商业计划书
- 编程乐园探险记创新创业项目商业计划书
- 智能化烹饪菜谱创新工具创新创业项目商业计划书
- 2025年数字艺术市场创作与交易政策环境分析报告
- 2025年文化创意产品创新研发资金申请策略研究报告
- 2025年心血管疾病心血管疾病心血管疾病患者教育项目市场前景报告
- 2025年建筑工程-安全员C证-安全员(C证·上海)历年参考题库典型考点含答案解析
- 光伏项目施工组织设计方案
- 2025政府采购评审专家入库题库与答案
- 2025至2030医学混合成像系统行业产业运行态势及投资规划深度研究报告
- 广东省汕头市金平区2023-2024学年七年级下学期期末数学试题(无答案)
- GB/T 18705-2002装饰用焊接不锈钢管
- um-joyo c2001跨平台监控防误一体化系统使用说明书
- 中央供料系统介绍
- 输液泵/微量注射泵使用技术操作考核评分标准
- PWM控制技术的最新科技成果-介绍ISL6752
- 泰州市海军小学食堂劳务外包
评论
0/150
提交评论