收藏 分销(赏)

智能电子钟(LCD显示)剖析.doc

上传人:丰**** 文档编号:4330605 上传时间:2024-09-06 格式:DOC 页数:37 大小:454.51KB
下载 相关 举报
智能电子钟(LCD显示)剖析.doc_第1页
第1页 / 共37页
智能电子钟(LCD显示)剖析.doc_第2页
第2页 / 共37页
智能电子钟(LCD显示)剖析.doc_第3页
第3页 / 共37页
智能电子钟(LCD显示)剖析.doc_第4页
第4页 / 共37页
智能电子钟(LCD显示)剖析.doc_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、课 程 设 计 课程名称 单片机原理与接口技术 题目名称 智能电子钟 学生学院 材料与能源学院 专业班级 学 号 学生姓名 指导教师 2016年06月15日广东工业大学课程设计任务书题目名称智能电子钟(LCD显示)学生学院材料与能源学院专业班级 姓 名 学 号 一、课程设计的内容用STC89C52RC单片机制作一智能电子钟:1.设计并绘制硬件电路图;2.绘制PCB板图(条件许可的话可进行PCB板的制作)并焊接好元器件;3.编写程序并将调试好的程序固化到单片机中。二、课程设计的要求与数据以STC89C52RC单片机为核心,制作一个LCD显示的智能电子钟:(1) 计时:秒、分、时、天、周、月、年。

2、(2) 自由调整时间。(3) 定时输出,可任意关断,重置。(4) 倒计时功能,最高可定时100小时。(5) 计时功能,最高可计时100小时。 (6) 计时精度:误差1秒/月(具有微调设置)。(7) 键盘采用动态扫描方式查询。所有的查询、设置功能均由矩阵键盘完成。三、课程设计应完成的工作1. 完成下载线的制作,为程序下载到单片机芯片中做好准备;2. 完成软件、硬件的设计,并进行硬件的焊接制作,并将调试成功的程序固化到单片机中,最后进行硬件与软件的调试;3. 撰写设计说明书。四、课程设计进程安排序号设计各阶段内容地点起止日期1硬件、软件设计大学城工学三号馆3176月6-8日2焊接电路板大学城工学三

3、号馆3176月9-11日3软件、硬件调试大学城工学三号馆3173月12-13日4撰写说明书宿舍3月14-15日5答辩大学城工学三号馆3173月16-17日摘要随着时代的进步和发展,单片技术已经普及到我们的生活、工作、科研等各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的LCD显示时钟的设计,时间可由键盘调整。主要用到的芯片有单片机STC89C52RC、液晶显示屏LCD1602A模块、时钟芯片DS1302模块。关键词:单片机STC89C52RC、LCD1602A模块、DS1302模块目录1 系统需要分析51.1 智能电子钟研究背景及意义51.2 系统实用功能分析52 设计要求

4、与方案52.1 设计要求52.1.1 基本要求52.1.2发挥部分52.2 系统基本方案选择52.2.1 芯片的选择52.2.2 显示模块选择方案52.2.3 时钟信号的选择方案52.3 电路设计最终方案决定53 系统硬件设计与实现53.1 智能电子钟设计框图53.2 系统硬件概述53.3 硬件电路结构设计53.3.1 单片机主控制模块的设计53.3.2 显示模块的设计53.3.3 LCD原理说明53.3.4 开关模块说明54 系统软件设计64.1程序流程框图64.2 LCD的初始化及显示程序65 系统调试65.1 软件调试65.2 硬件调试6参考文献6附录61 系统需要分析1.1 智能电子钟

5、研究背景及意义20世纪末,电子技术得到了飞速发展,在此推动下现代电子产品几乎渗透到了社会的各个领域,有力地推动和提高了社会生产力的发展和信息化程度,同时现代电子产品性能进一步提升,产品的更新迭代也越来越快。时间对人们来说是那么宝贵,工作的忙碌和繁杂易使人们忘记当前的时间。然而遇到重大事情的时候,一旦忘记时间,就会给自己和他人造成很大的麻烦。平时我们要求上班准时,约会或者召开会议必然要提及时间,火车要准时到达,航班要准时起飞,工业生产中的很多环节也需要时间来确定工序替换时刻,等等。所以说能随时知道准确的时间是我们生活中必不可少的一件事情。想知道时间,收表当然是很好的选择,但是在忙碌中,我们还需要

