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

下载本文档

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

文档简介

1、1课课 程程 设设 计计 课程名称_ 单片机原理与接口技术 题目名称 多功能数字时钟 学生学院_ 材料与能源学院 专业班级_ 电子材料及元器件方向学 号_ _ 学生姓名_ _ 指导教师_ 2013 年 1 月 16 日2广东工业大学课程设计任务书广东工业大学课程设计任务书题目名称多功能数字时钟多功能数字时钟学生学院材料与能源学院材料与能源学院专业班级姓 名学 号一、课程设计的内容用 AT89C52 单片机制作一个时钟:1.设计并绘制硬件电路图;2.布置元件并焊接好元器件;3.编写程序并将调试好的程序固化到单片机中。4.增加温度测试功能。二、课程设计的要求与数据单片机采用 STC89C52 芯片

2、,时钟芯片采用 DALLAS 公司的 DS1302,即涓流充电时钟芯片,它内含有一个实时时钟/日历和 31 字节静态 RAM,通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过 AM/PM 指示决定采用 24 或 12 小时格式,DS1302 与单片机之间能简单地采用同步串行的方式进行通信。同时用选 DS18B20 传感器将采集的室内温度显示于 LCD 上。按此要求设计硬件和软件以实现这些功能。三、课程设计应完成的工作1. 完成下载线的制作,为程序下载到单片机芯片中做好准备;2. 完成软件、硬件的设计,并进行硬件的焊

3、接制作,并将调试成功的程序固化到单片机中,最后进行硬件与软件的调试;3.撰写设计说明书。四、课程设计进程安排序号设计各阶段内容地点起止日期31硬件、软件设计宿舍1 月 813 日2焊接电路板宿舍1 月 1415 日3软件、硬件调试宿舍1 月 1516 日4撰写说明书宿舍1 月 17 日5答辩大学城工学三号馆1051 月 1821 日摘要摘要随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的液晶显示温度和时钟设计,时间可由键盘调整。主要用到的芯片有单片机STC89C52.液晶1602LCM模块.时钟芯片DS1302

4、.温度传感器DS18B20等。关键词关键词:单片机STC89C52,1602LCM模块,DS1302.,DS18B200 目录目录1 系统需求分析.11.1 电子时钟研究的背景和意义.11.2 系统实用功能分析.12 设计要求与方案.22.1 设计要求.22.1.1 基本要求.22.1.2 发挥部分.22.2 系统基本方案选择.22.2.1 芯片的选择.22.2.2 显示模块选择方案.22.2.3 时钟信号的选择方案.32.3 电路设计最终方案决定.33 系统的硬件设计与实现.33.1 数字钟电路设计框图.33.2 系统硬件概述.43.3 硬件电路结构的设计.43.3.1 单片机主控制模块的设

5、计.43.3.2 显示模块的设计.43.3.3 LCD 原理说明.53.3.4 开关模块说明.64 系统的软件设计.74.1 程序流程框图.74.2 LCD 的初始化与及显示程序.75 系统调试.95.1 软件调试.95.2 硬件调试.9参考文献.10附录.11 1 1 系统需求分析1.1 电子时钟研究的背景和意义20 实际末,电子技术获得了飞速的发展。再起推动下现代电子产品几乎渗透到了社会的哥哥领域,有力的推动和提高的社会生产力的发展与信息化程度,同时也是现代电子产品性能进一步提升,产品的更新换代节奏谱也越来越快。时间对人们来说是那么的宝贵,工作的忙碌性和繁杂容易使人们忘记当前的时间。然而遇

6、到重大事情的时候,一旦忘记时间,就会给自己或者是他人造成很大的麻烦。平时我们要求上班准时,约会或者召开会议必然要提及时间、火车要准点到达,航班要准时起飞,工业生产中,很多环节都需要时间来确定工序替换时刻。所以说能随时准确的指导时间并利用时间,是我们生活中必不可少的。想知道时间,手表当然是很好的选择,但是在忙碌当中,我们还需要一个“助理”时不时的给我们体形式将,所以,计时器最好能够用有一个定时系统,随时提醒容易忘记时间的人。最早能够定时、宝石的时钟属于机械式钟表,但这种时钟受到机械结构、动力合体技的限制,在功能性能以及在造价上都没有办法与电子时钟相比。电子时钟是采用电子电路实现对时、分、秒进行数

