单片机课程设计--智能电子钟(LCD显示)_第1页
单片机课程设计--智能电子钟(LCD显示)_第2页
单片机课程设计--智能电子钟(LCD显示)_第3页
单片机课程设计--智能电子钟(LCD显示)_第4页
单片机课程设计--智能电子钟(LCD显示)_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1 课课 程程 设设 计计 课程名称_ 单片机原理与接口技术 题目名称 多功能数字时钟 学生学院_ 材料与能源学院 专业班级_ 电子材料及元器件方向 学 号_ _ 学生姓名_ _ 指导教师_ 2013 年 1 月 16 日 2 广东工业大学课程设计任务书广东工业大学课程设计任务书 题目名称多功能数字时钟多功能数字时钟 学生学院材料与能源学院材料与能源学院 专业班级 姓 名 学 号 一、课程设计的内容 用 AT89C52 单片机制作一个时钟: 1.设计并绘制硬件电路图; 2.布置元件并焊接好元器件; 3.编写程序并将调试好的程序固化到单片机中。 4.增加温度测试功能。 二、课程设计的要求与数据 单片机采用 STC89C52 芯片,时钟芯片采用 DALLAS 公司的 DS1302,即涓流充电时 钟芯片,它内含有一个实时时钟/日历和 31 字节静态 RAM,通过简单的串行接口与单片 机进行通信实时时钟/日历电路提供秒分时日日期月年的信息,每月的天数和闰年的天 数可自动调整,时钟操作可通过 AM/PM 指示决定采用 24 或 12 小时格式,DS1302 与单 片机之间能简单地采用同步串行的方式进行通信。同时用选 DS18B20 传感器将采集的室 内温度显示于 LCD 上。按此要求设计硬件和软件以实现这些功能。 三、课程设计应完成的工作 1. 完成下载线的制作,为程序下载到单片机芯片中做好准备; 2. 完成软件、硬件的设计,并进行硬件的焊接制作,并将调试成功的程序固化到单片 机中,最后进行硬件与软件的调试; 3.撰写设计说明书。 四、课程设计进程安排 序号设计各阶段内容地点起止日期 3 1 硬件、软件设计宿舍1 月 813 日 2 焊接电路板宿舍1 月 1415 日 3 软件、硬件调试宿舍1 月 1516 日 4 撰写说明书宿舍1 月 17 日 5 答辩 大学城工学三号馆 105 1 月 1821 日 摘要摘要 随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研, 各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的液 晶显示温度和时钟设计,时间可由键盘调整。主要用到的芯片有单片机 STC89C52.液晶1602LCM模块.时钟芯片DS1302.温度传感器DS18B20等。 关键词关键词:单片机STC89C52,1602LCM模块,DS1302.,DS18B20 0 目录目录 1 系统需求分析.1 1.1 电子时钟研究的背景和意义.1 1.2 系统实用功能分析.1 2 设计要求与方案.2 2.1 设计要求.2 2.1.1 基本要求.2 2.1.2 发挥部分.2 2.2 系统基本方案选择.2 2.2.1 芯片的选择.2 2.2.2 显示模块选择方案.2 2.2.3 时钟信号的选择方案.3 2.3 电路设计最终方案决定.3 3 系统的硬件设计与实现.3 3.1 数字钟电路设计框图.3 3.2 系统硬件概述.4 3.3 硬件电路结构的设计.4 3.3.1 单片机主控制模块的设计.4 3.3.2 显示模块的设计.4 3.3.3 LCD 原理说明.5 3.3.4 开关模块说明.6 4 系统的软件设计.7 4.1 程序流程框图.7 4.2 LCD 的初始化与及显示程序.7 5 系统调试.9 5.1 软件调试.9 5.2 硬件调试.9 参考文献.10 附录.11 1 1 系统需求分析 1.1 电子时钟研究的背景和意义 20 实际末,电子技术获得了飞速的发展。再起推动下现代电子产品几乎渗透到了社会的 哥哥领域,有力的推动和提高的社会生产力的发展与信息化程度,同时也是现代电子产品性 能进一步提升,产品的更新换代节奏谱也越来越快。时间对人们来说是那么的宝贵,工作的 忙碌性和繁杂容易使人们忘记当前的时间。然而遇到重大事情的时候,一旦忘记时间,就会 给自己或者是他人造成很大的麻烦。平时我们要求上班准时,约会或者召开会议必然要提及 时间、火车要准点到达,航班要准时起飞,工业生产中,很多环节都需要时间来确定工序替 换时刻。所以说能随时准确的指导时间并利用时间,是我们生活中必不可少的。 想知道时间,手表当然是很好的选择,但是在忙碌当中,我们还需要一个“助理”时不 时的给我们体形式将,所以,计时器最好能够用有一个定时系统,随时提醒容易忘记时间的 人。最早能够定时、宝石的时钟属于机械式钟表,但这种时钟受到机械结构、动力合体技的 限制,在功能性能以及在造价上都没有办法与电子时钟相比。 电子时钟是采用电子电路实现对时、分、秒进行数字显示的即使装置,广泛应用月个人 家庭、车站、码头办公室等公共场所,成为人们日常生活活动中不可少的必须品。由于数字 集成电路的发展和石英晶体振荡器的广泛使用,是的数字时钟的精度远远查过老师钟表,钟 表的数字化跟人们生产生活带来了极大的方便,而且大大的扩展了钟表原先的时钟功能。诸 如整点提示、定时报警、定时广播、自动启闭路灯,定时开关烘箱、同多动力设备、甚至各 种定时电气的自动启动等,所有这些,都是以钟表数字化为基础的。因此研究数字钟及扩大 其应用,有着非常现实的意义。 1.2 系统实用功能分析 单片机模块中最常见的是数字时钟,数字时钟是一种用单片机原理实现时、分、秒计时的 装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命, 因此得到了广泛的使用。 数字时钟是采用单片机原理实现对.年、月、日、周、时、分、秒,数字显示及到时提醒的计 时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必 2 需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过 老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的 报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、 定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字 化为基础的。因此,研究数字时钟及扩大其应用,有着非常现实的意义。 2 设计要求与方案 2.1 设计要求 2.1.1 基本要求 1 设计能支持年月日星期时分秒的时钟,时钟要具有时间调整功能。 2.1.2 发挥部分 1 闹钟时间精度。 2 时钟功耗小于 0.5MA/5V。 2.2 系统基本方案选择 本时钟的设计具体有两种方法。一是通过单纯的数字电路来实现;二是使用单片机 来控制实现。本次设计选取了较为简单的单片机控制;而选择这一方法后还要进行各个芯片 的选择。以下是我在这次设计中所用的方案。 2.2.1 芯片的选择 采用 AT89C52 芯片,其为高性能 CMOS 8 位单片机,该芯片内含有 4k bytes 的可反复擦 写的只读程序存储器(PEROM)、128 bytes 的随机存取数据存储器(RAM)、 32 位可编程 I/O 口 线、2 个 16 位定时/计数器、6 个中断源、可编程串行 UART 通道及低功耗空闲和掉电模式,其 最大的优势就是 AT89C52 提供了 8K 字节可擦写 Flash 闪速存储器空间、8 个中断源、及 256*8 字节内部存储器(RAM),解决了我们对可反复擦写的 Flash 闪速存储器空间大小与中断 3 源的不够问题的担心。 2.2.2 显示模块选择方案 方案一:采用 LED 数码管显示,显示较为清楚,但是由于设计要求时钟功能比较重要,因 此用如用 LED 进行显示会使得硬件电路较为复杂,且在软件实现上也较难,为实现功能带来 了一定的困难。 方案二:采用 LCD,电路比较简单,且在软件设计上也相对简单,具有低功耗功能,能够满 足设计最优的要求。因此,在设计中我采用的显示模块是 LCD 显示。 2.2.3 时钟信号的选择方案 方案一:直接采用单片机定时计数器提供的秒信号,使用程序实现年、月、日、周、时、分、 秒计数。采用此种方案可减少芯片的使用,节约成本,实现的时间误差较小,但程序设计较为 复杂。 方案二:采用 DS1302 时钟芯片实现时钟, DS1302 芯片是一种高性能的时钟芯片,可自动 对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,256 位的 RAM 作为数据 暂存区,工作电压 2.5V5.5V 范围内,2.5V 时耗电小于 300nA。且硬件电路连接较为简单,程 序设计容易实现。 2.3 电路设计最终方案决定 综上各方案所述,对此次数字时钟的方案选定为: 采用 AT89C52 作为主控制系统; 并由 其定时计数器提供时钟; LCD 作为显示电路,来实现功能。 4 3 系统的硬件设计与实现 3.1 数字钟电路设计框图 LCD 动态扫描 显示模块 AT89C52 主控制器 开关调节模块 晶振电路 模块 复位电路 图 3-1 电路设计框图 3.2 系统硬件概述 该电路是由 AT89C52 单片机为控制核心,具有在线编程功能,低功耗,能在 3V 超低压工 作;时钟电路也由 AT89C52 单片机提供,减少芯片的使用,节约成本,它可以对年、月、日、周、 日、时、分、秒进行计时,具有闰年补偿功能。时间显示部份采用液晶 LM016L(LCD)。 3.3 硬件电路结构的设计 3.3.1 单片机主控制模块的设计 此次单片机数字时钟的设计采用 AT89C52 为主控制芯片,并由其定时器提供时钟,利用 LCD 进行时间按显示。下图为用 Proteus 软件画的原理图: 5 图 3-2 仿真电路图 3.3.2 显示模块的设计 如图(3-4)所示,该设计采用液晶显示装置即把时钟信号以及温度信号同时显示在液晶 显示器上,不仅结构简单清新可见,而且省电也容易控制。数据的传输采用 P0 口进行控制, 其引脚 VSS 接地,VEE 接 VCC,RS 和 RW、E 是显示器的控制端分别由单片机的引脚 P1.0、P1.1、P1.3 进行控制。而 VDD 是作为液晶显示器的灰度调节引脚,接一变阻器来改变其 显示的清晰度。 图 3-3 LM016L 液晶显示器 6 3.3.3 LCD 原理说明 在实际应用中,用户很少直接设计 LCD 显示器驱动接口,一般是直接使用专用的 LCD 显 示驱动器和 LCD 显示模块。其中,LCD 显示模块 LCM(Liquid Crystal Display Module)是 把 LCD 显示器、背景光源、线路板和驱动集成电路等部件构成一个整体,作为一个独立的部 件使用,具有功能较强、易于控制、接口简单等优点,在单片机系统中应用较多。其内部结 构如图 2-8 所示。LCD 显示模块只留一个接口与外部通信。显示模块通过这个接口接收显示 命令和数据,并按指令和数据的要求进行显示。外部电路通过这个接口读出显示模块的工作 状态和显示数据。LCD 显示模块一般带有内部显示 RAM 和字符发生器,只要输入 ASCII 码就 可以进行显示。LCD 显示模块按功能显示可分为:LCD 段式显示模块、LCD 字符型显示模块 、LCD 图形显示块三类。液晶显示器因其功耗低、重量轻而成为便携式应用中的主流显示技 术。这里所用的字符型液晶模块是一种用 5x7 点阵图形来显示字符的液晶显示器,根据显示 的容量可以分为 1 行 16 个字、2 行 16 个字、2 行 20 个字等等。液晶显示有点振式和字符式 两种,在这里采用字符式液晶显示器 1602 来实现显示电路的功能。 LCD 驱动器 LCD 显示器 LCD 控制器 VSS VDD VL RS R/W E D0-D7 图 3-4 LCD 显示电路 由于 1602 液晶显示器是本身带有驱动模块的液晶屏,它只有并口线和一些控制线,与 单片机的连接有两种不同的方法,直接访问方式和间接访问方式。直接访问方式就是微处理 器把液晶显示模块当作存储器或 I/O 设备直接挂在总线上,模块 8 位数据总线与微处理器的 数据总线相连,用读操作 或写操作 信号与地址信号共同产生控制信号。 7 3.3.4 开关模块说明 校时电路主要靠键盘来控制。键盘是一组按键的集合。共有四个按键,分别是:改变时 间、增加、减少、清零。它是嵌入式计算机系统中不可缺少的外围电路。是实现人机对话的 纽带,借助键盘可以向计算机输入程序、置数、逻辑操作以及写入程序和程序检测等。 8 4 系统的软件设计 4.1 程序流程框图 开始 初始化程序 主键值检测 根据主键进行散转 有则主键值加一 时 间 秒 钟 调 整 时 间 分 钟 调 整 时 间 小 时 调 整 时 间 周 调 整 时 间 日 调 整 时 间 月 调 整 时 间 年 调 整 显 示 周 显 示 日 显 示 月 显 示 年 时 间 显 示 时 间 显 示 主 界 面 图 4-1 主程序流程 4.2 LCD 的初始化与及显示程序 1 LCD 的初始化 void ini()/*LCD 的初始化函数 9 rw=0; en=0; P1=0 xff; writeCG(); write_order(0 x38);/*端口写入 write_order(0 x0c); /*端口写入 write_order(0 x06); /*端口写入 write_order(0 x01); /*端口写入 2 LCD 的显示程序 void open()/*定义一个 LCD 显示函数 uchar num; /*定义一个无符号的字符变量 num write_order(0 x80+0 x10); /*调用 write_order 函数 for(num=0;opensnum!=0;num+)/*循环打开 write_date(opensnum); delay(20); for(num=0;num16;num+)/*对端口 0 x1c 写入 write_order(0 x1c); delay(200); for(num=0;num5;num+)/*对端口 0 x18 写入 write_order(0 x18); delay(200); for(num=0;num4;num+)/*对端口 0 x18 写入 write_order(0 x1c); delay(200); for(num=0;num3;num+)/*对端口 0 x18 写入 write_order(0 x18); delay(200); 10 for(num=0;num2;num+)/*对端口 0 x1c 写入 write_order(0 x1c); delay(200); for(num=0;num0;x-) for(y=110;y0;y-); /写入指令子函数 void write_order(uchar order) lcdrs=0; P0=order; delay(2); lcden=1; delay(2); lcden=0; /写入数据子函数 void write_data(uchar data1) lcdrs=1; P0=data1; delay(2); lcden=1; delay(2); 14 lcden=0; /初始化子函数 void init() sec=0; minute=0; hour=0; week=0; day=1; month=1; year=2008; TMOD=0 x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; wela=0; dula=0; lcden=0; write_order(0 x38); /设置显示模式 write_order(0 x0c); /开显示开光标,光标闪烁 write_order(0 x01); /显示清屏 write_order(0 x06); /光标显示效果 write_order(0 x80); /定义第一行写入数据的地址 for(num=0;num14;num+) write_data(table1num); delay(2); write_order(0 x80+0 x43); /定义第一行写入数据的地址 for(num=0;num8;num+) write_data(table2num); delay(2); void change(uchar addr,uchar data1) /改变 时 分 秒 天 月 的子函数 15 uchar x,y; x=data1/10; y=data1%10; write_order(0 x80+addr); delay(1); write_data(0 x30+x); delay(1); write_data(0 x30+y); delay(1); void yearchange(uchar addr,uint year) /改变年的子函数 uchar x,y,z,w; x=year/1000; y=year%1000/100; z=year%100/10; w=year%10; write_order(0 x80+addr); delay(1); write_data(0 x30+x); delay(1); write_data(0 x30+y); delay(1); write_data(0 x30+z); delay(1); write_data(0 x30+w); delay(1); void weekchange(uchar z) /改变周数的子函数 switch(z) case 0: write_order(0 x80+0 x0b); delay(1); write_data(M); delay(1); write_data(o); delay(1); write_data(n); delay(1); 16 break; case 1: write_order(0 x80+0 x0b); delay(1); write_data(T); delay(1); write_data(u); delay(1); write_data(e); delay(1); break; case 2: write_order(0 x80+0 x0b); delay(1); write_data(W); delay(1); write_data(e); delay(1); write_data(n); delay(1); break; case 3: write_order(0 x80+0 x0b); delay(1); write_data(T); delay(1); write_data(h); delay(1); write_data(u); delay(1); break; case 4: write_order(0 x80+0 x0b); delay(1); write_data(F); delay(1); write_data(r); delay(1); 17 write_data(i); delay(1); break; case 5: write_order(0 x80+0 x0b); delay(1); write_data(S); delay(1); write_data(a); delay(1); write_data(t); delay(1); break; case 6: write_order(0 x80+0 x0b); delay(1); write_data(S); delay(1); write_data(u); delay(1); write_data(n); delay(1); break; default:break; void display() if(t0=20) t0=0; sec+; if(sec=60) sec=0; minute+; if(minute=60) minute=0; hour+; 18 if(hour=24) hour=0; day+; week+; if(week=7) week=0; if(day=31) day=1; month+; if(month=13) month=1; year+; yearchange(0,year); change(0 x05,month); change(0 x08,day); weekchange(week); change(0 x43,hour); change(0 x46,minute); change(0 x49,sec); /键盘扫描的子函数,修改时间 void keyscan() uchar snum; if(s0=0) delay(5); if(s0=0) while(!s0);/松手检测 snum+; if(snum=1) /选 定 秒 19 TR0=0; write_order(0 x80+0 x40+9); write_order(0 x0f); if(snum=2) /选定 分 write_order(0 x80+0 x40+6); write_order(0 x0f); if(snum=3) /选定 时 write_order(0 x80+0 x40+3); write_order(0 x0f); if(snum=4) /选定 星期 write_order(0 x80+0 x0b); write_order(0 x0f); if(snum=5) /选定 天 write_order(0 x80+0 x08); write_order(0 x0f); if(snum=6) /选定 月 write_order(0 x80+0 x05); write_order(0 x0f); if(snum=7) /选定 年 write_order(0 x80); write_order(0 x0f); if(snum=8) /恢复 计时 TR0=1; write_order(0 x0c); 20 snum=0; if(snum!=0) /增加 时 分 秒 天 月 年 if(s1=0) delay(5); if(s1=0) while(!s1); if(snum=1) sec+; if(sec=60) sec=0; change(0 x49,sec); write_order(0 x80+0 x40+9); if(snum=2) minute+; if(minute=60) minute=0; change(0 x46,minute); write_order(0 x80+0 x40+6); if(snum=3) hour+; if(hour=24) hour=0; change(0 x43,hour); write_order(0 x80+0 x40+3); if(snum=4) week+; if(week=7) week=0; weekchange(week); write_order(0 x80+0 x0b); if(snum=5) 21 day+; if(day=31) day=1; change(0 x08,day); write_order(0 x80+0 x08); if(snum=6) month+; if(month=13) month=1; change(0 x05,month); write_order(0 x80+0 x05); if(snum=7) year+; yearchange(0,year); write_order(0 x80); if(snum!=0) /减少 时 分 秒 天 月 年 if(s2=0) delay(5); if(s2=0) while(!s2); if(snum=1) sec-; if(sec=-1) sec=59; change(0 x49,sec); write_order(0 x80+0 x40+9); if(snum=2) minute-; if(minute=-1) minute=59; change(0 x46,minute); 22 write_order(0 x80+0 x40+6); if(snum=3) hour-; if(hour=-1) hour=23; change(0 x43,hour); write_order(0 x80+0 x40+3);

温馨提示

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

评论

0/150

提交评论