6、一个“助理”时不时的给我们提醒时间。所以,手表最好有一个定时系统,随时提醒忘记时间的人。最早能够定时、报时的时钟属于机械式钟表,但这种时钟收到机械结构、动力和体积的限制,在功能性以及造价上都没有办法与电子时钟相媲美。电子时钟是采用电子电路实现对时、分、秒进行数字显示的计时装置,广泛应用于个人、家庭、车站、办公室等场所,成为人们日常生活中的必需品。由于集成电路的发展和石英晶振的广泛应用,使得电子时钟的精度远远超过老式钟表,钟表的数字化跟人们生产和生活带来了极大的方便,而且大大扩展了钟表的功能。诸如整点报时、定时报警、定时广播、自动启闭路灯、定时开关烘箱、同多动力设备、甚至各种定时电器的自动启动等

7、,所有这些,都是以电子时钟为基础的。因此,研究电子时钟及其扩展应用,都有非常重要的现实意义。1.2 系统实用功能分析本文研究的数字时钟是一种利用单片机原理实现对时、分、秒计时的装置,与机械时钟相比具有更高准确性和直观性,且无机械装置,具有更长的使用寿命。其实现了对时、分、秒的准确及时、计时及定时功能。2 设计要求与方案2.1 设计要求以STC89C52RC单片机为核心,制作一个LCD显示的智能电子钟:(1) 计时:秒、分、时、天、周、月、年。(2) 自由调整时间。(3) 定时输出,可任意关断,重置。(4) 倒计时功能,最高可定时100小时。(5) 计时功能,最高可计时100小时。 (6) 计时

8、精度:误差1秒/月(具有微调设置)。(7) 键盘采用动态扫描方式查询。所有的查询、设置功能均由矩阵键盘完成。2.2 系统基本方案选择2.2.1 芯片的选择采用STC89C52,其是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门

9、狗定时器,内置4KB EEPROM, MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。2.2.2 显示模块选择采用LCD显示,电路较为简单,且在软件设计上也相对简单,功耗较低,能满足设计最优的要求。LCD1602

10、A模块集成了驱动电路和背光等,能够显示16*02(16列2行)即32个字符。2.2.3 时钟信号的选择采用DS1302时钟芯片实现时钟计时。DS1302时钟芯片是一种高性能的时钟芯片,可自动实现对秒、分、时、日、周、月、年及闰年补偿的年进行计数,精度较高,256位的RAM作为数据暂存区,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA。且硬件电路较为简单,程序设计容易实现。DS1302模块接有32.768K晶振和纽扣电池作为备用电源,可实现长时间不停地计时。2.2.4 按键选择选择4*4矩阵键盘作为功能实现和调节按键。矩阵键盘又称行列式键盘,它是用4条I/O线作为行线,4条IO线作

11、为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键个数是4*4个。这种行列式键盘结构能够有效地提高单片机系统中I/O的利用率。2.3 电路设计最终方案宗上所述,对此次智能电子钟的方案选择为:采用STC89C52SC芯片作为主控制系统并提供定时,并由DS1302模块提供时钟,LCD1602A模块作为显示时间。3 系统硬件设计与实现3.1 智能电子钟设计框图STC89C52RCLCD显示模块晶振电路复位电路时钟系统模块矩阵键盘模块3.2 系统硬件概述该电路是由STC89C52SC单片机为控制核心,具有在线编程功能,低功耗,能在3V超低工作;晶振电路外接晶振;复位电路接按键

12、复位系统;矩阵键盘由4*4行列式键盘构成;LCD显示模块由LCD1602A构成;时钟电路模块由DS1302芯片等组成。 3.3 硬件电路结构设计3.3.1 单片机主控制模块的设计图1为用proteus软件画的时钟系统原理图。3.3.2 LCD显示模块图2为LCD显示模块原理图。如图所示,时钟信号显示在LCD上,文字清晰可见而且图1 时钟原理图2 LCD1602A省电也易于控制。数据的传输采用P0口,其引脚VSS接地,VDD接VCC,RS、RW、E端分别接单片机引脚P2.0、P2.1、P2.2。而VEE作为液晶显示器的灰度调节引脚,接一变阻器来改变其显示的清晰度。3.3.3 矩阵键盘模块图3为矩

