基于51单片机数字时钟 课程设计论文.docx
《基于51单片机数字时钟 课程设计论文.docx》由会员分享,可在线阅读,更多相关《基于51单片机数字时钟 课程设计论文.docx(32页珍藏版)》请在冰点文库上搜索。
![基于51单片机数字时钟 课程设计论文.docx](https://file1.bingdoc.com/fileroot1/2023-6/11/d64b1828-856a-44db-ae2b-cf2a016de18c/d64b1828-856a-44db-ae2b-cf2a016de18c1.gif)
基于51单片机数字时钟课程设计论文
单片机设计与制作技术报告
同组姓名:
吕正春.葛文青.季开伟.
李治.刘啸.单媛媛.高田田
班级:
08电信转本1班
题目:
电子时钟
任课教师:
谢军
2011年12月16日
设计主要内容和完成功能
本文介绍了一款多功能数字时钟系统的软件设计。
该系统能够显示当前日期、时间,并且具有日期、时间设置等功能。
该系统采用AT89S52单片机,利用液晶显示器LCD1602显示数字时钟的结果。
本系统的软件设计使用C语言进行编程,利用Keil软件编程环境对源程序进行编译。
系统的软件程序主要包括主程序LCD1602显示程序、日期时间调整等子程序的设计。
该系统具有友好的用户界面、操作简单、性能稳定。
该数字时钟系统能够长期、连续、可靠、稳定地工作,同时系统还具有功耗低等特点,便于携带、使用方便。
1设计方案论证
1.1编程语言方案论证
1.1.1汇编语言
汇编语言(AssemblyLanguage)是面向机器的程序设计语言。
在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。
这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。
于是汇编语言亦称为符号语言。
使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。
汇编程序把汇编语言翻译成机器语言的过程称为汇编。
汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。
但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,汇编语言直接同计算机的底层软件甚至硬件进行交互,它具有如下一些优点:
(1)能够直接访问与硬件相关的存储器或I/O端口。
(2)能够不受编译器的限制,对生成的二进制代码进行完全的控制。
(3)能够对关键代码进行更准确的控制,避免因线程共同访问或者硬件设
备共享引起的死锁。
(4)能够根据特定的应用对代码做最佳的优化,提高运行速度。
(5)能够最大限度地发挥硬件的功能。
同时还应该认识到,汇编语言是一种层次非常低的语言,它仅仅高于直接手工编写二进制的机器指令码,但是不可避免地也存在一些缺点:
(1)编写的代码非常难懂,不好维护。
(2)很容易产生错误,难于调试。
(3)只能针对特定的体系结构和处理器进行优化。
(4)开发效率很低,时间长且单调。
1.1.2C语言
C语言是CombinedLanguage(组合语言)的中英混合简称。
是一种计算机程序设计语言。
它既具有高级语言的特点,又具有汇编语言的特点。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,归纳起来C语言具有下列特点:
(1)C是中级语言。
它把高级语言的基本结构和语句与低级语言的实用性结合起来。
C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
(2)C是结构式语言。
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,使程序完全结构化。
(3)C语言功能齐全。
具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。
另外C语言也具有强大的图形功能,支持多种显示器和驱动器。
而且计算功能、逻辑判断功能也比较强大。
(4)C语言适用范围大。
适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。
通过以上两种语言的比较,可以看出,C语言要优于汇编语言,编写时连贯性好,容易理解,而且在修改过程中可以很快发现问题所在,修改简便。
本次设计选用C语言作为编程语言。
1.2显示方式方案论证
1.2.1利用LED数码管显示结果
数码管是一种半导体发光器件,其基本单元是发光二极管。
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示),七段数码管是指每只数码管由7条LED组成,使用时,接通相对应的数段,则可得到0~9一系列数字;按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
LED数码管的主要特点如下:
(1)能在低电压、小电流条件下驱动发光,能与CMOS、ITL电路兼容。
(2)发光响应时间极短(<0.1µs),高频特性好,单色性好,亮度高。
(3)体积小,重量轻,抗冲击性能好。
(4)寿命长,使用寿命在10万小时以上,甚至可达100万小时,成本低。
1.2.2利用LCD液晶显示结果
液晶是介于固态和液态之间的晶状物质,它兼有液体的流动性和晶体的光学特性。
液晶显示器(LCD)自20世纪60年代末问世以来,其优异的显示性能决定了它在显示领域具有光明的发展前景。
在人类生活各显示领域已经得到了广泛的应用。
现已成为应用非常广泛的一种平板型显示器件。
其功能特点:
(1)液晶显示器属于被动发光型显示器件,它本身不发光,只能反射或透
射外界光线,因此环境亮度愈高,显示愈清晰。
其亮暗对比度可达100:
1。
(2)驱动电压低(一般为3V—6V),驱动电流小,微功耗,能够用CMOS、
TTL电路直接驱动。
(3)必须采用交流驱动方式,驱动电压波形为不含直流分量的方波或其他
较复杂波形,频率约30Hz—300Hz。
(4)体积小、重量轻,像素尺寸小,分辨率高。
颜色分单色(黑白)、彩
色两种。
通过以上两种显示器件的比较,LCD液晶显示要优于LED数码管,LCD驱动电压低、驱动电流小,微功耗,显示效果直观,而且被动显示(无眩光,不刺激人眼,不会引起眼睛疲劳),显示信息量大(因为像素可以做得很小)。
故对比之下本次设计选用LCD液晶显示作为显示器件。
1.3系统仿真方式方案论证
1.3.1利用Proteus软件仿真实现
Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路。
Proteus是电子技术工程师,电子设计专业带来很大帮助的软件。
单片机、数/模电路等仿真,还具有示波器器等虚拟软件。
是一款仿真和分析功能强大的软件。
Proteus实现了单片机仿真和SPICE电路仿真相结合,支持AVR/PIC/8051/52主流单片机系统的仿真,有强大的原理图绘制功能。
其功能特点如下:
(1)原理图布局;
(2)PCB自动或人工布线;
(3)SPICE电路仿真。
Proteus革命性的特点:
(1)C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪
器,如示波器、逻辑分析仪、信号发生器等。
(2)目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12
系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
(3)支持大量的存储器和外围芯片。
上编程,再配合显示及输出,能看到运行后输入输出的效果。
配合系统配
置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。
1.3.2手工焊接电路板
焊接是一门科学,他的原理是通过加热的烙铁将固态焊锡丝加热熔化,再借助于助焊剂的作用,使其流入被焊金属之间,待冷却后形成牢固可靠的焊接点。
当焊料为锡铅合金焊接面为铜时,焊料先对焊接表面产生润湿,伴随着润湿现象的发生,焊料逐渐向金属铜扩散,在焊料与金属铜的接触面形成附着层,使两则牢固的结合起来。
所以焊锡是通过润湿、扩散和冶金结合这三个物理,化学过程来完成的
经过对Proteus软件仿真和手工焊接的对比,虽然Proteus软件仿真在应用范围上比较广泛,实现的功能也很强大,但我认为手工焊接才能正真锻炼自己的动手动脑能力,也使自己在以前的实习中学到的焊接技术得到更进一步的提升,故本次设计选用手工焊接电路板作为最终实现方案。
2系统硬件设计
2.1系统硬件组成及结构框图
数字时钟设计包括以下几部分:
时钟模块,按键输入模块,显示模块。
然后把键盘输入、显示、计时、闹钟等数据通过串行通信传输给主单片机进行显示。
其总体框图如图2.1所示
图2.1结构框图
该系统采用了AT89S52单片机系统来控制系统的工作,这样就可以根据自己和场合的需要实时显示时钟、日历等,如果选用液晶显示电路,还可以进行文字显示,用于温馨提示,消息或新闻的发布等。
该系统由于采用了单片机的软件编程实现控制各模块电路的工作,并且可以通过按键进行参数的设置,实现了自动控制,使得该系统变得更加完整,功能更多,同时可以进行扩展。
2.2单片机存储器结构及复位电路与时钟电路
MCS-51器件有单独的程序存储器和数据存储器。
外部程序存储器和数据存储器都可以64K寻址。
程序存储器:
如果EA引脚接地,程序读取只从外部存储器开始。
对STC89C51,如果EA接VCC,程序读写先从内部存储器(地址为0000H~1FFFH)开始,接着从外部寻址,寻址地址为:
2000H-FFFFH。
数据存储器:
STC89C51有256字节片内数据存储器。
高128字节与特殊功能寄存器重叠。
也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。
当一条指令访问高于7FH的地址时,寻址方式决定CPU访问高128字节RAM还是特殊功能寄存器空间。
直接寻址方式访问特殊功能寄存器(SFR)。
例如,直接寻址指令MOV0A0H,#data访问0A0H(P2口)存储单元,使用间接寻址方式访问高128字节RAM。
例如,下面的间接寻址方式中,R0内容为0A0H,访问的是地址0A0H的寄存器,而不是P2口(它的地址也是0A0H)。
MOV@R0,#data堆栈操作也是简介寻址方式。
因此,高128字节数据RAM也可用于堆栈空间。
复位是单片机的初始化操作,只要给RESET引脚加上两个机器周期以上的高电平信号,就可使STC89C51单片机复位。
复位的主要功能是把程序计数器(PC)初始化为0000H,使单片机从0000H单元开始执行程序,同时复位操作还对一些寄存器有影响。
STC89C51的复位是由外部的复位电路来实现的,复位电路分为上电复位和按键复位两种方式。
其电路图2.2所示.
图2.2复位电路
单片机的时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
常见的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。
本系统选用内部时钟方式,STC89C51内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器,STC89C51时钟电路如图2.3所示。
电路中的电容的取值通常在20pF~30pF之间,对外接电容的值没有严格的要求,但电容的大小会影响振荡器频率的高低、振荡器的稳定性和起振的快速性。
由于单片机要进行串行通信,为了获得准确的波特率,选择晶振的频率为12MHz。
图2.3时钟电路
2.3LCD1602的结构及工作原理
LCD1602可以显示2行16个字符,有8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。
该模块也可以只用D4-D7作为四位数据分两次传送。
这样的话可以节省MCU的I/O口资源。
LCD1602引脚说明如表2.4所示:
表2.4LCD液晶显示器各引脚功能及结构
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
双向数据口
2
VDD
电源正极
10
D3
双向数据口
3
VL
对比度调节
11
D4
双向数据口
4
RS
数据/命令选择
12
D5
双向数据口
5
R/W
读/写选择
13
D6
双向数据口
6
E
模块使能端
14
D7
双向数据口
7
D0
双向数据口
15
BLK
背光源地
8
D1
双向数据口
16
BLA
背光源正极
注意事项:
从该模块的正面看,引脚排列从右向左为:
15脚、16脚,然后才是1-14脚(线路板上已经标明)。
VDD:
电源正极,4.5-5.5V,通常使用5V电压;
VL:
LCD对比度调节端,电压调节范围为0-5V。
接正极时对比度最弱,接地电源时对比度最高,但对比度过高时会产生“鬼影”,因此通常使用一个10K的电位器来调整对比度,或者直接串接一个电阻到地;
RS:
MCU写入数据或者指令选择端。
MCU要写入指令时,使RS为低电平;MCU要写入数据时,使RS为高电平;
R/W:
读写控制端。
R/W为高电平时,读取数据;R/W为低电平时,写入数据;
E:
LCD模块使能信号控制端。
写数据时,需要下降沿触发模块。
D0-D7:
8位数据总线,三态双向。
如果MCU的I/O口资源紧张的话,该模块也可以只使用4位数据线D4-D7接口传送数据。
本充电器就是采用4位数据传送方式;
BLA:
LED背光正极。
需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实测该模块的背光电流为50mA左右;
BLK:
LED背光地端。
LCD1602与单片机连接如图2.5所示。
+5
2
3
1K
1
16
GND6
155
4
图2.5LCD与单片机连接图
3系统软件设计
3.1系统软件设计概述
该软件系统的设计主要包含以下几个子程序模块:
初始化程序模块、按键扫描子程序模块、显示程序模块等。
通过系统的源程序代码能够实现以下功能:
a.能正常显示时间、日期、星期。
b.对错误的时间进行修改
3.2系统主程序设计
程序首先进行初始化,在主程序的循环程序中首先调用数据处理程序,然后调用显示程序,再判断是否有按键按下。
若有按键按下则转到相应的功能程序执行,没有按键按下则调用时间程序。
若没到则循环执行。
计时中断服务程序完成秒的计时及向分钟、小时的进位和日期、星期的进位。
调时闪烁中断服务程序用于被调单元的闪烁显示。
调时程序用于调整分钟、小时;整日期的程序用于调整年、月、日;主要由main()组成通过对相关子程序的调用,如图3.2所示。
实现了对时间的设置与修改、LCD显示数值等主要功能。
相关的调整是靠对功能键的判断来实现的。
图3.2主程序流程图
4系统调试
4.1系统硬件调试
1)显示器部分调试为了使调试顺利进行,首先单片机与LCD显示分离,这样就可以用静态方法先测试LCD显示,分为两个步骤:
第一,对其进行初始化(即写入命令控制字,最好定义为输出方式)后;第二,将单片机与LCD结合起来,借助开发机,通过编制程序进行调试。
若调试通过后,就可以编制应用程序了。
2)键盘调试一般显示器调试通过后,键盘调试就比较简单,完全可以借助于显示器,利用程序进行调试。
利用开发装置对程序进行设置断点,通过断点可以检查程序在断点前后的键值变化,这样可知键盘工作是否正常。
4.2软件调试
4.2.1软件编程环境keil介绍
a.Keil工程的建立
从桌面上直接双击uVision的图标以启动该软件。
UVison启动后,程序窗口的左边有一个工程管理窗口,该窗口有3个标签,分别是Files、Regs、和Books。
(1)源文件的建立
使用菜单“File->New”或者点击工具栏的新建文件按钮,即可在项目窗口的右侧打开一个新的文本编辑窗口,在该窗口中输入汇编语言源程序,保存该文件,注意必须加上扩展名(汇编语言源程序一般用.asm或a51为扩展名)。
(2)建立工程文件
点击“Project->NewProject”菜单,出现一个对话框,要求给将要建立的工程起一个名字,你可以在编辑框中输入一个名字(设为321),不需要扩展名。
点击“保存”按钮,出现第二个对话框,如图4.2所示。
图4.2选择目标CPU
选择ATMEL公司的STC89C51芯片。
点击ATMEL前面的“+”号,点击其中的STC89C51,然后再点击“确定”按钮,回到主界面,点击工程窗口的文件页的“Target1”,前面的“+”号,可以看到下一层的“SourceGroup1”,点击“SourceGroup1”使其反白显示,然后,点击鼠标右键,出现一个下拉菜单,如图4.3所示。
选中其中的“AddfiletoGroupSourceGroup1”,出现一个对话框,点击对话框中“文件类型”后的下拉列表,找到并选中“*.CSourceFile(*.C)”,这样,在列表框中就可以找到exam1.asm文件了。
图4.3加入文件
双击exam1.C文件,将文件加入项目,然后点击“Close”即可返回主界面,返回后,点击“SourceGroup1”前的加号,会发现exam1.C文件已在其中。
双击文件名,即打开该源程序。
b.工程的详细设置
工程建立好以后,还要对工程进行进一步的设置,以满足要求。
首先点击左边Project窗口的Target1,然后使用菜单“Project->Optionfortarget‘target1’”即出现对工程设置的对话框,这个对话框可谓非常复杂,共有8个页面,要全部搞清可不容易,好在绝大部份设置项取默认值就行了。
设置对话框中的Target页面,如图4.4所示。
图4.4对目标进行设置
Xtal后面的数值是晶振频率值,默认值是所选目标CPU的最高可用频率值,一般将其设置成与你的硬件所用晶振频率相同,如果没必要了解程序执行的时间,也可以不设,这里设置为12MHZ。
设置对话框中的OutPut页面,如图4.5所示,这里面也有多个选择项,其中CreatHexfile用于生成可执行代码文件(可以用编程器写入单片机芯片的HEX格式文件,文件的扩展名为.HEX),默认情况下该项未被选中,如果要写片做硬件实验,就必须选中该项。
其余均保持默认情况,设置完成后按确认返回主界面,工程文件建立、设置完毕。
图4.5对输出进行控制
c.编译、连接
在设置好工程后,即可进行编译、连接。
选择菜单Project->Buildtarget,对当前工程进行连接。
图4.6有关编译、连接、项目设置的工具条
以上操作也可以通过工具栏按钮直接进行。
图4.6是有关编译、设置的工具栏按钮,从左到右分别是:
编译、编译连接、全部重建、停止编译和对工程进行设置。
4.2.2软件调试
通过keil软件上的编译,对编写好的软件进行编译,很容易就会发现自己在编写程序上的错误,然后根据提示找到问题的相应行,进行检查,排除问题。
一般会遇到丢失分号和未定义的问题,只要仔细检查,基本上问题都会排除,在软件编译没有错误后,点击左边Project窗口的Target1,然后使用菜单“Project->Optionfortargettarget1”即出现对工程设置的对话框,点击选中Output选项栏中CreatHexfile前面的框,点击编译连接生成”*.HEX”文件,至此,软件部分的调试就基本结束。
4.3Proteus与Keil连接调试结果
点击仿真按钮,则将出现本程序的主界面,即时间显示界面,结果如图4.14所示:
图4.14Proteus仿真图
结论
本系统利用了ATC89S52芯片,设计出了一个数字时钟系统,该系统的功能基本符合设计任务的要求。
实现了时、分、秒、日、月、星期、年的调整,实现了闹钟功能,根据Protel画出的电路原理图,利用C语言在编程软件Keil上编译程序。
在硬件的调试过程中有一下心得体会:
1)排除逻辑故障
这类故障往往由于设计和加工制板过程中工艺性错误所造成的。
主要包括错线、开路、短路。
排除的方法是首先将加工的印制板认真对照原理图,看两者是否一致。
应特别注意电源系统检查,以防止电源短路和极性错误,并重点检查系统总线(地址总线、数据总线和控制总线)是否存在相互之间短路或与其它信号线路短路。
必要时利用数字万用表的短路测试功能,可以缩短排错时间。
2)排除元器件失效
造成这类错误的原因有两个:
一个是元器件买来时就已坏了;另一个
是由于安装错误,造成器件烧坏。
可以采取检查元器件与设计要求的型号、规格和安装是否一致。
在保证安装无误后,用替换方法排除错误。
3)排除电源故障
在通电前,一定要检查电源电压的幅值和极性,否则很容易造成集成块损坏。
加电后检查各插件上引脚的电位,一般先检查VCC与GND之间电位,若在5V~4.8V之间属正常。
若有高压,联机仿真器调试时,将会损坏仿真器等,有时会使应用系统中的集成块发热损坏
附录AProteus仿真图
附录B实物图
附录C系统源程序部分代码
#include
#defineucharunsignedchar
voidwrite_hms(uchar,uchar);
voidtime_setup();
uchara,count,hh,mm,ss,year,year0=20,year1=8,mon=8,day=13,flagy,flagw=3,flagk;
ucharcodetable0[]="2008-08-13WED";
ucharcodetable1[]="00:
00:
00";
sbitRS=P2^0;
sbitLE=P2^1;
sbitkfun=P2^2;
sbitkadd=P2^3;
sbitksub=P2^4;
voiddelay(ucharz)
{ucharx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_com(ucharcom)
{RS=0;
P0=com;
delay(5);
LE=1;
delay(5);
LE=0;
}
voidwrite_data(ucharData)
{RS=1;
P0=Data;
delay(5);
LE=1;
delay(5);
LE=0;
}
voidinit()
{LE=0;//初始化使能信号
write_com(0x38);//设置显示模
write_com(0x0c);write_com(0x06);//屏幕移动操
write_com(0x80);//写入数据地
write_com(0x01);//清屏
//写入初始化显示值
write_com(0x80);
for(a=0;a<15;a++)
{write_data(table0[a]);
delay(5);
}
write_com(0x80+0x40);
for(a=0;a<12;a++)
{write_data(table1[a]);
delay(5);
}
TMOD=0x01;
TH0=(65536-5