7、字显示的即使装置,广泛应用月个人家庭、车站、码头办公室等公共场所,成为人们日常生活活动中不可少的必须品。由于数字集成电路的发展和石英晶体振荡器的广泛使用,是的数字时钟的精度远远查过老师钟表,钟表的数字化跟人们生产生活带来了极大的方便,而且大大的扩展了钟表原先的时钟功能。诸如整点提示、定时报警、定时广播、自动启闭路灯,定时开关烘箱、同多动力设备、甚至各种定时电气的自动启动等,所有这些,都是以钟表数字化为基础的。因此研究数字钟及扩大其应用,有着非常现实的意义。1.2 系统实用功能分析单片机模块中最常见的是数字时钟,数字时钟是一种用单片机原理实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性

8、和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。数字时钟是采用单片机原理实现对.年、月、日、周、时、分、秒,数字显示及到时提醒的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必2需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字时钟及扩

9、大其应用,有着非常现实的意义。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)、1

10、28 bytes 的随机存取数据存储器(RAM)、 32 位可编程 I/O 口线、2 个 16 位定时/计数器、6 个中断源、可编程串行 UART 通道及低功耗空闲和掉电模式,其最大的优势就是 AT89C52 提供了 8K 字节可擦写 Flash 闪速存储器空间、8 个中断源、及256*8 字节内部存储器(RAM),解决了我们对可反复擦写的 Flash 闪速存储器空间大小与中断3源的不够问题的担心。2.2.2 显示模块选择方案方案一:采用 LED 数码管显示,显示较为清楚,但是由于设计要求时钟功能比较重要,因此用如用 LED 进行显示会使得硬件电路较为复杂,且在软件实现上也较难,为实现功能带来

11、了一定的困难。方案二:采用 LCD,电路比较简单,且在软件设计上也相对简单,具有低功耗功能,能够满足设计最优的要求。因此,在设计中我采用的显示模块是 LCD 显示。2.2.3 时钟信号的选择方案方案一:直接采用单片机定时计数器提供的秒信号,使用程序实现年、月、日、周、时、分、秒计数。采用此种方案可减少芯片的使用,节约成本,实现的时间误差较小,但程序设计较为复杂。方案二:采用 DS1302 时钟芯片实现时钟, DS1302 芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,256 位的 RAM 作为数据暂存区,工作电压 2.5V5.5V 范围内,

12、2.5V 时耗电小于 300nA。且硬件电路连接较为简单,程序设计容易实现。2.3 电路设计最终方案决定综上各方案所述,对此次数字时钟的方案选定为: 采用 AT89C52 作为主控制系统; 并由其定时计数器提供时钟; LCD 作为显示电路,来实现功能。43 系统的硬件设计与实现3.1 数字钟电路设计框图LCD 动态扫描显示模块AT89C52主控制器开关调节模块晶振电路模块复位电路图 3-1 电路设计框图3.2 系统硬件概述该电路是由 AT89C52 单片机为控制核心,具有在线编程功能,低功耗,能在 3V 超低压工作;时钟电路也由 AT89C52 单片机提供,减少芯片的使用,节约成本,它可以对年

13、、月、日、周、日、时、分、秒进行计时,具有闰年补偿功能。时间显示部份采用液晶 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 是显示

14、器的控制端分别由单片机的引脚P1.0、P1.1、P1.3 进行控制。而 VDD 是作为液晶显示器的灰度调节引脚,接一变阻器来改变其显示的清晰度。图 3-3 LM016L 液晶显示器63.3.3 LCD 原理说明在实际应用中,用户很少直接设计 LCD 显示器驱动接口,一般是直接使用专用的 LCD 显示驱动器和 LCD 显示模块。其中,LCD 显示模块 LCM(Liquid Crystal Display Module)是把 LCD 显示器、背景光源、线路板和驱动集成电路等部件构成一个整体,作为一个独立的部件使用,具有功能较强、易于控制、接口简单等优点,在单片机系统中应用较多。其内部结构如图 2-

15、8 所示。LCD 显示模块只留一个接口与外部通信。显示模块通过这个接口接收显示命令和数据,并按指令和数据的要求进行显示。外部电路通过这个接口读出显示模块的工作状态和显示数据。LCD 显示模块一般带有内部显示 RAM 和字符发生器,只要输入 ASCII 码就可以进行显示。LCD 显示模块按功能显示可分为:LCD 段式显示模块、LCD 字符型显示模块、LCD 图形显示块三类。液晶显示器因其功耗低、重量轻而成为便携式应用中的主流显示技术。这里所用的字符型液晶模块是一种用 5x7 点阵图形来显示字符的液晶显示器,根据显示的容量可以分为 1 行 16 个字、2 行 16 个字、2 行 20 个字等等。液

