基于单片机设计的万历_第1页
基于单片机设计的万历_第2页
基于单片机设计的万历_第3页
基于单片机设计的万历_第4页
基于单片机设计的万历_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、辽东学院信息技术学院单片机原理与接口技术课程设计报告辽东学院信息技术学院单片机原理与接口技术课程设计报告电子万年历的设计学生姓名: 学 号: 班 级: B1106班 专 业: 电子信息工程 指导教师: 2014年07月【摘要】随着时代的进步,越来越多的电子厂品趋向于低成本,高性能,耐用性好的方向发展。特别是趋向于自动化控制的方向走。89C51作为控制芯片具有强大的功能,并且简单易于操作,安全性与稳定性较高,价格便宜,适合中小型电子厂品开发中的控制器。这款课程设计的万年历由89C51,BUTTON,液晶屏等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十

2、秒为一分钟,六十分钟为一小时,满二十四小时为一天。1602做为显示电路不仅操作上简单许多,而且使用1602能在很大程度上是电路图尽量简化,便于操作与错误的检修。基于89c51万年历的设计,利用了单片机内部的一个自带定时/计数器来实现定时功能,并通过内部程序,实现对时分秒,年月日这几个输出数值的自增,并且通过编写程序,实现通过键盘控制时分秒,年月日大小的调整,这是必要的功能。最后通过1602液晶显示电路将日期、时间显示在其上。这样的万年历比较精准,其主要误差来源与晶振的误差,即使是这样,他的误差也只是微妙级别,对于日常生活中的时间计数是足够的。关键词:单片机、 万年历 、键盘控制目录绪论11系统

3、工作原理11.1 功能说明11.2基本原理11.3电路总体原理框图21.4实现时钟计时的基本方法31.5 总体方案32系统硬件设计52.1 硬件电路设计原则62.2 单片机的最小系统62.3 LCD1602显示模块设计72.4 时钟显示校正电路83 系统软件设计83.1软件设计分析93.2 中断程序114系统的调试115 结论12参考文献12附录A 源程序13附录B 系统原理图27绪论 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。随着

4、科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。现在的万年历不仅可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。该电路采用STC89C51单片机作为核心,功耗小,能在5V的低压工作,电压可选用35V电压供电。综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。本电路为实现电子万年历的功能,采用单片机STC89C51,辅助以必要的外围电路,用C语言编写程序,并进行模块化设计而成的电子万年历系统

5、,有功能稳定,精确度高和可调的特点。1系统工作原理1.1 功能说明1、计时功能:准确计时,以数字形式显示时、分、秒的时间。2、日期功能:年以12个月计时形成,月以28(或29或30或31)日计时形成,日以24小时计时形式,分秒计时为60进位。 3、校正时间功能:能随意设定走时时间。4、闹钟功能:一旦走时到该时间,能以声形式告警提示。 5、秒表功能:按键控制启动、暂停、清零。 1.2基本原理它是利用单片机的内部的定时/计数器工作与定时方式,对机器周期计数形成基准时间(如10ms)然后用另外一个计数器或软件计数的形式对基准时间进行计数形成秒(如对10ms计数100次),“秒”计数60次“分”,“分

6、”计数60次形成“时”,“时”计数24次形成“日”,“日”计数为28(或29或30或31)次形成“月”,“月”计数12次形成“年”,年计数999次就清零,然后通过译码器,数码管把他们的内容在相应的位置显示出来。在具体的设计时定时器采用中断方式工作,对时钟的形成在终中断序中实现,在主程序只是对定时/计数器的定义初始化,调用显示程序和控制程序的初始化。另外为了使用的方便,也设计了按键,可以通过按键对时分秒进行调整,这样程序就加了按键程序。1.3电路总体原理框图本次设计时钟电路,使用了ATC89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来

7、调整时钟的年、月、日、时、分、秒,同时使用汇编语言程序来控制整个时钟显示,使得编程变得更容易,这样通过三个模块:键盘、芯片、LCD液晶屏显示即可满足设计要求。总设计原理框图如下图所示:1.4实现时钟计时的基本方法利用STC系列单片机的可编程定时/计数器、中断系统来实现时钟计数。(1) 计数初值计算:把定时器设为工作方式1,定时时间为50ms,则计数溢出20次即得时钟计时最小单位秒,而100次计数可用软件方法实现。假设使用T/C0,方式1,50ms定时,fosc=12MHz。则初值X满足(216-X)×1/12MHz×12s =50000sX=1553600111100101