13、阵键盘模块。矩阵键盘又称行列式键盘,它是用4条I/O线作为行线,4条IO线作为列线组成的键盘,8条线接到P1口上。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键个数是4*4个。这种行列式键盘结构能够有效地提高单片机系统中I/O的利用率。矩阵键盘是嵌入式计算机系统中不可缺少的外围电路,是实现人机对话的纽带,借助键盘可以向计算机输入程序、置数、逻辑操作以及写入程序和程序检测等,可实现调试、计时、倒计时等功能。图3 矩阵键盘3.3.4 时钟系统模块图4是时钟系统模块原理图。DS1302是美国 DALLAS 公司推出的一种图4 时钟系统DS1302高性能、低功耗的实时 时钟芯片,附加31字

14、节静态 RAM,采用 SPI 三线接口与 CPU 进行 同步通信,并可采用突发方式一次传送多个字节的时钟信号和 RAM 数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与 31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5 5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电 方式,提供了对后背电源进行涓细电流充电的能力。DS1302的RST端接P2.5口,SCLK端接P2.6口,I/O端接P2.7口,VCC1端接备用电源纽扣电池,VCC2接5.0V电源,X1、X2接32.768K晶振。3.3.5 蜂鸣器模块图5 蜂鸣器模块 蜂鸣器是一种一体化结构的电子讯响器,

15、采用直流电压供电,广泛应用于电子产品中作为发声器件。蜂鸣器I/O端接到P2.4口上,用三极管驱动,给低电平就能持续发声。3.3.6 复位电路图6 复位电路图6为复位电路。只要按下按钮,给单片机RST口加上超过2个机器周期的高电平,就能把单片机复位。3.3.7 晶振电路图7为晶振电路。STC19C51RC单片机时钟信号由内部时钟方式产生,在XTAL1和XTAL2引脚外接晶振。图中,电容C1和C2的作用是稳定频率和快速起振,电容值22pF。晶振CXY的振荡频率为11.0592Hz。图7 晶振电路开始初始化定时按键判断?读取DS1302时间调整时间在LCD上显示时间调时键定时键无4 系统软件设计4.

16、1程序流程框图4.2 程序具体程序见附录。5 系统调试5.1 软件调试打开程序调试软件Keil uVision4,在里面新建一个工程,命名为:clock。接着新建文件,编写相应程序。编写好的程序进行编译。如有错误,按照提示修改错误,直到程序编译通过。5.2 硬件调试用proteus画好电路原理图,加上Keil uVision4生成的HEX文件进行仿真,并修改程序逻辑错误,直到仿真无错误。参考文献1李朝青.单片机原理及接口技术(第3版).北京航天航空大学出版社,2005 年10月.2.求是科技.单片机典型外围器件及应用实例.北京:人民邮电出版社,2006年2月.3谭浩强.C语言程序设计(第二版)

17、.北京:清华大学出版社,1999年12月.4.阎石.数字电子技术基础(第五版).高等教育出版社,1983年4月.附录#include#define uchar unsigned char#define uint unsigned intsbit rs=P20;sbit rw=P21;sbit e=P22; /1602sbit rst=P25;sbit sclk=P26;sbit io=P27; /1302sbit bee=P24; /蜂鸣器 uchar table= 2016-06-12 MON; /日期格式uchar table1= 00:00:00 A; /时间格式uchar time=1

18、1,1,11,11,00,00,00; /年周月日时分秒uchar code write_add=0x8c,0x8a,0x88,0x86,0x84,0x82,0x80;/1302写数据地址uchar code read_add=0x8d,0x8b,0x89,0x87,0x85,0x83,0x81; /1302读数据地址uchar n1,n2,y1,y2,r1,r2,s1,s2,f1,f2,m1,m2,xq;uchar key;/矩阵键盘数值uchar sp,sn1,sn2;void delay(uint z) /延时函数uint i,j;for(i=z;i0;i-)for(j=110;j0;j

19、-);void write_com(uchar com)/写1602命令rs=0;rw=0;e=0;P0=com;delay(5);e=1;delay(5);e=0;void write_data(uchar dat)/写1602数据rs=1;rw=0;e=0;P0=dat;delay(5);e=1;delay(5);e=0;void start() /1602初始化write_com(0x01);/清屏write_com(0x38);/16*2显示,5*7点阵,8位数据write_com(0x0c);/显示开,光标关write_com(0x06);/显示方式:AC加一,光标右移一格void

20、show_init()/在1602显示时间格式uchar num;write_com(0x80);/第一行显示数据for(num=0;num16;num+)write_data(tablenum);write_com(0x80+0x40);/第二行显示for(num=0;num0;i-)io=dat&0x01;sclk=1;sclk=0;dat=dat1;void write_1302(uchar add,uchar dat)/按地址向1302写数据rst=0;sclk=0;rst=1;write_byte(add);write_byte(dat);sclk=1;rst=0;unsigned