16、晶显示有点振式和字符式两种,在这里采用字符式液晶显示器 1602 来实现显示电路的功能。LCD驱动器LCD显示器LCD控制器VSSVDDVLRSR/WED0-D7图 3-4 LCD 显示电路由于 1602 液晶显示器是本身带有驱动模块的液晶屏,它只有并口线和一些控制线,与单片机的连接有两种不同的方法,直接访问方式和间接访问方式。直接访问方式就是微处理器把液晶显示模块当作存储器或 I/O 设备直接挂在总线上,模块 8 位数据总线与微处理器的数据总线相连,用读操作 或写操作 信号与地址信号共同产生控制信号。73.3.4 开关模块说明校时电路主要靠键盘来控制。键盘是一组按键的集合。共有四个按键,分别

17、是:改变时间、增加、减少、清零。它是嵌入式计算机系统中不可缺少的外围电路。是实现人机对话的纽带,借助键盘可以向计算机输入程序、置数、逻辑操作以及写入程序和程序检测等。84 系统的软件设计4.1 程序流程框图开始初始化程序主键值检测根据主键进行散转有则主键值加一时间秒钟调整时间分钟调整时间小时调整时间周调整时间日调整时间月调整时间年调整显示周显示日显示月显示年时间显示时间显示主界面图 4-1 主程序流程4.2 LCD 的初始化与及显示程序1 LCD 的初始化void ini()/*LCD 的初始化函数9rw=0;en=0;P1=0 xff;writeCG();write_order(0 x38)

18、;/*端口写入write_order(0 x0c); /*端口写入write_order(0 x06); /*端口写入write_order(0 x01); /*端口写入2 LCD 的显示程序void open()/*定义一个 LCD 显示函数uchar num; /*定义一个无符号的字符变量 numwrite_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 写入writ

19、e_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);10for(num=0;num2;num+)/*对端口 0 x1c 写入write_order(0 x1c);delay(200);for(num=0;num1;n

20、um+)/*对端口 0 x18 写入write_order(0 x18);delay(100);write_order(0 x80+0 x53);for(num=0;opens1num!=0;num+)/*循环延时写入数据 write_date(opens1num); delay(500);5 系统调试5.1 软件调试打开程序调试软件 keil uVision2,在里面新建一个工程,命名为:数字时钟.Uv2。接着新建文件,编写相应程序。编写好的各个程序进行编译与连接。但若是在该过程中,看见我们编好的程序有错误,那么就根据他相应的提示来修改错误,直到该程序能够正确编译为止。能够正常编译的程序说明

21、没有什么问题了,此时我们在点击相关栏目,让它生成我们在硬件仿真时所需要的.HEX 文件。到此步,我们的软件调试就完成了。5.2 硬件调试打开 Proteus 7 Professional 软件,按照方案所选的电路元件来设计整体电路,线把个芯片按一定的位置放好,然后对相应的对象进行连接,连接时需仔细,以免调试时发生错误。做好之后把编程所生成的。HEX 文件加载到 AT89C52 中,运行仿真软件,查看运行效果。如果运行出错那么就根据他相应的提示来修改错误,直到仿真成功为止。1112参考文献1 边春远、王志强,MCS-51 单片机应用开发实用子程序M,人民邮电出版社.2 马忠梅主编,单片机的 C

22、语言应用程序设计M,北京航空航天大学出版社.3 李朝青主编,单片机原理及接口技术(第 3 版)M, 北京航空航天大学出版社.4 谭浩强,C 语言程序设计(第四版)M, 清华大学出版.5 马忠梅、张凯,单片机的 C 语言应用程序设计M,北京航空航天大学出版社.6 廖先芸,电子技术实践与实训M,高等教育出版社.13附录主程序:#include#define uchar unsigned char#define uint unsigned intsbit lcdrs=P35;sbit lcden=P34;sbit dula=P26;sbit wela=P27;sbit s0 =P10;sbit s1

23、 =P11;sbit s2 =P12;sbit s3 =P13;uchar code table1=2008-08-28 Wen;uchar code table2=21:31:30;uchar num,t0;char sec,minute,hour,day,week,month;uint year;void delay(uchar z) uchar x,y; for(x=z;x0;x-) for(y=110;y0;y-); /写入指令子函数void write_order(uchar order) lcdrs=0; P0=order; delay(2); lcden=1; delay(2);

24、 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

25、 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(uch

26、ar 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_or

27、der(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(

28、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 x8

29、0+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); w

30、rite_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(hou

31、r=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);

32、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);

33、 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

34、(!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) we

35、ek=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+

温馨提示

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

评论

0/150

提交评论