8、100003CB0H(2) 采用中断方式进行溢出次数累计,计满20次为秒计时(1秒);(3) 从秒到分、从分到时、从时到日、从日到月、从月到年的计时是通过累加和数值比较实现。1.5总体方案1.5.1计时方案利用STC89C51单片机内部的定时/计数器进行中断时,配合软件延时实现年、月、日、时、分、秒的计时。该方案节省硬件成本,且能使读者在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,对单片机的指令系统能有更深入的了解,从而对学好单片机技术这门课程起到一定的作用。1.5.2控制方案STC89C51的P0口和P1口外接由八个LED数码管(LED8LED1)构成的显示器,用P0口作LED的段

9、码输出口,P1口作八个LED数码管的位控输出线,P3口外接五个按键A、B、C、D、E构成键盘电路。STC89C51 是一种低功耗,高性能的CMOS 8位微型计算机。它带有8K Flash 可编程和擦除的只读存储器(EPROM),该器件采用ATMEL的高密度非易失性存储器技术制造,与工业上标准的80C51和80C52的指令系统及引脚兼容,片内Flash 集成在一个芯片上,可用与解决复杂的问题,且成本较低。简易电子钟的功能不复杂,采用其现有的I/O便可完成,所以本设计中采用此的设计方案。2 设计2.1 硬件电路设计原则在性价比满足应用系统要求的情况下,选择更可靠,更熟悉的单片机缩短研制周期。尽可能

10、选择自己较为熟悉的应用电路,以提高系统的可靠性。单片机内部的资源与外部的扩展资源应在满足系统设计的基础上留有余地,为进一步的升级和扩展提供方便。应充分的结合软件方案考虑硬件的结构,通常硬件功能较完善,其相应的软件程序就简单,但硬件的成本较高,而功能较低,其相应的软件就复杂,其实际常用软件代替硬件来降低成本。整个系统相关的器件尽可能的做到性能相匹配。充分的考虑系统的抗干扰性,如具有抗干扰的单片机并充分的帅选芯片与器件,在电路中采取隔离或屏蔽的措施等。2.2 单片机的最小系统2.2 .1芯片介绍MCS-51单片机是标准的40引脚双列直插式集成电路芯片,其各引脚功能如下:VCC:+5V电源。VSS:

11、接地。RST:复位信号。当输入的复位信号延续两个机器周期以上的高电平时即为有效,用完成单片机的复位初始化操作。XTAL1和XTAL2:外接晶体引线端。当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。P0口:P0口为一个8位漏极开路双向I/O口,当作输出口使用时,必须接上拉电阻才能有高电平输出;当作输入口使用时,必须先向电路中的锁存器写入“1”,使FET截止,以避免锁存器为“0”状态时对引脚读入的干扰。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,它不再需要多路转接电路MUX;因此它作为输出口使用时,无需再外接上拉电阻,当作为输入口

12、使用时,同样也需先向其锁存器写“1”,使输出驱动电路的FET截止。P2口:P2口电路比P1口电路多了一个多路转接电路MUX,这又正好与P0口一样。P2口可以作为通用的I/O口使用,这时多路转接电路开关倒向锁丰存器Q端。P3口:P3口特点在于,为适应引脚信号第二功能的需要,增加了第二功能控制逻辑。当作为I/O口使用时,第二功能信号引线应保持高电平,与非门开通,以维持从锁存器到输出端数据输出通路的畅通。当输出第二功能信号时,该位应应置“1”,使与非门对第二功能信号的输出是畅通的,从而实现第二功能信号的输出,具体第二功能如表1所示。表1 P3端口引脚兼用功能表P3引脚兼用功能P3.0串行通讯输入(R

13、XD)P3.1串行通讯输出(TXD)P3.2外部中断0( INT0)P3.3外部中断1(INT1)P3.4定时器0输入(T0)P3.5定时器1输入(T1)P3.6外部数据存储器写选通WRP3.7外部数据存储器写选通RD2.2 .1晶振电路下图所示为时钟电路原理图,在51单片机内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。2.2 .2复位电路下图所示为复位电路原理图,任何单片机在工作之前都要

14、进行复位的过程。只要在单片机的RST引脚上加上高电平(或低电平)持续大概5ms,直至系统电源稳定后,撤销复位信号。2.3LCD1602显示模块设计2.3.1主要技术参数显示容量:16×2 个字符 芯片工作电压:4.55.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V 字符尺寸:2.95×4.35(W×H)mm 2.3.1引脚功能说明1602LCD 采用标准的 14脚(无背光)或 16脚(带背光)接口,各引脚接口说明如下表2所示: 编号符号引脚说明 编号 符号 引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4