21、char read(uchar add)/按地址读取1302数据uchar i,value=0x00;rst=0;sclk=0;rst=1;write_byte(add);for(i=0;i1;sclk=0;if(io) value=value|0x80;sclk=1;sclk=1;rst=0;return(value);void time_pors()/取时间函数m1=time6/16;/秒m2=time6%16;f1=time5/16;/分f2=time5%16;s1=time4/16;/时s2=time4%16;r1=time3/16;/日r2=time3%16;y1=time2/16;

22、/月y2=time2%16;n1=time0/16;/年n2=time0%16;xq=time1;/星期void show_date()/显示日期write_com(0x83);write_data(0x30+n1);write_data(0x30+n2);write_com(0x86);write_data(0x30+y1);write_data(0x30+y2);write_com(0x89);write_data(0x30+r1);write_data(0x30+r2);void show_xq()/显示星期write_com(0x8d);if(time1=1)/SUNwrite_dat

23、a(0x53);write_data(0x55);write_data(0x4e);if(time1=2)/MONwrite_data(0x4d);write_data(0x4f);write_data(0x4e);if(time1=3)/TUEwrite_data(0x54);write_data(0x55);write_data(0x45);if(time1=4)/WEDwrite_data(0x57);write_data(0x45);write_data(0x44);if(time1=5)/THUwrite_data(0x54);write_data(0x48);write_data(

24、0x55);if(time1=6)/FRIwrite_data(0x46);write_data(0x52);write_data(0x49);if(time1=7)/SATwrite_data(0x53);write_data(0x41);write_data(0x54);void keyscan()/键盘扫描函数uchar temp;P1=0xfe;/第一行delay(5);temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(5);temp=temp&0xf0;if(temp!=0xf0)temp=P1;switch(temp)case 0x7e:key=

25、10;break;case 0xbe:key=3;break;case 0xde:key=2;break;case 0xee:key=1;break;while(P1!=0xfe)P1=0xfe;delay(5);P1=0xfd;/第二行delay(5);temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(5);temp=temp&0xf0;if(temp!=0xf0)temp=P1;switch(temp)case 0x7d:key=11;break;case 0xbd:key=6;break;case 0xdd:key=5;break;case 0xed:

26、key=4;break;while(P1!=0xfd)P1=0xfd;delay(5);P1=0xfb;/第三行delay(5);temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(5);temp=temp&0xf0;if(temp!=0xf0)temp=P1;switch(temp)case 0x7b:key=12;break;case 0xbb:key=9;break;case 0xdb:key=8;break;case 0xeb:key=7;break;while(P1!=0xfb)P1=0xfb;delay(5);P1=0xf7;/第四行delay(5

27、);temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(5);temp=temp&0xf0;if(temp!=0xf0)temp=P1;switch(temp)case 0x77:key=15;break;case 0xb7:key=14;break;case 0xd7:key=0;break;case 0xe7:key=13;break;while(P1!=0xf7)P1=0xf7;delay(5);void show_time()/显示时间write_com(0x82+0x40);write_data(0x30+s1);write_data(0x30+s2

28、);write_com(0x85+0x40);write_data(0x30+f1);write_data(0x30+f2);write_com(0x88+0x40);write_data(0x30+m1);write_data(0x30+m2);void choose1()/指定位置sn1+;switch(sn1)case 1:write_com(0x84);break;/年个位case 2:write_com(0x86);break; /月十位case 3:write_com(0x87);break; /月个位case 4:write_com(0x89);break; /日十位case 5

29、:write_com(0x8a);break; /日个位case 6:write_com(0x8d);break; /星期case 7:write_com(0x82+0x40);break; /时十位case 8:write_com(0x83+0x40);break; /时个位case 9:write_com(0x85+0x40);break; /分十位case 10:write_com(0x86+0x40);break; /分个位case 11:write_com(0x88+0x40);break; /秒十位case 12:write_com(0x89+0x40);break; /秒个位ca

30、se 13:write_com(0x83);sn1=0;break;/年十位void change_num()/改变数字 switch(sn1) case 0:n1=key;write_data(0x30+n1);write_com(0x83);break;case 1:n2=key;write_data(0x30+n2);write_com(0x84);break;case 2:if(key2)y1=key;write_data(0x30+y1);write_com(0x86);break;case 3:if(y1=0)y2=key;write_data(0x30+y2);if(y1=1&k

31、ey3)y2=key;write_data(0x30+y2);write_com(0x87);break;case 4:if(key4)r1=key;write_data(0x30+r1);write_com(0x89);break;case 5:if(r13)r2=key;write_data(0x30+r2);if(r1=3&key2)r2=key;write_data(0x30+r2);write_com(0x8a);break;case 6:if(key8)xq=key;write_data(0x30+xq);write_com(0x8d);break;case 7:if(key3)s

32、1=key;write_data(0x30+s1);write_com(0x82+0x40);break;case 8:if(s12)s2=key;write_data(0x30+s2);if(s1=2&key5)s2=key;write_data(0x30+s2);write_com(0x83+0x40);break;case 9:if(key6)f1=key;write_data(0x30+f1);write_com(0x85+0x40);break;case 10:f2=key;write_data(0x30+f2);write_com(0x86+0x40);break;case 11:

33、if(key6)m1=key;write_data(0x30+m1);write_com(0x88+0x40);break;case 12:m2=key;write_data(0x30+m2);write_com(0x89+0x40);break; void change_1302()/修改1302时间time6=m1*16+m2;time5=f1*16+f2;time4=s1*16+s2;time3=r1*16+r2;time2=y1*16+y2;time1=xq;time0=n1*16+n2;write_1302(0x8e,0x00);/去除写保护write_1302(0x80,0x00)

34、;/时间停止write_1302(0x8c,time0);/写年write_1302(0x8a,time1);/写星期write_1302(0x88,time2);/写月write_1302(0x86,time3);/写日write_1302(0x84,time4);/写时write_1302(0x82,time5);/写分write_1302(0x80,time6);/写秒write_1302(0x8e,0x80);/加上写保护write_com(0x0c); /关光标void choose2()/指定定时位置sn2+;switch(sn2)case 1:write_com(0x83+0x4

35、0);break;case 2:write_com(0x85+0x40);break;case 3:write_com(0x86+0x40);break;case 4:write_com(0x88+0x40);break;case 5:write_com(0x89+0x40);break;case 6:write_com(0x82+0x40);sn2=0;break; void change_num2()/改变数字 switch(sn2) case 0:s1=key;write_data(0x30+s1);write_com(0x82+0x40);break;case 1:s2=key;wri

36、te_data(0x30+s2);write_com(0x83+0x40);break;case 2:if(key6)f1=key;write_data(0x30+f1);write_com(0x85+0x40);break;case 3:f2=key;write_data(0x30+f2);write_com(0x86+0x40);break;case 4:if(key0) m2-;if(m2=0&(m1!=0|f2!=0|f1!=0|s2!=0|s1!=0) m2=9;if(m2=9&m10)m1-;if(m2=9&m1=0&(f2!=0|f1!=0|s2!=0|s1!=0) m1=5;i

37、f(m2=9&m1=5&f20) f2-;if(m2=9&m1=5&f2=0&(f1!=0|s2!=0|s1!=0) f2=9;if(m2=9&m1=5&f2=9&f10) f1-;if(m2=9&m1=5&f2=9&f1=0&(s2!=0|s1!=0) f1=5;if(m2=9&m1=5&f2=9&f1=5&s20) s2-;if(m2=9&m1=5&f2=9&f1=5&s2=0&s1!=0) s2=9;if(m2=9&m1=5&f2=9&f1=5&s2=9&s10) s1-;void mat1()/加1sdelay(900);if(m29) m2+;if(m2=9) show_clock(

38、);delay(1000);m2=0;if(m2=0&m16)m1+;if(m2=0&m1=5) m1=0;if(m2=0&m1=0&f29) f2+;if(m2=0&m1=5&f2=9) f2=0;if(m2=0&m1=0&f2=0&f16) f1+;if(m2=0&m1=5&f2=9&f1=5) f1=0;if(m2=0&m1=0&f2=0&f1=0&s29) s2+;if(m2=0&m1=5&f2=9&f1=5&s2=9) s2=0;if(m2=0&m1=0&f2=0&f1=0&s2=0&s19) s1+;void clock()/开始倒计时uchar sk3=2;write_com(0x0c); /关光标show_clock(); /展示定时时间while(sk3=2)uchar i;mat();/减1sshow_clock();keyscan();if(key=11) sk3=1;key=20;while(sk3=1) /按住11键(即B键)超过1s即可暂停计时

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服