毕业 设 计
题 | 另I」 | 目 基于单片机的自动报时系统 |
系 | ||
专 | 业 | |
班 | 级 | |
姓 | 名 | |
学 | 号 |
指导教师
日 | 期 |
|
|
设计任务书
设计题目:
基于单片机的自动报时系统
设计要求:
1.自动报时系统应具有自动计时功能,由6位LED显示器显示时、分、秒;
2.设计一个自动报时系统,它应具有准确走时、定时、闹钟定时、到时铃响、
定点报时、驱动电铃等功能。时钟走到时;
23:59:59,再加一秒则全部清零,重新计
3. 设计出该系统相应的时钟硬件电路;
4. 设计该时钟相应的软件电路;
5. 上机连接试验箱调试出应有的效果。
设计进度要求:
第一周:确定设计题目
第二周:查找、搜集以及整理资料
第三周:硬件电路的设计
第四、五周:软件电路的设计
第六周:连接试验箱进行程序调试
第七周:着手写论文、打印论文,准备答辩
第八周:毕业答辩
指导教师(签名):
随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。由其是单片机技术的使用产品已经走进了千家万户。电子万年历的出现 给人们的生活带来的诸多方便。
我所设计的是一个自动报时系统,自动报时系统用到的单片机芯片是 AT89C51芯片,除此之外还包括:DS1302芯片、晶振电路和复位电路构成单片机最小使用系统,还有独立式按键电路,动态显示电路等等。它不仅能实现数字电子时钟的各种功能,如具有较时、调时、定时、闹钟等功能,而且还能实现定点报时的功能。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小和31天时可以自动调整,且具有闰年补偿功能。本设计还附加了定点报时的功能,从而进一步完成了自 动报时系统的设计。
关键词:单片机,闹铃时钟,位码,段码,显示
设计任务书.......................................................................I
摘 要.....................................11
1总体方案设计....................................................................2 1.1系统框图....................................................................2 1.2设计方案介绍................................................................22硬件设计........................................................................4 2.1单片机的选型................................................................4 2.2AT89C51的特点...........................................................4 2.3AT89C51单片机复位方式....................................................5 2.4DS1302的简介.............................................................6 2.5键盘方案....................................................................9 2.6七段LED显示工作原理.......................................................11 2.7自动报时系统的工作原理及原理图............................................143软件设计.......................................................................15
3.2系统工作流程...............................................................15
3.1设计思路...................................................................15
3.3主程序流程.................................................................163.4按键程序模块...............................................................173.5显示程序模块...............................................................203.6中断服务程序模块...........................................................224系统调试.......................................................................24
结论.......................................................................27
致谢.......................................................................28参考文献........................................................................29附录A.......................................................................................................................................30
1总体方案设计
1.1系统框图
我所设计的是一个自动报时系统,它不仅具有数字电子时钟的各种功能, 如具有
较时、调时、定时、闹钟等功能,而且还具有驱动电铃,定点报时等功能。总体设计
框图如图1.1所示:
图1.1系统框图
1.2设计方案介绍
1.2.1硬件的选择方案
由于我设计的是一个自动报时系统,它需要准确的走时、较时、调时、定时、定点报时等,因此我选用的是 AT89C51单片机芯片,再配以DS1302按键电路、晶振电路、复位电路以及LED动态显示器,就可以实现。采用AT89C51的P0接口外接8路反相三态缓冲器74LS240作LED动态扫描的段码控制驱动信号,用P2接口的P2.0-P2.5外接一片集电极开路反相门电路7406做为6位LED的位选信号驱动口,6个数码管的8根段选线分别接74LS240的输出,LED共阴极端和74LS07的输出端相连;按键接口,由P1.7、P1.6、P1.5、P1.4来完成,四个按键的作用分别是:一个为功能键K1;一个为数字调整键K2;—个为取消设置键K3,用来设置时间;一个为K4键,用来设置定时时间。DS1302实时时钟由P1.0、P1.1、P1.2来控制。DAS1302的XI、X2接口用来接蜂鸣器。
1.2.2软件的设计方案
由于我考虑到用单片机的汇编语言来做《自动报时系统》的设计比较简单。对于程序我的
设计思路是:
1.要有主程序,主程序一般是显示和中断的初始化。
2.要有显示子程序,当键入一个时间值时显示程序要把这个键入的时间值给显示出来。2.要有中断服务程序,功能,走时,判断是否到定时时间等等。
3.要有按键程序,进入按键程序,判断是否有键按下,没有,则调用延时重新判断,如果
到了,调用延时去抖程序,再次判断有键按下否,没有则返回延时程序,如果有按键,则判断
键号,堆栈,判断键是否释放,没有,继续判断,释放了,则输入键号送往累加器。
2硬件设计
2.1单片机的选型
我的设计里用到的单片机芯片是AT89C51芯片,除此之外还包括:DS1302芯片、晶振电
路和复位电路构成单片机最小使用系统。
2.2AT89C51 的特点
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器( FPERO—Falsh
Programmableand Erasable Read Only Memory )的低电压,高性能、CMOS8位单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,和工业标准的 MCS-51
指令集和输出管脚相兼容。AT89C51的管脚图如图2.1所示:
IVCC
IFO 0 (ADO)
IPO 1 CAM)
IPO .2 (AD2)
―PQ5〔ADR
IPO.e阿旬
|P0.7CM>7)
|
序 | 匸 | ALETPROG |
PSEH | |||
匸 | |||
Pl? CAli) | |||
匚 | |||
M 6 (A14^ | |||
匚 | |||
P2.i⑷为 | |||
匚 | |||
匚 | P2 4 3⑵ | ||
匸 | P2.3〔冲 | ||
匸 | |||
XTAL2 | P2.2 (AIO^ | ||
XT All | 匸 | ||
P2.1 啊 | |||
匸 | |||
P2.C 何 |
图2.1AT89C51管脚图
主要特性:
1、和MCS-51兼容
2、4K字节可编程闪烁存储器
3、寿命:1000写/擦循环
4、数据保留时间:10年
5、全静态工作:0Hz-24Hz
6三级程序存储器锁定
7、128*8位内部RAM
8、32可编程I/O线
9、两个16位定时器/计数器
10、 5个中断源
11、 可编程串行通道
12、 片内振荡器和时钟电路
2.3AT89C51单片机复位方式
单片机在开机时或在工作中因干扰而使程序失控,或工作中程序处于某种死循环状态,在
这种情况下都需要复位。复位的作用是使中央处理器CPU以及其他功能部件都恢复到一个确定的初始状态,并从这个状态重新开始工作。
AT89C51单片机的复位靠外部电路实现,信号由RESET(RST引脚输入,高电平有效,在振荡器工作时,只要保持RST引脚高电平两个机器周期,单片机即复位。 复位后,PC程序计数器的内容为0000H,片内RAM中内容不变。复位电路一般有上电复位、手动开关复位和自动复位电路 3种,如图2.2所示。而本设计采用的是手动复位方式,如B图所示:
VCC |
| -SV |
| ||
R5T |
GND
a上电复位电路 手动复位电路c自动复位电路 图22单片机复位电路
2.4DS1302的简介
2.4.1简介
DS1302是美国DALLAS^司推出的一种高性能、低功耗的实时时钟芯片,附加31字节
静态RAM采用SPI三线接口和CPUS行同步通信,并可采用突发方式一次传送多个字节的
时钟信号和RAh数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小和31天时可以自动调整,且具有闰年补偿功能。工作电压宽达 2.5〜5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的
记录上,能实现数据和出现该数据的时间同时记录,统中。
因此广泛使用于测量系
DS1302串行时钟芯片主要是由移位寄存器、控制逻辑、振荡器、实时时钟、 RAM
以及电源组成,它的电路工作原理图如下图2.3所示:
图2.3DS1302的内部结构
在本设计中,它的I/O引脚、串行时钟SCLK引脚、CE引脚分别和AT89C51的I/O接口
的P1.1口、P1.2口、P1.0口相接,XI、X2接口接蜂鸣器。
2.4.2DS1302 的特点 DS1302时钟芯片包括:
(1)实时时钟/日历:实时时钟/日历提供秒、分、时、日、星期、月、年等信
息,每月天数以及闰年能自动调整,时钟可以采用 (2)31字节的静态RAM用于存放数据。
24h或AM/PM勺12h格式。
(3)带慢速充电控制备份电源的充电特性。
(4) 简单的三线串行接口:该芯片使用同步串行通信。和时钟 /RAM通信共需3 根线:RST (复位)、I/O (数据线)、SCLK(串行时钟)。数据可以以每次 1个字节 或多个字节的形式传送到时钟/RAM或从其读出。
2.4.3各管脚描述
管脚描述如下
X1 X2 32.768KHZ 晶振管脚
GND地
RST复位脚
I/O数据输入/输出引脚
SCLK串行时钟
Vcc1,Vcc2电源供电管脚
订单信息
部分#描述
DS1302串行时钟芯片8脚DIP
DS1302S串行时钟芯片8脚SOIC200mil
DS1302Z串行时钟芯片8脚SOIC150mil
2.DS1302内部寄存器
CH:时钟停止位寄存器2的第7位12/24小时标志
CH=0振荡器工作允许bit7=1,12小时模式
CH=1振荡器停止bit7=0,24小时模式
WP:写保护位寄存器2的第5位:AM/PM定义
WP=0寄存器数据能够写入AP=1下午模式
WP=1寄存器数据不能写入AP=0上午模式TCS:涓流充电选择DS:二极管选择位
TCS=1010使能涓流充电DS=01选择一个二极管
TCS其它禁止涓流充电DS=10选择两个二极管
DS=00或11,即使TCS=1010,充电功能也被禁止
RS位电阻典型位
00没有没有
01R1 2K
10R2 4K
11R3 8K
2.4.4DS1302读写时序说明
DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应
寄存器的数据。
要想和DS1302通信,首先要先了解DS1302的控制字。DS1302的控制字如表2.1所示:
表2.1控制字(即地址及命令字节)
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1 | RAM | | A3 | A2 | A1 | A0 | RD |
CK | WR |
控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到
DS1302中。
位6:如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1(A4〜A0):指示操作单元的地址;
位0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。
单字节读
i/0 | R/,'/ | AO | | A2 | A3 | A4 | F'C | | H DO | D1 | D2 | D3 | D4 | D5 | D6 | |
| 1 | |
图2.4数据读写时序
控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302数据输入从最低位(0位)开始。同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。数据读写时序如图 2.4。
2.5键盘方案
本设计的自动报时系统是一个具有电子时钟、闹钟、定点报时功能的系统,系统工作时应具备随时对当前时间进行调整,因此它只需要独立式键盘的四个按键即可完
成操作
独立式键盘的接口电路:在单片机使用系统中,有时只需要几个简单的按键向系统输入信息。这时,可将每个按键直接接在一根I/O接口线上,这种连接方式的键盘称为独立式键盘。如图2.5所示,每个独立按键单独占有一根I/O接口线,每根I/O接口线的工作状态不会影响到其他I/O接口线。这种按键接口电路配置灵活,硬件结构简单,但每个按键必须占用一根I/O线,I/O接口线浪费较大。故只在按键数量不多时采用这种按键电路。
在此电路中,按键输入都采用低电平有效。上拉电阻保证了按键断开时, I/O接口线有确定的高电平。当I/O接口内部有上拉电阻时,外电路可以不配置上拉电阻。本设计中个按键的功能为:一个为功能键 K1;一个为数字调整键K2;—个为取消设置键K3,用来设置时间;一个为K4键,用来设置定时时间。
图2.5独立式键盘电路2.5.1键盘接口工作原理
在单片机使用系统中,常用键盘作为输入设备,通过它将数据、内存地址、命令及指
令等输入到系统中,来实现简单的人机通信。
2.5.2按键开关的去除抖动功能
目前,AT89C51单片机使用系统上的按键常采用机械触点式按键,它在断开、闭合时输入电 压波形如图2.6所示.可以看出机械触点在闭合及断开瞬间均有抖动过程 ,时间长短和开关的机械特性有关,一般为5〜10ms由于抖动,会造成被查询的开关状态无
法准确读出。例如,一次按键产生的正确开关状态,由于键的抖动, CPL多次
采集到底电平信号,会被误认为按键被多次按下,就会多次进行键输入操作,这是不允许
的。为了保证CPU寸键的一次闭合仅在按键稳定时作一次键输入处理,必须消除 产生的前沿(后沿)抖动影响。在本次设计中采用的是软件去抖。
图2.6按键过程 后沿—1 |
'
2.6七段LED显示工作原理
2.6.1显示的种类
1静态显示概念
静态显示是指数码管显示某一字符时,相应的发光二极管恒定导通或恒定截止。
这种显示方式的各位数码管相互独立,公共端恒定接地(共阴极)或接正电源(共阳极)。每个数码管的8个字段分别和一个8位I/O口地址相连,I/O口只要有段码输出,相应字符即显示出来,并保持不变,直到I/O口输出新的段码。采用静态显示方式的优点:较
小的电流即可获得较高的亮度,且占用
CPU寸间少,编程简单,显示便
于监测和控制,但其占用的接口线多,硬件电路复杂,成本高,只适合于显示位数较 少的场合。
2动态显示概念
动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为位 扫
描。通常,各位数码管的段选线相应并联在一起,由一个
8位的I/O口控制;各位
的位选线(公共阴极或阳极)由另外的I/O 口线控制。动态方式显示时,各数码管分 时轮流选通,要使其稳定显示,必须采用扫描方式,即在某一时刻只选通一位数码管, 并送出相应的段码,在另一时刻选通另一位数码管, 并送出相应的段码。依此规律循 环,即可使各位数码管显示将要显示的字符。 虽然这些字符是在不同的时刻分别显示, 但由于人眼存
在视觉暂留效应,只要每位显示间隔足够短就可以给人以同时显示的感觉。
采用动态显示方式比较节省I/O口,硬件电路也较静态显示方式简单,但其亮度不如
静态显示方式,而且在显示位数较多时,
CP要依次扫描,占用CP较多的时间。
此次设计中我们采用定时器来完成动态扫描显示。 用定时器TO定2m啲时间间隔, 每次定时时间到时就输出一个LED言号,即显示1位。定时器每中断6次后循环到第一 位LEE显示。这样动态显示占用CPU勺时间只有输出断码和输出位码的有限时间, 提高 了CPU勺工作效率。在本次设计中所使用的是动态显示,其显示电路图形如图2.7所示:
2.6.2数码管简介
1数码管结构
数码管由8个发光二极管(以下简称字段)构成,通过不同的组合可用来显示数字0~9、字符A~ F及小数点“•”。数码管的外形结构如图 2.8(a)所示。数码
管又分为共阴极和共阳极两种结构,分别如图
2.8(b)和图2.8(c)所示:
(a)
G
D
N
(a)外型结构; (b)共阴极;(c)共阳极
图2.8数码管结构图
2数码管工作原理
由于我们采用的是共阴极数码管,所以介绍共阴极数码管的工作原理如下 :
共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起。通常,公共 阴极
平时,则该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出 各种数字或字
接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出 端为高电
符。此时,要求段驱动电路能吸收额定的段导通电流, 还需根据外接电
源及额定段导通电流来确定相应的限流电阻。
共阳极数码管的工作原理和共阴极的正好相反。
3数码管字形编码
要使数码管显示出相应的数字或字符,必须使段数据口输出相应的字形编码。
LED显示字型码表见表2.2 :
表2.2 LED显示字型码表
|
5 | 6DH | 92H | E | 79H | 86H |
6 | 7DH | 82H | F | 71H | 8EH |
7 | 07H | F8H | | | |
8 | 7FH | 80H | | | |
2.7自动报时系统的工作原理及原理图
自动报时系统电路的核心是AT89C51单片机,其内部带有4KB的FlashROM无须扩展程序存储器;电子时钟没有大量的运算和暂存数据,现有的128B片内RAM已能满足要求,也不必扩展片外RAM系统配备6位LED显示和4个单接口键盘,采用P0接口外接8路反相三态缓冲器74LS240作LED动态扫描的段码控制驱动信号,用P2接口的P2.0-P2.5外接一片集电极开路反相门电路7406做为6位LED的位选信号驱动口,6个数码管的8根段选线分别接74LS240的输出,LED共阴极端和74LS07的输出端相连;按键接口,由P1.7、P1.6、P1.5、P1.4来完成;DS1302实时时钟由P1.0、P1.1、P1.2来控制。DS1302的X1、X2接
口外接蜂鸣器。
电路原理图见附录A
3软件设计
3.1设计思路
由于我做的是自动报时系统,它需要具有较时、调时、定时、闹钟等功能,而且还
具有驱动电铃,定点报时等功能。另外当时钟走到
24点时则自动清零。所以我们
考虑到用单片机的汇编语言来做我们的设计比较简单。对于程序我们的设计思路是: 1. 要有主程序,主程序一般是显示和中断的初始化。
2. 要有显示子程序,当键入一个时间值时显示程序要把这个键入的时间值给显示 出
来。
2. 要有中断服务程序,功能,走时,判断是否到定时时间等等。
3. 要有按键程序,进入按键程序,判断是否有键按下,没有,则调用延时重新判
断,如果到了,调用延时去抖程序,再次判断有键按下否,没有则返回延时程序,如 果
有按键,则判断键号,堆栈,判断键是否释放,没有,继续判断,释放了,则输入 键号
送往累加器。
3.2系统工作流程 1. 时钟显示:6位LED从左到右一次显示时、分、秒,采用 24小时计时。
2. 按键控制功能:采用4个独立键盘,其中一个为功能键;一个为数字调整键; 一个为取消设置键,用来设置时间;一个为 ALM键,用来设置定时时间。
3. 时间显示:通电后,系统自动进入时钟设置,从可以设定当前时间。
00:00:00开始计时,此时
4. 时间调整:按下功能键,系统停止计时显示,进入时间设定状态,系统只显示小时的内容,其余4位LED处于全暗状态,等待按键设置。此时按动数字调整键后小 时将会加1,按动取消键后又重新回到原来的时间显示状态;若再按动功能键则用来 调整分钟,此时小时和秒的4位LED旨示全暗,按数字调整键后可以对分钟增1调整, 按动取消键
后又重新回到原来的时间显示状态; 再按动功能键则用来调整秒,此时小时和分钟的4位LED指示全暗,秒显示当前的秒数,暗数字调整键可以对秒进行增 1
调整,按动取消键后又重新回到原来的时间显示状态,按动功能键后系统将自动由设
MOV20H,#00H | ;清20H (标志用) |
|
定后的时间开始计时显示
5. 闹钟设置/启闹:按下K4键,系统继续计时,但显示为00:00:00,此时再按动
功能键后进入闹钟设置状态,设置过程和时间调整相同,但是最后按功能键确定后显示定时时间30S后自动启动定时闹钟功能,并恢复时间显示。定时时间到,蜂鸣器鸣叫1min后自动停闹,每次设置时只能定一次,下次需重新设置。
3.3主程序流程
首先,设置初始常数,设置定时器常数,它主要是显示和中断的初始化
3.3.1主程序流程图如图3.1所示:
主程序的内容一般包括:主程序的起始地址,中断服务程序的起始地址,有关内存
单元及相关部件的初始化和一些子程序调用等。
图3.1主程序流程图3.3.2主程序如下:
START: MOVR0,#70H MOVR7,#0BH
;清70H-7AH共11个内存单元
CLEARDISP:MOV @R0 #00H
INC R0
DJNZ R7,CLEARDISP
M0V7AH,#OAH;放入"熄灭符"数据
MOV TMO,#11H
MOVTLO, #0B0H
;设T0、T1为16位定时器
;50MS定时初值(T0计时用)
MOVTHO, #3CH;50MS定时初值
MOVTL1 , #0B0H
;50MS定时初值(T1闪烁定时用)
MOVTH1, #3CH;50MS定时初值
SETBEA ;总中断开放
SETB ET0 ;允许T0中断
SETBTR0 ;开启T0定时器
MOVR4,#14H
;1秒定时用初值(50MS20)
START1: LCALL DISPLAY ;调用显示子程序
JNB P3.2 , SETMM1 SJMPSTART1
;P3.7口为0时转时间调整程序 ;P3.7口为1时跳回START1
SETMM1LJMP SETMM ;转到时间调整程序SETMM
该系统的按键功能如下:按下功能键,系统停止计时显示,进入时间设定状态, 系
3.4按键程序模块
统只显示小时的内容,其余4位LED处于全暗状态,等待按键设置。此时按动数字 调整键后小时将会加1,按动取消键后又重新回到原来的时间显示状态;若再按动功 能键则用来调整分钟,此时小时和秒的4位LED指示全暗,按数字调整键后可以对分 钟增1调整,按动取消键后又重新回到原来的时间显示状态; 再按动功能键则用来调整秒,此时小时和分钟的4位LED指示全暗,秒显示当前的秒数,暗数字调整键可以 对秒进行增1调整,按动取消键后又重新回到原来的时间显示状态, 按动功能键后系统将自动由设定后的时间开始计时显示。
进入按键程序,判断有键按下吗?没有,则调用延时重新判断,如果到了,调用 延时去抖程序,再次判断有键按下否,没有则返回延时程序,如果有按键,则判断键 号,堆栈,判断键是否释放,没有,继续判断,释放了,则输入键号送往累加器 后返回主程序。
MOV20H,#00H | ;清20H (标志用) |
|
开始
——
按键程序如下:
当调时按键按下时进入此程序
SETMMcLR ET0 JB P3.2,CLOSEDIS LCALL DL05S | 关定时器T0中断 ;进入调时状态,赋闪烁定时初值 允许T1中断 | |
;有键按下,延时0.5秒 |
|
JNB P3.2, SETHH | ;按下时间大于0.5秒转调小时状态 | |
MOV RO, #77H | ;按下时间小于0.5秒加1分钟操作 | |
LCALL ADD1 | ;调用加1子程序 | |
MOV A, R3 | ;取调整单元数据 | |
CLR C | ;清进位标志 | |
CJNE A, #60H, HHH | ;调整单兀数据和60比较 | |
HHH JC SET4 | ;调整单元数据小于60转SET4循环 | |
LCALL CLR0 | ;调整单元数据大于或等于60时清0 | |
CLR C | ;清进位标志 | |
AJMPSET4 | ;跳转到SET4循环 | |
CLOSEDIS SETB ET0 | ;省电(LED不显示)状态。开T0中断 | |
SETB TR0 | ;开启T0定时器(开时钟) | |
CLOSE JB P3.2 , CLOSE | ;无按键按下,等待 | |
LCALL DISPLAY JB P3.2 , CLOSE ;有键按下,调显示子程序延时削抖 ;是干扰返回CLOSE?待 WAITH JNB P3.2 , WAITH ;等待键释放LJMP START1 | ||
SETHH: CLR 00H | ;分闪烁标志清除(进入调小时状态) | |
SETHH1: JNB P3.2,SET5 | ;等待键释放 | |
SETB01H | ;小时调整标志置1 | |
SET6 JB P3.2 , SET7 | ;等待按键按下 | |
LCALL DL05S | ;有键按下延时0.5秒 | |
JNB P3.2, SETOUT | ;按下时间大于0.5秒退出时间调整 | |
MOV R0, #79H | ;按下时间小于0.5秒加1小时操作 | |
LCALL ADD1 | ;调加1子程序 |
MOVA,R3
CLRC
CJNE A, #24H, HOUU HOUU JC SET6 | ;计时单兀数据和24比较;小于24转SET6循环 |
LCALLCLRO ;大于或等于24时清0操作
AJMPSET6 ;跳转到SET6循环
SETOUTJNB P3.2,SETOUT1;调时退出程序。等待键释放
LCALL DISPLAY | ;延时削抖 | |
JNB P3.2,SETOUT | ;是抖动,返回SETOU再等待 | |
CLR 01H | ;清调小时标志 | |
CLR 00H | ;清调分标志 | |
CLR 02H | 清闪烁标志 | |
CLR TR1; | ;关闭定时器T1 | |
CLR ET1 : | ;关定时器T1中断 | |
SETBTR0 : | 开启定时器T0 | |
SETB ET0; | 开定时器T0中断(计时开始) | |
LJMP START1; | 跳回主程序 | |
; AJMPSET2 ;防止键按下时无时钟显示 ;SET3 LCALL DISPLAY AJMPSET4 | ||
SET5 LCALL DISPLAY | 时) | ;键释放等待时调用显示程序(调小 |
AJMPSETHH1 | ;防止键按下时无时钟显示 | |
SET7 LCALL DISPLAY | ;等待调小时按键时时钟显示用 |
AJMPSET6
SETOUT1LCALL DISPLAY ;退出时钟调整时键释放等待
AJMPSETOUT ;防止键按下时无时钟显示
3.5显示程序模块
显示程序采用动态显示,由位码控制那一个数码管显示,由段码控制数码管显示什
么数值,根据中断程序显示时间来查表显示数值,从第一位到第四位逐个点亮,同时每显
示一位判断一次四位显示完了没有,没有显示完进行显示下一位,显示完了从 头开始再
循环。显示子程序如图3.3所示:
入口
返回
II子程序框图
图3.3 DISLED子程序流程图 显示程序如下: DESPLAY: MOV R2, #01H MOV R0, #30 ;将段码送R0 |
NEXT3:MOV A,@R0
MOVDPTR,#TAB2
MOVCA,@A+DPTR
MOV P0,A | ;将段码送R0 ;将位码送R2 ;调用延时程序 |
MOVA,R2
JB ACC.3,U2 MOV R2,A | ;显示元转U2 ;将位码重送、R2中 |
LJMPNEXT3
U2:RET ;显示返回
3.6中断服务程序模块
中断处理框图如图3.4所示:
AD)
置定对常歎 1 | ||
到59秒 | N |
N |
分加1
恢夏现场 |
图3.4INT T1中断处理框图
T1定时中断处理程序如下:
TIM1:PUSH ACC
PUSHPSW
MOVTL1,#OBOH
MOVTH1,#3CH
INC29H ;中断计数
MOVA,29H
CJNEA,#05H,ETI1 ;0.3秒时间到,用来闪烁延时
MOV29H,#00H
MOVA,R2
CJNEA,#01H丄OOP1;R2为01秒闪烁
MOV3EH,#0FDH使时位选能够正常扫描
MOV3FH,#0FEH
XRL3AH,#20H ;使秒原来正常扫描的位选关闭,原来关闭的能够正常扫描
XRL3BH,#10H
AJMPETI1
LOOP1:CJNE A,#02H,LOOP2 R2为02分闪烁
MOV3AH,#0DFH使秒位选能够正常扫描
XRL3CH,#08H ;使分原来正常扫描的位选关闭,原来关闭的能够正常扫描MOV3BH,#0EFH
XRL3DH,#04H
AJMPETI1
LOOP2:CJNE A,#03H,ETI1 ;R2为03时闪烁
MOV3CH,#0F7H使分位选能够正常扫描
MOV3DH,#0FBH
XRL3EH,#02H ;使时原来正常扫描的位选关闭,原来关闭的能够正常扫描
XRL3FH,#01H
ETI1:POP PSW
POPACC
RETI
4系统调试
1、通过伟福仿真软件和Keil软件来验证程序。打开伟福软件模拟器,首先进行仿真器设
置,如下图4.1、4.2所示:选择E6000/L仿真器一一P0D-8ISIP仿真头一—选择8751CPU然后
再进行通信设置、目标文件以及语言的设置。最后点击“好”,完成仿真器的设置。
图4.1仿真器选择界面
图4.2生成目标文件选择界面
2、在伟福软件中输入程序,进行编译,有好几处错误程序没有通过编译,然后
我就查找错误的所在,一一更改之后终于通过编译,如下图4.3所示:
0运行伟福匸编器汇編:ASMS1.ASM <A5M51.ASH>
•保存目惊文件C:WAVE&D00\SANFLES\ASM51. HEX COOOOH-001IH) <T:\WAVE6000\SAMFEES \ ASMS!. HEX>
®保存目标文件C:WAVE&D00\SANPLES\ASM51. BillCODOOH-001BH)
图4.3编译成功的界面
3、对编译通过的程序进行跟踪执行,看执行结果,如图 4.4所示:
时钳程序.mASM51 ASIA
J MOVAf妁
Loop:
- MOVX0DPTR. k
J INC DPTR
- INC A
J HOVX @DPTR, A
J INC DPT口
J INC A
J MOVX @DPTR『A
J CALL Lelay
J 5JMP Loop
图4.4程序录入的界面
4、在伟福内调试通过以后,进入KEIL软件编辑器,对程序进行下载运行,并连接试验
箱,查看实验效果。在Keil中下载到实验箱上进行验证,显现出所要求的效果。而在Keil中也
要进行一些参数的设置,首先打开Keil仿真软件,首先要新建一个项目,点菜单Project—
NewProject,在弹出的对话框中选择保存的路径并输入项目名称“qqqq”后保存,然后在弹
出新的项目窗口中选择参数,其参数的设置如下,由于我们使用的是Atmel公司的芯片,所以
要选Atmel后确定。如图4.5所示:
| [?(x |
CPU
Vendor:Ktmel
Device: IU=e Ex I ended Linker (XKS1) instead <?f BUSI
F:dflily: IUse IPride d. KsscivbleT (W(51 J i itmt"由£AS 3
* Kttr Labs
* 金 MW1
ffl 垂 JlerofleK
UTBC
* i^p Jlzb^ilojg Dsvicas
Ffl 垂心曲rChip占
* | Ktmel | 卜 |
*'他 CffiL Bicrfreireisils
1*1 ^R' Chipc 网. + i^R Cybernt t a c Ifl i er a Syi
Ffl 临 CybraTech
團
图4.5单片机芯片的选择界面
在弹出的对话框中选择AT89C5这个芯片,确定。如图4.6所示:
图4.6 CPU的选择界面
经过了1个多月的学习和工作,我终于完成了《基于单片机的自动报时系统》论 文。从开始接到论文题目到系统的实现,再到论文文章的完成,每走一步对我来说都是新的尝试和挑战,这也是我在大学期间独立完成的最大的项目。在这段时间里,我 学到了很多知识也有很多感受,我开始了独立的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改 进都是我学习的收获,每一次试验的成功都会让我兴奋好一段时间。从中我也充分认 识到了学习的重要性。
虽然我的论文作品不是很成熟,还有很多不足之处,但我可以自豪的说,这里面的每一段文字和每一个图形,都有我自己的劳动。当看着自己的设计,真是莫大的幸福和欣慰。我相信其中的酸甜苦辣最终都会化为甜美的甘泉。
本设计在张咏梅老师的悉心指导和严格要求下业已完成, 从课题选择、方案论证到具体设计和调试,无不凝聚着张老师的心血和汗水,在三年的学习和生活期间,也始终感受着导师的精心指导和无私的关怀,我受益匪浅。在此向张咏梅老师表示深深的感谢和崇高的敬意!
不积跬步何以至千里,本设计能够顺利的完成,也归功于各位任课老师的认真负责,使我能够很好的掌握和运用专业知识,并在设计中得以体现。正是有了他们的悉心帮助和支持,才使我的毕业论文工作顺利完成,在此向济源职业技术学院、机电系的全体老师表示由衷的谢意!感谢他们三年来的辛勤栽培!
这次做论文的经历也会使我终身受益,我感受到做论文是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破,那也就不叫论文了。希望这次的经历能让我在以后学习中激励我继续进步。
参考文献
[1]楼然苗,李光飞,51系列单片机设计实例•北京:北京航空航天大学出版社,2003[2]陈明荧,89C51单片机课程设计实训教材•北京:清华大学出版社,2004
[3]刘和平,刘跃.单片机原理及使用.重庆:重庆大学出版社,2004
[4]李朝青,单片机原理及接口技术.北京:北京航空航天大学出版社,2002
⑸杨文龙,单片机原理及使用•陕西:西安电子科技大学出版社,1999
[6]王幸之,钟爱琴.AT89系列单片机原理和接口技术.北京:北京航空航天大学出版社,2004
[7]陈立国,陈宇等.单片机原理及使用.北京:机械工业出版社,2001
附录A
自动报时系统的电路原理图如图A所示:
[H
吊J5
| □ |
|
| |||||||
卜 | ||||||||||
1:*1 | ||||||||||
3 | ||||||||||
» | £冠 |
| ||||||||
3 S |
| |||||||||
| 3 | § | g | 3 | ||||||
?■ | 5 | 6 | 7 | — n | ||||||
禺jS團艮禺再 | ||||||||||
P F P R | P P P T3 | |||||||||
5 q I—a na — 0
|
| |
| |
| |
| |
| |
| |
图A电路原理图