15、数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据 15BLA背光源正极8 D1 数据16BLK背光源负极2.4时钟显示校正电路本设计利用按键开关来校正时钟显示的数字。当按钮按下时,将在相应的端口输入一个低电平,通过相应的程序来改变时钟显示。其中菜单按键开关用来选择要修改的数字;下调按键用来增加所选数字的数值;上调按键用来减小所选数字的数值;退出按键是退出校正电路。3 系统软件设计3.1 软件设计分析在编程上,首先进行了初始化,定义程序的的入口地址以及中断的入口地址,在主程序开始定义了一组固定单元用来储存计数的时.分.秒,在显示初值之后,进入主

16、循环。在主程序中,对不同的按键进行扫描,实现秒表,时间调整,复位清零等功能,系统总流程图如下图:3.2 中断程序定时器中断时是先检测1秒是否到,1秒如果到,秒单元就加1;如果没到,就检测1分钟是否到,1分钟如果到,分单元就加1;如果没到,就检测1小时是否到,1小时如果到,时单元就加1,如果没到,就显示时间。中断流程图如下:4系统的调试首先用万用表对已经焊接好的电路进行测试,以确定电路没有断路或者短路的情况。在检查的过程中,因为焊接技术不够好,导致出现了断路的问题,重新焊接断路的地方,再用万用表测试,问题得到了解决。接下来使用Keil软件对程序进行测试,发现程序没有错误。将程序拷入芯片中,出现预

17、期现象。5 结论两周的课程设计已经结束了,我有很多的心得体会。关于单片机,我的理论知识掌握的不够好,再加上已经很久没有复习了,刚拿到题目时,不知道从哪里入手,后来通过对书本的回顾,加深了对单片机知识的记忆。因为课堂的教学考虑到大多数同学的需求,主要强调“基本”基本知识、基本理论、基本方法、基本技能。而这次设计正是为我们提供了一个深入学习、探索的机会,成为课堂教学的有益补充。我们正面临就业问题,这次课设给了我们一个机会去试验。单片机理论的学习是为课程的设计作准备的,但有时学习的理论也解决不了实践中的问题。实践中获得的知识能让我对单片机的知识有更好的认识和理解。虽然这次的课程设计我参考了一些文献资

18、料,没有做到创新,但在对程序的读写过程中我明白了许多。这次课程设计的最大收获是只有把理论用到实践中我们才能真正掌握好所学知识。参考文献1 谢自美电子线路设计·实验·测试M武汉:华中理工大学出版社,1992.2 何立民单片机应用系统设计M北京:北京航空航天大学出版社,1993.3 楼然笛单片机开发M北京:人民邮电出版社,1994. 4 付家才单片机控制工程实践技术M北京:化学工业出版社 2004.3. 5 李光才单片机课程设计实例指导M北京:北京航空航天大学出版社 2004.6 朱定华单片机原理及接口技术实验M北京:北方交通大学出版社2002.11.7 刘湘涛江世明单片机原理

19、与应用M. 北京:电子工业出版社,2006.附录A 源程序#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longuchar code table="2014:06:19 000"uchar code table1=" 22:22:10 21:48"uchar code table2="0123456789"sbit lcd_rs =P25;/定义LCD端口sbit lcd_rw=P26

20、;sbit lcd_en=P27;sbit S1=P34;/菜单键sbit S2=P35;/加键sbit S3=P36;/减键sbit S4=P37;/退出菜单键sbit ss=P33;/秒表键,第一次启动,第二次暂停,第三次清零sbit FMQ=P20;void yue31();/31天的月份函数 void yue30();/30天的月份函数void yue29();/29天的月份函数void yue28();/28天的月份函数void Timing(); /闹钟设置void miaobiao();/秒表函数uchar count, k1num;/声明秒的变量char shi,fen,mia

21、o;/声明时分秒uint nian, yue,ri,ji=0,mm=0;/声明年月日,秒表计数,和秒表按键次数uchar f,s;/定时器/void delay(uchar z)/延时函数 uchar x,y; for(x=z;x>0;x-) for(y=110;y>0;y-);void write_com(uchar com)/lcd写指令 lcd_rs=0; lcd_rw=0; lcd_en=0; P0=com; delay(5); lcd_en=1; delay(5); lcd_en=0;void write_data(uchar date)/lcd写数据 lcd_rs=1;

22、 lcd_rw=0; lcd_en=0; P0=date; delay(5); lcd_en=1; delay(5); lcd_en=0;void miaobiao(char kk)/秒表函数 uchar biao_bai,biao_shi,biao_ge; biao_bai=kk/100;biao_shi=kk%100/10;biao_ge=kk%100%10;write_com(0x80+13); write_data(table2biao_bai);write_com(0x80+14);write_data(table2biao_shi);write_com(0x80+15);write

23、_data(table2biao_ge);write_com(0x0c);void write_fsm(uchar add,uchar date)/计算时分秒位 uchar shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_data(0x30+shi); write_data(0x30+ge);void write_nyr(uchar add,uchar date)/计算月日位 uint shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x00+add); write

24、_data(0x30+shi); write_data(0x30+ge);void write_nian(uchar add,uchar date)/计算年位,年是百位 uint bai,shi,ge; bai=date/100%10; shi=date/10; ge=date%10; write_com(0x80+0x00+add); write_data(0x30+bai); write_data(0x30+shi); write_data(0x30+ge);void jiaxian()/设置键盘加显 if(k1num!=0) if(S2=0) delay(10); if(S2=0) wh

25、ile(!S2);/松手检测if(k1num=1) miao+; if(miao=60) miao=0; write_fsm(8,miao);/write_com(0x0e); write_com(0x80+0x40+8); if(k1num=2) fen+; if(fen=60) fen=0; write_fsm(5,fen); write_com(0x80+0x40+5); if(k1num=3) shi+; if(shi=24) shi=0; write_fsm(2,shi); write_com(0x80+0x40+2); if(k1num=4) ri+; if(ri=31) ri=1

26、; write_nyr(8,ri); write_com(0x80+0x00+8); if(k1num=5) yue+; if(yue>12) yue=1; write_nyr(5,yue); write_com(0x80+0x00+5); if(k1num=6) nian+; if(nian=90) nian=0; write_nian(1,nian); write_com(0x80+0x00+1); if(k1num=7) s+; if(s=24)s=0; write_fsm(11,s); write_com(0x80+0x40+11); if(k1num=8) f+; if(f=5

27、9)f=0; write_fsm(14,f); write_com(0x80+0x40+14); void jianxian()/设置键盘减显 if(k1num!=0) if(S3=0)/K3设置 delay(10); if(S3=0) while(!S3); if(k1num=1) miao-; if(miao=-1) miao=59; write_fsm(8,miao); write_com(0x80+0x40+8); if(k1num=2) delay(5); fen-; if(fen=-1) fen=59; write_fsm(5,fen); write_com(0x80+0x40+5

28、); if(k1num=3) shi-; if(shi=-1) shi=23; write_fsm(2,shi); write_com(0x80+0x40+2); if(k1num=4) ri-; if(ri<1) ri=31; write_nyr(8,ri); write_com(0x80+0x00+8); if(k1num=5) yue-; if(yue<1) yue=12; write_nyr(5,yue); write_com(0x80+0x00+5);if(k1num=6) nian-; if(nian=0) nian=90; write_nian(1,nian); wr

29、ite_com(0x80+0x00+1); if(k1num=7) s-; if(s=0)s=23; write_fsm(11,s); write_com(0x80+0x40+11); if(k1num=8) f-; if(f=-1) f=59; write_fsm(14,f); write_com(0x80+0x40+14); void keyk4()/S4是退出菜单键 if(S4=0) delay(5); if(S4=0) TR0=1; while(!S4); k1num=0; write_com(0x0c);/开显示,不显示光标,光标不闪烁 void keyk1()/菜单光标设置if(S

30、1=0) delay(10); if(S1=0) while(!S1); k1num+; TR0=0; /关定时中断 if(k1num=1) write_com(0x80+0x40+8);write_com(0x0f);/开显示,显示光标,光标闪烁 if(k1num=2) write_com(0x80+0x40+5);write_com(0x0f); if(k1num=3) write_com(0x80+0x40+2); write_com(0x0f); if(k1num=4) write_com(0x80+0x00+8);write_com(0x0f); if(k1num=5) write_

31、com(0x80+0x00+5);write_com(0x0f); if(k1num=6) write_com(0x80+0x00+1);write_com(0x0f); if(k1num=7) write_com(0x80+0x40+11); write_com(0x0f); if(k1num=8) write_com(0x80+0x40+14); write_com(0x0f); jiaxian(); jianxian(); keyk4();void init()/启动 LCD初始化数据 uchar num; lcd_rs=0; lcd_en=0; shi=0; fen=0; miao=0

32、; nian=0000; yue=7; ri=1; s=21; f=48; write_com(0x38);/不监察忙信号 write_com(0x0f);/显示开光标设置 write_com(0x06);/显示光标移动设置 write_com(0x01);/显示清屏 write_com(0x80);/数据指针 write_com(0x80+0x00);for(num=0;num<16;num+)/延时15ms write_data(tablenum);/年月日的数据延时 delay(5); write_com(0x80+0x40); for(num=0;num<16;num+) write_data(table1num);/时的延时 delay(5); TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%2

温馨提示

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

评论

0/150

提交评论